這里使用Oracle 12C來大概演示說明一下rman的基本用法,這里不會深入討論,因為本人也只是剛剛才接觸,只是結合了網上的一些文章以及自己的實踐來總結並拿出來大家學習,謝謝
目錄
- 一、關於備份與恢復
- 二、邏輯備份(expdp和impdp)
- 三、物理備份
- 四、數據庫日常備份計划及腳本參考
一、關於備份與恢復
1、備份定義
備份就是把數據庫復制到轉儲設備的過程。其中,轉儲設備是指用於放置數據庫副本的磁帶或磁盤。通常也將存放於轉儲設備中的數據庫的副本稱為原數據庫的備份或轉儲。備份是一份數據副本
2、備份分類
從物理與邏輯的角度來分類:
從物理與邏輯的,備份可以分為物理備份和邏輯備份。
物理備份:對數據庫操作系統的物理文件(數據文件,控制文件和日志文件)的備份。物理備份又可以分為脫機備份(冷備份)和聯機備份(熱備份),前者是在關閉數據庫的時候進行的,后者是以歸檔日志的方式對運行的數據庫進行備份。可以使用oracle的恢復管理器(RMAN)或操作系統命令進行數據庫的物理備份。
邏輯備份:對數據庫邏輯組件(如表和存儲過程等數據庫對象)的備份。邏輯備份的手段很多,如傳統的EXP,數據泵(EXPDP),數據庫閃回技術等第三方工具,都可以進行數據庫的邏輯備份。
從數據庫的備份角度分類:
從數據庫的備份角度,備份可以分為完全備份和增量備份和差異備份
完全備份:每次對數據庫進行完整備份,當發生數據丟失的災難時,完全備份無需依賴其他信息即可實現100%的數據恢復,其恢復時間最短且操作最方便。
增量備份:只有那些在上次完全備份或增量備份后被修改的文件才會被備份。優點是備份數據量小,需要的時間短,缺點是恢復的時候需要依賴以前備份記錄,出問題的風險較大。
差異備份:備份那些自從上次完全備份之后被修改過的文件。從差異備份中恢復數據的時間較短,因此只需要兩份數據---最后一次完整備份和最后一次差異備份,缺點是每次備份需要的時間較長。
3、恢復定義
恢復就是發生故障后,利用已備份的數據文件或控制文件,重新建立一個完整的數據庫
4、恢復分類
實例恢復:當oracle實例出現失敗后,oracle自動進行的恢復
介質恢復:當存放數據庫的介質出現故障時所作的恢復。介質恢復又分為完全恢復和不完全恢復
完全恢復:將數據庫恢復到數據庫失敗時的狀態。這種恢復是通過裝載數據庫備份並應用全部的重做日志做到的。
不完全恢復:將數據庫恢復到數據庫失敗前的某一時刻的狀態。這種恢復是通過裝載數據庫備份並應用部分的重做日志做到的。進行不完全恢復后,必須在啟動數據庫時用resetlogs選項重設聯機重做日志。
二、邏輯備份(expdp和impdp)
1、expdp/impdp和exp/imp的區別
- exp和imp是客戶端工具程序,它們既可以在客戶端使用,也可以在服務端使用。
- expdp和impdp是服務端的工具程序,他們只能在oracle服務端使用,不能在客戶端使用。
- imp只適用於exp導出的文件,不適用於expdp導出文件;impdp只適用於expdp導出的文件,而不適用於exp導出文件。
- 對於10g以上的服務器,使用exp通常不能導出0行數據的空表,而此時必須使用expdp導出。
本節主要講解的是expdp/impdp的用法,不涉及到exp和imp
2、導出數據
在准備要備份的數據庫服務器上創建備份目錄(在后面使用sql命令創建的邏輯目錄並不是在OS上創建目錄,所以我們先要在服務器上創建一個目錄)
# su oracle $ mkdir /home/oracle/oracle_bak
用管理員身份登錄到sqlplus
$ sqlplys /nolog SQL> conn sys/oracle as sysdba
創建邏輯目錄
SQL> create directory data_dir as '/home/oracle/oracle_bak';
查看管理員目錄是否存在
SQL> select * from dba_direcories;
使用管理員用戶給指定的用戶賦予在該目錄的操作權限(比如該用戶需要備份自己的數據)
SQL> grant read,write on directory data_dir to C##BAK_TEST_USER;
導出可有五種方式
1、“full=y”,全量導出數據庫
$ expdp sys/oracle@orcl dumpfile=expdp.dmp directory=data_dir full=y logfile=expdp.log
2、schemas按用戶導出
$ expdp user/passwd@orcl schemas=user dumpfile=expdp.dmp directory=data_dir logfile=expdp.log
3、按表空間導出
$ expdp sys/passwd@orcl tablespace=tbs1,tbs2 dumpfile=expdp.dmp directory=data_dir logfile=expdp.log
4、導出表
$ expdp user/passwd@orcl tables=table1,table2 dumpfile=expdp.dmp directory=data_dir logfile=expdp.log
5、按查詢條件導出
$ expdp user/passwd@orcl tables=table1='where number=1234' dumpfile=expdp.dmp directory=data_dir logfile=expdp.log
2、導入數據
首先將需要導入的數據文件存放導需要導入的數據庫服務器上
參照導出的時候的建立目錄方式建立物理目錄和邏輯目錄(只是建目錄即可,如果需要給用戶權限則加上給用戶權限的那步)
使用命令導入,同時,導入方式也可以分為五種,分別對應着導出的五種方式
1、“full=y”,全量導入數據庫;
impdp user/passwd directory=data_dir dumpfile=expdp.dmp full=y
2、同名用戶導入,從用戶A導入到用戶A;
impdp A/passwd schemas=A directory=data_dir dumpfile=expdp.dmp logfile=impdp.log;
3、
①從A用戶中把表table1和table2導入到B用戶中;
impdp B/passwdtables=A.table1,A.table2 remap_schema=A:B directory=data_dir dumpfile=expdp.dmp logfile=impdp.log;
②將表空間TBS01、TBS02、TBS03導入到表空間A_TBS,將用戶B的數據導入到A,並生成新的oid防止沖突;
impdp A/passwd remap_tablespace=TBS01:A_TBS,TBS02:A_TBS,TBS03:A_TBS remap_schema=B:A FULL=Y transform=oid:n directory=data_dir dumpfile=expdp.dmp logfile=impdp.log
4、導入表空間;
impdp sys/passwd tablespaces=tbs1 directory=data_dir dumpfile=expdp.dmp logfile=impdp.log
5、追加數據;
impdp sys/passwd directory=data_dir dumpfile=expdp.dmp schemas=system table_exists_action=replace logfile=impdp.log; --table_exists_action:導入對象已存在時執行的操作。有效關鍵字:SKIP,APPEND,REPLACE和TRUNCATE
3、並行操作
可以通過 PARALLEL 參數為導出使用一個以上的線程來顯著地加速作業。每個線程創建一個單獨的轉儲文件,因此參數 dumpfile 應當擁有和並行度一樣多的項目。您可以指定通配符作為文件名,而不是顯式地輸入各個文件名,例如:
expdp ananda/abc123 tables=CASES directory=DPDATA1 dumpfile=expCASES_%U.dmp parallel=4 job_name=Cases_Export
注意:dumpfile 參數擁有一個通配符 %U,它指示文件將按需要創建,格式將為expCASES_nn.dmp,其中nn 從 01 開始,然后按需要向上增加。
在並行模式下,狀態屏幕將顯示四個工作進程。(在默認模式下,只有一個進程是可見的)所有的工作進程同步取出數據,並在狀態屏幕上顯示它們的進度。
分離訪問數據文件和轉儲目錄文件系統的輸入/輸出通道是很重要的。否則,與維護 Data Pump 作業相關的開銷可能超過並行線程的效益,並因此而降低性能。並行方式只有在表的數量多於並行值並且表很大時才是有效的。
數據庫監控
您還可以從數據庫視圖獲得關於運行的 Data Pump 作業的更多信息。監控作業的主視圖是 DBA_DATAPUMP_JOBS,它將告訴您在作業上有多少個工作進程(列 DEGREE)在工作。
另一個重要的視圖是 DBA_DATAPUMP_SESSIONS,當它與上述視圖和 V$SESSION 結合時將給出主前台進程的會話 SID。
select sid, serial# from v$session s, dba_datapump_sessions d where s.saddr = d.saddr;
這條指令顯示前台進程的會話。更多有用的信息可以從警報日志中獲得。當進程啟動時,MCP 和工作進程在警報日志中顯示如下:
kupprdp:master process DM00 started with pid=23, OS id=20530 to execute - SYS.KUPM$MCP.MAIN('CASES_EXPORT', 'ANANDA'); kupprdp:worker process DW01 started with worker id=1, pid=24, OS id=20532 to execute - SYS.KUPW$WORKER.MAIN('CASES_EXPORT', 'ANANDA'); kupprdp:worker process DW03 started with worker id=2, pid=25, OS id=20534 to execute - SYS.KUPW$WORKER.MAIN('CASES_EXPORT', 'ANANDA');
它顯示為數據泵操作啟動的會話的 PID。您可以用以下查詢找到實際的 SID:
select sid, program from v$session where paddr in (select addr from v$process where pid in (23,24,25));
PROGRAM 列將對應警報日志文件中的名稱顯示進程 DM (為主進程)或 DW (為工作進程)。如果一個工作進程使用了並行查詢,比如說 SID 23,您可以在視圖 V$PX_SESSION 中看到它,並把它找出來。它將為您顯示從 SID 23 代表的工作進程中運行的所有並行查詢會話:
select sid from v$px_session where qcsid = 23;
從視圖 V$SESSION_LONGOPS
中可以獲得其它的有用信息來預測完成作業將花費的時間。
select sid, serial#, sofar, totalwork from v$session_longops where opname = 'CASES_EXPORT' and sofar != totalwork;
列 totalwork 顯示總工作量,該列的 sofar 數量被加和到當前的時刻 — 因而您可以用它來估計還要花多長時間。
4、不同版本數據庫之間數據互導
如將11g數據庫的數據導入導10g數據庫的服務器上
首先在11g服務器上導出
EXPDP USERID='SYS/cuc2009@cuc as sysdba' schemas=sybj directory=DATA_PUMP_DIR dumpfile=aa.dmp logfile=aa.log version=10.2.0.1.0
然后在10g數據庫服務器上導入
IMPDP USERID='SYS/cuc2009@cucf as sysdba' schemas=sybj directory=DATA_PUMP_DIR dumpfile=aa.dmp logfile=aa.log version=10.2.0.1.0
三、物理備份
1、使用rman工具備份及恢復
說明:
1. RMAN是 ORACLE提供的一個備份與恢復的工具,可以用來執行完全或不完全的數據庫恢復。
2. RMAN不能用於備份初始化參數文件和口令文件。
3. 與傳統工具相比,RMAN具有獨特的優勢:跳過未使用的數據塊。當備份一個RMAN備份集時,RMAN不會備份從未被寫入的數據塊,而傳統的方式無法獲知那些是未被使用的數據塊。
4. RMAN可以進行增量備份(增量備份是針對於上一次備份(無論是哪種備份):備份上一次備份后,所有發生變化的文件)
1、首先需要在將要備份的數據庫服務器上切換服務器的歸檔模式,如果已經是歸檔模式了,那么可以跳過此步
# su oracle //切換到oracle用戶 $ sqlplus /nolog //啟動sqlplus SQL> conn / as sysdba //以DBA的身份連接數據庫 SQL> shutdown immediate; //立即關閉數據庫 SQL> startup mount //啟動實例並加載數據庫,但不打開 SQL> alter database archivelog; //更改數據庫為歸檔模式 SQL> alter database open; //打開數據庫 SQL> alter system archive log start; //啟用自動歸檔 SQL> exit //退出


