- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个使用 Sybase ASE 15.7 作为底层数据库的应用程序。在过去,建议拆分表并将它们放在两个不同的数据库中,比如 db1 和 db2。我知道没有命名冲突,这意味着我可以将对象从 db1 迁移到 db2,反之亦然。
迁移数据的最佳选择是什么。我有 SQL 脚本来创建我需要在 remeining 数据库中的所有对象。有没有比使用这个更好的选择:
1> INSERT INTO db2..tblA
2> SELECT * FROM db1..tblA
3> GO
有些 table 很大。所以我需要注意事务日志没有被填满。
BCP 也可能是这样的一个选项:
bcp db1..tblA out tblA.save -U... -P....
bcp db2..tblA in tblA.save -U... -P....
是否有可用的工具可以连接到两个数据库并可以处理这样的事情?
也许有人有想法。提前致谢。
最好的问候
延斯
最佳答案
为防止日志填满,您可以执行未记录的操作。如果那不可能,您可以将数据库选项设置为在复制过程中截断日志检查点,但第二种方法可能不足以确保日志不会耗尽。如果使用未记录的操作,则在完成后应完成完整的数据库转储以创建新基线的备份。如果在离线维护窗口之外进行,未记录的操作可能很危险。
在检查点截断(执行以下操作然后执行检查点)
打开/关闭截断模式使用
使用大师;
sp_dboption, 'trunc log on chkpt', [false|true];
在数据库上允许 BCP/select INTO(执行以下操作然后执行检查点)
使用大师;
sp_dboption, 'select into/bulkcopy/pllsort', [false|true];
执行检查点
要在数据库“dbname”中使用检查点。
使用'数据库名';
检查点;
BCP 选项
如果您选择使用 BCP,请确保使用快速 BCP。快速 BCP 未记录。
确保使用快速 BCP 的规则在 http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc30191.1570100/doc/html/san1367605064460.html 中指定。 .
您可以分两个阶段执行此操作,一个是“提取”(输出)运行,然后是一个“加载”运行。这些命令看起来像这样。
SYBASE/$SYBASE_OCS/bin/bcp ${DB1NAME}..${TABNAME} 输出 $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 声明,这可能会很慢。联合也不是一个好的选择,因为行不是唯一的。
索引
一般来说,如果目标表上有一个大索引(尤其是集群索引),在复制过程中删除它并在之后重新创建它可能会更有效。
关于database - Sybase ASE 15.7 - 如何将两个数据库中的对象合并到一个数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38770953/
我是一名优秀的程序员,十分优秀!