之前在http://blog.csdn.net/bisal/article/details/19067515寫過一篇關於expdp和impdp的實踐的文章,今天碰到個問題,有些內容沒有介紹全,這裡再補充下。
知識點1:需要登入到資料庫,操作create (or replace) directory test_dump as '/opt/test',這裡不能用test_dump='/opt/test',且/opt/test就夠了,不用必須是/opt/test。
知識點2:匯入時不用必須和匯出的使用者名稱一致。
知識點3:如果匯入處理程序中報的是“Unable to open the log file.”、找不到test_dump等之類的錯誤,檢查方法:
1、首先檢查test_dump是否設定正確,可以檢索dba_directories表;
2、其次要看test_dump目錄是否有讀寫權限;
3、然後也可以看匯入使用者是否有許可權訪問到dba_directories,
今天的問題就是匯入使用的使用者是普通使用者,無法訪問dba_directories,首先報的是“Unable to open the log file.”、找不到test_dump等之類的錯誤,開始以為test_dump建立有問題,但dba_directories有值,且路徑是有讀寫權限,但匯入的賬戶沒有dba_directories的許可權,想必匯入時自然無法讀到test_dump,此時可以使用以下兩條語句將要求的權限賦給這個普通使用者:
grant read,write on directory test_dump to user;
grant imp_full_database to user;
知識點4:匯入處理程序中可能會出現一些GRANT INSERT ...許可權賦予賬戶錯誤的問題,很可能是匯入的庫中沒有對應的角色ROLE,如果應用不用這些,則可以忽略。
知識點5:如果匯入的庫中包含待匯入的資料表結構,則impdp會失敗,猜測expdp的dump中包含DDL語句,因此不允許匯入庫中包含表結構,需要提前清空匯入使用者空間的相關表結構。