Linux Oracle 11g Dataguard配置詳細步驟
一、tnsname.ora和listener.ora用法簡介
tnsname.ora中的service name應該分為兩種,一種是網路服務名net service name,一種是例項服務名 instance service name,如下所示:
net_service_name =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = instance_service_name)
)
)
例1:
prime =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.199)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = pri)
)
)
這裡網路服務名是prime,例項服務名是pri。
tnsnames.ora中的地址(ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521))是監聽器監聽的地址。監聽器程式一直在這個地址上監聽,等待客戶端的連線。
sqlplus客戶端或遠端客戶端(比如PL/SQL Developer)根據tnsname.ora中的SERVICE_NAME(例項服務名)和地址(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.1.199)(PORT = 1521)),到這個地址去訪問監聽器。然後監聽器判斷lisnter.ora檔案中的GLOBAL_NAME是否和tnsname.ora檔案中的SERVICE_NAME(例項服務名)相等。如果相等,則建立客戶端到SID標識的服務端例項的連線。
所以,tnsname.ora中的instance_service_name必須與listener.ora中的global_name必須完全一樣。
例2:listener.ora應該包含下面的資訊
(SID_DESC =
(GLOBAL_DBNAME = pri)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = db1)
)
以username/passwd@service_name的形式訪問資料庫,此時service_name是tnsname.ora中的網路服務名,而不是例項服務名。同理,遠端登入和tnsping都是用的網路服務名。簡而言之,網路服務名對外使用,例項服務名對內使用。
例3:$ sqlplus sys/oracle@prime as sysdba(正確)
$ sqlplus sys/oracle@pri as sysdba(錯誤)
例4:$ tnsping prime(正確)
$ tnsping pri(錯誤)
二、規劃
1 主庫安裝資料庫軟體並建立資料庫例項,備庫只安裝資料庫軟體。
不用安裝兩個虛擬機器,可等主庫裝完資料庫軟體後,克隆一個備庫虛擬機器。
2 資料庫基目錄$ORACLE_BASE=/u01/app/oracle/
資料庫家目錄$ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1/
3 主備庫配置資訊
主庫
主機名:dg1
IP地址:192.168.1.199
oracle_sid:db1
db_unique_name: pri
service_name: prime
global_name: pri
備庫
主機名:dg2
IP地址:192.168.1.200
oracle_sid:db1
db_unique_name: std
service_name: stdby
global_name: std
注:service_name為tnsname.ora中的網路服務名,global_name與tnsname.ora中的例項服務名必須完全一樣。
4 在主庫和備庫中都執行
# vi /etc/hosts
192.168.1.199 dg1
192.168.1.200 dg2
在兩臺主機上分別執行
ping -c 5 dg1
ping -c 5 dg2
5 為方便操作,每臺主機各開兩個終端,一個執行SQL命令,一個執行系統命令。
三、配置DataGuard
1 在主機dg1中用dbca建立資料庫例項db1。
建立過程中,EM不要選;選擇啟用歸檔日;快速閃回區不要選,但要在編輯日誌位置中填上路徑/u01/app/oracle/oradata/db1/archive
2 在主庫中用$ netmgr命令建立監聽和網路服務。
(1)
[oracle@dg1 ~]$ cd /u01/app/oracle/product/11.2.0/db_1/network/admin
[oracle@dg1 admin]$ cat listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = pri)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = db1)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521))
)
ADR_BASE_LISTENER = /u01/app/oracle
[oracle@dg1 admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
PRIME =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = pri)
)
)
STDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = dg2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = std)
)
)
(2)
在備庫中用netmgr建立監聽服務和網路服務
[oracle@dg2 ~]$ cd /u01/app/oracle/product/11.2.0/db_1/network/admin
[oracle@dg2 admin]$ cat listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = std)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = db1)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dg2)(PORT = 1521))
)
ADR_BASE_LISTENER = /u01/app/oracle
[oracle@dg2 admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
PRIME =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = pri)
)
)
STDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = dg2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = std)
)
)
(3)在主庫和備庫中分別執行tnsping prime和tnsping stdby命令
[oracle@dg1 ~] tnsping prime
[oracle@dg1 ~] tnsping stdby
[oracle@dg2 ~] tnsping prime
[oracle@dg2 ~] tnsping stdby
若ping不通,重啟監聽服務試試
3 配置主庫為歸檔模式
[oracle@dg1 ~]$ sqlplus / as sysdba
SQL> archive log list
資料庫日誌模式 存檔模式
自動存檔 啟用
存檔終點 /u01/app/oracle/oradata/archive
最早的聯機日誌序列 2
下一個存檔日誌序列 4
當前日誌序列 4
4 更改主庫為強制寫日誌
SQL> col force_logging format a15;
SQL> select force_logging from v$database;
FORCE_LOGGING
---------------
NO
SQL> alter database force logging;
資料庫已更改。
SQL> select force_logging from v$database;
FORCE_LOGGING
---------------
YES
5 主庫中建立initdb1.ora檔案
[oracle@dg1 admin]$ cd /u01/app/oracle/product/11.2.0/db_1/dbs/
[oracle@dg1 dbs]$ ls
hc_db1.dat hc_DBUA0.dat init.ora lkDB1 orapwdb1 spfiledb1.ora
SQL> create pfile from spfile;
檔案已建立。
[oracle@dg1 dbs]$ ls
hc_db1.dat hc_DBUA0.dat initdb1.ora init.ora lkDB1 orapwdb1 spfiledb1.ora
6 編輯initdb1.ora中的引數
[oracle@dg1 dbs] $ vi initdb1.ora
(1)initdb1.ora中已有log_archive_dest_1,這個引數格式將有所改變,先註釋起來,下面會重新新增
(2)在initdb1.ora下方新增如下引數
*.DB_UNIQUE_NAME=pri
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(pri,std)' #(啟動db接受或傳送redo data,包括所有庫的db_unique_name)
*.LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/oradata/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=pri' #(主庫歸檔目的地)
*.LOG_ARCHIVE_DEST_2='SERVICE=stdby LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=std' #(當該庫充當主庫角色時,設定物理備庫redo data的傳輸目的地)
*.LOG_ARCHIVE_MAX_PROCESSES=5 #(最大ARCn程式數)
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE #允許redo傳輸服務傳輸資料到目的地
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE #允許redo傳輸服務傳輸資料到目的地
*.FAL_SERVER=stdby #(配置網路服務名,假如轉換為備庫角色時,從這裡獲取丟失的歸檔檔案)
*.FAL_CLIENT=prime #(配置網路服務名,fal_server複製丟失的歸檔檔案到這裡)
#*.DB_FILE_NAME_CONVERT='/路徑','路徑' (前為切換後的主庫路徑,後為切換後的備庫路徑,這裡主備庫目錄結構完全一樣,則無需設定)
#*.LOG_FILE_NAME_CONVERT='/路徑','/路徑' # (同上,這兩個名字轉換引數是主備庫的路徑對映關係,可能會是路徑全名,看情況而定)
*.STANDBY_FILE_MANAGEMENT=AUTO #(auto後當主庫的datafiles增刪時備庫也同樣自動操作,且會把日誌傳送到備庫standby_archive_dest引數指定的目錄下,確保該目錄存在,如果你的儲存採用檔案系統沒有問題,但是如果採用了裸裝置,你就必須將該引數設定為manual)
7 上一步中pfile的內容改變了,相應地要改變spfile的內容。方法是新建一個spfile。
SQL> shutdown immediate
SQL> startup pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initdb1.ora'
SQL> create spfile from pfile;
8 在主庫上建立備庫需要的控制檔案
SQL> shutdown immediate
SQL> startup mount
SQL> alter database create standby controlfile as '/tmp/standby.ctl';
SQL> shutdown immediate
9 備份生產資料庫
(1)在備庫中建立oradata目錄和admin目錄
[oracle@dg2 ~] $
cd /u01/app/oracle
mkdir oradata
mkdir admin
(2)將主庫資料庫檔案複製到備庫機器上
[oracle@dg1 dbs] $
scp -rp /u01/app/oracle/oradata/db1 dg2:/u01/app/oracle/oradata
[oracle@dg1 dbs]$
scp -rp /u01/app/oracle/admin/db1 dg2:/u01/app/oracle/admin
(3)將主庫的密碼檔案和pfile檔案複製到備庫
[oracle@dg1 dbs] $
scp -rp /u01/app/oracle/product/11.2.0/db_1/dbs/orapwdb1 dg2:/u01/app/oracle/product/11.2.0/db_1/dbs/orapwdb1
[oracle@dg1 dbs] $
scp -rp /u01/app/oracle/product/11.2.0/db_1/dbs/initdb1.ora dg2:/u01/app/oracle/product/11.2.0/db_1/dbs/initdb1.ora
10 替換備庫的控制檔案
(1)在備庫上刪掉資料庫所有的控制檔案
[oracle@dg2 oracle] $ rm -rf /u01/app/oracle/oradata/db1/control*.ctl
(2)將主庫備份的控制檔案複製到備份機器上,並複製一個(要與pfile中的*.control_files引數一致)
[oracle@dg1 dbs] $
scp -rp /tmp/standby.ctl dg2:/u01/app/oracle/oradata/db1/control01.ctl
[oracle@dg2 db1] $
cd /u01/app/oracle/oradata/db1/
cp control01.ctl control02.ctl
11 修改備庫pfile
[oracle@dg2 ~] $
cd /u01/app/oracle/product/11.2.0/db_1/dbs
vi initdb1.ora
*.DB_UNIQUE_NAME=std
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(pri,std)' #(啟動db接受或傳送redo data,包括所有庫的db_unique_name)
*.LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/oradata/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=std' #(主庫歸檔目的地)
*.LOG_ARCHIVE_DEST_2='SERVICE=prime LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=pri' #(當該庫充當主庫角色時,設定物理備庫redo data的傳輸目的地)
*.LOG_ARCHIVE_MAX_PROCESSES=5 #(最大ARCn程式數)
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE #允許redo傳輸服務傳輸資料到目的地
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE #允許redo傳輸服務傳輸資料到目的地
*.FAL_SERVER=prime #(配置網路服務名,假如轉換為備庫角色時,從這裡獲取丟失的歸檔檔案)
*.FAL_CLIENT=stdby #(配置網路服務名,fal_server複製丟失的歸檔檔案到這裡)
#*.DB_FILE_NAME_CONVERT='/路徑','路徑' (前為切換後的主庫路徑,後為切換後的備庫路徑,這裡主備庫目錄結構完全一樣,則無需設定)
#*.LOG_FILE_NAME_CONVERT='/路徑','/路徑' (同上,這兩個名字轉換引數是主備庫的路徑對映關係,可能會是路徑全名,看情況而定)
*.STANDBY_FILE_MANAGEMENT=AUTO #(auto後當主庫的datafiles增刪時備庫也同樣自動操作,且會把日誌傳送到備庫standby_archive_dest引數指定的目錄下,確保該目錄存在,如果你的儲存採用檔案系統沒有問題,但是如果採用了裸裝置,你就必須將該引數設定為manual)
12在備庫上建立spfile
[oracle@dg2 dbs] $ sqlplus / as sysdba
建立備庫spfile
SQL> startup pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initdb1.ora'
SQL> create spfile from pfile;
13 配置standby redolog
(最佳效能模式可以忽略,如果要轉為其它兩種模式則要建立)
分別在dg1和dg2上建立standby資料夾,用於standby Redo log
[oracle@dg1 dbs] $ mkdir /u01/app/oracle/oradata/db1/standby
[oracle@dg2 dbs] $ mkdir /u01/app/oracle/oradata/db1/standby
在主庫檢視日誌組的數量和每個日誌檔案的大小
SQL> SELECT GROUP#, BYTES FROM V$LOG;
在備庫檢視日誌組的數量和每個日誌檔案的大小
SQL> SELECT GROUP#, BYTES FROM V$STANDBY_LOG;
在主庫和備庫中建立日誌組和redo log檔案
SQL> ALTER DATABASE ADD STANDBY LOGFILE group 4 ('/u01/app/oracle/oradata/db1/standby/slog1.rdo') SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE group 5 ('/u01/app/oracle/oradata/db1/standby/slog2.rdo') SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE group 6 ('/u01/app/oracle/oradata/db1/standby/slog3.rdo') SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE group 7 ('/u01/app/oracle/oradata/db1/standby/slog4.rdo') SIZE 50M;
注:standby redolog的組數參考公式:(online redolog組數 + 1) * 資料庫執行緒數;單機執行緒數為1,RAC一般為2。
standby redolog的組成員數和大小也儘量和online redolog一樣。
14 在備庫上執行備庫恢復模式
SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
db1 OPEN
SQL> alter database recover managed standby database disconnect from session;
資料庫已更改
結束這個恢復程式:
SQL> alter database recover managed standby database cancel;
15 將備庫啟動到open read only的狀態
SQL> shutdown immediate
SQL> startup mount
SQL> alter database open read only;
16 檢視主庫和備庫的日誌同步情況,確保已經同步
主庫:
SQL> archive log list
資料庫日誌模式 存檔模式
自動存檔 啟用
存檔終點 /u01/app/oracle/oradata/archive
最早的聯機日誌序列 14
下一個存檔日誌序列 16
當前日誌序列 16
備庫:
SQL> archive log list
資料庫日誌模式 存檔模式
自動存檔 啟用
存檔終點 /u01/app/oracle/oradata/archive
最早的聯機日誌序列 14
下一個存檔日誌序列 0
當前日誌序列 16
四、檢驗
檢驗方法:在主庫中建立一張表,看在備庫中是否可以查到。
1 在主庫中建立一張表
SQL> create table test_table(id number);
表已建立
看備庫上是否可以查到
SQL> desc test_table;
ERROR:
ORA-04043: 物件 test_table 不存在
2備庫上接收資料,並自動同步:
SQL> alter database recover managed standby database using current logfile disconnect from session;
資料庫已更改
SQL> desc test_table;
名稱 是否為空? 型別
----------------------------------------- -------- ----------------------------
ID NUMBER
3 再次驗證資料是否同步。
主庫:
SQL> insert into test_table values(1);
已建立 1 行。
SQL> commit;
提交完成。
備庫:
SQL> select * from test_table;
ID
----------
1
這裡資料實現了同步,說明dataguard配置成功了。
五、參考文件
http://blog.itpub.net/29107230/viewspace-1063628/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29485627/viewspace-1583688/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE 11G 搭建dataguard詳細步驟(所有操作總結)Oracle
- Oracle 11g dataguard 配置簡約步驟Oracle
- Oracle Stream配置詳細步驟Oracle
- VMware中配置ORACLE DATAGUARD步驟Oracle
- Oracle 11g升級PSU詳細步驟Oracle
- 配置PLSQL Developer詳細步驟SQLDeveloper
- Oracle Stream配置詳細步驟(使用者模式)Oracle模式
- 超詳細oracle 11g安裝步驟 win版本Oracle
- Github配置ssh key詳細步驟Github
- Oracle 高階複製配置步驟詳細說明Oracle
- 【BUILD_ORACLE】Oracle RAC配置ASM Filter Driver(ASMFD)(二)詳細配置步驟UIOracleASMFilter
- Oracle10g物理DG詳細配置方法及步驟Oracle
- Oracle DataGuard切換步驟Oracle
- Oracle從10g升級到11g詳細步驟Oracle
- Oracle 11g rac 的 active dataguard的啟動步驟Oracle
- Oracle 11G DataGuard重啟詳細過程Oracle
- Linux安裝JDK詳細步驟LinuxJDK
- Oracle從10g升級到11g詳細操作步驟Oracle
- 【DataGuard】調整Data Guard資料保護模式詳細步驟模式
- oracle 11G dataguard配置Oracle
- Linux安裝jdk的詳細步驟。LinuxJDK
- Linux安裝jdk的詳細步驟LinuxJDK
- Oracle 11g RAC 環境打PSU補丁的詳細步驟Oracle
- ORACLE資料庫升級詳細步驟Oracle資料庫
- 如何配置web伺服器的詳細步驟Web伺服器
- [zt] Oracle 11g DataGuard 配置Oracle
- 安裝Linux14.04詳細步驟Linux
- centos下svn的安裝及配置詳細步驟CentOS
- ORACLE 10G DATAGUARD實戰步驟Oracle 10g
- IOS之GCD詳細步驟iOSGC
- db29.7 for linux 5.4 安裝詳細步驟DB2Linux
- ORACLE 11g dataguard配置練習Oracle
- 【ASK_ORACLE】Relink RAC叢集詳細步驟Oracle
- LVM建立的詳細步驟LVM
- docker安裝portainer詳細步驟DockerAI
- MySQL的安裝步驟(詳細)MySql
- mysql建立master/slave詳細步驟MySqlAST
- Termux安裝完整版Linux(Ubuntu)詳細步驟LinuxUbuntu