2013-07-30 31 views
1

我一直在使用oracle中的exp和imp命令來導出和導入我的數據庫。具有不同SID的Oracle導出數據庫

我通常使用

exp My_DB/MyPass file=dump_My_DB_20130729.dmp 

imp My_DB/MyPass file=/tmp/dump_My_DB_20130729.dmp fromuser=My_DB touser=My_DB 

哪裏MY_DB是興田用戶/ db和將mypass的密碼。

我的數據庫一直使用SID = ORCL

我們的基礎架構團隊現在已經克隆MY_DB數據庫,並把在另一個SID(ORCL2) 用戶/ databsae名稱是一樣的。 SID是唯一的區別

如何使用exp和imp導出和導入。我發現this link其中描述了設置全局sid變量,我認爲這將更新哪個數據庫我導出/導入。理想情況下,我想要一個命令開關,所以我不必去改變環境變量。

我無法看到通過這樣做的任何方式docs雖然

是否有改變SID出口的一種簡單的方法?

感謝

+0

你在'tnsnames.ora'文件中是否有'orcl'和'orcl2'的條目? –

+0

嗯....不知道我害怕。讓我在服務器上查找該文件。我不知道這個,因爲我們的基礎設施團隊建立了數據庫。我想做備份等,因爲他們是開發dbs – RNJ

+0

@AlexPoole從http://www.orafaq.com/wiki/Tnsnames.ora發現它。在我的文件中只有orcl配置。不是orcl2配置 – RNJ

回答

4

如果你在你的tnsnames.ora文件的兩個數據庫條目,可以specify the TNS alias to use as part of the connection string

exp My_DB/[email protected] file=dump_My_DB_20130729.dmp 

即假定別名設置了相同的名稱作爲SID,像:

orcl= 
(DESCRIPTION= 
    (ADDRESS=(PROTOCOL=tcp)(HOST=my.host)(PORT=1521)) 
    (CONNECT_DATA=(SID=orcl))) 
orcl2= 
(DESCRIPTION= 
    (ADDRESS=(PROTOCOL=tcp)(HOST=my.host)(PORT=1521)) 
    (CONNECT_DATA=(SID=orcl2))) 

如果你這樣做是在同一臺機器的數據庫上然後很可能的DBA已經在全球配置此。如果不存在,或者您想覆蓋它,您可以創建自己的文件並將環境變量TNS_ADMIN指向它所在的目錄。

它更有可能在連接中包含SERVICE_NAME數據部分,而不是SID,儘管它們可能是相同的。如果你知道服務的名稱,你可以繞過tnsnames.ora文件,如果你喜歡:

exp My_DB/[email protected]//my.host:1521/<service_name> file=... 

你也應該看看使用datapumpexpdpimpdp),而不是傳統expimp,因爲你是11g上。

+0

完美的作品!謝謝 – RNJ