在Oracle中创建包含数据且没有约束(主键和外键)的表副本的最有效方法是什么?有些东西类似于下面的查询。
CREATE TABLE new_table AS(SELECT * FROM old_table);
如果我们需要在复制后手动删除约束,但复制的创建应该很快,这很好。
请告知。
答案 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。