BCP进行数据导入导出

     我们知道Sybase可以用dump和load命令进行数据库的整体备份和整体导入,非常方便,凡是有利有弊,当然它也有缺陷,就是备份数据库的 服务器和导入数据库的服务器的pageSize必须相同,我以前就遇到这种情况,我从用dump命令windows上的Sybase服务器中导出一个数据 库到备份文件中,当我利用load命令将备份的数据库导入到Linux上的Sybase服务器时,报错,错误大概意思是我的备份文件的头部的信息 pageSize为2kb,而我要导入进的Sybase服务器的pageSize为8kb,两个不相符,不能导入。

    因为Sybase数据库的pageSize是安装数据库时指定的,所以不能更改,除非重装一个。

    在这种情况下,BCP就派上用场了,BCP命令和dump命令的不同之处是它不是将数据库整体备份,而是只备份表里面的数据库,保存在一个文件中,一个命令只能备份一个表的数据,例如

        bcp testDB..testTB out opt/temp/testTB.txt -Udevelop -Pdevelop -SCAILONG -Jcp936 -c

    上句bcp命令中:

            testDB:数据库名称

            testTB:要备份数据的表名称

            opt/temp/testTB.txt:导入数据库到该文件中

              -Udevelop:develop为登录数据库的用户名

            -Pdevelop:develop为登录数据库的密码

            -SCAILONG:CAILONG为数据库服务器名称(此处也可以为ip)

            -Jcp936:cp936为数据库编码(cp936即系统第936位编码,貌似是gb2312)

            -c:显示的保存备份数据,即我们打开备份的数据文件可以看到数据

 

    技巧:因为上面一条命令只能备份一个表的数据到指定的文件,当我们一个库有成百上千张表,也需要几千条这样命令,难道我们就一条去copy、paste、修改?

    当然是有技巧的,当我们要备份一个数据库所有表的数据,是可利用下列语句生成:

        select 'bcp testDB..'+ name+' out opt/temp/'+name+'.dat -Udevelop -Pdevelop -SCAILONG -Jcp936 -c' from sysobjects where type='U'

    执行这一条sql就得到了这个库所有表的bcp数据备份脚本,将其复制到outbcp.sh文件中,./outbcp.sh,即可执行该脚本(windows系统复制到outbcp.bat,双击运行),这样所有的表的备份文件则都在制定目录下。

    进行数据库的导入,首先new一个新的数据库,然后打开rapid sql登录刚才备份数据的数据库服务器,选中刚才bcp备份数据的所有表,右键extract,即可得到所有表的建表脚本,在新数据库中执行,创建所有 表,只需将刚才output.bat中out全部repace成in即可,如果是导入到另外一台机器的数据库中,方法有两种:

        方法1、将所有备份的文件和导入脚本通过ftp传到那台服务器上在执行脚本。

        方法2、开始-》所有程序-》Sybase-》Dsedit utility-》在右侧Server列表中右键Add,添加一个Server,指定一个Server名称,然后再在右边双击最后一行Server Address,弹出一个操作框,点击Add按钮,在弹出的输入框的Network Address中输入192.168.6.156,5000,前面为要导入数据库的IP,逗号后面为数据库端口,这样操作完成后,将导入数据的批处理文件 -S后面的服务器名称改为刚才利用Dsedit utility工具创建的那个Server名称,这样即可将数据导入到另一台机器的数据库中。

    可能在导入过程中,可能由于编码或者数据量过大的问题而不能成功导入,这是可以baidu、google一下,获得解决方法。

你可能感兴趣的:(qq,Blog)