sybase数据库备份方案

  1、使用sybasebackup server(备份服务器),作dump备份
   转储数据库(dump database),就是为整个数据库(包括数据、表结构、触发器、游标、存储过程、事务日志等)作一次物理备份。转储数据库时,系统自动执行一次checkpoint,即将日志和数据从缓冲区拷贝到硬盘(只拷贝脏页),把已被分配的页(日志和数据)转储到设备。
  命令格式为:
   dump database 数据库名 to 设备文件名 with 参数
  若是备份到硬盘的文件上,能够不预先估算备份文件的大小,只要硬盘有足够的存储空间就能够。若是是备份到dds磁带上,那么就要估算一下备份后的大小,90dds磁带压缩存储空间为4g,120的磁带压缩存储空间为8g,若是数据库的备份文件超过了这个尺寸,就要考虑多文件转储,使用stripe参数。
  命令格式为:sql

 dump database 数据库名 to 设备文件名1
    stripe on 设备文件名2
    stripe on 设备文件名3……
   with 参数

  这种数据备份方式是将整个数据库的运行环境完整的复制一份,包括数据库的脏页和碎片,在使用load命令恢复时,只能恢复到一样大小的
数据库中(数据和日志的大小都只能和原来彻底一致),适用于在天天的日终营业网点下班后的平常备份。优势是数据库完整无误,缺点是不能直接查看备分内容。

  2、分数据结构和数据记录作两次备份
  在通常状况下,生产机的数据库都比较庞大,而实验机则相对较小,难以在实验环境中以load命令恢复工做机的内容。因此,在工做实践中,咱们摸索出了第二种全量备份方案。
  一、数据结构备份
  在windows平台的sybase sql server manager(数据库管理)平台中选择serveràgenerate ddl则产生整个数据库服务器的全部信息,若是选择databaseàgenerate ddl则产生所选定数据库的信息,以master库为例,产生的文件主要包括:config.ddl(配置)、devices.ddl(设备)、database.ddl(数据库)、logins.ddl(用户)、remote.ddl(远程)、cache.ddl(缓冲)、segment.ddl()、group.ddl(用户组)、user.ddl(用户)、default.ddl(确省)、rule.ddl(规则)、udt.ddl、table.ddl(表)、view.ddl(视图)、proc.ddl(存储过程)、triger.ddl(触发器)。
  二、数据记录备份
  将数据库各表以sybase自代的bcp(bulk copy)工具的方式导成必定格式的文本文件,命令格式:
bcp 表名 out 路径名 文件名 -c -t 分隔符 -u (用户名)-p(密码)-s(服务器名)
若是将一个数据库中的全部表都作一个bcp备份,就须要针对每个表都作一次bcp,在通常状况下,一个数据库有100多个表,工做量比较大。能够利用数据库中的系统表信息作一个bcp备份脚本。原理是每个用户表在系统表中都有信息记载,能够经过isql语句查询获得。现举一例说明:
1)、先编辑一个名为mkbcpout.sql的文件,内容以下:
数据库

select "echo bcp ''"+name+" out ……………………''
"+"bcp "+name+" out ./+"name+".table -c -t ''|'' -uuser -ppassword -s server" from sysobjects where type=''u''
go
windows

2)、执行isql命令,以此文件做为输入,执行结果输出到另一个文件里:服务器

isql -uuser -ppassword -s server -i mkbcpout.sql -o bcpout数据结构

3)、对bcppout文件稍微修改,增长可执行权限工具

chmod +x bcpoutspa

4)、执行bcpout,导出数据文本unix

./bcpout日志

3、数据库恢复
  业务生产机可能为小型机,而实验开发环境的硬件环境为pc server,安装好win nt或sco unix下的sybase服务器后,根据须要建立空间足够大的数据库和tempdb(系统临时数据库),建立数据库用户,并将其更改成此数据库的全部者,要注意两点:1)此数据库容许bcp拷贝,2)此数据库自动清除log。命令格式为:
  1> sp_dboption databasedbname ,"select into/bulkcopy",true
  2> go
  1> sp_dboption databasename,"trunc log on chkpt",true
  2> go
  上述两个配置可能与生产机的配置不一样。
  而后以新建立的数据库用户登陆,导入数据结构,注意要首先导入表结构,而后才是存储过程、触发器等等。命令格式:
  一、 isql -uusername -ppassword -i table.ddl -o error.log.table
  二、 isql -uusername -ppassword -i proc.ddl -o error.log.proc
  ……
  为了提升bcp导入数据的速度,须要将比较大的表的索引和主键删除,不然的话,每bcp进一条数据,数据库都自动写一条log日志,记载此数据的上一条和下一条记录,肯定本记录在此表中的准确位置,一是影响bcp速度,二是数据库的log飞速膨胀。数据库的自动清除log功能只有在一个事务结束后才起做用。
准备工做作完后,开始倒入数据记录。使用相似作bcpout的方法作一个bcpin的脚本,而后执行:
   ./bcpin |tee error.bcpin
  使用tee管道输出的目的是让计算机完整记录下倒入过程,自动存入error.bcpin文件中,待倒入结束后,咱们只须要检查日志文件,不须要一直紧盯着计算机屏幕。
  全部工做作完以后,不要忘记从新将删除的主键和索引建上。
  若是有现成的数据库,只须要单纯地导入数据记录,则首先将数据库中全部用户表(也就是全部type="u"的表)清空,命令格式:
  1> truncate table tablename
  2> go
  固然最好也是利用作bcpout脚本的作一个truncate脚本,经过执行此脚本将全部用户表清空。而后的数据导入、处理索引和主键的过程与上面相似。
  3、利用作bcp备份脚本的方法作数据库碎片整理
  sybase数据库做为联机事务处理应用服务器,天天
应用程序都对数据库作大量的插入、修改和删除等操做,不可避免的在数据库的物理存储介质上留下页碎片和扩展单元碎片,从而影响数据库的存储效率和运行速度。具体表现为:业务繁忙时出现死锁(dead lock),数据库的输入/输出资源被大量占用,业务处理速度慢。其解决办法是:
  一、 清空数据库中的全部表,命令格式:
    isql -uusername -ppassword -i truncate.sql -o error.truncate
  二、 删除全部表的索引和主键
    isql -uusername -ppassword -i dropindex.sql -o error.dropindex
  三、 导入数据
    ./bcpin
   四、 添加索引和主键
    isql -uusername -ppassword -i addindex.sql -o error.addindex
  五、 更新数据库状态
    1> update statistics tablename
    2> go
  上述操做都是针对数据库中的全部用户表进行的,利用作bcp备份脚本的方法作出相应的脚本,使繁琐的数据库维护变得简便易行,还克服了直接使用isql语句操做风险大、没有操做日志的毛病。
  笔者在实际工做中,使用第一种方法对生产机作平常全量备份,日终经过unix的crontab定时批量做业bcp出所有数据。使用高档pc server 搭建模拟运行环境,在须要的状况下导入生产机数据,处理运行中后台server的各类问题,待研究出解决办法后再在生产机上作相应调整,这样作风险小,效果好。
server

相关文章
相关标签/搜索