在平常的数据库运维工作里头,对于 Sybase 数据库的备份而言呀,一直以来是众多管理员们着重关注的要点之处呢。
尤其在生产环境数据量十分巨大的情况下,并且又产生了需要于实验环境开展恢复测试的需求时,众多的人都会碰到各种各样棘手的问题。
今儿就开始谈谈怎样借助转储数据库以及 bcp 工具,再结合一些实用脚本,高效达成备份和数据迁移。
什么是数据库转储
转储数据库,也就是 Dump database,实际上是比较容易明白的,它的作用是针对整一个数据库去开展一回全面的物理备份。
这个备份,并非仅仅是单纯地将数据留存下来,而且还涵盖了表结构,以及触发器,还有游标,另外包括存储过程,甚至就连事务日志也会被一并进行打包处理。
当你开展转储操作之际,系统便会自动引发一次 checkpoint,将缓冲区当中的脏页以及数据全部强行写入硬盘,以此保证备份的一致性。
转储命令的格式,是比较固定的,是这样的,dump database,数据库名,to,设备文件名,with,参数。
如果备份目标是dds 磁带,就需要提前估算一下数据库的体积。
比如 90 米的 dds 磁带压缩后能存 4G,120 米的是 8G。
一旦备份文件超出这个大小,就需要运用 stripe 参数去达成多文件转储,以此实现将数据分散写入多个设备之上。
这种备份方式具备的最大益处便是完整且无误,它能够将你整个数据库的运行环境毫无变动地复制下来,其中涵盖了那些碎片以及脏页。
可是缺点显著,恢复之际得运用 load 命令,并且仅能恢复至大小全然相同的数据库内,数据以及日志所占的空间皆不可变动。
所以它更适合用在日终营业网点下班后的日常备份场景。
利用 bcp 工具导出数据
除了进行直接转储之外,Sybase 还自行带有 bcp(也就是 bulk copy)工具,它能够将各个表当中的数据,导出成为指定格式的文本文件。
指令的格式是如此这般的,那便是,bcp,然后是表名,接着是 out,跟着是路径名,再接着是文件名,而后是 -c,再之后是 -t,跟着是分隔符,然后是 -u,接着是用户名,再次是 -p,跟着是密码,最后是 -S,跟着是服务器名。
假设存在一个数据库,其中包含上百张表,要是逐个去进行 bcp 导出操作,明显不太具备现实可行性。
这时候就可以借助系统表的信息来生成一个批量脚本。
系统表里存在着与每个用户表相对应的记录,借助 isql 语句进行查询,便能够获取到所有的表名,按照这些表名,进而自动拼接出完整的 bcp 命令。
同样地,在做数据导入前,也需要把现有数据清空。
能够采用相近的方式来生成一个 truncate 脚本,将所有的用户表,也就是 type='U'的那些表,一次性进行清空,着实非常便利。
导入数据的注意事项

数据于实验环境里恢复时,常常会遭遇这样的状况,即生产机跟实验机的硬件配置并非一样。
生产机或许为小型机,实验机则是普通的 PC server,于安装好 Windows NT 或者 SCO Unix 下的 Sybase 后,需先去创建足够大的数据库以及 tempdb 系统临时数据库。
然后新建数据库用户,并把它改为数据库的所有者。
此地存在两个要点需格外留意,其一,数据库得准许 bcp 进行拷贝,其二,数据库应被设置为自动清理日志。
在进行数据导入这个操作的时候,较为妥当的做法是,首先将表结构进行导入,之后再去导入存储过程、触发器等相关对象。
如果你的表很大,建议在 bcp 导入之前先把索引和主键删掉。
缘由是每引入一条记录之时,数据库皆会撰写一次日志,用以记载这条数据于表里的前后位置关联,不但致使速度迟缓,而且会令事务日志迅猛扩张。
等数据全部导完,再重新创建索引和主键,效率会高很多。
另外,建议于导入之际运用 tee 管道予以输出,将全部流程自动存放至 error.bcpin 日志文件之中。
这样你就不需要一直盯着屏幕,等导入结束后直接检查日志就行。
利用 bcp 做碎片整理
Sybase 身为联机事务处理服务器,每日直面数量颇多的增删改操作 ,随着时间持续推移,物理存储介质之上便会呈现出页碎片以及扩展单元碎片。
也就是在业务高峰时期,常常会出现死锁(dead lock)这种状况,大量的 I/O 资源就这样被占用了,进而处理速度显著地变慢了。
利用前面做的 bcp 备份脚本,可以顺便完成碎片整理的工作。
先是要将所有的用户表给清空掉,接着运用 bcp 把数据再次导回去,这样的一个过程能够使得数据在物理存储方面变得连续起来,进而减少碎片。
并且,脚本化了的操作,相较于直接于 isql 之中敲命令,要安全得相当多,每一个步骤都存在日志记录,不用担心出现误操作现象。
小结
无论是平常的数据库转储,亦或是借助 bcp 开展数据迁移以及碎片整理,把控这些方式均可令你的 Sybase 运维工作减轻许多。
首先,重点在于要预先准备好批量脚本,接着,使得重复劳动转向自动化,然后,与此同时还要留意导入之前删除索引,最后,以及开启日志自动清除这样的一些小细节。
这样不仅能节省大量时间,还能保证数据恢复过程的可靠性。

Comments NOTHING