通过更改所有权oracle将表从一个模式移动到另一个模式?

时间:2018-02-28 12:04:42

标签: sql oracle oracle11g

我在名为DEMO的模式中有四个表。我想在另一个名为TEST的模式中移动/克隆/复制它们。

通过将所有权从DEMO更改为TEST来移动表是否可行?

我使用Oracle 11和oracle sql developer 4.

2 个答案:

答案 0 :(得分:3)

您可以使用Oracle的数据泵实用程序导出表,然后将它们导入到其他模式

Oracle安装程序

CREATE DIRECTORY dump_dir AS '/path/to/put/dumps';
GRANT WRITE ON DIRECTORY dump_dir TO DEMO;
GRANT READ, WRITE ON DIRECTORY dump_dir TO TEST;
GRANT CREATE TABLE TO TEST;

导出

EXPDP DEMO/DEMOPASSWORD directory=DUMP_DIR tables=DEMO.TABLE1,DEMO.TABLE2,DEMO.TABLE3,DEMO.TABLE4 dumpfile=DEMO.dmp logfile=DEMO.log

导入

使用remap_schema(如果需要,remap_tablespace):

IMPDP TEST/TESTPASSWORD  directory=DUMP_DIR tables=DEMO.TABLE1,DEMO.TABLE2,DEMO.TABLE3,DEMO.TABLE4 remap_schema DEMO:TEST remap_tablespace=DEMO_TBS:TEST_TBS dumpfile=DEMO.dmp logfile=DEMO.log

如果表中有外键,您将该点重新映射到DEMO架构中尚未重新映射的其他表,则重映射将尝试重新映射这些表并且无法创建外键(因为表在TEST模式中不存在)但仍应导入数据。查看IMPDP的输出以查找这些故障,然后使用,例如:

ALTER TABLE TEST.TABLE1
  ADD CONSTRAINT TABLE1__COLUMN1__FK
  FOREIGN KEY ( COLUMN1 ) REFERENCES DEMO.OTHER_TABLE ( COLUMN1 );

创建适当的外键。

答案 1 :(得分:0)

如果您可以从新模式访问旧模式,则可以使用:

CREATE table_name UNRECOVERABLE AS SELECT * FROM sourceSchema.SOURCE_table;

这将在新模式下重新创建表;然后您可以根据需要从旧模式中删除该表。