2、啟動並連接到rman(恢復管理器)
可以開個專門用於備份的用戶,不過這里使用了sys用戶
$ rman target=sys/oracle@orcl
3、基本設置
具體路徑可自己安裝需求改,但是登錄的用戶需要對備份的目錄有讀寫權限,目錄建立方法可參考上面邏輯備份的備份目錄建立
RMAN> configure default device type to disk; //設置默認的備份設備為磁盤 RMAN> configure device type disk parallelism 2; //設置備份的並行級別,通道數 RMAN> configure channel 1 device type disk format '/home/oracle/oracle_bak/bakup_%U'; //設置備份的文件格式,只適用於磁盤設備 RMAN> configure channel 2 device type disk format '/home/oracle/oracle_bak/bakup2_%U'; //設置備份的文件格式,只適用於磁盤設備 RMAN> configure controlfile autobackup on; //打開控制文件與服務器參數文件的自動備份 RMAN> configure controlfile autobackup format for device type disk to '/home/oracle/oracle_bak/ctl_%F'; //設置控制文件與服務器參數文件自動備份的文件格式


說明:
format:
%c:備份片的拷貝數(從1開始編號);
%d:數據庫名稱;
%D:位於該月中的天數(DD);
%M:位於該年中的月份(MM);
%F:一個基於DBID唯一的名稱,這個格式的形式為c-xxx-YYYYMMDD-QQ,其中xxx位該數據庫的DBID,YYYYMMDD為日期,QQ是一個1-256的序列;
%n:數據庫名稱,並且會在右側用x字符進行填充,使其保持長度為8;
%u:是一個由備份集編號和建立時間壓縮后組成的8字符名稱。利用%u可以為每個備份集產生一個唯一的名稱;
%p:表示備份集中的備份片的編號,從1開始編號;
%U:是%u_%p_%c的簡寫形式,利用它可以為每一個備份片段(既磁盤文件)生成一個唯一的名稱,這是最常用的命名方式;
%t:備份集時間戳;
%T:年月日格式(YYYYMMDD);
channel的概念:一個channel是rman於目標數據庫之間的一個連接,"allocate channel"命令在目標數據庫啟動一個服務器進程,同時必須定義服務器進程執行備份和恢復操作使用的I/O類型
通道控制命令可以用來:
- 控制rman使用的OS資源
- 影響並行度
- 指定I/O帶寬的限制值(設置 limit read rate 參數)
- 指定備份片大小的限制(設置 limit kbytes)
- 指定當前打開文件的限制值(設置 limit maxopenfiles)
4、查看所有配置
RMAN> show all;

