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