复用Oracle数据文件,Oracle控制文件的备份、恢复以及多路复用
前言
今天給大家帶來有關Oracle控制文件的技術分享。不積跬步無以至千里,不積小流無以成江海。Oracle技術博大精深,以我一個人的力量,那無異于蜉蝣于天地,滄海之一粟。在此,筆者拋磚引玉,希望讀者能夠與我形成良好的互動,之間共同進步。閑言少敘,書歸正傳,馬上開始今天的討論話題。
Oracle 備份恢復概念? http://www.linuxidc.com/Linux/2011-03/33048.htm
一、控制文件概要描述
既然今天的主題是控制文件,那么首先我先帶大家來簡要回顧一下控制文件的相關知識點。控制文件在默認情況下,一般和數據文件以及日志文件等位于同一個目錄(當然,不放在這里也是沒有問題的……看個人喜好),具體查看的sql語句是:
SYS@ENMOEDU > select name from v$controlfile;
NAME
------------------------------
/u01/app/oracle/oradata/ENMOEDU/control01.ctl
/u01/app/oracle/fast_recovery_area/ENMOEDU/control02.ctl
從這里就已經清晰的看到我控制文件的路徑以及名稱了,還有,細心的讀者應該發現了,我是一個很小心謹慎的人,所以呢,我的控制文件是兩份。這樣做的好處是,萬一我其中的一個控制文件被誤刪了或者損壞了,我還有另外一個控制文件保證我數據庫的正常運行以及啟動(不小心把多路復用技術給提前引入了……稍后會有更詳細的配置以及解析)。
控制文件的作用我想就毋庸贅言了吧?上至九十老嫗,下到五歲孩童,對于控制文件的重要性都能如數家珍般的娓娓道來。控制文件中有數據庫以及在線重做日志的位置以及眾多重要的信息,丟失或者損壞控制文件,數據庫將無法正常啟動和運行。既然控制文件這么重要,那么我們該怎么對它進行備份和恢復呢?
二、控制文件的備份與恢復
(1)基于用戶管理的備份和恢復
首先進入Oracle的trace目錄
[oracle@ENMOEDU trace]$ cd /u01/app/oracle/diag/rdbms/enmoedu/ENMOEDU/trace
用tail命令來打開alert_ENMOEDU.log文件
[oracle@ENMOEDU trace]$ tail -100f alert_ENMOEDU.log
此時打開另一窗口,執行如下命令
SYS@ENMOEDU > alter database backup controlfile to trace;
Database altered.
我們可以在alert.ENMOEDU.log看到如下信息
Mon Mar 10 15:22:20 2014
alter database backup controlfile to trace
Backup controlfile written to trace file /u01/app/oracle/diag/rdbms/enmoedu/ENMOEDU/trace/ENMOEDU_ora_18205.trc
Completed: alter database backup controlfile to trace
根據上述信息,我們去查看提示的文件
[oracle@ENMOEDU ~]$ cat /u01/app/oracle/diag/rdbms/enmoedu/ENMOEDU/trace/ENMOEDU_ora_18205.trc
在浩如煙海的信息中,我們可以找到創建控制文件的命令
CREATE CONTROLFILE REUSE DATABASE "ENMOEDU" RESETLOGS? ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/app/oracle/oradata/ENMOEDU/redo01.log'? SIZE 50M BLOCKSIZE 512,
GROUP 2 '/u01/app/oracle/oradata/ENMOEDU/redo02.log'? SIZE 50M BLOCKSIZE 512,
GROUP 3 '/u01/app/oracle/oradata/ENMOEDU/redo03.log'? SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'/u01/app/oracle/oradata/ENMOEDU/system01.dbf',
'/u01/app/oracle/oradata/ENMOEDU/sysaux01.dbf',
'/u01/app/oracle/oradata/ENMOEDU/undotbs01.dbf',
'/u01/app/oracle/oradata/ENMOEDU/users01.dbf',
'/u01/app/oracle/oradata/ENMOEDU/example01.dbf',
'/u01/app/oracle/oradata/ENMOEDU/test01.dbf',
'/u01/app/oracle/oradata/ENMOEDU/test02.dbf'
CHARACTER SET AL32UTF8;
稍后我們就可以用這些命令來創建控制文件了。下面來模擬控制文件丟失和損壞的實驗環境:
[root@ENMOEDU ~]# rm -rf /u01/app/oracle/oradata/ENMOEDU/control01.ctl
[root@ENMOEDU ~]# rm -rf /u01/app/oracle/fast_recovery_area/ENMOEDU/control02.ctl
筆者將兩個控制文件都刪除了,很徹底~然后嘗試啟動數據庫。
[oracle@ENMOEDU ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Mon Mar 10 15:47:54 2014
Copyright (c) 1982, 2011, Oracle.? All rights reserved.
Connected to an idle instance.
SYS@ENMOEDU > startup
ORACLE instance started.
Total System Global Area? 422670336 bytes
Fixed Size? ? ? ? ? ? ? ? ? 1345380 bytes
Variable Size? ? ? ? ? ? 352323740 bytes
Database Buffers? ? ? ? ? 62914560 bytes
Redo Buffers? ? ? ? ? ? ? ? 6086656 bytes
ORA-00205: error in identifying control file, check alert log for more info
可以看出,數據庫已經無法正常啟動了。那么我們就將數據庫啟動到nomount狀態下進行恢復。
SYS@ENMOEDU > shutdown abort
ORACLE instance shut down.
SYS@ENMOEDU > startup nomount
ORACLE instance started.
Total System Global Area? 422670336 bytes
Fixed Size? ? ? ? ? ? ? ? ? 1345380 bytes
Variable Size? ? ? ? ? ? 352323740 bytes
Database Buffers? ? ? ? ? 62914560 bytes
Redo Buffers? ? ? ? ? ? ? ? 6086656 bytes
SYS@ENMOEDU > CREATE CONTROLFILE REUSE DATABASE "ENMOEDU" RESETLOGS? ARCHIVELOG
2? ? ? ? ? ? ? ? MAXLOGFILES 16
3? ? ? ? ? ? ? ? MAXLOGMEMBERS 3
4? ? ? ? ? ? ? ? MAXDATAFILES 100
5? ? ? ? ? ? ? ? MAXINSTANCES 8
6? ? ? ? ? ? ? ? MAXLOGHISTORY 292
7? ? ? ? LOGFILE
8? ? ? ? ? ? GROUP 1 '/u01/app/oracle/oradata/ENMOEDU/redo01.log'? SIZE 50M BLOCKSIZE 512,
9? ? ? ? ? ? GROUP 2 '/u01/app/oracle/oradata/ENMOEDU/redo02.log'? SIZE 50M BLOCKSIZE 512,
10? ? ? ? ? ? GROUP 3 '/u01/app/oracle/oradata/ENMOEDU/redo03.log'? SIZE 50M BLOCKSIZE 512
11? ? ? ? -- STANDBY LOGFILE
12? ? ? ? DATAFILE
13? ? ? ? ? ? ? '/u01/app/oracle/oradata/ENMOEDU/system01.dbf',
14? ? ? ? ? ? ? '/u01/app/oracle/oradata/ENMOEDU/sysaux01.dbf',
15? ? ? ? ? ? ? '/u01/app/oracle/oradata/ENMOEDU/undotbs01.dbf',
16? ? ? ? ? ? ? '/u01/app/oracle/oradata/ENMOEDU/users01.dbf',
17? ? ? ? ? ? ? '/u01/app/oracle/oradata/ENMOEDU/example01.dbf',
18? ? ? ? ? ? ? '/u01/app/oracle/oradata/ENMOEDU/test01.dbf',
19? ? ? ? ? ? ? '/u01/app/oracle/oradata/ENMOEDU/test02.dbf'
20? ? ? ? CHARACTER SET AL32UTF8;
Control file created.
嘗試開啟數據庫
SYS@ENMOEDU > alter database open
2? ;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
提示錯誤。按照提示來開啟數據庫:
SYS@ENMOEDU > alter database open resetlogs;
Database altered.
數據庫已經正常啟動了。
上述情況屬于非常樂觀且極易恢復的模擬實驗現場,但是在���際情況中,環境卻險要惡劣的多。往往控制文件丟失后,用戶還會進行大量的操作,比如創建表空間等等,這些使得控制文件的恢復要困難許多。路漫漫其修遠兮,吾將上下而求索,我對待技術的渴望永無止境。下面我就給大家介紹一下如何在備份的控制文件過久的情況下恢復控制文件。
首先,我們先備份一下我們的控制文件。由于我采用了多路復用,所以看起來是不是應該把兩個控制文件都備份一下呢?按照國際慣例,一般作者向讀者發出類似這種疑問句的時候,答案往往是否定的。但是,我作為一個走位忽上忽下意識飄忽不定的技術人員,所以,答案,仍然是不需要備份兩份。由于兩份控制文件是一模一樣的,所以備份一份即可,只需記得在恢復的時候注意文件名字。
備份控制文件。在本文中,將控制文件備份到Oracle的家目錄下,給控制文件一種家的溫暖。
[oracle@ENMOEDU ENMOEDU]$ cp control01.ctl ~
創建表空間和文件,從而使現在的控制文件和備份文件產生差異。
SYS@ENMOEDU > create tablespace 我 datafile '/u01/app/oracle/oradata/ENMOEDU/我01.dbf' size 100m;
Tablespace created.
查看一下當前在線日志的status,并切換日志,產生歸檔。
SYS@ENMOEDU > select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 CURRENT
2 INACTIVE
3 INACTIVE
SYS@ENMOEDU > alter system archive log current;
System altered.
SYS@ENMOEDU > select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 ACTIVE
2 CURRENT
3 INACTIVE
SYS@ENMOEDU > alter system archive log current;
System altered.
SYS@ENMOEDU > select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 ACTIVE
2 ACTIVE
3 CURRENT
SYS@ENMOEDU > alter system archive log current;
System altered.
SYS@ENMOEDU > select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 CURRENT
2 ACTIVE
3 ACTIVE
SYS@ENMOEDU > alter system archive log current;
System altered.
SYS@ENMOEDU > select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 ACTIVE
2 CURRENT
3 INACTIVE
SYS@ENMOEDU > alter system archive log current;
System altered.
SYS@ENMOEDU > select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 INACTIVE
2 ACTIVE
3 CURRENT
SYS@ENMOEDU > alter system archive log current;
System altered.
SYS@ENMOEDU > select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 CURRENT
2 INACTIVE
3 ACTIVE
SYS@ENMOEDU > alter system archive log current;
System altered.
SYS@ENMOEDU > select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 ACTIVE
2 CURRENT
3 INACTIVE
SYS@ENMOEDU > alter system archive log current;
System altered.
SYS@ENMOEDU > select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 ACTIVE
2 ACTIVE
? ? ? ? ? 3 CURRENT
總結
以上是生活随笔為你收集整理的复用Oracle数据文件,Oracle控制文件的备份、恢复以及多路复用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中兴事件敲警钟 马化腾要用微信撬动芯片行
- 下一篇: appcan java_appcan下载