oracle結構梳理----checkpoint——啟動與關閉

lff1530983327發表於2015-01-26

----SCN:system_change_number

select dbms_flashback.get_system_change_number from dual;

select dbms_flashback.get_system_change_number scnno,

       SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) time

  from dual;---時間與SCN對應的關係

select current_scn from v$database; 

select timestamp_to_scn(SYSTIMESTAMPas scn from dual;---轉換

--在控制檔案中 

1SYSTEM CHECKPOINT SCN 

select checkpoint_change# from v$database; --1054470322784儲存在控制檔案中

2Datafile checkpoint SCN 

select file#,name,checkpoint_change# from v$datafile; 

3Stop SCN(END SCN

select file#,name,last_change# from v$datafile; 

alter tablespace users read only

alter tablespace users read write;

--一個在資料檔案頭內

4) StartSCN 

SELECT FILE#, NAME, checkpoint_change#, STATUS, TABLESPACE_NAME FROM V$DATAFILE_HEADER;

 

 系統檢查點和資料檔案檢查點不一致時,則會啟動SMON程式,進行資料庫恢復.

 stop scn 是最後一次修改scn

select checkpoint_change#,last_change# from v$datafile; 

shutdown abort

startup mount ----會在last_change中記錄SCN

 

SQLshutdown abort

ORACLE 例程已經關閉。

SQL> startup mount

ORACLE 例程已經啟動。

 

Total System Global Area 1703624704 bytes

Fixed Size                  2255864 bytes

Variable Size            1275069448 bytes

Database Buffers          419430400 bytes

Redo Buffers                6868992 bytes

資料庫裝載完畢。

SQLselect checkpoint_change#,last_change# from v$datafile;

 

CHECKPOINT_CHANGE#    LAST_CHANGE#

------------------ ---------------

     1054471237178   1054471237178

     1054471237178   1054471237178

     1054471237178   1054471237178

     1054471237178   1054471237178

     1054471237178   1054471237178

 

SQLselect checkpoint_change# from v$database;

 

CHECKPOINT_CHANGE#

------------------

     1054471237178

 

SQLalter database open;

 

資料庫已更改。

 

SQLselect checkpoint_change# from v$database;

 

CHECKPOINT_CHANGE#

------------------

     1054471237181

 

SQLselect checkpoint_change#,last_change# from v$datafile;

 

CHECKPOINT_CHANGE#    LAST_CHANGE#

------------------ ---------------

     1054471237181

     1054471237181

     1054471237181

     1054471237181

     1054471237181

 

SQLalter system checkpoint

  2  /

 

系統已更改。

 

SQLshutdown abort

ORACLE 例程已經關閉。

SQL> startup mount

ORACLE 例程已經啟動。

 

Total System Global Area 1703624704 bytes

Fixed Size                  2255864 bytes

Variable Size            1275069448 bytes

Database Buffers          419430400 bytes

Redo Buffers                6868992 bytes

資料庫裝載完畢。

SQLselect checkpoint_change#,last_change# from v$datafile;

 

CHECKPOINT_CHANGE#    LAST_CHANGE#

------------------ ---------------

     1054471237709

     1054471237709

     1054471237709

     1054471237709

     1054471237709

 

SQLselect checkpoint_change# from v$database;

 

CHECKPOINT_CHANGE#

------------------

     1054471237709

 

----------------------------------------------------------------------------

SQLalter system checkpoint;

系統已更改。

SQLshutdown immediate

資料庫已經關閉。

已經解除安裝資料庫。

ORACLE 例程已經關閉。

SQL> startup mount

ORACLE 例程已經啟動。

 

Total System Global Area 1703624704 bytes

Fixed Size                  2255864 bytes

Variable Size            1275069448 bytes

Database Buffers          419430400 bytes

Redo Buffers                6868992 bytes

資料庫裝載完畢。

SQLselect checkpoint_change#,last_change# from v$datafile;

 

CHECKPOINT_CHANGE#    LAST_CHANGE#

------------------ ---------------

     1054471258835   1054471258835

     1054471258835   1054471258835

     1054471258835   1054471258835

     1054471258835   1054471258835

     1054471258835   1054471258835

 

SQLselect checkpoint_change# from v$database;

 

CHECKPOINT_CHANGE#

------------------

     1054471258835

-----------------所以當資料庫是正常關閉時,系統scn和資料檔案中的scn會保持一致,但是如果是不正常關閉,而且在資料庫open中有隊資料檔案進行寫,那麼會導致系統scn和檔案scn

-----------不一致,從而在再次open資料庫是會觸發smon程式進行前滾在回滾,使得資料庫恢復成一致狀態。

 

--檢查點的分類

--第一種分法 

 --1.database checkpoint,資料庫級的檢查點會觸發的情況:

1)alter system checkpoint

2alter system switch logfile

3alter database begin backup

