Oracle數據庫備份與恢復
一、使用RMAN工具
1、創建恢復目錄
1、創建表空間
[root@oracle ~]# mkdir -p /u01/app/oracle/oradata/rmandb
[root@oracle ~]# chown -R oracle /u01/app/oracle/oradata/rmandb/
[root@oracle ~]# su - oracle
Last login: Wed Jul 31 18:45:40 CST 2019 on pts/0
[oracle@oracle ~]$ sqlplus / as sysdba
SQL> startup
SQL> create tablespace rmants datafile '/u01/app/oracle/oradata/rmandb/rmants.dbf' size 20M;
表空間已創建。
2、在恢復目錄數據庫中創建RMAN用戶並授權
SQL> create user c##rman identified by rman
2 default tablespace rmants
3 temporary tablespace temp
4 quota unlimited on rmants;
用戶已創建。
SQL> grant connect,resource to c##rman;
授權成功。
SQL> grant recovery_catalog_owner to c##rman;
授權成功。
SQL> exit
從 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 斷開
3、在恢復目錄數據庫中創建恢復目錄
[oracle@oracle ~]$ rman catalog c##rman/rman
RMAN> create catalog tablespace rmants;
恢復目錄已創建
RMAN> exit
恢復管理器完成。
2、註冊目標數據庫到恢復目錄
[oracle@oracle ~]$ rman target sys/orcle;
RMAN> connect catalog c##rman/rman
連接到恢復目錄數據庫
RMAN> register database;
註冊在恢復目錄中的數據庫
正在啓動恢復目錄的全部重新同步
完成全部重新同步
RMAN> exit
恢復管理器完成。
3、備份與恢復
1、在歸檔方式下備份與恢復
將數據庫設置爲歸檔模式,數據庫實例要處於啓動狀態,數據庫已經加載或打開狀態
[oracle@oracle ~]$ sqlplus c##rman/rman
SQL> select count(*) from rc_database;
COUNT(*)
----------
1
SQL> conn sys/oracle as sysdba;
已連接。
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
數據庫已更改。
SQL> alter database open;
數據庫已更改。
修改快閃恢復區的參數
SQL> set line 120
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 set db_recovery_file_dest_size=2g;
系統已更改。
創建一個表空間和表
SQL> create tablespace tab1
2 datafile '/u01/app/oracle/oradata/rmandb/tab1.dbf' size 10m;
表空間已創建。
創建表tab1
SQL> create table tab1 (id int);
表已創建。
向表tab1中添加記錄
SQL> insert into tab1 values(1);
已創建 1 行。
SQL> commit;
提交完成。
SQL> exit
使用數據庫用戶sys登錄RMAN
[oracle@oracle ~]$ rman target sys/oracle
RMAN> backup database;
從位於 20-5月 -20 的 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 名稱 = /u01/app/oracle/oradata/rmandb/rmants.dbf
輸入數據文件, 文件號 = 00014 名稱 = /u01/app/oracle/oradata/rmandb/tab1.dbf
輸入數據文件, 文件號 = 00007 名稱 = /u01/app/oracle/oradata/orcl/users01.dbf
通道 ORA_DISK_1: 正於 20-5月 -20 啓動段 1
通道 ORA_DISK_1: 完成了於 20-5月 -20 啓動段 1
片段句柄 = /u01/app/oracle/product/12.2.0/dbhome_1/dbs/01v0m71d_1_1 標記 = TAG20200520T151141 註釋 = NONE
通道 ORA_DISK_1: 備份集完成, 用時: 00:00:15
通道 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: 正於 20-5月 -20 啓動段 1
通道 ORA_DISK_1: 完成了於 20-5月 -20 啓動段 1
片段句柄 = /u01/app/oracle/product/12.2.0/dbhome_1/dbs/02v0m71s_1_1 標記 = TAG20200520T151141 註釋 = NONE
通道 ORA_DISK_1: 備份集完成, 用時: 00:00:03
通道 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: 正於 20-5月 -20 啓動段 1
通道 ORA_DISK_1: 完成了於 20-5月 -20 啓動段 1
片段句柄 = /u01/app/oracle/product/12.2.0/dbhome_1/dbs/03v0m71v_1_1 標記 = TAG20200520T151141 註釋 = NONE
通道 ORA_DISK_1: 備份集完成, 用時: 00:00:07
在 20-5月 -20 完成了 backup
從位於 20-5月 -20 的 Control File and SPFILE Autobackup 開始
片段句柄 = /u01/app/oracle/product/12.2.0/dbhome_1/dbs/c-1503444987-20200520-00 註釋 = NONE
在 20-5月 -20 完成了 Control File and SPFILE Autobackup
RMAN> select systimestamp from dual;
SYSTIMESTAMP
-------------------------------------
20-5月 -20 03.12.31.337814 下午 +0
RMAN> exit
恢復管理器完成。
刪除tab1表
[oracle@oracle ~]$ sqlplus sys/oracle as sysdba
SQL> drop table tab1;
表已刪除。
SQL> commit;
提交完成。
恢復表
SQL> shutdown immediate;
SQL> startup mount
SQL> exit;
[oracle@oracle ~]$ rman target sys/oracle
RMAN> restore database;
從位於 20-5月 -20 的 restore 開始
使用目標數據庫控制文件替代恢復目錄
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=253 設備類型=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 還原到 /u01/app/oracle/oradata/rmandb/rmants.dbf
通道 ORA_DISK_1: 將數據文件 00014 還原到 /u01/app/oracle/oradata/rmandb/tab1.dbf
通道 ORA_DISK_1: 正在讀取備份片段 /u01/app/oracle/product/12.2.0/dbhome_1/dbs/01v0m71d_1_1
通道 ORA_DISK_1: 片段句柄 = /u01/app/oracle/product/12.2.0/dbhome_1/dbs/01v0m71d_1_1 標記 = TAG20200520T151141
通道 ORA_DISK_1: 已還原備份片段 1
通道 ORA_DISK_1: 還原完成, 用時: 00:00:07
在 20-5月 -20 完成了 restore
RMAN> recover database until time "to_date('2020-05-20 15:12:31','yyyy-mm-dd hh24:mi:ss')";
從位於 20-5月 -20 的 recover 開始
使用通道 ORA_DISK_1
正在開始介質的恢復
介質恢復完成, 用時: 00:00:00
在 20-5月 -20 完成了 recover
RMAN> alter database open resetlogs;
已處理語句
RMAN> select * from tab1;
ID
----------
1
RMAN> exit
恢復管理器完成。
2、恢復表空間
[oracle@oracle ~]$ sqlplus / as sysdba
SQL> create tablespace tab2
2 Datafile '/u01/app/oracle/oradata/rmandb/tab2.dbf' size 10m;
表空間已創建。
SQL> quit
[oracle@oracle ~]$ rman target sys/oracle
RMAN> backup tablespace tab2;
從位於 20-5月 -20 的 backup 開始
使用目標數據庫控制文件替代恢復目錄
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=31 設備類型=DISK
通道 ORA_DISK_1: 正在啓動全部數據文件備份集
通道 ORA_DISK_1: 正在指定備份集內的數據文件
輸入數據文件, 文件號 = 00015 名稱 = /u01/app/oracle/oradata/rmandb/tab2.dbf
通道 ORA_DISK_1: 正於 20-5月 -20 啓動段 1
通道 ORA_DISK_1: 完成了於 20-5月 -20 啓動段 1
片段句柄 = /u01/app/oracle/product/12.2.0/dbhome_1/dbs/06v0m815_1_1 標記 = TAG20200520T152837 註釋 = NONE
通道 ORA_DISK_1: 備份集完成, 用時: 00:00:01
在 20-5月 -20 完成了 backup
從位於 20-5月 -20 的 Control File and SPFILE Autobackup 開始
片段句柄 = /u01/app/oracle/product/12.2.0/dbhome_1/dbs/c-1503444987-20200520-02 註釋 = NONE
在 20-5月 -20 完成了 Control File and SPFILE Autobackup
RMAN> quit
恢復管理器完成。
[oracle@oracle ~]$ mv /u01/app/oracle/oradata/rmandb/tab2.dbf /u01/app/oracle/oradata/rmandb/tab2.dbf.bak
[oracle@oracle ~]$ rman target sys/oracle11g
RMAN> run{
2> sql 'alter tablespace tab2 offline immediate';
3> restore tablespace tab2;
4> recover tablespace tab2;
5> sql 'alter tablespace tab2 online';
6> }
使用目標數據庫控制文件替代恢復目錄
sql 語句: alter tablespace tab2 offline immediate
從位於 20-5月 -20 的 restore 開始
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=33 設備類型=DISK
通道 ORA_DISK_1: 正在開始還原數據文件備份集
通道 ORA_DISK_1: 正在指定從備份集還原的數據文件
通道 ORA_DISK_1: 將數據文件 00015 還原到 /u01/app/oracle/oradata/rmandb/tab2.dbf
通道 ORA_DISK_1: 正在讀取備份片段 /u01/app/oracle/product/12.2.0/dbhome_1/dbs/06v0m815_1_1
通道 ORA_DISK_1: 片段句柄 = /u01/app/oracle/product/12.2.0/dbhome_1/dbs/06v0m815_1_1 標記 = TAG20200520T152837
通道 ORA_DISK_1: 已還原備份片段 1
通道 ORA_DISK_1: 還原完成, 用時: 00:00:01
在 20-5月 -20 完成了 restore
從位於 20-5月 -20 的 recover 開始
使用通道 ORA_DISK_1
正在開始介質的恢復
介質恢復完成, 用時: 00:00:00
在 20-5月 -20 完成了 recover
sql 語句: alter tablespace tab2 online
RMAN> exit
恢復管理器完成。
[oracle@oracle ~]$ ls /u01/app/oracle/oradata/rmandb/
rmants.dbf tab1.dbf tab2.dbf tab2.dbf.bak
3、數據文件備份與恢復
[oracle@oracle ~]$ sqlplus / as sysdba
SQL> col file_name for a50;
SQL> col file_id for 99999;
SQL> set line 100
SQL> col TABLESPACE_NAME for a10;
SQL> select file_id,file_name,tablespace_name from dba_data_files;
FILE_ID FILE_NAME TABLESPACE_NAME
------- -------------------------------------------------- ------------------------------
1 /u01/app/oracle/oradata/orcl/system01.dbf SYSTEM
3 /u01/app/oracle/oradata/orcl/sysaux01.dbf SYSAUX
4 /u01/app/oracle/oradata/orcl/undotbs01.dbf UNDOTBS1
7 /u01/app/oracle/oradata/orcl/users01.dbf USERS
13 /u01/app/oracle/oradata/rmandb/rmants.dbf RMANTS
14 /u01/app/oracle/oradata/rmandb/tab1.dbf TAB1
15 /u01/app/oracle/oradata/rmandb/tab2.dbf TAB2
已選擇 7 行。
SQL> quit
[oracle@oracle ~]$ rman target sys/oracle
RMAN> backup datafile 15;
從位於 20-5月 -20 的 backup 開始
使用目標數據庫控制文件替代恢復目錄
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=19 設備類型=DISK
通道 ORA_DISK_1: 正在啓動全部數據文件備份集
通道 ORA_DISK_1: 正在指定備份集內的數據文件
輸入數據文件, 文件號 = 00015 名稱 = /u01/app/oracle/oradata/rmandb/tab2.dbf
通道 ORA_DISK_1: 正於 20-5月 -20 啓動段 1
通道 ORA_DISK_1: 完成了於 20-5月 -20 啓動段 1
片段句柄 = /u01/app/oracle/product/12.2.0/dbhome_1/dbs/09v0m8n9_1_1 標記 = TAG20200520T154025 註釋 = NONE
通道 ORA_DISK_1: 備份集完成, 用時: 00:00:01
在 20-5月 -20 完成了 backup
從位於 20-5月 -20 的 Control File and SPFILE Autobackup 開始
片段句柄 = /u01/app/oracle/product/12.2.0/dbhome_1/dbs/c-1503444987-20200520-04 註釋 = NONE
在 20-5月 -20 完成了 Control File and SPFILE Autobackup
RMAN> quit
恢復管理器完成。
[oracle@oracle ~]$ mv /u01/app/oracle/oradata/rmandb/tab2.dbf /u01/app/oracle/oradata/rmandb/tab2.dbf.bak1
[oracle@oracle ~]$ rman target sys/oracle
RMAN> run{
2> allocate channel dev1 type disk;
3> sql 'alter tablespace tab2 offline immediate';
4> restore datafile 15;
5> recover datafile 15;
6> sql 'alter tablespace tab2 online';
7> release channel dev1;
8> }
使用目標數據庫控制文件替代恢復目錄
分配的通道: dev1
通道 dev1: SID=31 設備類型=DISK
sql 語句: alter tablespace tab2 offline immediate
從位於 20-5月 -20 的 restore 開始
通道 dev1: 正在開始還原數據文件備份集
通道 dev1: 正在指定從備份集還原的數據文件
通道 dev1: 將數據文件 00015 還原到 /u01/app/oracle/oradata/rmandb/tab2.dbf
通道 dev1: 正在讀取備份片段 /u01/app/oracle/product/12.2.0/dbhome_1/dbs/09v0m8n9_1_1
通道 dev1: 片段句柄 = /u01/app/oracle/product/12.2.0/dbhome_1/dbs/09v0m8n9_1_1 標記 = TAG20200520T154025
通道 dev1: 已還原備份片段 1
通道 dev1: 還原完成, 用時: 00:00:01
在 20-5月 -20 完成了 restore
從位於 20-5月 -20 的 recover 開始
正在開始介質的恢復
介質恢復完成, 用時: 00:00:00
在 20-5月 -20 完成了 recover
sql 語句: alter tablespace tab2 online
釋放的通道: dev1
RMAN> quit
恢復管理器完成。
[oracle@oracle ~]$ ls /u01/app/oracle/oradata/rmandb/
rmants.dbf tab1.dbf tab2.dbf tab2.dbf.bak tab2.dbf.bak1