5、查看數據庫方案報表
RMAN> report schema;

6、全量備份數據庫及全量恢復
1、全量備份全庫
RMAN> backup database plus archivelog delete input; //備份全庫及控制文件、服務器參數文件與所有歸檔的重做日志,並刪除舊的歸檔日志




2、備份表空間
這里也可以改為備份某個表空間,比如 back tablespace users;就是備份users的表空間
RMAN> backup tablespace system plus archivelog delete input; //備份指定表空間及歸檔的重做日志,並刪除舊的歸檔日志



3、備份歸檔日志
RMAN> backup archivelog all delete input;


4、復制數據文件
RMAN> copy datafile 1 to '/home/oracle/oracle_bak/bak/system.copy';

說明一下,這里的數字1對應着命令report schema結果中的1

5、查看備份和文件副本
RMAN> list backup;




查看復制文件
RMAN> list copy

6、驗證備份
RMAN> validate backupset 3;

這里說明一下,3這個數字代表的是備份集的編號,可以在list backup命令的結果中查看

7、從自動備份中恢復表空間
如果只丟失了特定的表空間的數據文件,那么可以選擇只恢復這個表空間,而不是恢復整個數據庫,表空間恢復可以在不關閉數據庫的情況下進行,只需要將需要恢復的表空間offline
現在模擬某個表空間丟失或損壞
$ cd /database/oracle/oracle/oradata/orcl $ mv users01.dbf users01_bak.dbf
現在開始恢復表空間users01
進入到rman
$ rman target=sys/oracle@orcl
使表空間脫機
RMAN> sql 'alter tablespace users offline immediate';

