1. 程式人生 > >oracle備份與恢復--rman

oracle備份與恢復--rman

(一)、建立恢復目錄
1、建立恢復目錄資料庫
#mkdir -p /u01/app/oracle/oradata/rmandb
#chown -R oracle /u01/app/oracle/oradata/rmandb
[[email protected] ~]#su - oracle
[[email protected] ~]$sqlplus / as sysdba
SQL> create tablespace rmant datafile '/u01/app/oracle/oradata/rmandb/rmants.ora' size 20M ;
表空間已建立。

2、在恢復目錄資料庫中建立RMAN 使用者並授權
SQL> create user c##rmant identified by rmant
default tablespace rmant
temporary tablespace temp
quota unlimited on rmant;
使用者已建立。
SQL> grant connect,resource to c##rmant;
授權成功。
SQL> grantrecovery_catalog_owner to c##rmant;
授權成功。

3、在恢復目錄資料庫中建立恢復目錄
[[email protected]~]$rman catalog c##rmant/rmant
恢復管理器: Release 12.2.0.1.0 - Production on 星期五 11月 16 19:59:31 2018
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
連線到恢復目錄資料庫
RMAN> create catalog;
恢復目錄已建立
RMAN> quit
恢復管理器完成。

(二)、註冊目標資料庫到恢復目錄br/>1、進入RMAN環境
[[email protected]

~]$rman
恢復管理器: Release 12.2.0.1.0 - Production on 星期五 11月 16 20:02:26 2018
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.

2、連線目標資料庫
RMAN> connect target sys/oracle;
已連線到目標資料庫: ORCL (DBID=1503444987)

3、連線恢復目錄資料庫
RMAN> connect catalog c##rmant/rmant;
連線到恢復目錄資料庫

4、註冊
RMAN> register database;
註冊在恢復目錄中的資料庫
正在啟動恢復目錄的全部重新同步
完成全部重新同步
RMAN> quit
恢復管理器完成。

5.在恢復目錄資料庫中檢視恢復目錄裡面註冊的資料庫
[[email protected]~]$sqlplus c##rmant/rmant
SQLPlus: Release 12.2.0.1.0 Production on 星期五 11月 16 20:05:20 2018
Copyright (c) 1982, 2016, Oracle. All rights reserved.
上次成功登入時間: 星期五 11月 16 2018 20:03:33 +08:00
連線到:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> select count(
) from rc_database;
COUNT(*)

 1

(三)、在歸檔模式下備份和恢復
1.將資料庫設定為歸檔模式,資料庫例項要處於啟動狀態,資料庫已經載入或開啟狀態
SQL> conn sys/oracle as sysdba;
已連線。
SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup mount;
ORACLE 例程已經啟動。

Total System Global Area 1593835520 bytes
Fixed Size 8793256 bytes
Variable Size 1023411032 bytes
Database Buffers 553648128 bytes
Redo Buffers 7983104 bytes
資料庫裝載完畢。
SQL> alter database archivelog;

資料庫已更改。

SQL> alter database open;

資料庫已更改。

2、首先修改快閃恢復區的引數
SQL> show parameter db_recovery_file_dest

NAME TYPE


VALUE

db_recovery_file_dest string

db_recovery_file_dest_size big integer
0
SQL> alter system setdb_recovery_file_dest_size=2g;

系統已更改。

3、建立一個表空間和表
SQL> create tablespace tab1
datafile '/u01/app/oracle/oradata/rmandb/tab1.dbf' size 10m;
表空間已建立。

4、建立表tab1
SQL> create table tab1(id int);
表已建立。

5、向表tab1中新增記錄
SQL> insert into tab1 values(1);
已建立 1 行。

SQL> commit;
提交完成。

SQL> quit
從 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 斷開

5、使用資料庫使用者sys登入RMAN
[[email protected]~]$rman target sys/oracle
恢復管理器: Release 12.2.0.1.0 - Production on 星期五 11月 16 20:15:04 2018
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
已連線到目標資料庫: ORCL (DBID=1503444987)

