利用Oracle種子恢復數據庫(1)

利用Oracle種子恢復數據庫(1)

Oracle提供了一個種子數據庫的備份,存放在ORACLE_HOME目錄下。包含的文件如下:

[oracle@wgx templates]$ ll
total 285308
-rw-r--r-- 1 oracle oinstall      5106 Aug 15  2009 Data_Warehouse.dbc
-rwxr-xr-x 1 oracle oinstall  22544384 Aug 15  2009 example01.dfb
-rwxr-xr-x 1 oracle oinstall   1179648 Aug 15  2009 example.dmp
-rw-r--r-- 1 oracle oinstall      4986 Aug 15  2009 General_Purpose.dbc
-rw-r--r-- 1 oracle oinstall     11492 Feb 25  2009 New_Database.dbt
-rwxr-xr-x 1 oracle oinstall   9748480 Aug 15  2009 Seed_Database.ctl
-rwxr-xr-x 1 oracle oinstall 258654208 Aug 15  2009 Seed_Database.dfb

說明:
(1)Seed_Database.ctl:數據庫的控制文件;
(2)Seed_Database.dfb:是全庫備份的備份文件;
(3)example.dmp:example表空間導出的元數據;
(4)example01.dfb:example表空間的備份文件。

可以利用控制文件和全庫備份文件恢復數據庫,然後利用傳輸表空間導入example表空間,具體步驟如下:

step 1:創建參數文件

利用其它數據庫的參數文件(pfile)進行修改得到。

(1)打開orcl數據庫,生成pfile文件

SQL> show parameter name

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert		 string
db_name 			         string	 orcl
db_unique_name			     string	 orcl
global_names			     boolean FALSE
instance_name			     string	 orcl
lock_name_space 		     string
log_file_name_convert		 string
service_names			     string	 orcl

SQL> create pfile from spfile;

File created.

(2)對pfile文件進行修改

利用vim initorcl.ora命令打開參數文件:

[oracle@wgx dbs]$ vim initorcl.ora

orcl.__db_cache_size=759169024
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__oracle_base='/usr/local/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=499122176
orcl.__sga_target=1073741824
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=285212672
orcl.__streams_pool_size=8388608
*.audit_file_dest='/usr/local/oracle/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/usr/local/oradata/orcl/control01.ctl','/usr/local/oracle/flash_recovery_area/orcl/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='/usr/local/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=4070572032
*.diagnostic_dest='/usr/local/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.open_cursors=300
*.pga_aggregate_target=499122176
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=1073741824
*.undo_tablespace='UNDOTBS1'

對pfile文件進行修改:
(1)db_name:數據庫名稱,修改爲:seeddata;
(2)audit_file_dest:審計文件的路徑,修改爲:/usr/local/oracle/admin/seeddata/adump;
(3)control_files:控制文件,修改爲:’/usr/local/oradata/seeddata/control01.ctl’, ‘/usr/local/oracle/flash_recovery_area/seeddata/control02.ctl’。
結果如下:

orcl.__db_cache_size=759169024
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__oracle_base='/usr/local/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=499122176
orcl.__sga_target=1073741824
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=285212672
orcl.__streams_pool_size=8388608
*.audit_file_dest='/usr/local/oracle/admin/seeddata/adump'  #####修改
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/usr/local/oradata/seeddata/control01.ctl','/usr/local/oracle/flash_recovery_area/seeddata/control02.ctl'  ####修改
*.db_block_size=8192
*.db_domain=''
*.db_name='seeddata'  ####修改
*.db_recovery_file_dest='/usr/local/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=4070572032
*.diagnostic_dest='/usr/local/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.open_cursors=300
*.pga_aggregate_target=499122176
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=1073741824
*.undo_tablespace='UNDOTBS1'

step 2:修改參數文件的名稱,創建相關的目錄

(1)把參數文件initorcl.ora修改爲initseeddata.ora

[oracle@wgx dbs]$ mv initorcl.ora initseeddata.ora
[oracle@wgx dbs]$ ls
hc_DBUA0.dat  hc_orcl.dat  init.ora  initseeddata.ora  lkORCL  orapworcl  spfileorcl.ora

(2)創建目錄

這類分區是在列值上使用散列算法,以確定將行放入哪個分區中。當列的值沒有合適的條件時,可以使用hash分區。創建hash分區的語法格式以下:

#### 創建存放審計文件的目錄
[oracle@wgx templates]$ mkdir -p /usr/local/oracle/admin/seeddata/adump

#### 創建存放控制文件、數據文件、日誌文件的目錄
[oracle@wgx templates]$ mkdir -p /usr/local/oradata/seeddata/
[oracle@wgx templates]$ mkdir /usr/local/oracle/flash_recovery_area/seeddata

