一、通过查询dba_synonyms表中的字段,拼接成一个ddl文。
getSynonymSql.sql
select -- s.*,
'CREATE OR REPLACE '||decode(s.OWNER,'PUBLIC','PUBLIC ','')||'SYNONYM '||
decode(s.OWNER,'PUBLIC','',s.OWNER||'.')||s.SYNONYM_NAME||' FOR '||
decode(s.TABLE_OWNER,NULL,NULL,s.TABLE_OWNER||'.')||s.TABLE_NAME||
decode(s.DB_LINK,NULL,NULL,'@'||s.DB_LINK)||';' as cmd
from dba_synonyms s
where s.DB_LINK is not null
order by s.OWNER, s.SYNONYM_NAME;
二、把查询的结果输到txt文件中
getSynonymRunSql.sql
set lin 160
set pages 9999
--C:\sr\db\getSQL\synonyms.txt 要输出的文件
spool C:\sr\db\getSQL\synonyms.txt
--C:\sr\db\getSQL\getSynonymsSql 查询sql文件
@"C:\sr\db\getSQL\getSynonymsSql"
spool off
exit;
三、连接数据库并执行第二步的sql语句。
runAll.bat
#通过SQLplus连接数据库,并执行getSynonymRunSql.sql
sqlplus username/password@dbName @getSynonymRunSql.sql
结语:
其实我 是想做成可以连接不同DB也能导出,无奈时间有限。大家有啥想法欢迎评论探讨。
说明,我现在的做法是做多个getSynonymRunSql.sql 然后连接不同的DB去获取。
sqlplus username/password@dbName1 @getSynonymsRunSql01.sql
sqlplus username/password@dbName2 @getSynonymsRunSql02.sql
sqlplus username/password@dbName3 @getSynonymsRunSql03.sql
sqlplus username/password@dbName4 @getSynonymsRunSql04.sql
sqlplus username/password@dbName5 @getSynonymsRunSql05.sql
sqlplus username/password@dbName6 @getSynonymsRunSql06.sql
原创文章转载请注明出处