1、備份
? ? ? ? 創建備份出來的文件存放的位置。
?
????????創建目錄對象,在數據庫中創建一個目錄對象,該對象指向文件系統中用于存儲導出文件的實際目錄( sql 命令,可以在 plsql 中執行)。
-- 創建目錄對象,'\D:\Oracle19c\backup' 需替換為你實際的導出目錄
CREATE OR REPLACE DIRECTORY dump_dir AS 'D:\Oracle19c\backup';
?dump_dir:就是數據庫中的一個對象,代表這個目錄,這個可以自定義。
????????導出數據庫之 “全庫導出”(命令行執行)。
expdp ZERO_ECOLOGICAL_CHAIN/1231@orcl DIRECTORY=dump_dir DUMPFILE=ZERO_ECOLOGICAL_CHAIN.dmp LOGFILE=full_export.log FULL=Y
ZERO_ECOLOGICAL_CHAIN:用戶名。
1231:密碼。
orcl:數據庫實例名(一般是orcl)。
ZERO_ECOLOGICAL_CHAIN.dmp:導出后的文件名。
執行如圖:
...
? ? ? ? ?這樣就導出了,并且在剛才的目錄下能看到一個 .dmp文件。
?????????導出數據庫之 “按表導出”(命令行執行,后面的 table1、table2 就是表名)。
expdp ZERO_ECOLOGICAL_CHAIN/1231@orcl DIRECTORY=dump_dir DUMPFILE=ZERO_ECOLOGICAL_CHAIN.dmp LOGFILE=table_export.log TABLES=table1,table2
?2、還原
? ? ? ? ?還原數據,跟剛才一樣,先創建目(我這里因為是本地,剛已經建立好了,就不重復建了,就直接用剛才的目錄了)。
-- 以具有 DBA 權限的用戶登錄到數據庫,例如 SYSTEM
-- 創建目錄對象,'D:\oracle_dump' 需替換為實際存儲 DMP 文件的目錄
CREATE OR REPLACE DIRECTORY dump_dir AS 'D:\Oracle19c\backup';
????????建還原用的用戶,并賦予角色,再給用戶對這個文件目錄的讀寫權限,創建表空間,把表空間和用戶綁定起來(創建表空間的時候,要確保 D:\Oracle19c\TABLESPACE_RESTORE\ 文件目錄是存在的)。
-- 新建用戶
CREATE USER RESTORE_ZERO_ECOLOGICAL_CHAIN IDENTIFIED BY 1231;-- 給用戶 用戶名 賦予角色(這里直接是系統角色,如果想要其他角色也可以自己加)
GRANT DBA TO RESTORE_ZERO_ECOLOGICAL_CHAIN;-- 授予用戶對目錄對象讀取權限
GRANT READ, WRITE ON DIRECTORY dump_dir TO RESTORE_ZERO_ECOLOGICAL_CHAIN;-- 創建表空間和表空間里的數據文件
CREATE TABLESPACE RESTORE_ZERO_ECOLOGICAL_CHAIN -- 表空間名字 表空間名字
DATAFILE 'D:\Oracle19c\TABLESPACE_RESTORE\RESTORE_ZERO_ECOLOGICAL_CHAIN.DBF' SIZE 1024M --如D:\Oracle19c\表空間名字\用戶名.DBF 1024M 數據文件的初始大小
AUTOEXTEND ON NEXT 1024M -- 啟用自動擴展特性 1024M 數據文件在需要擴展時增加的大小
MAXSIZE 20480M -- 20,480M 數據文件可以自動擴展到的最大尺寸
LOGGING; -- 日志記錄選項,用于決定是否在數據庫的重做日志中記錄對表空間中數據的更改。-- 給用戶指定默認表空間(就是以后數據就存儲在這里面)
ALTER USER RESTORE_ZERO_ECOLOGICAL_CHAIN DEFAULT TABLESPACE RESTORE_ZERO_ECOLOGICAL_CHAIN;
????????建用戶之后,可以查看一下當前用戶有哪些表。
-- 查看當前用戶有哪些表
SELECT table_name
FROM all_tables
WHERE owner = 'RESTORE_ZERO_ECOLOGICAL_CHAIN';
?????????可以看到剛建完的用戶是沒有表的。
? ? ? ? ?還原數據之 “全庫還原”(命令行執行,因為這個是掃描整個數據庫,而不是特定的用戶,如果其他用戶下有相同的表,就會跳過,所以不建議全庫導入)。
impdp RESTORE_ZERO_ECOLOGICAL_CHAIN/1231@orcl DIRECTORY=dump_dir DUMPFILE=ZERO_ECOLOGICAL_CHAIN.DMP LOGFILE=full_import.log FULL=Y
?????????特定用戶導入(建議)。
impdp RESTORE_ZERO_ECOLOGICAL_CHAIN/1231@orcl DIRECTORY=dump_dir DUMPFILE=ZERO_ECOLOGICAL_CHAIN.DMP LOGFILE=import.log SCHEMAS=ZERO_ECOLOGICAL_CHAIN REMAP_SCHEMA=ZERO_ECOLOGICAL_CHAIN:RESTORE_ZERO_ECOLOGICAL_CHAIN REMAP_TABLESPACE=ZERO_ECOLOGICAL_CHAIN:RESTORE_ZERO_ECOLOGICAL_CHAIN
SCHEMAS=ZERO_ECOLOGICAL_CHAIN:
????????ZERO_ECOLOGICAL_CHAIN:在數據庫中,只檢索該用戶下的表。
????????指定只從導出文件中導入ZERO_ECOLOGICAL_CHAIN 用戶的對象。這樣,導入操作就不會去檢查數據庫中其他用戶的同名表,而是聚焦在指定的這個用戶的對象上,就能避免其他用戶有相同的表的時候,導入不全的問題。
REMAP_SCHEMA=ZERO_ECOLOGICAL_CHAIN:RESTORE_ZERO_ECOLOGICAL_CHAIN:
????????ZERO_ECOLOGICAL_CHAIN:指定查找備份文件中具體的用戶下的表。
????????RESTORE_ZERO_ECOLOGICAL_CHAIN:需要導入的用戶。
????????此參數用于將導出文件中原本屬于 ZERO_ECOLOGICAL_CHAIN 用戶的對象,在導入時重新映射到 RESTORE_ZERO_ECOLOGICAL_CHAIN 用戶下,實現指定導入某個用戶下面的表到指定用戶(看情況使用)。
REMAP_TABLESPACE=ZERO_ECOLOGICAL_CHAIN:RESTORE_ZERO_ECOLOGICAL_CHAIN:
? ? ? ? ZERO_ECOLOGICAL_CHAIN:原表空間的名字。
????????RESTORE_ZERO_ECOLOGICAL_CHAIN:導入的用戶所在的表空間。
? ? ? ? 因為數據仍存儲在源用戶的表空間,導入的時候,如果不指定表空間,不管導入的用戶是哪個表空間,都會導入到源表空間,如果源表空間又不存在,就會嘗試導入到導入用戶的表空間,如果沒有足夠的權限,可能導致報錯,但是如果有源表空間,但是不是該用戶下的,后期還要移動比較麻煩,就可以指定一下(看情況使用)。
執行如圖:
????????這樣就完成導入了,然后再去查一下用戶下的表,表都導入進來了就沒問題了。