解析:快速掌握Sybase数据库的备份与恢复

来源:岁月联盟 编辑:zhuzhu 时间:2007-11-06

Sybase提供了两种不同类型的恢复:一类是系统自动完成的软件系统故障恢复。另一类是需要手工完成的介质故障恢复。

 

自动恢复是系统本身提供的防止系统失败的一种保护措施。每次Sybase重启时都要运行自动恢复机制。自动控制恢复机制确保在系统瘫痪前完成的事务都写到数据库设备上,而未完成的事务都被回退。

 

人工恢复是事先通过数据库备份工具命令或在线数据流式管理软件将数据库备份到磁带设备,然后通过对应的恢复命令和模式恢复数据库。

 

Sybase的传统备份与恢复

 

下面我们首先通过讨论如何定期备份数据库来了解Sybase数据库的传统备份与恢复方法。

 

对于Sybase数据库,一旦硬件或系统出现故障,当且仅当数据库备份及其事务日志的备份存在的情况下才能恢复数据库。

 

备份的任务通常由系统管理员或数据库所有者承担。然而,备份数据库或事务日志的权限可由数据库所有者传递给其它用户。

 

制定一个备份时间表是非常重要的。很难确定备份数据及其日志的“最佳”时间表。事实上,备份的频率决定恢复的质量。如果出现介质故障,可能丢失最大的数据量。对于大型的更新频繁的数据库,通常每天要做多次日志备份和至少一次数据库的备份。

 

在数据库活动时可以备份数据库或事务日志。这种类型的备份(Sybase独有的特性),称为动态卸出。动态卸出使备份变得方便,并使连续不断的操作成为可能。

 

动态卸出会部分降低Sybase的速度。

 

备份设备的选择

 

Sybase的备份设备列在系统表master..sysdevices中,可执行命令:

 

Select * From master..sysdevicesWhere name like ”%dump%“.

来查看设备状况。

 

如果status列出的值是16或者24(表示设备是卸出设备),那么cntrltype列的值表示卸出设备的类型。卸出设备的值可以是:2~8。

 

2:表示数据是通过磁盘字节流接口卸出的。卸出设备可以是磁盘、部分磁盘,或操作系统文件。在不指明卸出设备时,默认为操作系统文件。

 

3~8:表示磁带卸出设备。

 

 

要增加卸出设备,可用系统过程sp_addumpdevice。语法为:

 

对磁带设备:

 

sp_addumpdevice ”type“,device_name,physicalname,cntrltype{,skip|noskip},size

对磁盘设备:

 

sp_addumpdevice ”disk“,device_name,physicalname,cntrltype

将数据直接备份至磁带,可以保证数据的离线异地保存,但备份时间会延长。还可以采取先将数据库备份至本地磁盘,再在机器不繁忙时将备份备至磁带。

 

使用DUMP备份数据库

 

备份数据库时会备份此数据库的全部——它的系统表、用户定义的目标,以及事务日志。数据库卸出的格式是特殊的,它只能用Sybase装载程序装入(即用LOAD DATABASE 命令)。

 

对于master数据库或其数据与日志放在同一逻辑设备上的小型数据库(小于4M)使用DUMP DATABASE 命令备份数据库和事务日志。

 

对于大型数据库而言,应当把数据与事务日志放在不同的数据库设备上。(在建数据库时用CREATE DATABASE ON ……LOG ON……来实现)这样可以作到单独备份数据与日志。

 

除了按计划备份数据库外,在对数据库作大量修改之前或在对数据库作了不记日志的操作(如执行了DUMP TRAN WITH NO_LOG)之后,都要对数据库作备份。

 

命令的使用

 

DUMP DATABASE 的语法:

 

DUMP DATABASE database_name to dump_deviceDUMP DATABASE database_name to dump_device1 stripe on dump_device2 stripe on device3 ...{stripe on...}

数据库备份时会产生多个文件,做恢复时的文件个数要与之对应。

 

备份事务日志

 

当数据与日志是放在不同的设备时,可用DUMP TRANsaction

 

命令单独备份日志。卸出日志要比备份数据库花更少的时间和存储空间。与备份数据库相同,日志的备份同样可在数据库活动时发生。

 

