1. 使用orace exp命令
exp user/passwd file=a.dmp rows=N
说明:使用exp导出的是一个只有表结构没有表记录的dmp文件,导出文件仅仅适用于oracle数据库。
2. 使用oracle imp命令
imp userid=scott/tiger file=a.dmp full=y indexfile=scott.sql
说明:此时imp并没有真正导入数据库,而是将DDL写在scott.sql里;把前面的REM去了,再去掉最后一行... 0 rows,创建表的DDL就做好了,这样得到的DDL经过简单修改就可以使用在其他数据库的建表语句中。
3. 使用DBMS_METADATA.GET_DDL包
sqlplus scott/tiger<<-EOF
set pagesize 0
set long 90000
set feedback off
set echo off
spool get_allddl.sql
SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name) FROM USER_TABLES u;
SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name) FROM USER_INDEXES u;
spool off
quit
EOF
说明:导出的get_allddl.sql文件就是数据库实例中所有用户的建表语句,如果想导出单表可以在user_tables后面增加条件限制。
4.使用dbvisualizer或者pl/sql导出
在实际导出中,第一种和第二种方法都可以正常导出sql,第三种在执行过程中出现了错误:
ERROR:
ORA-39212: installation error: XSL stylesheets not loaded correctly
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 79
ORA-06512: at "SYS.DBMS_METADATA_INT", line 7398
ORA-06512: at "SYS.DBMS_METADATA_INT", line 7447
ORA-06512: at "SYS.DBMS_METADATA_INT", line 9453
ORA-06512: at "SYS.DBMS_METADATA", line 1919
ORA-06512: at "SYS.DBMS_METADATA", line 2792
ORA-06512: at "SYS.DBMS_METADATA", line 4333
ORA-06512: at line 1
/home/dhc)>oerr ora 39212
39212, 00000, "installation error: XSL stylesheets not loaded correctly"
// *Cause: The XSL stylesheets used by the Data Pump Metadata API
// were not loaded correctly into the Oracle dictionary table
// "sys.metastylesheet." Either the stylesheets were not loaded
// at all, or they were not converted to the database character
// set.
// *Action: Connect AS SYSDBA and execute dbms_metadata_util.load_stylesheets
// to reload the stylesheets.
/home/dhc)>oerr ora 06512
06512, 00000, "at %sline %s"
// *Cause: Backtrace message as the stack is unwound by unhandled
// exceptions.
// *Action: Fix the problem causing the exception or write an exception
// handler for this condition. Or you may need to contact your
// application administrator or DBA.
解决方法:
以sysdba权限的用户登陆执行以下语句:
SQL> exec dbms_metadata_util.load_stylesheets;
PL/SQL procedure successfully completed.
重新使用DBMS_METADATA.GET_DDL包导出建表语句,成功完成。