我在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)
谢谢! 麦克