還原表空間
RMAN> restore tablespace users;

恢復表空間
RMAN> recover tablespace users;

將表空間聯機
RMAN> sql 'alter tablespace users online';

8、恢復和復原全數據庫
模擬數據文件丟失或損壞
$ cd /database/oracle/oracle/oradata/orcl $ mv system01.dbf system01_bak.dbf
現在重新啟動實例會報錯

查看數據庫當前狀態
SQL> select status from v$instance;

登錄到rman
$ rman target=sys/oracle@orcl
還原數據庫
RMAN> restore database;


恢復數據庫
RMAN> recover database;


打開數據庫並登錄數據庫查看狀態
RMAN> alter database open; SQL> select status from v$instance;

此時數據文件已恢復了
9、某一個數據文件恢復
查看系統當前的數據文件
SQL> col file_name for a50 SQL> select file_id,file_name,status from dba_data_files;

查看文件狀態
SQL> select file#,status from v$datafile;

模擬刪除文件
$ mv sysaux01.dbf sysaux01_bak.dbf
將數據文件設置未offline狀態
SQL> alter database datafile 3 offline;

此時數據文件狀態未recover

現在來恢復數據文件
進入到rman
$ rman target=sys/oracle@orcl
還原和恢復數據文件
RMAN> restore datafile 3; RMAN> recover datafile 3;

