在Oracle中以原子方式重命名表名

时间:2017-01-12 07:18:43

标签: sql oracle ddl

我在Oracle DB中有一个表T,我需要加载(替换)该表上的数据。 替换数据可能是一个漫长的过程,并且在我的加载过程中还有其他进程可以使用此表(其他进程可以在我开始加载过程后运行或启动)。

解决方案是将数据加载到临时表T_TMP中,当加载过程完成时,我们将:
 1.将表格T重命名为T_REMOVE  2.将表T_TMP重命名为T。

在上述重命名步骤中,其他进程/作业可以使用表T,以便它们可以接收无效数据。 因此,我需要重命名表原子

在MySQL中,原子语句是:

RENAME TABLE tbl_name TO new_tbl_name
[, tbl_name2 TO new_tbl_name2] ...

问题是Oracle中的并行原子语句是什么?

建议使用交易:delete from t; insert into t ...; commit; 但是加载过程不是简单的插入语句,而是我应该运行的脚本: sqlldr user/pass control=scopes_group.ctl direct=true

文件" scopes_group.ctl":

LOAD DATA INFILE 'scopes_group.dat' BADFILE 'scopes_group.bad' DISCARDFILE 'scopes_group.dsc' TRUNCATE INTO TABLE T FIELDS TERMINATED BY ',' TRAILING NULLCOLS (group_id , scopes char(4000) "replace(:scopes,';',',')", updated SYSDATE)

谢谢! 麦克

0 个答案:

没有答案