SYBASE学习笔记
(2) 用isql登录到SQL Server, 须用sa帐号 (本文以pubs2数据库为例) 1>sp_configure \ 2>go
1>begin tran 2>go
1> use master 2> go
1>update sysdatabases 2>set status = -32768 3>Where name=\ 4>go
如果得到(1 row affected),则 1>commit 2>go 否则
1>rollback 2>go
(3)这时重新启动SQL Server, 使用bcp工具将该数据库(本例中为pubs2)内的全部数据导出备份(这一步很重要!)
(4)以sa帐号登录到SQL Server,执行下面操作: 1>dump tran pubs2 with no_log 2>go
1>begin tran 2>go
1> use master 2> go
1>update sysdatabases 2>set status=0
3>Where name=\ 4>go
如果得到(1 row affected),则 1>commit 2>go 否则
1>rollback 2>go
1>sp_configure \ 2>go
(5) 重新启动server
(6) 如果你的数据库原来有dboption(例如\等), 你需要重新设置这些option..
(7) 当数据库已经恢复可使用状态后,运行dbcc命令检查数据库的一致性(参照\如何检查数据库中数据一致性\文章) (8) 后备用户数据库
北京易初电子技术有限公司软件中心 2005-01
- 36 -
SYBASE学习笔记
例如:
1>dump database pubs2 to \ 2>go
如何删除坏的用户数据库?
http://www.sybase.com.cn/cn/content/support/exp_jszc_ase_zj_00004.htm (以pubs2为例)
当使用drop database无法删除数据库时,使用本文所示方法可以删除。 (1)使用isql以sa注册SQL server (2)设置允许修改系统表
1>sp_configure \2>go
(3)把 要删除的用户数据库置为\状态 1>use master 2>go
1>begin tran 2>go
1>update sysdatabases set status=256 2>where name=\3>go
如果得到(1 row affected),则 1>commit 2>go 否则
1>rollback 2>go
(4)重启server,并用isql以sa注册。
(5)删除数据库
1>dbcc dbrepair(pubs2,dropdb) 2>go
(6)恢复允许修改系统表
1>sp_configure \2>go
(7)结束
如何查找数据库启动失败原因
在实际环境中,数据库Server无法启动的原因很多,本文仅列出了几种常见的情况,供您参考。
首先,应检查Server的日志文件。不同版本缺省的日志文件如下(其中
北京易初电子技术有限公司软件中心 2005-01
- 37 -
SYBASE学习笔记
为Sybase Server的名称: UNIX:
11.0*: $SYBASE/install/errorlog
11.5* 或 11.9*: $SYBASE/install/
11.0* 11.5* 或 11.9*: $SYBASE\\install\\errorlog 12.0*: $SYBASE\\ASE-12_0\\install\\errorlog CASE 1:
basis_dlock: file '/sybase/master.dat' already in use by a SQL Server kernel kdconfig: unable to read primary master device kernel kiconfig: read of config block failed
检查server是否已经启动( showserver, ps -u sybase 或NT service ) CASE 2:
dopen: open '/sybase/master.dat' failed, permission denied kernel kdconfig: unable to read primary master device kernel kiconfig: read of config block failed
检查master设备文件的所有者及权限 CASE 3:
ninit: All master network listeners have failed. Shutting down
检查network ip 及 port配置 ( netstat -a ) CASE 4:
kernel:kscsinit: connectivity library error. Operation: cs_ctx_alloc(). 检查操作系统参数是否已经修改并重新启动操作系统 (参见安装手册)
若操作系统异常宕机,ASE未启动而$SYBASE/
日常数据库备份
http://www.sybase.com.cn/cn/content/support/exp_jszc_ase_cj_00011.htm
SYBASE 数据库的备份主要是通过 dump 命令来实现的, 分为数据库备份和日志备份。 简单语法格式如下:
dump database database_name to device_name dump transaction database_name to device_name
如果使用磁带设备做备份, 还要使用capacity、int选项。
应该多长时间备份一次数据库呢? 这决定于发生系统故障时( 例如磁盘故障 ) 应用系统允许丢失多长时间的数据。 如果允许丢失一个小时的数据, 那么可以考虑每天至少备份一次数据库, 并每个小时至少备份一次日志。
备份数据库之前, 应对数据库做 dbcc 检查, 确保备份的数据库是完好的数据库。如果数据库有损坏, 备份时可能不会报错, 但将来可能无法装载(load)。
通常情况下, 只有发生严重故障需要恢复时才进行装载数据库, 但是 SYBASE 建议偶尔对备份的数据库装载到一个测试环境上, 以保证备份工作过程正常并熟悉备份和装载工
北京易初电子技术有限公司软件中心 2005-01
- 38 -
SYBASE学习笔记
作过程。
Master 数据库的备份也不能忽略。每次master 数据库的内容有变动时, 应及时备份 master 数据库, 例如增加 login, 增加设备, 增加用户数据库等。
用户可根据自己的应用制定可行的备份方案。 详细的命令语法及备份方案的详细建议均可在 SYBASE 手册中查到。
举例:Unix平台后备pubs2数据库 启动ASE和BACKUP SERVER isql -Usa -Pxxxxxx -SSYBASE
dump database pubs2 to \go
dump transaction pubs2 to \capacity=1500000,file=\with init(capacity取值为磁带容量的70%左右) go
如何恢复master数据库
http://www.sybase.com.cn/cn/content/support/exp_jszc_ase_gj_00009.htm ASE can't setup and has no valid dump of master 1、编辑RUN_servername 在命令行最后加入:-T3607 2、单用户模式启动ASE $cd install
$startserver -f RUN_servername -m 3、bcp out系统表
$bcp master..sysdevices out /directory.spec/devs -Usa -P -c $bcp master..sysdatabases out /directory.spec/dbs -Usa -P -c $bcp master..sysusages out /directory.spec/usages -Usa -P -c $bcp master..syslogins out /directory.spec/logins -Usa -P -c
$bcp master..sysconfigures out /directory.spec/configures -Usa -P -c $bcp master..syscharsets out /directory.spec/charsets -Usa -P -c 4、shutdownASE
5、创建新master设备
$buildmaster -d
将指定master设备指定为新创建的master设备,并删除在第1步中增加的参数。
7、删除/directory.spec/dbs、/directory.spec/usages文件中有关master、tempdb、model的内容。 8、单用户模式启动ASE $cd install
$startserver -f RUN_servername -m 9、 bcp in系统表
$ bcp master..sysdevices in /directory.spec/devs -Usa -P -b 1 -c $bcp master..sysdatabases in /directory.spec/dbs -Usa -P -b 1 -c $bcp master..sysusages in /directory.spec/usages -Usa -P -b 1 -c
北京易初电子技术有限公司软件中心 2005-01
- 39 -
SYBASE学习笔记
$bcp master..syslogins in /directory.spec/logins -Usa -P -b 1 -c
$bcp master..sysconfigures in /directory.spec/configures -Usa -P -b 1 -c $bcp master..syscharsets in /directory.spec/charsets -Usa -P -b 1 -c 10、重启ASE
11、执行installmaster脚本
$isql -Usa -P < $SYBASE/scripts/installmaster
如何做Rebuild Master
http://www.sybase.com.cn/cn/content/support/exp_jszc_ase_gj_00005.htm (没有后备master库,而使用命令disk reinit,disk refit) 提示1:
如果有可能,在执行这个任务之前,请先做操作系统级SYBASE DEVICES的后备。UNIX操作系统可使用命令\。因为如果disk reinit使用了错误的信息,那么,在执行了disk refit之后就会产生无法弥补的错误。倘若,存在一个SYBASE DEVICES的后备文件,将会给我们一个弥补的机会。例如:当disk reinit 使用了过小的size值,我们还可以重新恢复SYBASE DEVICES文件,重新做disk reint、disk refit。 提示2:
在使用disk reinit命令时,将覆盖SYBASE DEVICE(请参照以下语法),安全的做法是size值使用裸分区或系统文件的大小的最大值。如果使用的是UNIX裸分区,即使你不能确认SYBASE DEVICE最初大小是不是最大值,都要使用裸分区大小的最大值。 步骤:
1. 获得将要被恢复的SYBASE DEVICE的信息。
? 这些信息被用来重建sysdevices,sysusages以及sysdatabases。
? 从error log的server启动信息中获得SYBASE DEVICE的设备名、指定路径。 ? 使用裸分区或系统文件的大小的最大值作为SYBASE DEVICE的大小。 ? 以上信息也可以通过最近的sysdevices系统表的内容来获得。如果对此信息怀有疑
问,还是使用以上的方法比较稳妥。
2. 做操作系统级的SYBASE DEVICE后备。UNIX操作系统,使用\命令实现。 3. 配置一个新的ASE Server。在以后的步骤中会用到这个新的master。 4. 如果需要,请再配置一个Backup Server。 5. 用单用户模式启动Server。
6. 运行disk reinit,用来重建sysdevices系统表,而没有重新初始化SYBASE DEVICE。
语法如下: disk reinit
name=\
physname=\vdevno=virtual_device_number, size=number_of_blocks
完成后,请查看error log。
7. 确认重建的sysdevices系统表中信息正确:
——select * from sysdevices
比较表中的信息是否与error log或者保留的sysdevices中的信息相同。
北京易初电子技术有限公司软件中心 2005-01
- 40 -