將數據文件設置為online並查看狀態
SQL> alter database datafile 2 online; SQL> select file#,status form v$datafile;

7、增量備份數據庫及增量恢復
本節從一個例子來說明增量恢復,首先在數據庫表中插入一條數據

接着用rman做一次全量備份(設置的參數可參考上面的設置)
RMAN> backup incremental level 0 database;

然后對數據庫數據作更改,這里添加了一條數據

然后再做一次差異增量備份
RMAN> backup incremental level 1 database;

這里再添加一條數據

然后再進行一次備份
然后再做一次差異增量備份
RMAN> backup incremental level 1 database;
這里使用了scn的恢復方式
查看當前scn
SQL> select dbms_flashback.get_system_change_number from dual;

然后對數據進行刪除

還有一種常用的獲取到scn的方式就是執行下面語句,將刪除的時間轉換為scn
SQL> select timestamp_to_scn(to_timestamp('2011-08-03 10:00:00','YYYY-MM-DD HH:MI:SS')) from dual;
然后我們現在來進行恢復
關閉數據庫實例,然后開啟實例,單不打開數據庫
SQL> shutdown immediate;
SQL> startup mount;
還原數據到指定scn的位置
RMAN> restore database until scn 2092046;
恢復數據到指定scn的位置
RMAN> recover database until scn 2092046;
因為是不完全恢復(指定了某個位置),所以在打開數據庫的命令要加上resetlogs
SQL> alter database open resetlogs;
然后再看看數據庫,發現數據已經恢復了

