今天要把一个db_1上某个用户的表结构迁移到另一个db_2上,两者的用户名要保持相同,表空间也必须相同。
先说下我尝试过的方法:
1.使用下面的脚本通过dbms_metadata.get_ddl过程直接获取test用户所有表的DDL语句。
set long 100000 linesize 130 pagesize 1000
col schema_ddl for a1000
spool schema_ddl.txt
select replace(to_char(dbms_lob.substr(dbms_metadata.get_ddl('TABLE',table_name,'TEST'), 4000, 1)),'"','')||';' schema_ddl from dba_tables WHERE owner='TEST';
spool off
但是,你看到脚本中的dbms_lob.substr()就发现了,有些表(分区表,特别是那些有n个分区的分区表)的DDL语句就毫不犹豫地超过了4000个字符,所以,这个方法经过简单测试后因不实用而放弃。不过,好像dbms_metadata.get_ddl()有个参数可以把storage那些信息不输出,我懒得测试了,不知道具体效果如何。试验过的朋友记得留言告诉我下。
2.使用exp/imp进行只导schema定义
导出使用以下脚本(direct=y 表示使用直接路径, rows=n 表示不导出数据,只导定义; 而且还发现exp所使用的用户不能使用sysdba角色)
exp test/test direct=y rows=n fi