4正常關閉例項shutdown(immediatetranscationalnormal

 --2.表空間和資料檔案檢查點:會出發的情況:

1alter tablespace ... read only 

2alter datafile ....  shrink 

3alter tablespace .... offline

4alter tablespace....  begin backup  

--第二種分類方法 

1完全檢查點 :手動觸發的,和關閉資料庫時候發生的均為完全檢查點

2增量檢查點 

--完全檢查點

1alter system checkpoint   

2》正常關閉shutdown(immediatetranscationalnormal

 

 

------checkpiont的幾個概念

----RBARedo Byte Address) 

當一個checkpoint事件發生的時候,checkpoint程式會記錄下當時所寫的重做日誌塊的地址即RBA,此時記錄的RBA被稱為checkpoint RBA。  

Low RBALRBAHigh RBAHRBA) 

RBA就是重做日誌塊(redo log block)的地址,相當與資料檔案中的ROWID,透過這個地址來定位重做日誌塊。 

RBA由三個部分組成: 

1.日誌檔案序列號(4位元組)

2.日誌檔案塊編號(4位元組)

3.重做日誌記錄在日誌塊中的起始偏移位元組數(2位元組) 

LRBA

資料快取(buffer cache)中一個髒塊第一次被更新的時候產生的重做日誌記錄在重做日誌檔案中所對應的位置就稱為LRBA。 

HRBA

資料快取(buffer cache)中一個髒塊最近一次(最後一次)被更新的時候產生的重做日誌記錄在重做日誌檔案中所對應的位置就稱為HRBA。  

HRBA 最後一次變髒 

LRBA 第一次變髒  

--Buffer checkpoint QueuesBCQ) 

前滾到最後的狀態,回滾到最後一次提交的狀態 

Oracle將所有在資料快取中被修改的髒塊按照LRBA順序的組成一個checkpoint佇列,這個佇列主要記錄了buffer cache第一次發生變化的時間順序

 

HRBA 

--checkpoint RBA ( Target Rba )

當一個checkpoint事件發生的時候,checkpoint程式會記錄下當時所寫的重做日誌塊的地址即RBA,此時記錄的RBA被稱為checkpoint RBA。 

--====================資料庫啟動與關閉

---

11步是NOMOUNT,讀取初始化引數(SPFILEPFILE),初始化在SPFILEPFILE裡設定的記憶體及程式,並知道了控制檔案的地址。

spfile

pfile

22MOUNT就是要從控制檔案讀取物理檔案的結構

3但是MOUNT後的資料檔案,控制檔案也許資料不一致,有可能是異常關閉的,所以後續要做一個一致性檢查,這屬於第3,資料庫OPEN

例項恢復:mount之後先前滾後回滾在開啟資料庫

介質恢復:需要DBA手動干預

 

alter  database backup  controlfile to trace as 'D:\control_file.txt';---將控制檔案備份成文字格式

---啟動方式

STARTUP FORCE

相當於SHUTDOWN ABORT + STARTUP

STARTUP RESTRICT 受限模式

select logins from v$instance;

STARTUP RECOVER--該命令相當於STARTUP MOUNT + RECOVER DATABASE

---關閉方式

1. shutdown abort

---no allow new connections,no wait until current sessions end,no until current transactiona end ,no force a checkpoint and close files

2. shutdown immediate---不用等待事務完成,也不用等待使用者退出,

? 檢查點,寫髒資料到資料檔案,

? 回滾沒有提交的事務

? 釋放相關資源

? 不需要做例項恢復

---no allow new connections,no wait until current sessions end,no until current transactiona end , yes force a checkpoint and close files

3. shutdown transactional

---no allow new connections,yes wait until current sessions end,yes until current transactiona end ,yes force a checkpoint and close files

4.  shutdown normal

---no allow new connections,no wait until current sessions end,yes until current transactiona end ,yes force a checkpoint and close files

 

 

shutdown immediate

startup nomount---後臺程式伺服器程式都已啟動,會啟動instance和後臺程式

alter database mount;---mount只是get the name of the datafiles and redo log files.

alter database open;----此時才能檢視資料庫中的檔案

 

startup restrict

select * from user_sys_privs where PRIVILEGE='RESTRICTED SESSION';

alter system disable restricted session;

select logins from v$instance;

alter system enable restricted session----可以將資料庫改成受限模式

 

 

 

--How a Database Is Mounted

The instance mounts a database to associate the database with that instance. 

To mount the databasethe instance finds the database control files and opens them. 

Control files are specified in the CONTROL_FILES initialization parameter in the parameter file used 

to start the instance. Oracle then reads the control files to get the names of the database's datafiles and redo log files.'

---Restricted Mode of Instance Startupaaa

You can start an instance in restricted mode (or later alter an existing instance to be in restricted mode). 

This restricts connections to only those users who have been granted the RESTRICTED SESSION system privilege.

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30018455/viewspace-1415560/,如需轉載,請註明出處,否則將追究法律責任。

相關文章