一、通過查詢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
原創文章轉載請註明出處