Sybase ASE 15.7 - 如何将两个数据库中的对象合并到一个数据库中?

时间:2016-08-04 15:01:37

标签: database merge sybase ase sysobjects

我有一个使用Sybase ASE 15.7作为底层数据库的应用程序。在过去的日子里,建议拆分表并将它们放在两个不同的数据库中,比如说db1和db2。我知道没有命名冲突,这意味着我可以将对象从db1迁移到db2,反之亦然。

迁移数据的最佳选择是什么。我有SQL脚本来创建我需要的所有对象在remeining数据库中。有没有比使用它更好的选择:

1> INSERT INTO db2..tblA
2> SELECT * FROM db1..tblA
3> GO

有些表非常庞大。所以我需要注意事务日志没有填满。

BCP也可能是这样的选择:

bcp db1..tblA out tblA.save -U... -P....
bcp db2..tblA in tblA.save -U... -P....

是否有可用的工具可以连接到两个数据库并可以处理这样的事情?

也许有人有个主意。提前谢谢。

祝你好运

1 个答案:

答案 0 :(得分:1)

为防止日志填满,您可以执行未记录的操作。 如果不可能,您可以将数据库选项设置为在复制过程中截断日志检查点,但第二种方法可能不足以确保日志不会耗尽。 如果使用未记录的操作,则在完成后应执行完整的数据库转储以创建新基准的备份。 如果在脱机维护窗口之外完成,未记录的操作可能会有危险。

在Checkpoint上截断(执行以下操作,然后执行检查点)

要打开/关闭截断模式,请使用

使用master;

sp_dboption,'trunc log on chkpt',[false | true];

允许BCP /在数据库中选择INTO(执行以下操作然后执行检查点)

使用master;

sp_dboption,'select into / bulkcopy / pllsort',[false | true];

执行检查点

要在DB'dbname'中检查点,请使用。

使用'dbname';

检查点;

BCP选项

如果您选择使用BCP,请确保使用快速BCP。快速BCP未登记。

确保使用快速BCP的规则在http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc30191.1570100/doc/html/san1367605064460.html指定。

您可以分两个阶段执行'extract'(out)运行,然后运行'load'。命令看起来像这样。

SYBASE / $ SYBASE_OCS / bin / bcp $ {DB1NAME} .. $ {TABNAME} out $ DUMPDIR / $ DB1NAME / $ {TABNAME} .TXT -c -U $ SQLUSER -P $ USERPASS -S $ SERVER1NAME

SYBASE / $ SYBASE_OCS / bin / bcp $ {DB1NAME} .. $ {TABNAME} $ DUMPDIR / $ DB1NAME / $ {TABNAME} .TXT -c -U $ SQLUSER -P $ USERPASS -S $ SERVER1NAME

需要在数据库中设置select into / bulk copy DB选项才能使其生效。

此操作后您需要转储数据库。

未记录的操作 - 选择进入

由于您可以从同一服务器内访问这两个数据库,因此您应该查看使用select into。

'select into'是一个未记录的操作。

select into语句的目标表不可存在,因此您需要做的是使用sp_rename移动原始目标表,然后使用查询中的两个源表运行select into。

需要为数据库设置select into / bulk copy DB选项才能使其正常工作。

此操作后您需要转储数据库。

由于Union声明,这可能会很慢。联合不是一个好选择,因为行不是唯一的。

<强>索引

一般情况下,如果目标表上存在大型索引(尤其是群集索引),则在复制期间删除它并在之后重新创建它可能会更有效。