2013-08-01 40 views
0

在堆棧溢出的幫助下,我已經能夠從我的本地機器導出數據庫的轉儲文件。我使用的命令如下:從Oracle 11g導入.dmp文件到10g返回錯誤「無法打開日誌文件」

host expdp tkcsowner/[email protected] version=10.2 schemas=tkcsowner dumpfile=tnrg.dmp logfile=tnrg.log 

現在,我的本地機器的操作系統Windows 7,32位。幾乎沒有服務器。它有Oracle 11g。我想將它轉移到另一臺運行Linux的測試服務器。它有Oracle 10g。

我絕不是Linux/Unix專家,但我確實有一些處理此類問題的人留給我的指導。

首先,我通過'su - '將權限更改爲root用戶 - 沒有問題。

以'sqlplus/nolog'登錄,然後'connect sys/sys @ xe as dba' - 沒有問題。

我創建的邏輯轉儲目錄(不知道是否需要這一步,但我就是這麼做的):

create or replace directory dumpdir as 'usr/lib/oracle/xe/app/oracle/admin/XE/dpdump'; 

做,沒有問題。

所以我認爲TNRG.dmp和tnrg.log應該在該目錄內。不幸的是,由於某種原因,它不能被複制。拒絕訪問。我想我應該註銷,以root身份登錄,並從那裏複製這些內容。它起作用了,但爲了安全起見,我退出了root用戶,以普通用戶身份登錄,並且再次執行了所有操作。 D'哦。

最後,隨着所有的東西到位,現在是時候導入.dmp和.log。好哇!

impdp tkcsowner/[email protected] schemas=tkcsowner dumpfile=TNRG.dmp logfile=tnrg.log 

瞧,它要求輸入用戶名和密碼。是否因爲tkcsowners在10g數據庫中不存在?無論如何,我爲兩者都提供了「系統」。它繼續,但警告鈴已經在我腦海中掀起。

突然:

  • 連接到:Oracle數據庫10g Express Edition的發佈10.2.0.1.0 - 生產
  • ORA-39002:無效的操作
  • ORA-39070:無法打開日誌文件。
  • ORA-29283:無效的文件操作
  • ORA-06512:在 「SYS.UTL_FILE」,線路475
  • ORA-29283:無效的文件操作

在這一點,我不確定如何繼續。我通過命令行進入了目錄,並且ls -l了內容,顯示.dmp和.log都有三個rwx,用於root用戶。我還沒有嘗試的是以root身份登錄時運行整個操作,但我不確定這會如何改變任何內容。

+0

你需要讓用戶運行的實例你的日誌寫入該目錄的所有者。 – haki

+0

對不起,我沒有明白;我沒有寫日誌(我認爲),它已經在目錄中。如果你的意思是以root用戶身份(服務器上唯一的其他用戶)這樣做,那麼「su - 」是否已經這樣做?再次,對不起,我不是Linux專家。 –

+0

導出日誌與導入過程無關;你還沒有需要複製該日誌。該錯誤正在與導入過程的新日誌相關聯。但是當你創建目錄對象時,你真的把它設置爲''usr/lib/oracle/...'而不是'/ usr/lib/oracle/...'嗎?缺少主導斜線會使路徑無效並可能導致此類錯誤。 –

回答

1

您的dumpdir數據庫目錄對象所指向的目錄需要是有效的現有目錄 - 至少在您使用它時,它不會在創建對象時檢查或投訴 - 並且需要可讀並且由用戶在Oracle運行時寫入,通常是oracle

您的初始目錄創建有'usr/lib/oracle/...而不是'/usr/lib/oracle/...,但即使更正了該目錄,oracle帳戶可能也無法使用該目錄。由於您創建的目錄爲root,因此它可能仍屬於root:root,權限爲700(如果您執行ls -ld /usr/lib/oracle/xe/app/oracle/admin/XE/dpdump將顯示爲drwx------)。

您需要更改由甲骨文所擁有,使用正確的所有者和組 - 這可能是oracle:dbaoracle:oinstall,但檢查XE目錄的所有者。然後更改目錄的所有權和複製到其中的文件:

chown -R oracle:dba /usr/lib/oracle/xe/app/oracle/admin/XE/dpdump 

,並設置目錄權限到適當的水平;如果你不希望其他人創建或修改的文件,但你不介意他們看到那裏的東西,則是這樣的:

chmod 755 /usr/lib/oracle/xe/app/oracle/admin/XE/dpdump 

如果你希望能夠在複製您的.dmp文件作爲自己(不是rootoracle),並且您不在dba組中,然後將其設置爲777.您說您複製的文件是777,這有點奇怪,因爲它們不可執行,現在可以被任何人刪除;再次使它們可讀:

chmod 644 /usr/lib/oracle/xe/app/oracle/admin/XE/dpdump/* 

不需要從其他系統的輸出日誌,只是轉儲文件本身。 impdplogfile參數將創建導入過程的日誌;由於您使用了相同的文件名,它會覆蓋您複製的導出日誌。這可能不重要,因爲你仍然有原創的東西,但未來需要注意的事情。這確實意味着現有的日誌文件必須可以通過oracle寫入。

您還需要確保Oracle所有者對整個目錄樹有適當的訪問權限,但似乎他們已經擁有XE,所以我認爲這不是一個問題。你不應該真的需要做任何這樣的root。如果您沒有oracle密碼,您可以從root的帳戶su無論如何,這刪除了需要以後手動更改所有權。

+0

非常感謝。答案和解釋。有效。 –

1

IMPDP命令從Oracle以外(在你的情況可能與)發起的,但主要是由Oracle服務器進程執行。尤其是,轉儲和日誌文件可以直接由Oracle服務器進程訪問(而不是通過啓動命令)。因此,需要設置文件保護,以便用戶可以訪問它們。

所以執行以下命令(根),然後再試一次:

chown -R oracle:oinstall /usr/lib/oracle/xe/app/oracle/admin/XE/dpdump 
相關問題