如果需要基於時間點的恢復,可以參考一下(參考網上資料,沒實踐過)
SQL> ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'; SQL> shutdown immediate; SQL> startup mount; RMAN> restore database until time "to_date('2019-7-19 13:19:00','YYYY-MM-DD HH24:MI:SS')"; RMAN> recover database until time "to_date('2019-7-19 13:19:00','YYYY-MM-DD HH24:MI:SS')"; SQL> alter database open resetlogs;
基於日志序列的恢復(參考網上資料,沒實踐過):
SQL> shutdown immediate; SQL> startup mount; RMAN> restore database until SEQUENCE 100 thread 1; //100是日志序列 RMAN> recover database until SEQUENCE 100 thread 1; SQL> alter database open resetlogs;
日志序列查看命令:
SQL>select * from v$log;
其中有一個sequence字段.resetlogs就會把sequence 置為1
8、刪除備份文件
刪除無效備份。首先執行CROSSCHECK命令核對備份集,如果發現備份無效(比如備份對應的數據文件損壞或丟失),RMAN會將該備份集標記為 EXPIRED狀態。要刪除相應的備份記錄,可以執行DELETE EXPIRED BACKUP命令:
RMAN> DELETE EXPIRED BACKUP;
刪除EXPIRED副本,如下所示:
RMAN> DELETE EXPIRED COPY;
刪除特定備份集,如下所示:
RMAN> DELETE BACKUPSET 19;
刪除特定備份片,如下所示:
RMAN> DELETE BACKUPPIECE 'd:/backup/DEMO_19.bak';
刪除所有備份集,如下所示:
RMAN> DELETE BACKUP;
刪除特定映像副本,如下所示:
RMAN> DELETE DATAFILE COPY 'd:/backup/DEMO_19.bak';
刪除所有映像副本,如下所示:
RMAN> DELETE COPY;
2、冷備
冷備相對來說比較簡單,基本原來就是手動將日志文件、數據文件、控制文件復制到備份的目錄
基本步驟是:shutdown數據庫---> copy文件---> start數據庫
$ sqlplus sys/ as sysdba SQL> shutdown immediate; SQL> exit; $ cd /database/oracle/oracle/oradata/orcl //數據庫數據目錄 $ cp -p * /home/oracle/oracle_bak //復制所有文件及目錄到備份目錄下 $ sqlplus sys/ as sysdba SQL> startup;
說明:
*.dbf:數據文件
*.ctl:控制文件
*.log:日志文件
3、使用歸檔模式熱備
說明:歸檔模式熱備份的數據庫是必須在歸檔模式下的(有點廢話,但oracle默認安裝是在非歸檔模式下)
將數據庫轉換為歸檔模式(注意數據庫必須已裝載到此實例並且不在任何實例中打開):
$ sqlplus / as sysdba //登錄數據庫 SQL> shutdown immediate; SQL> startup mount;(startup nomount 啟動實例;startup mount 啟動實例加載數據庫; startup 啟動實例加載數據庫打開數據庫) SQL> alter database archivelog;
一些歸檔的相關操作記錄:
SQL> archive log list;--查看是否出於歸檔模式; SQL> select name from v$archived_log; --查詢歸檔日志 (10G之后) SQL> alter database archivelog; SQL> alter database noarchivelog; (10G之前) SQL> archive log stop; SQL> archive log start; SQL> alter system set log_archive_start =true scope =spfile; SQL> alter system set log_achive_start=false scope=spfile;
熱備的步驟如下:
SQL> shutdown immediate; SQL> startup mount; SQL> alter database archivelog; SQL> alter database open; SQL> alter tablespace users begin backup; --設置備份模式; $ cp -Rp oracle/ /home/oracle/oracle_bak/;--拷貝 SQL> alter tablespace users end backup ;--結束備份狀態 SQL> alter system switch logfile--切換日志,使用當前日志歸檔
四、數據庫日常備份計划及腳本參考
1、如果是使用RMAN
備份計划可參考:
1.星期天晚上:全備份
2.星期一晚上:增量備份
3.星期二晚上:增量備份
4.星期三晚上:累積備份
5.星期四晚上:增量備份
6.星期五晚上:增量備份
7.星期六晚上:增量備份
如果星期二需要恢復的話,只需要1+2
如果星期四需要恢復的話,只需要1+4
如果星期五需要恢復的話,只需要1+4+5
如果星期六需要恢復的話,只需要1+4+5+6
如果需要自動備份,可使用備份腳本+crontab的方式執行
執行腳本命令:
rman target / msglog=bakl0.log cmdfile=bakl0 (/表示需要連接的目標數據庫,msglog表示日志文件,cmdfile表示的是腳本文件) 如:rman target sys/oracle@orcl msglog=/home/oracle/oracle_bak/bakl1.log cmdfile=/home/oracle/oracle_bak
腳本內容為:
run{ allocate channel cha1 type disk; backup incremental level 0 format '/u01/rmanbak/inc0_%u_%T'(u表示唯一的ID,大T是日期,小t是時間) tag monday_inc0 //標簽可以順便起,沒關系 database; release channel cha1; }
改動以上的備份等級可弄出全量、增量、累積備份的腳本,然后使用crontab自動執行即可
2、如果是使用備份腳本
備份腳本內容如下:
#!/bin/sh export ORACLE_BASE=/data/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1 export ORACLE_SID=orcl export ORACLE_TERM=xterm export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib export LANG=C export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK #以上代碼為Oracle數據庫運行賬號oracle的系統環境變量設置,必須添加,否則crontab任務計划不能執行。 # oracle用戶的系統環境變量路徑:/home/oracle/.bash_profile date=date +%Y_%m_%d #獲取系統當前日期時間 days=7 #設置刪除7天之前的備份文件 orsid=192.168.0.198:1521/orcl #Oracle數據庫服務器IP、端口、SID orowner=OSYUNWEI #備份此用戶下面的數據 bakuser=OSYUNWEI #用此用戶來執行備份,必須要有備份操作的權限 bakpass=OSYUNWEI #執行備注的用戶密碼 bakdir=/backup/oracledata #備份文件路徑,需要提前創建好 bakdata=$orowner"_"$date.dmp #備份數據庫名稱 baklog=$orowner"_"$date.log #備份執行時候生成的日志文件名稱 ordatabak=$orowner"_"$date.tar.gz #最后保存的Oracle數據庫備份文件 cd $bakdir #進入備份目錄 mkdir -p $orowner #按需要備份的Oracle用戶創建目錄 cd $orowner #進入目錄 exp $bakuser/$bakpass@$orsid grants=y owner=$orowner file=$bakdir/$orowner/$bakdata log=$bakdir/$orowner/$baklog #執行備份 tar -zcvf $ordatabak $bakdata $baklog #壓縮備份文件和日志文件 find $bakdir/$orowner -type f -name "*.log" -exec rm {} \; #刪除備份文件 find $bakdir/$orowner -type f -name "*.dmp" -exec rm {} \; #刪除日志文件 find $bakdir/$orowner -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \; #刪除7天前的備份(注意:{} \中間有空格)
然后添加腳本執行權限:
chmod +x /backup/oracledata/ordatabak.sh #添加腳本執行權限
然后將腳本添加至crontab執行計划即可
參考資料:
邏輯備份:
https://www.cnblogs.com/promise-x/p/7477360.html(可作為expdp/impdp命令參考)
https://www.cnblogs.com/huacw/p/3888807.html
https://www.cnblogs.com/wishyouhappy/p/3700313.html
RMAN備份:
https://www.cnblogs.com/hllnj2008/p/4117792.html
https://www.cnblogs.com/wishyouhappy/p/3700313.html
https://blog.csdn.net/shudaqi2010/article/details/75300437
https://blog.csdn.net/weixin_41078837/article/details/80609077
https://blog.csdn.net/imliuqun123/article/details/79543378
備份腳本:
http://www.ttlsa.com/oracle/linux-auto-backup-oracle-database/
轉自
Oracle備份的幾種方式 - lclc - 博客園
https://www.cnblogs.com/lcword/p/11775657.html