在Oracle中创建包含数据且没有约束的表副本的最有效方法是什么?

时间:2016-08-16 17:01:32

标签: sql oracle

在Oracle中创建包含数据且没有约束(主键和外键)的表副本的最有效方法是什么?有些东西类似于下面的查询。

CREATE TABLE new_table   AS(SELECT * FROM old_table);

如果我们需要在复制后手动删除约束,但复制的创建应该很快,这很好。

请告知。

1 个答案:

答案 0 :(得分:2)

现在使用CREATE TABLE AS SELECT语句可能是最有效的方法。如果没有,那就非常接近了。

它不会创建约束(除了not null约束)或索引,因此您必须在操作完成后手动创建它们。

您可以使用parallel关键字指定操作应该并行化,但我相信该功能仅在Enterprise Edition中可用。例如:

create table new_table 
parallel
as
select * from old_table;

甚至可以通过在parallel关键字后添加整数参数来指定要使用的线程数。但是,默认情况下,它根据服务器上的可用CPU进行并行化。

通过避免重做日志生成,还可以使操作更快。这可以通过指定nologging关键字:

来完成
create table new_table 
parallel
nologging
as
select * from old_table;

但是,由于未生成重做日志,因此操作无法恢复。因此,如果您打算使用它,您应该考虑在操作完成后立即备份数据库。我个人不会使用此选项,除非由于某种原因额外的性能是至关重要的。

有关如何在create table as select语句中使用其他选项的详细信息,请参阅文档:CREATE TABLE