step 3:修改環境變量ORACLE_SID

[oracle@wgx ~]$ vim .bash_profile

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH


export ORACLE_BASE=/usr/local/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=seeddata  ##修改
export ORACLE_OWNER=oracle
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin

alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
alias lsnrctl='rlwrap lsnrctl'


[oracle@wgx ~]$ source .bash_profile   ##使環境變量生效

step 4:啓動數據庫到nomount

此時啓動數據庫使用的pfile參數文件。

SQL> startup nomount
ORACLE instance started.

Total System Global Area 1068937216 bytes
Fixed Size		    2220200 bytes
Variable Size		  281022296 bytes
Database Buffers	  780140544 bytes
Redo Buffers		    5554176 bytes
SQL> show parameter name

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert		 string
db_name 			         string	 seeddata
db_unique_name			     string	 seeddata
global_names			     boolean FALSE
instance_name			     string	 seeddata
lock_name_space 		     string
log_file_name_convert		 string
service_names			     string	 seeddata

step 5:生成spfile文件

SQL> create spfile from pfile;

File created.

step 5:重新啓動數據庫到nomount

此時啓動數據庫所使用的參數文件是spfile。

SQL> startup nomount
ORACLE instance started.

Total System Global Area 1068937216 bytes
Fixed Size		    2220200 bytes
Variable Size		  281022296 bytes
Database Buffers	  780140544 bytes
Redo Buffers		    5554176 bytes
SQL> show parameter name

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert	     string
db_name 			         string	 seeddata
db_unique_name			     string	 seeddata
global_names			     boolean FALSE
instance_name			     string	 seeddata
lock_name_space 		     string
log_file_name_convert	     string
service_names			     string	 seeddata

step 6:還原控制文件

根據參數文件,需要生成兩個控制文件:/usr/local/oradata/seeddata/control01.ctl和 /usr/local/oracle/flash_recovery_area/seeddata/control02.ctl

[oracle@wgx templates]$ pwd
/usr/local/oracle/product/11.2.0/db_1/assistants/dbca/templates

[oracle@wgx templates]$ cp Seed_Database.ctl /usr/local/oradata/seeddata/control01.ctl

[oracle@wgx templates]$ cp Seed_Database.ctl /usr/local/oracle/flash_recovery_area/seeddata/control02.ctl

step 7:啓動數據庫到mount

查看文件信息:

SQL> alter database mount;
Database altered.

SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/ade/b/2125410156/oracle/oradata/seeddata/system01.dbf
/ade/b/2125410156/oracle/oradata/seeddata/sysaux01.dbf
/ade/b/2125410156/oracle/oradata/seeddata/undotbs01.dbf
/ade/b/2125410156/oracle/oradata/seeddata/users01.dbf

SQL> select name from v$tempfile;
NAME
--------------------------------------------------------------------------------
/ade/b/2125410156/oracle/oradata/seeddata/temp01.dbf


SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
/ade/b/2125410156/oracle/oradata/seeddata/redo01.log
/ade/b/2125410156/oracle/oradata/seeddata/redo02.log
/ade/b/2125410156/oracle/oradata/seeddata/redo03.log

step 8:修改日誌文件的位置信息

SQL> alter database rename file '/ade/b/2125410156/oracle/oradata/seeddata/redo01.log' to '/usr/local/oradata/seeddata/redo01.log';
Database altered.

SQL> alter database rename file '/ade/b/2125410156/oracle/oradata/seeddata/redo02.log' to '/usr/local/oradata/seeddata/redo02.log';
Database altered.

SQL> alter database rename file '/ade/b/2125410156/oracle/oradata/seeddata/redo03.log' to '/usr/local/oradata/seeddata/redo03.log';
Database altered.

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
/usr/local/oradata/seeddata/redo01.log
/usr/local/oradata/seeddata/redo02.log
/usr/local/oradata/seeddata/redo03.log

step 9:在RMAN中註冊數據庫的備份信息

RMAN> catalog start with '/usr/local/oracle/product/11.2.0/db_1/assistants/dbca/templates/Seed_Database.dfb';

Starting implicit crosscheck backup at 11-APR-20
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=20 device type=DISK
Crosschecked 1 objects
Finished implicit crosscheck backup at 11-APR-20

Starting implicit crosscheck copy at 11-APR-20
using channel ORA_DISK_1
Finished implicit crosscheck copy at 11-APR-20

searching for all files in the recovery area
cataloging files...
no files cataloged

searching for all files that match the pattern /usr/local/oracle/product/11.2.0/db_1/assistants/dbca/templates/Seed_Database.dfb

