热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

实现Sybase数据库备份愿望

来源: 作者: 时间:2008-06-10 Tag: 点击:

2、数据记录备份:

  将数据库各表以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

  (2)执行isql命令,以此文件作为输入,执行结果输出到另外一个文件里:

  isql -Uuser -Ppassword -S server -I mkbcpout.sql -O bcpout ;

  (3)对bcppout文件稍微修改,增加可执行权限: chmod +x bcpout;

  (4)执行bcpout,导出数据文本:./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

  上述两个配置可能与生产机的配置不同。

然后以新创建的数据库用户登录,导入数据结构,注意要首先导入表结构,然后才是存储过程、触发器等等。命令格式:

  1、 isql -Uusername -Ppassword -I table.ddl -o error.log.table
  2、 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脚本,通过执行此脚本将所有用户表清空。然后的数据导入、处理索引和主键的过程与上面类似。

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册