<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Chinadu&#039;s Blog &#187; Sybase</title>
	<atom:link href="http://www.4shell.org/archives/tag/sybase/feed" rel="self" type="application/rss+xml" />
	<link>http://www.4shell.org</link>
	<description>关注网络安全</description>
	<lastBuildDate>Fri, 10 Feb 2012 03:53:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>sybase数据库备份方案</title>
		<link>http://www.4shell.org/archives/673.html</link>
		<comments>http://www.4shell.org/archives/673.html#comments</comments>
		<pubDate>Thu, 27 Nov 2008 02:23:35 +0000</pubDate>
		<dc:creator>Chinadu</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[Sybase]]></category>

		<guid isPermaLink="false">http://202.172.32.240/~shellorg/archives/673.html</guid>
		<description><![CDATA[sybase数据库产品自从1987年问世以来，它的客户机/服务器(client/server)工作模式、分布处理的基础体系结构、完善的安全保密性能、高速快捷的运行方式、多平台跨操作系统的广泛应用等优点，迅速被it界接受并推广应用。我们作为金融业的用户，也在1995年开始使用 sybase10版本。在具体的使用中，发现集中式的数据管理有其优点，就是数据风险范围大为缩小，但是作为sybase的服务器一端，数据风险比较集中，如何做好数据库的数据备份，成为至关重要的问题。<br/><br/>在实际应用中，我们总结出了两种全量备份方案：<br/>...
]]></description>
			<content:encoded><![CDATA[<p>sybase数据库产品自从1987年问世以来，它的客户机/服务器(client/server)工作模式、分布处理的基础体系结构、完善的安全保密性能、高速快捷的运行方式、多平台跨操作系统的广泛应用等优点，迅速被it界接受并推广应用。我们作为金融业的用户，也在1995年开始使用 sybase10版本。在具体的使用中，发现集中式的数据管理有其优点，就是数据风险范围大为缩小，但是作为sybase的服务器一端，数据风险比较集中，如何做好数据库的数据备份，成为至关重要的问题。<br/><br/>在实际应用中，我们总结出了两种全量备份方案：<br/><br/>一、使用sybase的backup server（备份服务器），做dump备份<br/><br/>转储数据库（dump database），就是为整个数据库（包括数据、表结构、触发器、游标、存储过程、事务日志等）做一次物理备份。转储数据库时，系统自动执行一次 checkpoint，即将日志和数据从缓冲区拷贝到硬盘（只拷贝脏页），把已被分配的页（日志和数据）转储到设备。<br/><br/>命令格式为：<br/><br/>dump database 数据库名 to 设备文件名 with 参数<br/><br/>如果备份到硬盘的文件上，可以不预先估算备份文件的大小，只要硬盘有足够的存储空间就可以。如果是备份到dds磁带上，那么就要估算一下备份后的大小，90米的dds磁带压缩存储空间为4g,120米的磁带压缩存储空间为8g，如果数据库的备份文件超过了这个尺寸，就要考虑多文件转储，使用 stripe参数。<br/><br/>命令格式为：<br/><br/>dump database 数据库名 to 设备文件名1<br/>stripe on 设备文件名2<br/>stripe on 设备文件名3……<br/>with 参数<br/><br/>这种数据备份方式是将整个数据库的运行环境完整的复制一份，包括数据库的脏页和碎片，在使用load命令恢复时，只能恢复到同样大小的数据库中（数据和日志的大小都只能和原来完全一致），适用于在每天的日终营业网点下班后的日常备份。优点是数据库完整无误，缺点是不能直接查看备份内容。<br/><br/>二、分数据结构和数据记录做两次备份<br/><br/>在一般情况下，生产机的数据库都比较庞大，而实验机则相对较小，难以在实验环境中以load命令恢复工作机的内容。所以，在工作实践中，我们摸索出了第二种全量备份方案。<br/><br/>1、数据结构备份<br/><br/>在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（触发器）。<br/><br/>2、数据记录备份<br/><br/>将数据库各表以sybase自代的bcp（bulk copy）工具的方式导成一定格式的文本文件，命令格式：<br/>bcp 表名 out 路径名 文件名 -c -t 分隔符 -u （用户名）-p（密码）-s（服务器名）<br/>如果将一个数据库中的所有表都做一个bcp备份，就需要针对每一个表都做一次bcp，在一般情况下，一个数据库有100多个表，工作量比较大。可以利用数据库中的系统表信息做一个bcp备份脚本。原理是每一个用户表在系统表中都有信息记载，可以通过isql语句查询得到。现举一例说明：<br/><br/>1）、先编辑一个名为mkbcpout.sql的文件，内容如下：<br/>select "echo bcp ''"+name+" out ……………………''<br/>"+"bcp "+name+" out ./+"name+".table -c -t ''|'' -uuser -ppassword -s server" from sysobjects where type=''u''<br/>go<br/><br/>2）、执行isql命令，以此文件作为输入，执行结果输出到另外一个文件里：<br/>isql -uuser -ppassword -s server -i mkbcpout.sql -o bcpout<br/><br/>3）、对bcppout文件稍微修改，增加可执行权限<br/>chmod +x bcpout<br/><br/>4）、执行bcpout，导出数据文本<br/>./bcpout<br/><br/>3、数据库恢复<br/><br/>业务生产机可能为小型机，而实验开发环境的硬件环境为pc server，安装好win nt或sco unix下的sybase服务器后，根据需要创建空间足够大的数据库和tempdb（系统临时数据库），创建数据库用户，并将其更改为此数据库的所有者，要注意两点：1）此数据库允许bcp拷贝，2）此数据库自动清除log。命令格式为：<br/><br/>1> sp_dboption databasedbname ,"select into/bulkcopy",true<br/><br/>2> go<br/><br/>1> sp_dboption databasename,"trunc log on chkpt",true<br/><br/>2> go<br/><br/>上述两个配置可能与生产机的配置不同。<br/><br/>然后以新创建的数据库用户登录，导入数据结构，注意要首先导入表结构，然后才是存储过程、触发器等等。命令格式：<br/><br/>1、 isql -uusername -ppassword -i table.ddl -o error.log.table<br/><br/>2、 isql -uusername -ppassword -i proc.ddl -o error.log.proc<br/><br/>……<br/><br/>为了提高bcp导入数据的速度，需要将比较大的表的索引和主键删除，否则的话，每bcp进一条数据，数据库都自动写一条log日志，记载此数据的上一条和下一条记录，确定本记录在此表中的准确位置，一是影响bcp速度，二是数据库的log飞速膨胀。数据库的自动清除log功能只有在一个事务结束后才起作用。<br/>准备工作做完后，开始倒入数据记录。使用类似做bcpout的方法做一个bcpin的脚本，然后执行：<br/><br/>./bcpin |tee error.bcpin<br/><br/>使用tee管道输出的目的是让计算机完整记录下倒入过程，自动存入error.bcpin文件中，待倒入结束后，我们只需要检查日志文件，不需要一直紧盯着计算机屏幕。<br/><br/>所有工作做完之后，不要忘记重新将删除的主键和索引建上。<br/><br/>如果有现成的数据库，只需要单纯地导入数据记录，则首先将数据库中所有用户表（也就是所有type="u"的表）清空，命令格式：<br/><br/>1> truncate table tablename<br/><br/>2> go<br/><br/>当然最好也是利用做bcpout脚本的做一个truncate脚本，通过执行此脚本将所有用户表清空。然后的数据导入、处理索引和主键的过程与上面类似。<br/><br/>三、利用做bcp备份脚本的方法做数据库碎片整理<br/><br/>sybase数据库作为联机事务处理应用服务器，每天应用程序都对数据库做大量的插入、修改和删除等操作，不可避免的在数据库的物理存储介质上留下页碎片和扩展单元碎片，从而影响数据库的存储效率和运行速度。具体表现为：业务繁忙时出现死锁（dead lock），数据库的输入/输出资源被大量占用，业务处理速度慢。其解决办法是：<br/><br/>1、 清空数据库中的所有表，命令格式：<br/><br/>isql -uusername -ppassword -i truncate.sql -o error.truncate<br/><br/>2、 删除所有表的索引和主键<br/><br/>isql -uusername -ppassword -i dropindex.sql -o error.dropindex<br/><br/>3、 导入数据<br/><br/>./bcpin<br/><br/>4、 添加索引和主键<br/><br/>isql -uusername -ppassword -i addindex.sql -o error.addindex<br/><br/>5、 更新数据库状态<br/><br/>1> update statistics tablename<br/><br/>2> go<br/><br/>上述操作都是针对数据库中的所有用户表进行的，利用做bcp备份脚本的方法做出相应的脚本，使繁琐的数据库维护变得简便易行，还克服了直接使用isql语句操作风险大、没有操作日志的毛病。<br/><br/>笔者在实际工作中，使用第一种方法对生产机做日常全量备份，日终通过unix的crontab定时批量作业bcp出全部数据。使</p>
<h2  class="related_post_title">随机日志</h2><ul class="related_post"><li>2010年04月3日 -- <a href="http://www.4shell.org/archives/1650.html" title="网游厂商运营失败的两大直接原因：私服和黑客">网游厂商运营失败的两大直接原因：私服和黑客</a></li><li>2009年09月20日 -- <a href="http://www.4shell.org/archives/1105.html" title="phpcms2008 最新0day &#038; Exp">phpcms2008 最新0day &#038; Exp</a></li><li>2009年07月27日 -- <a href="http://www.4shell.org/archives/953.html" title="chinajoy露毛照">chinajoy露毛照</a></li><li>2009年09月25日 -- <a href="http://www.4shell.org/archives/1127.html" title="突破Windows 2003 200k限制的上传程序">突破Windows 2003 200k限制的上传程序</a></li><li>2009年10月15日 -- <a href="http://www.4shell.org/archives/1145.html" title="没有最强，只有更强，你自卑了吗？">没有最强，只有更强，你自卑了吗？</a></li><li>2009年06月25日 -- <a href="http://www.4shell.org/archives/806.html" title="中国菜刀测试版">中国菜刀测试版</a></li><li>2008年11月14日 -- <a href="http://www.4shell.org/archives/601.html" title="有关网络安全的6个急迫问题">有关网络安全的6个急迫问题</a></li><li>2008年10月13日 -- <a href="http://www.4shell.org/archives/393.html" title="Automatic Web Site Defacement">Automatic Web Site Defacement</a></li><li>2010年05月10日 -- <a href="http://www.4shell.org/archives/1755.html" title="国内OA安全现状初探">国内OA安全现状初探</a></li><li>2008年10月11日 -- <a href="http://www.4shell.org/archives/356.html" title="nlite中文版帮你集成各类软件和补丁到Windows安装光盘（四）">nlite中文版帮你集成各类软件和补丁到Windows安装光盘（四）</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.4shell.org/archives/673.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

