Oracle 導庫

Oracle導庫

問題:針對生產庫與開發庫的版本不一致導致開發庫無法復現生產問題,所以需要導庫來解決。

總得思路:把用戶的腳本全部刪除,然後將備份的dmp文件保存到本地用語句導入即可,具體思路如下:

(1)清空當前登錄用戶的所有對象的腳本(去PL/SQL中執行如下sql)

declare
  v_sql varchar2(128);
BEGIN
  FOR objectRow IN (SELECT OBJECT_NAME, OBJECT_TYPE FROM user_objects) LOOP
    IF objectRow.OBJECT_TYPE = 'TABLE' THEN
      v_sql := 'DROP TABLE ' || objectRow.OBJECT_NAME ||
               ' cascade constraints';
      execute immediate v_sql;
    ELSIF objectRow.OBJECT_TYPE = 'TYPE' THEN
      v_sql := 'DROP ' || objectRow.OBJECT_TYPE || ' ' ||
               objectRow.OBJECT_NAME || ' force';
      execute immediate v_sql;
    ELSIF objectRow.OBJECT_TYPE = 'VIEW' THEN
      v_sql := 'DROP ' || objectRow.OBJECT_TYPE || ' ' ||
               objectRow.OBJECT_NAME || ' force';
      execute immediate v_sql;
    ELSIF objectRow.OBJECT_TYPE = 'SEQUENCE' OR
          objectRow.OBJECT_TYPE = 'PACKAGE' OR
          objectRow.OBJECT_TYPE = 'PROCEDURE' OR
          objectRow.OBJECT_TYPE = 'FUNCTION' THEN
      v_sql := 'DROP ' || objectRow.OBJECT_TYPE || ' ' ||
               objectRow.OBJECT_NAME;
      execute immediate v_sql;
    END IF;
 
  END LOOP;
END;
/
PURGE RECYCLEBIN;
/

(2)新建directory的語法

CREATE [OR REPLACE] DIRECTORY directory AS 'pathname';
For Example:
   create or replace directory HH_DUMP_DIR as 'D:\myTempFile';

查看是否創建成功:

select * from dba_directories;

(3)指令導入

 imp 用戶名/密碼@實例名 file=導入的dmp文件路徑 
 For Example:
     impdp test/[email protected]:1521/NSDEV dumpfile=myTest.dmp  full=y
     --如果當導出的時候有多個dmp文件中間用逗號隔開即可
     dumpfile=myTest01.dmp,myTest02.dmp,myTest03.dmp 

補充:導出

 exp 用戶名/密碼@實例名 file=導出的dmp文件存放路徑 log=導出日誌存放路徑
 For Example:
   exp test/[email protected]:1521/TEST file=D:\myTempFile\myTest.dmp log=D:\myTempFile\myTest.log

如果dmp文件由dba用戶導出,而導入的用戶不是dba,那麼會報錯

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

IMP-00000:Import terminated unsuccessfully

只需將dba權限賦值給需要導入的用戶後,重新導入即可:

賦值語句:grant dba to test

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章