List of Files Unknown to the Database
=====================================
File Name: /usr/local/oracle/product/11.2.0/db_1/assistants/dbca/templates/Seed_Database.dfb

Do you really want to catalog the above files (enter YES or NO)? yes
cataloging files...
cataloging done

List of Cataloged Files
=======================
File Name: /usr/local/oracle/product/11.2.0/db_1/assistants/dbca/templates/Seed_Database.dfb

step 10:查看備份集信息

RMAN> list backup of database;


List of Backup Sets
===================


BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
1       Full    246.66M    DISK        00:00:53     15-AUG-09      
        BP Key: 2   Status: AVAILABLE  Compressed: YES  Tag: 
        Piece Name: /usr/local/oracle/product/11.2.0/db_1/assistants/dbca/templates/Seed_Database.dfb
  List of Datafiles in backup set 1
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  1       Full 945183     15-AUG-09 /ade/b/2125410156/oracle/oradata/seeddata/system01.dbf
  2       Full 945183     15-AUG-09 /ade/b/2125410156/oracle/oradata/seeddata/sysaux01.dbf
  3       Full 945183     15-AUG-09 /ade/b/2125410156/oracle/oradata/seeddata/undotbs01.dbf
  4       Full 945183     15-AUG-09 /ade/b/2125410156/oracle/oradata/seeddata/users01.dbf

step 11:恢復數據庫

在RMAN中查看數據庫信息:

RMAN> report schema;

RMAN-06139: WARNING: control file is not current for REPORT SCHEMA
Report of database schema for database with db_unique_name SEEDDATA

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    0        SYSTEM               ***     /ade/b/2125410156/oracle/oradata/seeddata/system01.dbf
2    0        SYSAUX               ***     /ade/b/2125410156/oracle/oradata/seeddata/sysaux01.dbf
3    0        UNDOTBS1             ***     /ade/b/2125410156/oracle/oradata/seeddata/undotbs01.dbf
4    0        USERS                ***     /ade/b/2125410156/oracle/oradata/seeddata/users01.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    0        TEMP                 32767       /ade/b/2125410156/oracle/oradata/seeddata/temp01.dbf

編寫以下的RMAN語句塊並執行:

run {
    set newname for datafile 1 to '/usr/local/oradata/seeddata/system01.dbf';
    set newname for datafile 2 to '/usr/local/oradata/seeddata/sysaux01.dbf';
    set newname for datafile 3 to '/usr/local/oradata/seeddata/undotbs01.dbf';
    set newname for datafile 4 to '/usr/local/oradata/seeddata/users01.dbf';
    set newname for tempfile 1 to '/usr/local/oradata/seeddata/temp01.dbf';
    restore database;
    switch datafile all;
    switch tempfile all;
    recover database;
11> }

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting restore at 12-APR-20
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=20 device type=DISK

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to /usr/local/oradata/seeddata/system01.dbf
channel ORA_DISK_1: restoring datafile 00002 to /usr/local/oradata/seeddata/sysaux01.dbf
channel ORA_DISK_1: restoring datafile 00003 to /usr/local/oradata/seeddata/undotbs01.dbf
channel ORA_DISK_1: restoring datafile 00004 to /usr/local/oradata/seeddata/users01.dbf
channel ORA_DISK_1: reading from backup piece /usr/local/oracle/product/11.2.0/db_1/assistants/dbca/templates/Seed_Database.dfb
channel ORA_DISK_1: piece handle=/usr/local/oracle/product/11.2.0/db_1/assistants/dbca/templates/Seed_Database.dfb tag=NULL
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:55
Finished restore at 12-APR-20


renamed tempfile 1 to /usr/local/oradata/seeddata/temp01.dbf in control file

Starting recover at 12-APR-20
using channel ORA_DISK_1

starting media recovery

archived log for thread 1 with sequence 1 is already on disk as file /usr/local/oradata/seeddata/redo01.log
archived log file name=/usr/local/oradata/seeddata/redo01.log thread=1 sequence=1
media recovery complete, elapsed time: 00:00:00
Finished recover at 12-APR-20

step 12:打開數據庫

以resetlogs方式打開數據庫:

RMAN> alter database open resetlogs;

database opened

step 13:查看錶空間、數據文件、臨時文件信息

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/usr/local/oradata/seeddata/system01.dbf
/usr/local/oradata/seeddata/sysaux01.dbf
/usr/local/oradata/seeddata/undotbs01.dbf
/usr/local/oradata/seeddata/users01.dbf

SQL> select name from v$tempfile;

NAME
--------------------------------------------------------------------------------
/usr/local/oradata/seeddata/temp01.dbf

SQL> select name from v$tablespace;

NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章