将表结构和数据复制到不同的用户

时间:2013-02-06 11:24:59

标签: sql oracle

我有一组表,其中包含一个用户架构中的数据。 我希望将这些副本复制给其他用户。

可以用SQL完成吗?

由于

5 个答案:

答案 0 :(得分:1)

如果两个用户在同一个数据库上,并且提供了足够的GRANTS,那么只需在新用户模式中运行以下语句:

create table <tablename> as select * from olduser.<tablename>;

编辑:

将以下一组语句复制到文本文件中。将<oldueser>替换为现有模式名称,将<path>替换为unix / windows机器中要写入假脱机的路径。在现有架构中运行此文件。假脱机文件将写入名称为tbls.sql的路径中。获取此tbls.sql并在新架构中运行它,您希望在其中复制表。

set head off
set line 100000
set line 100000
set feedback off
spool <path>/tbls.sql
select 'CREATE TABLE ' || TABLE_NAME ||' AS SELECT * FROM <OLDUSER>.'||TABLE_NAME||';'
FROM user_tables; 
spool off
set feedback on

答案 1 :(得分:0)

是的,您可以在命令提示符中使用export命令,例如

c:\>exp userid=userid(sql admin)/password owner=username(from which user) direct=y file=filename.dmp

使用

导入此内容
c:\>imp userid=userid(sql admin)/password file=filename.dmp fromuser=username(from which user) touser=username(imported username)

通过使用它,您必须将数据导出到转储文件中,然后将其导入另一个用户

答案 2 :(得分:0)

create schema2.tablename as select * from schema1.tablename

答案 3 :(得分:0)

  1. 您可以导出第一个架构并导入第二个架构 - 如果没有任何理由阻止您这样做,我会这样做。 Documentation is here.

  2. 如果您有访问权限,则可以编写一个小脚本来为您执行此操作。 您可以使用查询选择所有源用户的表:

    SELECT table_name FROM all_tables WHERE owner = <source_schema>

  3. 循环遍历所有这些并使用execute immediate创建新表。 (Documentation here

    execute immediate 'create <dest>.<tablename> as select * from <source>.<tablename>';
    

    destsource是架构的名称。 tablename是从循环中获取的表的名称。

答案 4 :(得分:0)

可能是“CREATE TABLE ... AS SELECT”对你有用吗?

请参阅docs

这是a good article