日志在备份后将会被删除,所以在下一次数据库备份之前的日志备份需要连续保存才会有意义。

 

命令的使用:

 

DUMP TRANsaction database_name [to dump_device] [WITH TRUNCATE_ONLY|WITH NO_LOG|WITH  NO_TRUNCATE]

注意:DUMP DATABASE只备份数据库,并不清除日志,若不使用DUMP

 

TRAN命令删除日志,日志会越来越大。

 

Sybase数据库在线流式备份和恢复

 

⒈启动在线备份

 

可以执行整个数据库服务器或特定数据库的在线备份

 

以model 库为例:

 

# nsrsybsv -Uname -Ppassword -lFull -s NetWorker_Server_Name SYBASE:/SQL_SERVER_NAME/model

⒉采用Schedule备份

 

(1)Full backup: dump database, dump the transaction log for the database, trancates the tracsaction log (2)Incremental:dump transaction log, trancates the tracsaction log

 

 

注意此方式要求:

 

数据库和事物日志建立在不同设备上;

 

不选择 select into/bulk copy 选项;

 

不选择truncate log on checkpoint 选项

 

⒊数据库的恢复

 

* 必须使用nsrsybrc 来做;

 

* 如果想恢复数据到新的数据库,必须先使用 for load 选项创建新库;

 

* nsrsybrc

 

不创建数据库,如果必要,应该先创建数据库再使用nsrsybrc程序。Sybase建议保留数据库定义和设备分配的硬拷贝,以便于再建。

 

point-in-time 恢复:

 

#setenv NSR_SERVER networker_servername#nsrsybrc -Usa -Ppassword -t ”09/11/02 03:33“ -dSYBASE:/SQL_SERVER_NAME/database

* 恢复到新的数据库。

 

* 建立新的数据库和旧数据库拥有相同的设备分配。

 

* 设置NSR_SERVER, NSR_CLIENT 环境变量以节省恢复时间:

 

nsrsybrc -Usa -Ppassword -dSYBASE:/SERVER_NAME/NEW_DATABASE   SYBASE:/SERVER_NAME/OLD_DATABASE

⒋灾难恢复

 

如果主磁盘包括SQL_server 和NetWorker客户程序遭到损坏。

 

(1) 重新安装NetWorker 客户端程序,数据库Server 软件,BSMS模块。

 

(2) 使用打印出的数据库设备分配重新创建数据库。

 

(3) 恢复master库:

 

* 重建丢失的master设备,使用“buildmaster”;

 

* 单用户模式运行数据库服务器;

 

* 重建一些master的额外设备;

 

* 确信数据库服务器在sysservers表中有正确的Sybase Backup Server 名字;

 

* 装入master数据库:

 

 

# nsrsybrc -Uusername -Ppassword SYBASE:/SQL_Server_name/master

 

* 该命令恢复master库并关闭数据库服务器;

 

* 如果必要,在数据库关闭时重新建立设备配置参数数目;

 

* 重启数据库服务器;

 

* 如果在最后一次DUMP后对系统目录信息作过改动,此时恢复改变。

 

(4) 恢复model库;

 

* 删除或重建master设备上的其他数据库。

 

(5) 恢复非master 设备上的数据库

 

* 得到每个数据库设备的当前日志备份;

 

* 检查每个设备上数据库的空间用法, 例如:

 

select * from sysdatabasesselect * from sysusagesselect * from sysdevices

 

 

* 一旦得到每个设备上所有数据库的信息,卸掉每个数据库,指整个数据库都在主库设备上;

 

dbcc dbrepai (database_name, dropdb)

 

* 根据缺少的设备,在sysdevices文件中手工删除相应的行,即删掉失败的设备;

 

* 单用户模式重启数据库;

 

* 初始化新设备;

 

* 依次重建数据库;

 

* 重启数据库,保证数据库不在单用户模式;

 

* 恢复数据库:

 

# nsrsybrc -Uusername -Ppassword SYBASE:/SQL_SERVER_NAME/database

注释:普通Sybase数据库的备份可采用dump命令来实现数据库的备份。对于商用或比较重要的数据库可采用在线数据流的备份模式,以加快数据备份和恢复速度,增强数据库备份和恢复的可管理性。