祝愿大家身体健康!

 站点注册  找回密码
 站点注册

QQ登录

只需一步,快速开始

查看: 38146|回复: 28

[参考资料] [转帖]sybase数据库备份方案

  [复制链接]

[参考资料] [转帖]sybase数据库备份方案

  [复制链接]
阿辉

主题

0

回帖

195

积分

超级版主

积分
195
贡献
在线时间
小时
2005-9-22 10:19:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×
  1.   Sybase数据库产品自从1987年问世以来,它的客户机/服务器(client/server)工作模式、分布处理的基础体系结构、完善的安全保密性能、高速快捷的运行方式、多平台跨操作系统的广泛应用等优点,迅速被IT界接受并推广应用。我们作为金融业的用户,也在1995年开始使用Sybase10版本。在具体的使用中,发现集中式的数据管理有其优点,就是数据风险范围大为缩小,但是作为Sybase的服务器一端,数据风险比较集中,如何做好数据库的数据备份,成为至关重要的问题。
  2.   在实际应用中,我们总结出了两种全量备份方案:
  3.   一、使用Sybase的Backup Server(备份服务器),做Dump备份
  4.   转储数据库(Dump database),就是为整个数据库(包括数据、表结构、触发器、游标、存储过程、事务日志等)做一次物理备份。转储数据库时,系统自动执行一次checkpoint,即将日志和数据从缓冲区拷贝到硬盘(只拷贝脏页),把已被分配的页(日志和数据)转储到设备。
  5.   命令格式为:
  6.    dump database 数据库名 to 设备文件名 with 参数
  7.   如果备份到硬盘的文件上,可以不预先估算备份文件的大小,只要硬盘有足够的存储空间就可以。如果是备份到dds磁带上,那么就要估算一下备份后的大小,90米的dds磁带压缩存储空间为4G,120米的磁带压缩存储空间为8G,如果数据库的备份文件超过了这个尺寸,就要考虑多文件转储,使用stripe参数。
  8.   命令格式为:
  9.    dump database 数据库名 to 设备文件名1
  10.     stripe on 设备文件名2
  11.     stripe on 设备文件名3……
  12.    with 参数
  13.   这种数据备份方式是将整个数据库的运行环境完整的复制一份,包括数据库的脏页和碎片,在使用load命令恢复时,只能恢复到同样大小的数据库中(数据和日志的大小都只能和原来完全一致),适用于在每天的日终营业网点下班后的日常备份。优点是数据库完整无误,缺点是不能直接查看备份内容。
  14.   二、分数据结构和数据记录做两次备份
  15.   在一般情况下,生产机的数据库都比较庞大,而实验机则相对较小,难以在实验环境中以load命令恢复工作机的内容。所以,在工作实践中,我们摸索出了第二种全量备份方案。
  16.   1、数据结构备份
  17.   在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(触发器)。
  18.   2、数据记录备份
  19.   将数据库各表以Sybase自代的bcp(bulk copy)工具的方式导成一定格式的文本文件,命令格式:
  20. bcp 表名 out 路径名 文件名 -c -t 分隔符 -u (用户名)-p(密码)-S(服务器名)
  21. 如果将一个数据库中的所有表都做一个bcp备份,就需要针对每一个表都做一次bcp,在一般情况下,一个数据库有100多个表,工作量比较大。可以利用数据库中的系统表信息做一个bcp备份脚本。原理是每一个用户表在系统表中都有信息记载,可以通过isql语句查询得到。现举一例说明:
  22.   1)、先编辑一个名为mkbcpout.sql的文件,内容如下:
  23. select "echo bcp '"+name+" out ……………………'
  24. "+"bcp "+name+" out ./+"name+".table -c -t '|' -Uuser -Ppassword -S SERVER" from sysobjects where type='U'
  25. go
  26.   2)、执行isql命令,以此文件作为输入,执行结果输出到另外一个文件里:
  27. isql -Uuser -Ppassword -S server -I mkbcpout.sql -O bcpout
  28.   3)、对bcppout文件稍微修改,增加可执行权限
  29. chmod +x bcpout
  30.   4)、执行bcpout,导出数据文本
  31. ./bcpout
  32.   3、数据库恢复
  33.   业务生产机可能为小型机,而实验开发环境的硬件环境为PC server,安装好win nt或SCO unix下的Sybase服务器后,根据需要创建空间足够大的数据库和tempdb(系统临时数据库),创建数据库用户,并将其更改为此数据库的所有者,要注意两点:1)此数据库允许bcp拷贝,2)此数据库自动清除log。命令格式为:
  34.   1> sp_dboption databasedbname ,"select into/bulkcopy",true
  35.   2> go
  36.   1> sp_dboption databasename,"trunc log on chkpt",true
  37.   2> go
  38.   上述两个配置可能与生产机的配置不同。
  39.   然后以新创建的数据库用户登录,导入数据结构,注意要首先导入表结构,然后才是存储过程、触发器等等。命令格式:
  40.   1、 isql -Uusername -Ppassword -I table.ddl -o error.log.table
  41.   2、 isql -Uusername -Ppassword -I proc.ddl -o error.log.proc
  42.   ……
  43.   为了提高bcp导入数据的速度,需要将比较大的表的索引和主键删除,否则的话,每bcp进一条数据,数据库都自动写一条log日志,记载此数据的上一条和下一条记录,确定本记录在此表中的准确位置,一是影响bcp速度,二是数据库的log飞速膨胀。数据库的自动清除log功能只有在一个事务结束后才起作用。
  44. 准备工作做完后,开始倒入数据记录。使用类似做bcpout的方法做一个bcpin的脚本,然后执行:
  45.    ./bcpin |tee error.bcpin
  46.   使用tee管道输出的目的是让计算机完整记录下倒入过程,自动存入error.bcpin文件中,待倒入结束后,我们只需要检查日志文件,不需要一直紧盯着计算机屏幕。
  47.   所有工作做完之后,不要忘记重新将删除的主键和索引建上。
  48.   如果有现成的数据库,只需要单纯地导入数据记录,则首先将数据库中所有用户表(也就是所有type="U"的表)清空,命令格式:
  49.   1> truncate table tablename
  50.   2> go
  51.   当然最好也是利用做bcpout脚本的做一个truncate脚本,通过执行此脚本将所有用户表清空。然后的数据导入、处理索引和主键的过程与上面类似。
  52.   三、利用做bcp备份脚本的方法做数据库碎片整理
  53.   Sybase数据库作为联机事务处理应用服务器,每天应用程序都对数据库做大量的插入、修改和删除等操作,不可避免的在数据库的物理存储介质上留下页碎片和扩展单元碎片,从而影响数据库的存储效率和运行速度。具体表现为:业务繁忙时出现死锁(dead lock),数据库的输入/输出资源被大量占用,业务处理速度慢。其解决办法是:
  54.   1、 清空数据库中的所有表,命令格式:
  55.     isql -Uusername -Ppassword -I truncate.sql -o error.truncate
  56.   2、 删除所有表的索引和主键
  57.     isql -Uusername -Ppassword -I dropindex.sql -o error.dropindex
  58.   3、 导入数据
  59.     ./bcpin
  60.   4、 添加索引和主键
  61.     isql -Uusername -Ppassword -I addindex.sql -o error.addindex
  62.   5、 更新数据库状态
  63.     1> update statistics tablename
  64.     2> go
  65.   上述操作都是针对数据库中的所有用户表进行的,利用做bcp备份脚本的方法做出相应的脚本,使繁琐的数据库维护变得简便易行,还克服了直接使用isql语句操作风险大、没有操作日志的毛病。
  66.   笔者在实际工作中,使用第一种方法对生产机做日常全量备份,日终通过unix的crontab定时批量作业(具体做法请参考《中国金融电脑》2001年第10期有关crontab的文章)bcp出全部数据。使用高档PC server 搭建模拟运行环境,在需要的情况下导入生产机数据,处理运行中后台server的各种问题,待研究出解决办法后再在生产机上做相应调整,这样做风险小,效果好。
