导入导出数据
可以导出SQL脚本,可以导出文本文件,导出文本文件在
选择目标页面
,目标选择平面文件目标
。 导入同理。
数据库备份
数据库备份是可以在线环境中运行。使用数据库备份能够将数据恢复到备份时的那一时刻。但是对备份以后的更改,在数据库文件和日志损坏的情况下将无法找回。
备份类型
1. 完整备份
完整备份是指备份数据库中的所有数据,包括事务和日志。数据库的第一次备份应该是完整数据库备份,这是任何备份策略中都要求完成的第一种备份类型,其他所有的备份类型都依赖于完整备份。它通常会花费较多的时间,同时也会占用较多的空间。完整备份不需要频繁进行。对于数据量较少或者变动较小不需经常备份的数据库而言,可以选择这种备份方式。
2. 差异备份
顾名思义,差异数据库备份并不对数据库执行完整的备份,它只是对上次完整备份数据库后所发生变化的部分进行备份。差异数据库备份需要有一个参照的基准,即上一次执行的完整数据库备份。差异数据库备份的速度比较快,在还原差异数据厍备份时,需要首先还原基准数据库备份,然后在此基础上再还原差异的部分。
执行差异备份时应该注意备份的时间间隔。在执行几次差异备份后,就应该执行一次完整备份。因为距离基准备份的时间越长,发生变化的数据就越多,执行差异备份所需要的时间和空间就越多。
3. 事务日志备份
事务日志备份只备份事务日志里的内容,事务日志记录了上一次完整备份、差异备份或事务日志备份后数据库的所有变动过程。每个事务日志备份包括创建备份时处于活动状态的部分事务日志,已有先前事务日志备份中为备份的所有日志记录。可以使用事务日志备份将数据库恢复到特定的即时点或恢复到故障。与差异备份类似,事务日志备份生成的文件较小,占用时间较短,创建频率较高。
4. 文件和文件组备份
在创建数据库时,为数据库创建了多个数据库文件或文件组,可以使用该备份方式。
使用文件和文件组备份方式可以只备份数据库中的某些文件,该备份方式在数据库文件非常庞大时十分有效,由于每次只备份一个或几个文件或文件组,所以可分多次来备份数据库,避免大型数据库备份的时间过长。另外,由于文件和文件组只备份其中一个或多个数据文件,当数据库里的某个或某些文件损坏时,只需还原损坏的文件或文件组备份即可。
创建备份设备
备份设备是指备份或还原数据时的存储介质,通常是指磁带或磁盘驱动器或逻辑备份设备。磁盘备份是指磁盘或其他磁盘存储介质上的文件,与常规操作系统文件一样。
引用磁盘备份设备与引用任何其他操作系统文件一样。可以在服务器的本地磁盘上或共享网络资源的远程磁盘上定义磁盘备份设备,备份磁盘的大小由磁盘设备上的可用空间决定。
在SQL Server中,可以使用系统存储过程 sp_addumpedvice来创建备份设备。
sp_addumpedvice的功能是将备份设备添加到SQL Server数据库引擎的实例中。
sp_addumpdevice [@devtype =] 'device_type',
[@logicalname = ] 'logical_name',
[@physicalname = ] 'physical_name',
[,{[@cntrltype = ] controller_type | [@devstatus = ] 'device_status'}] --这一行的参数是过时的
[@devtype =] ‘device_type’:指备份的类型,可以是
'disk'
或者'tape'
。其中disk指硬盘文件作为备份设备;tape指Microsoft Windows支持的任何磁带设备(SQL Server未来版本中将不再支持磁带) [@logicalname = ] ‘logical_name’:指在BACKUP和RESTORE语句中使用的备份设备的逻辑名称。 [@physicalname = ] ‘physical_name’:指备份设备的物理名称。物理名称包含完整路径。 [@cntrltype = ] controller_type:已过时。 [@devstatus = ] ‘device_status’:已过时。
备份数据库
创建好备份设备后,就可以对数据库进行备份了..
BACKUP DATABASE <数据库名>
TO <备份设备>[,...n]
[MIRROR TO <备份设备>][,...n]
[WITH {DIFFERENTIAL | <general_WITH_options> [,...n]}]
MIRROR TO <备份设备>:指定将要镜像TO子句中指定备份设备的一个或多个备份设备。最多使用3个MIRROR TO子句 WITH:指定要用于备份操作的选项 DIFFERENTIAL:只能与BACKUP DATABASE一起使用,指定数据库备份或文件备份应该只包含上次完整备份后修改的数据库或文件部分。默认情况下BACKUP DATABASE创建完整备份。
:指定一些比如是否仅复制备份,是否对此设备执行备份压缩,说明备份集的自由格式文本等操作选项。
备份事务日志
BACKUP LOG <数据库名>
TO <备份设备>[,...n]
[WITH {DIFFERENTIAL | <general_WITH_options> [,...n]}]
数据库还原
在恢复数据库之前,需要限制其他用户访问数据库。可以在SSMS右键数据库名,属性。
把限制访问改成SINGLE_USER。恢复完了要改回来MULTI_USER。另外在恢复操作之前,应该对事务日志进行备份。
恢复数据库
RESTORE DATABASE <数据库名称>
[RROM <备份设备>[,...n]]
[
WITH
[[,]FILE=<文件号>]
[[,]MOVE '逻辑文件名' TO '物理文件名'][,...n]
[[,]{NORECOVERY|RECOVERY}][[,]REPLACE]
]
RESTORE DATABASE语句很复杂,这是常用的方法。
- 文件号:表示要还原的备份集。例如:文件好为1表示备份媒体上的第一个备份集,文件好为2表示第二个备份集。
- NORECOVERY:指示还原操作不回滚任何未提交的事务。当还原数据库备份和多个事务日志时,或在需要使用多个RESTORE语句时(如在完整备份后进行差异备份),应在除最后的RESTORE语句外的所有其他语句上使用WITH NORECOVERY选项。
- RECOVERY:指示还原操作回滚任何未提交的事务。在恢复完成后即可随时使用数据库。
- REPLACE:指定如果存在同名数据库,将覆盖现有的数据库。
恢复事务日志
RESTORE LOG <数据库名称>
[RROM <备份设备>[,...n]]
[
WITH
[[,]FILE=<文件号>]
[[,]MOVE '逻辑文件名' TO '物理文件名'][,...n]
[[,]{NORECOVERY|RECOVERY}]
]
数据库快照
数据库快照是数据库的只读、静态视图,数据库可以有多个快照。
在创建快照时,每个数据库快照在事务上与源数据库一致。在被数据库所有者显式删除之前,快照始终存在。
可以在报表中使用数据库快照。另外,当数据库出现用户错误,还可将数据库恢复到创建快照时的状态。丢失的数据仅限于创建快照后数据库更新的数据。数据厍快照必须与数据库在同一服务器实例上。
数据库快照是在数据页级运行的。也就是说,创建数据库快照后,在对源数据库页修改之前,源数据库页中的数据将复制到快照中。快照是一个很形象的名词,就如在你移动之前按下快门,复制了你当时的形象。
为了存储快照中复制的源数据库页,SQL Server 使用了“稀疏文件”。稀疏文件是 NTFS 文件系统的一项功能。将数据写入稀疏文件后,NTFS将分配磁盘空间以保存该数据。稀疏文件最初是空白文件,不包含用户数据,而且操作系统也没有为其分配存储用户数据的磁盘空间。在创建数据库快照后,SQL Server将对源数据库的修改都保存在稀疏文件中,随着对源数据库页的不断修改,稀疏文件也变得越来越大。
当然,数据库快照和真正的照片还有所不同。随着源数据库的不断变化,数据库快照占用的磁盘空间会越来越大。当源数据库中的所有数据页都被修改时,数据库快照就和源数据库一样大了。可以在适当的时机创建新快照来替换旧的快照。
创建数据库快照
CREATE DATABASE <数据库快照名> ON
(NAME=<数据库文件的逻辑名称>,FILENAME=<对应的稀疏文件>)[,...n]
AS SNAPSHOT OF <创建快照的数据库名>
例子
CREATE DATABASE student_2208 ON
(NAME=student,FILENAME='D:\student_2208.ss'),
AS SNAPSHOT OF student
查看数据库快照
可以通过USE打开数据库快照,然后用SELECT可以查看快照里面的数据了。
快照中的数据是在创建快照时student数据库里面的数据,数据库studnet中的数据再发生变化,不会影响到数据库快照。数据库快照中的数据是只读的,不允许修改。
恢复到数据库快照
如果发现数据库中的数据被破坏,又没有做数据库备份,则可以将数据库恢复到快照时的状态。
RESTORE DATABASE <数据库名>
FROMD ATABASE_SNAPSHOT=<数据库快照名>
执行恢复到数据库快照时,应该注意以下几点: