如何通过CLI工具将Oracle测试库导出为可Git维护的SQL文件?
Oracle命令行导出带数据的SQL文件方案
方案1:用SQL Developer命令行工具(sqldeveloper-cli)
这是最贴近图形化导出向导的命令行方式,能直接生成包含表结构和INSERT数据的SQL文件:
- 创建导出配置文件
export_config.xml:
<export> <connection>test/test@XEPDB1</connection> <type>EXPORT</type> <objects> <object> <name>TEST.*</name> <type>TABLE</type> </object> </objects> <format>SQL</format> <includeData>true</includeData> <filename>test_db_export.sql</filename> <directory>/your/target/path</directory> </export>
- 执行导出命令:
sqldeveloper-cli export -config export_config.xml
方案2:用expdp+自定义脚本(适合批量场景)
如果需要更灵活的控制,可先导出dmp再生成完整SQL:
- 导出包含全量内容的dmp文件:
expdp test/test@XEPDB1 dumpfile=test_full.dmp directory=DUMP_DIR content=all schemas=TEST
- 提取DDL到SQL文件:
impdp test/test@XEPDB1 dumpfile=test_full.dmp directory=DUMP_DIR sqlfile=test_ddl.sql
- 编写sqlplus脚本生成INSERT语句(示例针对单表,可批量扩展):
创建gen_inserts.sql:
SET HEADING OFF FEEDBACK OFF ECHO OFF PAGESIZE 0 LINESIZE 1000 SPOOL test_data_inserts.sql SELECT 'INSERT INTO currencies_countries (currency_id, country_id) VALUES (''' || currency_id || ''', ''' || country_id || ''');' FROM currencies_countries; SPOOL OFF EXIT;
执行脚本:
sqlplus test/test@XEPDB1 @gen_inserts.sql
最后合并test_ddl.sql和test_data_inserts.sql即可得到完整的初始化SQL。
方案3:sqlplus单表快速导出(适合少量表)
如果只需要导出个别表的数据,直接用sqlplus生成INSERT语句:
创建currencies_countries_export.sql:
SET HEADING OFF FEEDBACK OFF ECHO OFF PAGESIZE 0 LINESIZE 1000 SPOOL currencies_countries.sql SELECT 'INSERT INTO currencies_countries (currency_id, country_id) VALUES (''' || currency_id || ''', ''' || country_id || ''');' FROM currencies_countries; SPOOL OFF EXIT;
执行命令:
sqlplus test/test@XEPDB1 @currencies_countries_export.sql
关键提示
- 确保执行命令的用户拥有
EXP_FULL_DATABASE权限,否则可能无法导出部分对象 - 导出前设置正确的字符集避免乱码:
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8(根据实际环境调整) - 生成的SQL文件需符合Docker初始化要求:后缀为
.sql,语句末尾带分号,避免使用SQL*Plus专属命令
内容的提问来源于stack exchange,提问作者hendry
相关产品推荐
相关产品推荐

