分类: Sybase
2008-04-10 20:04:36
来源:IT 专家网 |
3、备份数据库及其日志间的相互作用 在至少卸出一次数据库前,卸出事务日志是毫无意义的。下图显示了备份数据库及其日志间的关系 如果在星期二下午5:01出现非硬件故障,需要做的所有工作是装入磁带5(参见下一节:数据恢复),由于磁带5是下午5:00刚备份的,因此只有备份和装入之间的一分钟内的数据损失。 但是,如果在星期二下午4:49失效会怎么样呢?在这种情况下,要装入磁带1(在星期五下午5:00的卸出)。然后,依次装入磁带2,3以及4。这样,系统将恢复到星期二上午10:00点的状态,星期二的大部分工作丢失了。此例显示了经常卸出事务的重要性。 二、万一系统失败时恢复数据库系统 如果用户数据库存储的设备失效,从而数据库被破坏或不可存取,通过装入最新的数据库备份以及后来的事务日志备份可以恢复数据库。假设当前的事务日志存在于一个并没有毁坏的设备上,带着 with no_truncate 选项的 dump transaction 命令卸出它。 要恢复数据库按如下步骤去做: 1、如果日志存在于一个分离的设备上,用带着 no_truncate 选项的 dump transaction 命令卸出被毁坏的或者不可存取的用户数据库事务日志。 2、用下面的查询检查设备分配已毁坏数据库的设备使用情况。必须为同一目的赋同样的空间块。 下面的查询显示了分配给数据库 mydb 设备使用和尺寸情况: select segmap,size from sysusages where dbid = ( select dbid from sysdatabases where name = “mydb”) 3、检查查询的输出。在 segmap 列的 ‘3’代表数据分配,‘4’代表日志分配。size 列代表 2k 数据块的数目。注意此信息的次序、使用和尺寸部分。例如,输出为: segmapsize -------------------- 310240//实际尺寸为:20m 35120//实际尺寸为:10m 45120//实际尺寸为:10m 31024//实际尺寸为:2m 42048//实际尺寸为:4m 4、用 drop database 命令删除毁坏设备上的数据库。如果系统报错,用dbcc dbrepair 命令的 dropdb 选项。 5、删除数据库后,用 sp_dropdevice 删除毁坏了的设备。 6、用 disk init 初始化新的数据库设备。 7、重建数据库。用 create database 命令从老的 sysusages 表拷贝所有的行,并包含第一逻辑设备。 对上例,命令为: create database mydb on datadev1=20,datadev2=10 log on logdev1=10 8、用 alter database 命令重建其余入口。在此例中,在datadev1上分配更多的空间,命令为: alter database mydb on datadev1=2 9、用 load database 重新装入数据库,然后用 load tran 装入前面卸出的日志。 load database 命令语法是: load database database_name from dump_device load transaction 命令的语法是: load transaction database_name from dump_device 卸出数据库和事务日志的缺省权限归数据库所有者,且可以传递给其他用户;装载数据库和事务的权限也归数据库所有者,但不能传递。 |