6、備份整個資料庫到快閃區
RMAN> backup database;
從位於 16-11月-18 的 backup 開始
使用目標資料庫控制檔案替代恢復目錄
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=31 裝置型別=DISK
通道 ORA_DISK_1: 正在啟動全部資料檔案備份集
通道 ORA_DISK_1: 正在指定備份集內的資料檔案
輸入資料檔案, 檔案號 = 00001 名稱 = /u01/app/oracle/oradata/orcl/system01.dbf
輸入資料檔案, 檔案號 = 00003 名稱 = /u01/app/oracle/oradata/orcl/sysaux01.dbf
輸入資料檔案, 檔案號 = 00004 名稱 = /u01/app/oracle/oradata/orcl/undotbs01.dbf
輸入資料檔案, 檔案號 = 00013 名稱 = /opt/oracle/oradata/rmandb/rmants.ora
輸入資料檔案, 檔案號 = 00014 名稱 = /u01/app/oracle/oradata/rmandb/rmants.ora
輸入資料檔案, 檔案號 = 00015 名稱 = /u01/app/oracle/oradata/rmandb/tab1.dbf
輸入資料檔案, 檔案號 = 00007 名稱 = /u01/app/oracle/oradata/orcl/users01.dbf
通道 ORA_DISK_1: 正於 16-11月-18 啟動段 1
通道 ORA_DISK_1: 完成了於 16-11月-18 啟動段 1
片段控制代碼 = /u01/app/oracle/product/12.2.0/dbhome_1/dbs/01ticu3n_1_1 標記 = TAG20181116T201551 註釋 = NONE
通道 ORA_DISK_1: 備份集完成, 用時: 00:00:55
通道 ORA_DISK_1: 正在啟動全部資料檔案備份集
通道 ORA_DISK_1: 正在指定備份集內的資料檔案
輸入資料檔案, 檔案號 = 00010 名稱 = /u01/app/oracle/oradata/orcl/orclpdb/sysaux01.dbf
輸入資料檔案, 檔案號 = 00009 名稱 = /u01/app/oracle/oradata/orcl/orclpdb/system01.dbf
輸入資料檔案, 檔案號 = 00011 名稱 = /u01/app/oracle/oradata/orcl/orclpdb/undotbs01.dbf
輸入資料檔案, 檔案號 = 00012 名稱 = /u01/app/oracle/oradata/orcl/orclpdb/users01.dbf
通道 ORA_DISK_1: 正於 16-11月-18 啟動段 1
通道 ORA_DISK_1: 完成了於 16-11月-18 啟動段 1
片段控制代碼 = /u01/app/oracle/product/12.2.0/dbhome_1/dbs/02ticu5f_1_1 標記 = TAG20181116T201551 註釋 = NONE
通道 ORA_DISK_1: 備份集完成, 用時: 00:00:25
通道 ORA_DISK_1: 正在啟動全部資料檔案備份集
通道 ORA_DISK_1: 正在指定備份集內的資料檔案
輸入資料檔案, 檔案號 = 00006 名稱 = /u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf
輸入資料檔案, 檔案號 = 00005 名稱 = /u01/app/oracle/oradata/orcl/pdbseed/system01.dbf
輸入資料檔案, 檔案號 = 00008 名稱 = /u01/app/oracle/oradata/orcl/pdbseed/undotbs01.dbf
通道 ORA_DISK_1: 正於 16-11月-18 啟動段 1

通道 ORA_DISK_1: 完成了於 16-11月-18 啟動段 1
片段控制代碼 = /u01/app/oracle/product/12.2.0/dbhome_1/dbs/03ticu68_1_1 標記 = TAG20181116T201551 註釋 = NONE
通道 ORA_DISK_1: 備份集完成, 用時: 00:00:26
在 16-11月-18 完成了 backup

從位於 16-11月-18 的 Control File and SPFILE Autobackup 開始
片段控制代碼 = /u01/app/oracle/product/12.2.0/dbhome_1/dbs/c-1503444987-20181116-00 註釋 = NONE
在 16-11月-18 完成了 Control File and SPFILE Autobackup
RMAN> quit
恢復管理器完成。

7、刪除tab1表
SQL> drop table tab1;(記住刪除時間)
Table TAB1已刪除。
SQL> commit;
提交完成。

