對IMP-00013問題的思考

jeanron100發表於2014-12-01
對於IMP的問題或者是各類ORA問題,如果碰到的時候使用oerr是一個很不錯的參考方案。比如對於ora錯誤12041的解釋如下。
> oerr ora 12041
12041, 00000, "cannot record ROWIDs for index-organized table \"%s\".\"%s\""
// *Cause:  Index-organized tables do not have ROWIDs. Therefore a materialized
//          view log that records the ROWIDs of an index-organized table
//          could not be created.
// *Action: Do not include the WITH ROWID option when using the
//          CREATE MATERIALIZED VIEW command and do not include the ADD ROWID
//          option when using the ALTER MATERIALIZED VIEW command if the master
//          table is index-organized.

其實碰到問題的時候,辦法總比困難多。有很多的方式來解決,如果處理得當,就會避免很多後續的問題。
比如今天開發反饋在測試環境匯入一個dump的時候 碰到了如下的錯誤。這個問題是很常見的。

Export file created by EXPORT:V11.02.00 via conventional path

IMP-00013: only a DBA can import a file exported by another DBA

IMP-00000: Import terminated unsuccessfully
基本有兩種思路,一種是賦予dba許可權,另外一種是賦予imp_full_database的許可權。
透過錯誤的字面意思,是需要賦予dba的許可權。如果這樣做,就很被動了,因為目前測試環境有幾十個,分別歸屬不同的開發小組,他們會根據需求匯入對應的dump,這個dump是直接從現場環境中傳過來的,匯出的時候就直接用了dba的許可權,所以在匯入的時候就出了上面的錯誤。如果我們這次賦予了dba許可權,那麼這個使用者就存在一定的風險,如果開發做了超出許可權之外的操作,那就會造成一些不明不白的問題,所以如果賦予了dba許可權,那麼在dump匯入之後就需要revoke dba許可權。如果dba每次都去跟蹤這些操作就顯得有些“多餘”了。所以就陷入一個很尷尬的境地,許可權放開出問題是dba,不給許可權導不了dump還是dba的問題。如果能夠一勞永逸的解決問題就太好了。
這個時候如果我們細細的琢磨一下這個問題,就會發現,其實我們直接賦予imp_full_database的許可權就夠了。不用直接動用dba許可權。
這個imp_full_database的許可權目前來看也是安全的。如果開發拿到這個許可權,還真幹不了什麼其他的操作。
所以目前為止我們可以認為imp_full_database的許可權已經足夠應付這個問題,不需要大動干戈,做吃力不討好的事情。
事情到目前為止還沒有完,真實的情況是過了一段時間又出現了問題。這次是在現場測試環境中碰到了,問題的原因是因為在開發測試環境中會有一些資料字典相關的資料。如果把各個模組的資料字典資料合併起來,就是一個dump檔案了,根據流程這個dump檔案需要在生產中部署。結果在現場的測試環境中就發現了這個問題。
這個問題說大也大,說下也小,當時有個哥們的處理思路就是生產環境中直接加個imp_full_database的許可權就可以了。我當時就拒絕了。客戶的環境中的任何許可權,他們都有監控,我們不能在沒有得到許可的情況下私自改動。
那個哥們當時也有點急了。

Man...

its just a privilege

otherwise we have to work again

you can revoke it

after my confirmation

我給他解釋了一番,如果我們現在在哪個環境中碰到了問題,就這麼修,那麼現場測試環境也有幾十套,我們也要一套一套這麼修嗎。況且現場環境中會不斷的增加新的測試環境,沒次新增一個,客戶都會找到我說,你們的環境有問題,這樣就把問題又推給dba了。到了生產,如果我們放了一馬,私自修改了許可權,那麼從生產中匯出的dump檔案都需要這個許可權,又得修。所以就是錯誤的連鎖反應了。
他聽了聽,也確實有道理就把測試環境中的那個許可權給revoke了之後,重新匯出了一個dump。直到一年多過去了,也沒有聽說過生產中匯入dump有問題。
所以對於這個問題的歸納就是,賦予imp_full_database許可權,也不能一概而論,要根據需要來。要不就會畫蛇添足。開發,測試,dba都工作相安無事才是真的好。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1353121/,如需轉載,請註明出處,否則將追究法律責任。

相關文章