Oracle 單機架構下,多個例項可以同時開啟同一套資料庫檔案嗎?
架構說明:
Oracle 主備架構,兩個資料庫例項,一套資料庫檔案,不是RAC,也不是DG,資料庫檔案存放在NFS儲存上,透過第三方軟體進行故障檢測和切換的。
通常情況下只有1個節點掛載NFS儲存,open資料庫,另一個資料庫節點不掛載NFS儲存。
資料庫切換時,需要停庫,將NFS掛載到另一個資料庫節點上,然後啟庫。
疑問:
如果在資料庫節點1 open資料庫的情況下,節點2掛載NFS儲存後,能否可以開啟資料庫?
1.節點2能否開啟資料庫,能開啟到哪一階段,nomount?mount?open?
2.節點2如果不能開啟資料庫,會報什麼錯誤?
3.節點2嘗試開啟資料庫,會對節點1資料庫有影響嗎?
環境說明:
NFS伺服器:
IP 192.168.31.58
用於存放Oracle資料庫檔案。
資料庫伺服器1:
Oracle 11.2.0.4.0 單機
IP 192.168.31.100
資料庫伺服器2:
Oracle 11.2.0.4.0 單機
IP 192.168.31.100
測試過程:
1.NFS伺服器上,啟動nfs服務
NFS 192.168.31.58
[root@mysql02 oradata]# cat /etc/exports ###/oradata 192.168.8.41(rw,insecure) /oradata *(rw,insecure)
[root@mysql02 oradata]# systemctl status nfs-server.service
2.節點1掛載NFS儲存,並啟動資料庫
192.168.31.100
[root@cjcos02 /]# mount -t nfs -o rw,bg,hard,nointr,nolock,rsize=65536,wsize=65536,tcp,vers=3,timeo=600 192.168.31.58:/oradata /oradata [root@cjcos02 /]# df -h /oradata Filesystem Size Used Avail Use% Mounted on 192.168.31.58:/oradata 47G 33G 15G 70% /oradata
[root@cjcos02 /]# showmount -e 192.168.31.58 Export list for 192.168.31.58: /oradata *
[oracle@cjcos02 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Sat Oct 15 10:08:39 2022 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance. SQL> startup ORACLE instance started. Total System Global Area 1152450560 bytes Fixed Size 2252584 bytes Variable Size 738197720 bytes Database Buffers 402653184 bytes Redo Buffers 9347072 bytes Database mounted. Database opened.
3.節點2掛載NFS儲存,嘗試啟動儲存,並啟動資料庫
[root@mysql01 ~]# ls /oradata/ [root@mysql01 ~]# mount -t nfs -o rw,bg,hard,nointr,nolock,rsize=65536,wsize=65536,tcp,vers=3,timeo=600 192.168.31.58:/oradata /oradata [root@mysql01 ~]# ls /oradata/ cjc cjc.tar.gz initcjc.ora spfilecjc.ora
節點2啟動資料庫
[oracle@mysql01 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Sat Oct 15 10:28:52 2022 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance.
可以nomount
SQL> startup nomount ORACLE instance started. Total System Global Area 1152450560 bytes Fixed Size 2252584 bytes Variable Size 738197720 bytes Database Buffers 402653184 bytes Redo Buffers 9347072 bytes
不能mount,更不能open
SQL> alter database mount; alter database mount * ERROR at line 1: ORA-00600: internal error code, arguments: [kccsbck_first], [1], [3760275324], [], [], [], [], [], [], [], [], []
SQL> select status from v$instance; STATUS ------------------------------------ STARTED
檢視告警日誌
報錯:ORA-00600: internal error code, arguments: [kccsbck_first], [1], [3760275324]
具體日誌如下:
Sat Oct 15 10:29:33 2022 alter database mount Errors in file /oracle/app/oracle/diag/rdbms/cjc/cjc/trace/cjc_ora_3698.trc (incident=2553): ORA-00600: internal error code, arguments: [kccsbck_first], [1], [3760275324], [], [], [], [], [], [], [], [], [] Incident details in: /oracle/app/oracle/diag/rdbms/cjc/cjc/incident/incdir_2553/cjc_ora_3698_i2553.trc Sat Oct 15 10:29:44 2022 Dumping diagnostic data in directory=[cdmp_20221015102944], requested by (instance=1, osid=3698), summary=[incident=2553]. Sat Oct 15 10:29:45 2022 Use ADRCI or Support Workbench to package the incident. See Note 411.1 at My Oracle Support for error and packaging details. ORA-600 signalled during: alter database mount... Sat Oct 15 10:30:09 2022 Sweep [inc][2553]: completed Sweep [inc2][2553]: completed
檢視600錯誤說明
ORA-600 [kccsbck_first] (Doc ID 139013.1)
兩個例項不能同時掛載一套資料庫(非RAC、OPS架構),也不會出現資料損壞。
詳細資訊如下:
DESCRIPTION: We receive this error because we are attempting to be the first thread/instance to mount the database and cannot because it appears that at least one other thread has mounted the database already. We therefore abort the mount attempt and log this error. ARGUMENTS: Arg [a] thread number which has database mounted Arg [b] mount id of the thread FUNCTIONALITY: CONTROL FILE COMPONENT IMPACT: PROCESS FAILURE GENERALLY NON CORRUPTIVE - No underlying data corruption. Although see Alert in Note:137322.1 for Tru64
最後看下最開始的疑問:
如果在資料庫節點1 open資料庫的情況下,節點2也掛載NFS儲存,能否可以開啟資料庫?
1.節點2能否開啟資料庫,能開啟到哪一階段,nomount?mount?open?
不能開啟資料庫,只能到nomount階段。
2.節點2如果不能開啟資料庫,會報什麼錯誤?
ORA-00600: internal error code, arguments: [kccsbck_first], [1], [3760275324]
3.節點2嘗試開啟資料庫,會對節點1資料庫有影響嗎?
無影響。
在複習下Oracle資料庫啟動過程:
如何啟動例項
在執行startup nomount時:
1.讀取引數檔案以確定初始化引數的值;
2.根據初始化引數設定分配SGA;
3.啟動Oracle後臺程式;
4.開啟警報日誌和跟蹤檔案,並以有效的引數語法將所有顯式引數設定寫入警報日誌。
在這個階段,沒有資料庫與例項關聯。
需要NOMOUNT狀態的場景包括資料庫建立以及某些備份和恢復操作。
How an Instance Is Started
When Oracle Database starts an instance, it proceeds through stages.
The stages are as follows:
Searches for a server parameter file in a platform-specific default location and, if not found, for a text initialization parameter file (specifying STARTUP with the SPFILE or PFILE parameters overrides the default behavior)
Reads the parameter file to determine the values of initialization parameters
Allocates the SGA based on the initialization parameter settings
Starts the Oracle background processes
Opens the alert log and trace files and writes all explicit parameter settings to the alert log in valid parameter syntax
At this stage, no database is associated with the instance. Scenarios that require a NOMOUNT state include database creation and certain backup and recovery operations.
如何裝載資料庫
例項裝載資料庫以將資料庫與此例項關聯。
1.要裝載資料庫,例項將獲取control_files初始化引數中指定的資料庫控制檔案的名稱,並開啟這些檔案。
2.Oracle資料庫讀取控制檔案,以查詢開啟資料庫時將嘗試訪問的資料檔案和聯機重做日誌檔案的名稱。
3.在裝入的資料庫中,資料庫是關閉的,只有資料庫管理員才能訪問。管理員可以在完成特定維護操作時關閉資料庫。但是,資料庫不可用於正常操作。
如果Oracle資料庫允許多個例項併發裝載同一資料庫,那麼CLUSTER_DATABASE初始化引數設定可以使資料庫對多個例項可用。資料庫行為取決於設定:
(1)如果裝載資料庫的第一個例項的CLUSTER_DATABASE為false(預設值),則只有此例項才能裝載資料庫。
(2)如果第一個例項的CLUSTER_DATABASE為true,則其他例項可以裝載資料庫,前提是其CLUSTER_DATABACE引數設定設定為true。可以裝載資料庫的例項數受建立資料庫時指定的預定最大值的限制。
How a Database Is Mounted
The instance mounts a database to associate the database with this instance.
To mount the database, the instance obtains the names of the database control files specified in the CONTROL_FILES initialization parameter and opens the files. Oracle Database reads the control files to find the names of the data files and the online redo log files that it will attempt to access when opening the database.
In a mounted database, the database is closed and accessible only to database administrators. Administrators can keep the database closed while completing specific maintenance operations. However, the database is not available for normal operations.
If Oracle Database allows multiple instances to mount the same database concurrently, then the CLUSTER_DATABASE initialization parameter setting can make the database available to multiple instances. Database behavior depends on the setting:
If CLUSTER_DATABASE is false (default) for the first instance that mounts a database, then only this instance can mount the database.
If CLUSTER_DATABASE is true for the first instance, then other instances can mount the database if their CLUSTER_DATABASE parameter settings are set to true. The number of instances that can mount the database is subject to a predetermined maximum specified when creating the database.
如何開啟資料庫
開啟裝載的資料庫可用於正常的資料庫操作。
任何有效使用者都可以連線到開啟的資料庫並訪問其資訊。通常,資料庫管理員會開啟資料庫以供一般使用。
開啟資料庫時,Oracle資料庫將執行以下操作:
1.在非撤消表空間的表空間中開啟聯機資料檔案
2.如果資料庫先前關閉時表空間處於離線狀態,則當資料庫重新開啟時,表空間及其相應的資料檔案將處於離線狀態。
3.獲取撤消表空間
如果存在多個撤消表空間,則undo_TABLESPACE初始化引數指定要使用的撤消表空間。如果未設定此引數,則選擇第一個可用的撤消表空間。
4.開啟聯機重做日誌檔案
How a Database Is Opened
Opening a mounted database makes it available for normal database operation.
Any valid user can connect to an open database and access its information. Usually, a database administrator opens the database to make it available for general use.
When you open the database, Oracle Database performs the following actions:
Opens the online data files in tablespaces other than undo tablespaces
If a tablespace was offline when the database was previously shut down, then the tablespace and its corresponding data files will be offline when the database reopens.
Acquires an undo tablespace
If multiple undo tablespaces exists, then the UNDO_TABLESPACE initialization parameter designates the undo tablespace to use. If this parameter is not set, then the first available undo tablespace is chosen.
Opens the online redo log files
只讀模式
預設情況下,資料庫以讀/寫模式開啟。在此模式下,使用者可以更改資料,在聯機重做日誌中生成重做。
或者,您可以以只讀模式開啟,以防止使用者事務修改資料。
注意:預設情況下,物理備用資料庫以只讀模式開啟。
只讀模式將資料庫訪問限制為只讀事務,而只讀事務不能寫入資料檔案或聯機重做日誌檔案。
但是,資料庫可以執行恢復或更改資料庫狀態的操作,而無需生成重做。例如,在只讀模式下:
1.資料檔案可以離線和聯機。但是,不能使永久表空間離線。
2.離線資料檔案和表空間可以恢復。
3.控制檔案可用於更新資料庫狀態。
4.使用CREATE Temporary TABLESPACE語句建立的臨時表空間是讀/寫的。
5.可以繼續寫入作業系統稽核跟蹤、跟蹤檔案和警報日誌。
Read-Only Mode
By default, the database opens in read/write mode. In this mode, users can make changes to the data, generating redo in the online redo log. Alternatively, you can open in read-only mode to prevent data modification by user transactions.
Note:By default, a physical standby database opens in read-only mode.
Read-only mode restricts database access to read-only transactions, which cannot write to data files or to online redo log files. However, the database can perform recovery or operations that change the database state without generating redo. For example, in read-only mode:
Data files can be taken offline and online. However, you cannot take permanent tablespaces offline.
Offline data files and tablespaces can be recovered.
The control file remains available for updates about the state of the database.
Temporary tablespaces created with the CREATE TEMPORARY TABLESPACE statement are read/write.
Writes to operating system audit trails, trace files, and alert logs can continue.
資料庫檔案檢查
如果例項嘗試開啟資料庫時,任何資料檔案或重做日誌檔案都不存在,或者檔案存在但一致性測試失敗,則資料庫返回錯誤。可能需要介質恢復。
Database File Checks
If any of the data files or redo log files are not present when the instance attempts to open the database, or if the files are present but fail consistency tests, then the database returns an error. Media recovery may be required.
Open階段的一致性校驗
在資料庫Open的過程中,Oracle將會讀取資料檔案頭塊和控制檔案資訊,將兩者進行對比,如果滿足校驗,則可以正常開啟資料庫;
如果存在異常,則可能丟擲相應異常資訊,要求使用者介入處理。
Oracle在Open階段將要進行很多校驗檢查,其中主要的校驗包括以下兩項:
1.第一次檢查資料檔案頭中的檢查點計數(Checkpoint cnt)是否和控制檔案中的檢查點計數(Checkpoint cnt)一致。
此步驟檢查用以確認資料檔案是來自同一版本,而不是從備份中恢復而來(因為Checkpoint Cnt不會被凍結,會一直被修改)。
如果檢查點計數檢查透過,則資料庫進行第二次檢查。
查詢語句如下:
(1)系統檢查點SCN、SYSTEM CHECKPOINT SCN
存在控制檔案,在系統執行checkpoint後,Oracle會更新當前控制檔案中的SYSTEM CHECKPOINT SCN。
該SCAN是全域性範圍的,當發生檔案級別的SCN時,例如表空間改成只讀狀態,則不會更新此SCN。
SELECT CHECKPOINT_CHANGE# FROM V$DATABASE;
(2)檔案檢查點SCN、Datafile Checkpoint SCN
存在控制檔案,表示該資料檔案最近一次執行檢查點操作時的SCAN,例如表空間改為只讀、BEGIN BACKUP或將某個資料檔案設定為OFFLINE等。
SELECT FILE#,CHECKPOINT_CHANGE#,TO_CHAR(CHECKPOINT_TIME,'YYYY-MM-DD HH24:MI:SS') CPTIME FROM V$DATAFILE;
(3)開始SCN、資料檔案頭SCN、START SCN
存在於各個資料檔案標頭檔案
SELECT FILE#,CHECKPOINT_CHANGE# FROM V$DATAFILE_HEADER;
即,檢查記錄在控制檔案中V$DATAFILE表CHECKPOINT_CHANGE#值和記錄在資料檔案頭中V$DATAFILE_HEADER表的CHECKPOINT_CHANGE#是否相同,不相同需要進行介質恢復。
2.第二次檢查資料檔案頭的開始SCN和控制檔案中記錄的該檔案的結束SCN是否一致,如果控制檔案中記錄的結束SCN等於資料檔案頭的開始SCN,則不需要對那個檔案進行恢復。
如果此前資料庫異常崩潰,則結束SCN會保持在最大值(無窮大),資料庫必須執行例項恢復以確保一致性。
對每個資料檔案都完成檢查後,開啟資料庫,鎖定資料檔案,同時將每個資料檔案的結束SCN設定為無窮大(稍後將詳細解釋這個過程)。
查詢語句如下:
(4)結束SCN(START SCN,END SCN)
儲存在控制檔案,主要用來檢查資料庫啟動過程中是否需要例項恢復。
當End SCN不等於START SCN,資料庫需要例項恢復。
SELECT FILE#,LAST_CHANGE# FROM V$DATAFILE;
即,檢查記錄在資料檔案頭中V$DATAFILE_HEADER表的CHECKPOINT_CHANGE#值和記錄在控制檔案中V$DATAFILE表LAST_CHANGE#是否一致,不相同需要進行例項恢復。
測試資料檔案offline。
SQL> select tablespace_name,file_id from dba_data_files order by 2; TABLESPACE_NAME FILE_ID ------------------------------ ---------- SYSTEM1 SYSAUX2 UNDOTBS13 USERS4 CJCTBS5 CHENTBS 6 6 rows selected.
執行offline
SQL> alter database datafile 5 offline;
手動生成檢查點
SQL> alter system checkpoint;
系統檢查點SCN、SYSTEM CHECKPOINT SCN
SQL> SELECT CHECKPOINT_CHANGE# FROM V$DATABASE; CHECKPOINT_CHANGE# ------------------ 1056968
檔案檢查點SCN、Datafile Checkpoint SCN
可以看到FILE# 5的SCN不在更新。
SQL> SELECT FILE#,CHECKPOINT_CHANGE#,TO_CHAR(CHECKPOINT_TIME,'YYYY-MM-DD HH24:MI:SS') CPTIME FROM V$DATAFILE; FILE# CHECKPOINT_CHANGE# CPTIME ---------- ------------------ ------------------- 1 1056968 2022-10-15 14:03:51 2 1056968 2022-10-15 14:03:51 3 1056968 2022-10-15 14:03:51 4 1056968 2022-10-15 14:03:51 5 1056438 2022-10-15 13:58:08 6 1056968 2022-10-15 14:03:51 6 rows selected.
開始SCN、資料檔案頭SCN、START SCN
OFFLINE檔案頭的SCN不在更新
SQL> SELECT FILE#,CHECKPOINT_CHANGE# FROM V$DATAFILE_HEADER; FILE# CHECKPOINT_CHANGE# ---------- ------------------ 1 1056968 2 1056968 3 1056968 4 1056968 5 1056438 6 1056968 6 rows selected.
結束SCN(START SCN,END SCN)
SQL> SELECT FILE#,LAST_CHANGE# FROM V$DATAFILE; FILE# LAST_CHANGE# ---------- ------------ 1 2 3 4 51056893 6 6 rows selected.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2918517/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 多個ORACLE資料庫例項下listener.ora檔案配置Oracle資料庫
- RAC環境下單例項啟動Oracle資料庫重建控制檔案案例單例Oracle資料庫
- linux下單例項資料庫開機自啟動設定Linux單例資料庫
- Oracle Bug ? 同一主機下多資料庫情況下可以相同SERVICE_NAMEOracle資料庫
- 多個資料庫是否可以共有一個Oracle 11g RAC例項KG資料庫Oracle
- 一臺MySQL資料庫啟動多個例項MySql資料庫
- oracle rac及單例項開啟歸檔Oracle單例
- 為同一個資料庫建立新的例項資料庫
- Window下安裝Oracle ASM單例項資料庫OracleASM單例資料庫
- ORACLE 11gR2 單例項資料庫自啟Oracle單例資料庫
- oracle多個例項啟動方法Oracle
- Oracle資料檔案收縮例項Oracle
- oracle 10g資料泵之impdp-同時匯入多個檔案Oracle 10g
- 同一Server上兩個資料庫例項共用listener.ora ,監聽多個埠Server資料庫
- 多個系統同時訪問和操作同一資料庫,可否使用hibernate資料庫
- 單例避免多執行緒同時修改同個值從而造成髒資料單例執行緒
- 正版SOLIDWORKS可以多機同時使用嗎?碩迪科技Solid
- 在多個檔案中import同一個檔案,webpack會多次打包嗎ImportWeb
- 使用PowerBuilder同時訪問多個資料庫UI資料庫
- oracle 12c RAC安裝,例項不能多節點同時啟動Oracle
- oracle 資料庫例項Oracle資料庫
- Oracle9i 同一表空間下寫多個資料檔案的原則 ?Oracle
- 備份與恢復--一個表空間能否被多個資料庫同時開啟?資料庫
- Oracle Restart啟動資料庫例項故障一例OracleREST資料庫
- Oracle同一臺伺服器建立多個資料庫Oracle伺服器資料庫
- Oracle資料庫例項啟動步驟分析Oracle資料庫
- Oracle例項和Oracle資料庫(Oracle體系結構)Oracle資料庫
- oracle 中使用批處理檔案,同時執行,多個.sql檔案。OracleSQL
- AIX下安裝單例項ORACLE10gR2資料庫AI單例Oracle資料庫
- 2 Day DBA-管理Oracle例項-管理資料庫儲存結構-關於資料檔案Oracle資料庫
- Oracle資料庫開啟歸檔Oracle資料庫
- 開啟oracle資料庫歸檔Oracle資料庫
- ORACLE 單例項完全解除安裝資料庫Oracle單例資料庫
- Oracle單例項+ASM新增控制檔案Oracle單例ASM
- RAC資料庫啟用、禁用一個例項資料庫
- oracle啟動例項時使用引數檔案的順序Oracle
- Power Builder同時連線多個資料庫(轉)UI資料庫
- JDBC連線自定義sqlserver資料庫例項名(多個例項)JDBCSQLServer資料庫