8、恢復表
①在資料庫為mount狀態時恢復資料庫
SQL> shutdown immediate;
資料庫已關閉。
資料庫已卸裝。
ORACLE 例程關閉。
SQL> startup mount;
ORACLE 例項已啟動
Total System Global Area 1593835520 bytes
Fixed Size 8793256 bytes
Variable Size 1023411032 bytes
Database Buffers 553648128 bytes
Redo Buffers 7983104 bytes
資料庫已裝載。
SQL> quit
已從Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production斷開連線
[[email protected]~]$rman target sys/oracle;
恢復管理器: Release 12.2.0.1.0 - Production on 星期五 11月 16 20:23:39 2018
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
已連線到目標資料庫: ORCL (DBID=1503444987, 未開啟)
RMAN> restore database;
從位於 16-11月-18 的 restore 開始
使用目標資料庫控制檔案替代恢復目錄
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=257 裝置型別=DISK
正在跳過資料檔案 5; 已還原到檔案 /u01/app/oracle/oradata/orcl/pdbseed/system01.dbf
正在跳過資料檔案 6; 已還原到檔案 /u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf
正在跳過資料檔案 8; 已還原到檔案 /u01/app/oracle/oradata/orcl/pdbseed/undotbs01.dbf
正在跳過資料檔案 9; 已還原到檔案 /u01/app/oracle/oradata/orcl/orclpdb/system01.dbf
正在跳過資料檔案 10; 已還原到檔案 /u01/app/oracle/oradata/orcl/orclpdb/sysaux01.dbf
正在跳過資料檔案 11; 已還原到檔案 /u01/app/oracle/oradata/orcl/orclpdb/undotbs01.dbf
正在跳過資料檔案 12; 已還原到檔案 /u01/app/oracle/oradata/orcl/orclpdb/users01.dbf
通道 ORA_DISK_1: 正在開始還原資料檔案備份集
通道 ORA_DISK_1: 正在指定從備份集還原的資料檔案
通道 ORA_DISK_1: 將資料檔案 00001 還原到 /u01/app/oracle/oradata/orcl/system01.dbf
通道 ORA_DISK_1: 將資料檔案 00003 還原到 /u01/app/oracle/oradata/orcl/sysaux01.dbf
通道 ORA_DISK_1: 將資料檔案 00004 還原到 /u01/app/oracle/oradata/orcl/undotbs01.dbf
通道 ORA_DISK_1: 將資料檔案 00007 還原到 /u01/app/oracle/oradata/orcl/users01.dbf
通道 ORA_DISK_1: 將資料檔案 00013 還原到 /opt/oracle/oradata/rmandb/rmants.ora
通道 ORA_DISK_1: 將資料檔案 00014 還原到 /u01/app/oracle/oradata/rmandb/rmants.ora
通道 ORA_DISK_1: 將資料檔案 00015 還原到 /u01/app/oracle/oradata/rmandb/tab1.dbf
通道 ORA_DISK_1: 正在讀取備份片段 /u01/app/oracle/product/12.2.0/dbhome_1/dbs/01ticu3n_1_1
通道 ORA_DISK_1: 片段控制代碼 = /u01/app/oracle/product/12.2.0/dbhome_1/dbs/01ticu3n_1_1 標記 = TAG20181116T201551
通道 ORA_DISK_1: 已還原備份片段 1
通道 ORA_DISK_1: 還原完成, 用時: 00:01:16
在 16-11月-18 完成了 restore

RMAN> recover database until time "to_date('2018-11-16 20:20:00','yy-mm-dd hh24:mi:ss')";
從位於 16-11月-18 的 recover 開始
使用通道 ORA_DISK_1
正在開始介質的恢復
介質恢復完成, 用時: 00:00:01
在 16-11月-18 完成了 recover

RMAN> alter database open resetlogs;
已處理語句
RMAN> quit
恢復管理器完成。
[[email protected]~]$sqlplus sys/oracle as sysdba
SQLPlus: Release 12.2.0.1.0 Production on 星期五 11月 16 20:29:53 2018
Copyright (c) 1982, 2016, Oracle. All rights reserved.
連線到:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> select
from tab1;
ID

 1

9、恢復表空間
說明:如果只丟失了特定表空間中的資料檔案,那麼可以選擇只恢復這個表空間,而不是恢復整個資料庫,表空間可以在不關閉資料庫的情況下進行,只需要將表空間offline
Sql>create tablespace tab2
Datafile‘/u01/app/oracle/oradata/rmandb/tab2.dbf’ size 10m;
sql>quit;
$rman target sys/oracl
rman>backup tablespace tab2;
rman>quit
$mv/u01/app/oracle/oradata/rmandb/tab2.dbf /u01/app/oracle/oradata/rmandb/tab2.dbf.bak(模擬表空間資料檔案丟失)
$rman target sys/oracle
rman>run{
sql 'alter tablespace tab2 offline immediate';
restore tablespace tab2;
recover tablespace tab2;
sql 'alter tablespace tab2 online';
}
rman>quit
$ls /opt/oracle/oradata/rmandb/(觀察其下tab2.dbf是不是出現了)

10、資料檔案備份與恢復
①檢視當前資料庫的所有資料檔案
sql>col file_name for a55
sql>set line 100
Sql>select file_id,file_name,tablespace_name from dba_data_files;(記下資料檔案的id)

②備份資料檔案
sql>quit;
$rman target sys/oracle11g
rman>backup datafile 6;

③模擬刪除資料檔案tab6.dbf
rman>quit
$mv /u01/app/oracle/oradata/rmandb/tab6.dbf /u01/app/oracle/oradata/rmandb/tab6.bak1
$rman target sys/oracle
rman>run{
allocate channel dev1 type disk;
sql 'alter tablespace tab2 offline immediate';
restore datafile 6;
recover datafile 6;
sql 'alter tablespace tab6 online';
release channel dev1;
}
rman>quit
$ls /opt/oracle/oradata/rmandb/(觀察其下tab2.dbf是不是出現了)