Sybase 系统数据库的备份与恢复
Sybase的系统数据库有master, model,sybsystemprocs,tempdb以及一些可选的数据库(sybsecurity,pubs2,sybsyntax)。
系统数据库的备份只能是完全备份,即dump database。恢复系统数据库时,大致有以下几种方法:
1. 使用load database 命令加载数据库的备份集。
2. 使用buildmaster,installmaster,installmodel去还原到这些数据库的初始状态,也即重建。
3. 以上两种方式的结合。
一、master数据库
master数据库控制着用户数据库以及一些SQL Server的操作,它会跟踪如下信息:
u 用户帐号(表syslogins)
u 远程用户帐号(表sysremotelogins)
u 能够与之连接的远程服务器(表sysservers)
u 正在运行的进程(表sysprocesses)
u 可配置的环境变量(表sysconfigures)
u 系统错误消息(表sysmessages)
u SQL Server上的数据库(表sysdatabases)
u 分配给每个数据库的存储空间的信息(表sysusages)
u 系统上被加载的磁带和磁盘信息(表sysdevices)
u 活动锁(表syslocks)
u 字符集(表syscharsets)
u 拥有服务器范围权限的用户(表sysloginroles)
u 服务器角色(表syssrvroles)
u SQL Server在线引擎(表sysengines)
何时备份master数据库:每次当用户创建、更改或者删除任何设备、数据库、或数据库对象时需要备份;每次当用户执行一个存储过程去改变master数据库时需要备份。Master数据库的日志不能存放在单独的设备上,所以不能用dump transaction来备份。
Master数据库损坏原因和症状:master数据库一般会因为介质错误或一些数据库内部错误导致失败,出错后的master数据库有以下一些症状:
u SQL Server不能启动。
u 频繁的段分割错误或I/O错误。
u 一些计划的数据库一致性检查报告中的错误,dbcc工具。
备份:master数据库必须要被备份到一个单独的卷或设备上,除非不只一个SQL Server能和Backup Server交互(可能是集群)。用dump database来做备份。
恢复:恢复时为了防止其他用户访问master数据库,所以必须以单用户的模式启动SQL Server。恢复master数据库时可以分为两种情形来对待:
u 当master数据库被破坏但是master设备并没有被损坏的情况下,这种情况不会影响model数据库(model数据库的恢复将在后面讲解)。
u 当master设备损坏时,用户必须恢复整个设备。用户也能利用这个过程将master数据库移到一个更大的master设备上去。
恢复时,可以分为以下步骤来进行:
u 对于一些重要的系统表做一份硬拷贝。
u 如果在master设备上存在用户数据库,并且是可访问的,先做备份。
u 使用buildmaster创建一个新的master数据库或master设备。
u 用startserver命令以单用户模式重新启动SQL Server。
u 如果master数据库大于3MB,那么在sysusages表中重新创建它的分配情况。
u 如果Backup Server的网络名(在接口文件里面)不是SYB_BACKUP,那么在sysservers表中要做相应的调整。
u 检查Backup Server是否在运行。
u 用load database命令加载最近的master的备份,当恢复成功之后,SQL Server将会自动停止。
u 再次以单用户模式启动SQL Server。
u 自从最后一次备份master以来,如果你需要添加数据库设备的话,请使用disk reinit命令重建sysdevices表。
u 如果你自动最后一次备份以来运行了disk reinit,或者使用了create database或alter database命令,那么对sysusages和sysdatabases表做一份硬拷贝,然后使用disk refit命令重建系统表。
u 检查一致性:用sysusages和sysdatabases的硬拷贝和他们的新版本比较,在每一个数据库中运行dbcc checkalloc,检查数据库中每一个重要的表。
u 如果你恢复了整个master设备,那么请恢复model数据库。
u 重新加载用户数据库。
u 如果自从上次备份master以来你添加了新的登录,检查syslogins表。
u 如果所有的东西都正确,那么停止SQL Server服务器并用多用户模式启动。
u 立即备份master数据库。
注意:如果有用户数据库也存在于master设备上,并且此用户数据库没有备份过,那么我们不能用上述方法来恢复,这可能会导致master设备上的用户数据库的丢失。
二、model数据库
model数据库提供了模板或原型给新的数据库,每次创建新数据库的时候,SQL Server将做一份model的拷贝到新数据库。Model数据库包含了每个用户数据库中所要求的系统表,用户也可以定制一些表结构,这些表结构将会影响之后新建的用户数据库。
何时备份model数据库:当用户每次改变了model数据库的时候,需要备份。与master数据库一样,model数据库的日志不能存放在单独的设备上,所以不能用dump transaction来备份。
恢复:如果采用buildmaster工具重建model数据库,首先必须关闭SQL Server。
恢复过程:在能使用model的情况下(用use model判断),只需第三步。
u 使用buildmaster还原model数据库。
u 如果你改变了model的大小,重新使用alter database命令。
u 用load database命令加载备份集。
三、 sybsystemprocs数据库
sybase的系统存储过程都存储在sybsystemprocs数据库中。当用户在任何数据库中执行任何以“sp_”开头的存储过程时,SQL Server首先是从用户的当前数据库中查找,如果查找不到,SQL Server就在sybsystemprocs数据库中查找。如果在sybsystemprocs中也没有,那么SQL Server就会去master数据库中查找。
何时备份sybsystemprocs数据库:当用户改变了sybsystemprocs数据库或添加了自己的存储过程到此数据库,此时应该备份此数据库。与master数据库一样,sybsystemprocs数据库的日志不能存放在单独的设备上,所以不能用dump transaction来备份。
恢复:如果之前没有备份,只能使用installmaster重建。如果有备份,直接使用load database。
注:原创,转帖请注明出处,谢谢