复制代码
共享共进共赢Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
lancy

主题

0

回帖

11

积分

新手上路

积分
11
贡献
在线时间
小时
2005-10-5 13:30:57 | 显示全部楼层

有点模糊

[此贴子已经被作者于2005-10-5 13:31:38编辑过]
共享共进共赢Sharing And Win-win Results
codo

主题

0

回帖

20

积分

注册会员

积分
20
贡献
在线时间
小时
2005-11-11 12:08:22 | 显示全部楼层
楼主写的很清楚。:)支持一下!
共享共进共赢Sharing And Win-win Results
codo

主题

0

回帖

20

积分

注册会员

积分
20
贡献
在线时间
小时
2005-11-11 12:09:15 | 显示全部楼层

但前一次,我们执行bcp out,bcp in很费时,大概不到10G整整搞了一个晚上。:(

共享共进共赢Sharing And Win-win Results
CrazyLiu

主题

0

回帖

2

积分

新手上路

积分
2
贡献
在线时间
小时
2005-11-17 15:23:52 | 显示全部楼层

很好!

文章很好,但我请教一下,sybase sql server manager 是什么工具?我在SYBASE服务器上没看到这个工具,是要选择安装吗?

共享共进共赢Sharing And Win-win Results
lllenxue

主题

0

回帖

28

积分

注册会员

积分
28
贡献
在线时间
小时
2005-11-23 17:01:17 | 显示全部楼层

sybase sql server manager 

在安装盘上有

共享共进共赢Sharing And Win-win Results
sn97163

主题

0

回帖

1

积分

新手上路

积分
1
贡献
在线时间
小时
2006-6-8 13:07:40 | 显示全部楼层

bcp 用-o参数性能影响很大的。

对于bcp性能,参数设置好,速度确实是惊人的(SYBASE说的)。

共享共进共赢Sharing And Win-win Results
JohnPhan

主题

0

回帖

228

积分

注册会员

积分
228
贡献
在线时间
小时
2005-12-27 10:37:24 | 显示全部楼层

好。收藏

"bcp out,bcp in很费时" 如果没有表本身索引等的问题

我的经验是网络传输的问题,或是硬盘空间的问题

[此贴子已经被作者于2005-12-27 10:44:56编辑过]
共享共进共赢Sharing And Win-win Results
jack119

主题

0

回帖

1

积分

新手上路

积分
1
贡献
在线时间
小时
2006-2-10 09:52:00 | 显示全部楼层
版主那个行的,还是邮政的?
共享共进共赢Sharing And Win-win Results
Shenxin

主题

0

回帖

3

积分

新手上路

积分
3
贡献
在线时间
小时
2006-7-27 01:41:51 | 显示全部楼层

第二种方式是有缺陷的。

如果你在A存储过程中使用了另一个存储过程B,而B过程在ddl里面又排在A的后面,就会出错。

现在我常用的方式是12.5.1  里面有一个工具叫做 sybmigrate.bat ,在\sybase\ASE-12_5\bin里面

用那个比较好。速度也不太慢,至少比较完整。

共享共进共赢Sharing And Win-win Results
tlb203

主题

0

回帖

2

积分

新手上路

积分
2
贡献
在线时间
小时
2007-2-3 15:11:47 | 显示全部楼层
学习中。。。
共享共进共赢Sharing And Win-win Results
mengjie

主题

0

回帖

14

积分

新手上路

积分
14
贡献
在线时间
小时
2006-11-4 10:46:34 | 显示全部楼层

好贴子,我是sybase新手,不过,我想会成为高手的!

共享共进共赢Sharing And Win-win Results
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com

QQ|Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2024-3-29 04:05 , Processed in 0.056633 second(s), 10 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表