Oracle12cdataguard云上挖坑記--為某機場貴賓業(yè)務(wù)部署oracle12c到云端

項目需求

創(chuàng)新互聯(lián)是一家專業(yè)提供潁州企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、網(wǎng)站建設(shè)、H5開發(fā)、小程序制作等業(yè)務(wù)。10年已為潁州眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進行中。

據(jù)稱現(xiàn)有環(huán)境為多節(jié)點RAC,管理成本高,主要體現(xiàn)在沒有專業(yè)技術(shù)人家對基礎(chǔ)設(shè)施進行維護。遷移到云上以后,基礎(chǔ)設(shè)施維護就節(jié)省掉了。而且后邊容量擴充易如反掌,遠程維護之類也比物理環(huán)境去現(xiàn)場操作方便許多。

但在云上,oracle RAC實現(xiàn)的兩個前提條件--共享存儲及心跳網(wǎng)絡(luò),不被正式支持,因此要在云上部署oracle RAC用于生產(chǎn)環(huán)境,不是一個好的解決方案。經(jīng)過多輪討論,一致同意在百度云部署單實例oracle 12c,以dataguard方式來保護數(shù)據(jù)可用性。

當(dāng)然,相對與RAC,單實例的系統(tǒng)負載能力要差很多;同樣是兩個節(jié)點,RAC兩節(jié)點是同時對外提供讀寫服務(wù),而單實例dataguard,只有一臺設(shè)備對外提供服務(wù),而另一臺只能做備用,與主庫進行數(shù)據(jù)同步而已??紤]到實際業(yè)務(wù)訪問量不大的情況,這樣做也在可接受范圍。

 

基礎(chǔ)設(shè)施

兩臺云主機,臨時綁定公網(wǎng)ip,20M獨享帶寬。

資源配置為:cpu 8core,內(nèi)存32G,系統(tǒng)盤50G,云盤1000G。

云主機默認沒有swap,因此用這1000G云盤的部分做swap,其余用于安裝目錄及數(shù)據(jù)目錄。

操作系統(tǒng)版本已經(jīng)有別人選好,版本為CentOS release 6.8,我沒有自主權(quán),不然就選centos 7。不過6也好,關(guān)防火墻沒centos 7那么繁瑣。

曾經(jīng)在阿里云部署了幾套oracle 11g,用的centos 7,在執(zhí)行正式安裝指令./runInstaller 時,多要一步操作,即以oracle帳號帳號執(zhí)行 export DISPLAY=:1,不然無法進行下一步。具體參考我以前的文章“阿里云部署oracle 11g”,連接地址為https://blog.51cto.com/sery/2107701 。

軟件使用oracle 12c,有正式授權(quán),讓我自己去官網(wǎng)下載。這還真費事,先下載到自己的個人電腦(不能直接用wget,需要輸入用戶名及密碼驗證—也許我不懂怎么在命令行拼接這個下載的url),再上傳到云主機。接近4G的文件,下載、上傳花了太多時間,唉!

 

oracle安裝前的準備

主要步驟有:準備交換分區(qū)及數(shù)據(jù)分區(qū)、修改主機名、修改系統(tǒng)相關(guān)配置及依賴包、準備桌面環(huán)境。

◎準備準備交換分區(qū)及數(shù)據(jù)分區(qū)

◆準備交換分區(qū)

fdisk /dev/vdb

mkswap /dev/vdb1

swapon /dev/vdb1

Fdisk操作過程中,分區(qū)代碼選“82”,大小為18G。執(zhí)行完上述操作后,用命令free –m檢查是否生效。

Oracle 12c dataguard云上挖坑記--為某機場貴賓業(yè)務(wù)部署oracle 12c到云端

由上圖可知,交換分區(qū)確實被加載到系統(tǒng)。為了讓交換分區(qū)隨系統(tǒng)開機加載,需要修改文件/etc/fstab,加入的內(nèi)容等描述完加數(shù)據(jù)分區(qū)以后,一并貼出。

◆準備數(shù)據(jù)分區(qū)

fdisk /dev/vdb

mkfs.ext4 /dev/vdb2

mkdir /u01

mount /dev/vdb2 /u01

為使掛接永久生效,需要對文件/etc/fstab做修改,加入交換分區(qū)及數(shù)據(jù)分區(qū)以后,/etc/fstab文件的內(nèi)容如下所示:

Oracle 12c dataguard云上挖坑記--為某機場貴賓業(yè)務(wù)部署oracle 12c到云端

修改完以后,重啟一下系統(tǒng),用df –h 及 free –m 執(zhí)行一下,看是否自動掛載交換分區(qū)及數(shù)據(jù)分區(qū)。

 

◎修改主機名

云服務(wù)器的主機名,總是莫名其妙,看起來很是不爽。改主機名,有兩個目的,一個是登錄系統(tǒng)便于辨識,另外一個原因是服務(wù)器之間通訊用短詞比ip地址省事。需要注意的是,操作系統(tǒng)版本不一樣,修改主機名的方式也可能不同。比如centos 7,就有一個/etc/hostname文件來關(guān)聯(lián)。對于centos 6及以前版本,與主機名有關(guān)系的文件大概有:/etc/sysconfig/network,/etc/sysconfig/network-scriptes/ifcfg-eth0,/etc/hosts。有時候出問題,很可能就在這些文件里主機名的設(shè)定,建議挨個檢查。下面只列出兩個云主機的/etc/hosts內(nèi)容:

[root@oradb162 ~]# more   /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4   localhost4.localdomain4

::1         localhost localhost.localdomain   localhost6 localhost6.localdomain6

#192.168.0.4 instance-umns7cw3-2   instance-umns7cw3-2.novalocal

192.168.0.4   oradb162

192.168.0.5   oradb95

[root@oradb95 ~]# more   /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4   localhost4.localdomain4

::1         localhost localhost.localdomain   localhost6 localhost6.localdomain6

192.168.0.5 oradb95 oradb95.novalocal

192.168.0.4 oradb162


改完后,如果執(zhí)行hostname沒見效果,再檢查一遍與主機名相關(guān)文件的設(shè)置,然后重啟系統(tǒng)試試。主機名生效后,用設(shè)定的名稱代替ip地址,兩機互ping測試網(wǎng)絡(luò)連通性。

 

◎準備桌面環(huán)境

大部分情況下,我都用遠程桌面方式安裝oracle,這有助于把控整個安裝過程,直觀了解安裝進展及發(fā)生的問題。桌面環(huán)境由xwindow及vncserver組成,默認情況下,云主機是沒有安裝這兩個工具。多次實踐證明,vncserve配合xwindow為最佳組合,安裝完就能用,不藍屏或灰屏。具體的安裝步驟如下:

yum groupinstall "X   Window System" "Desktop" -y

yum install tigervnc-server   -y

安裝完這兩個工具以后,只需要啟動vncserver,設(shè)置好用戶名和密碼,注意輸出,用客戶端連接的時候需要使用。

Oracle 12c dataguard云上挖坑記--為某機場貴賓業(yè)務(wù)部署oracle 12c到云端

連接成功以后,沒有黑屏灰屏,恭喜!

 

◎修改系統(tǒng)相關(guān)配置及依賴包

步驟比較繁雜,因為經(jīng)常要安裝部署oracle,我就寫了一個腳本,該腳本在11g及12c都有效,其內(nèi)容為:

[root@oradb95 ~]# more oracle_rep.bash

#!/bin/bash

#writed by sery 2012-05-16

 

#########################################

#install depending packages                       #

#########################################

yum install gcc* gcc-* gcc-c++-*   glibc-devel-* glibc-headers-* compat-libstdc* \

libstdc* elfutils-libelf-devel*   libaio-devel* \

sysstat* unixODBC-* pdksh-* ksh   compat-libcap1

########################################

#add groups,user and create dir        #

########################################

/usr/sbin/groupadd -g 501 oinstall

/usr/sbin/groupadd -g 502 dba

useradd -u 1000 -g oinstall -G dba   oracle

 

mkdir /u01/app/

mkdir -p /u01/app/oraInventory

mkdir -p /u01/app/oracle

chown -R oracle:oinstall /u01/app

chmod -R 775 /u01/app

 

##############################################

#modify    sysctl.conf                                    #

##############################################

cat >> /etc/sysctl.conf   <<done

fs.file-max = 6815744

kernel.shmall = 2097152

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

net.ipv4.ip_local_port_range = 9000   65500

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048576

fs.aio-max-nr = 1048576

done

 

sysctl -p

 

###############################################

#modify    /etc/security/limits.conf                          #

###############################################

cat >> /etc/security/limits.conf   << done

oracle soft nproc 2047

oracle hard nproc 16384

oracle soft nofile 1024

oracle hard nofile 65536

done

 

################################################

#modify /etc/pam.d/login                                  #

################################################

echo "session    required       pam_limits.so">>/etc/pam.d/login

 

################################################

# setting user oracle env                                   #

################################################

cat >> /home/oracle/.bash_profile   <<done

export ORACLE_SID=gbdb

export ORACLE_UNQNAME=oradb162

export ORACLE_base=/u01/app/oracle

export ORACLE_HOME=/u01/app/oracle/product/12.2.0

export PATH=$ORACLE_HOME/bin:$PATH

done


依賴包安裝那步,可能有重復(fù)(安裝xwindow桌面環(huán)境可能會順帶安裝了一些依賴),不過如果已經(jīng)安裝過相關(guān)的包,執(zhí)行過程會自動跳過,不會有任何風(fēng)險存在。執(zhí)行這個腳本,完事后檢查一下相關(guān)目錄是否生成,配置文件是否被修改。

 

正式安裝oracle

用vnc客戶端連接到云主機,進入系統(tǒng)桌面以后,至少開一個終端窗口,以root帳號執(zhí)行指令“xhost +”,切換帳號到oracle ,指令為 “su – oracle”。再開一終端窗口,以root帳號把下載來的oracle解包,命令如下:

unzip   linuxx64_12201_database.zip

執(zhí)行完畢,將在當(dāng)前路徑生成目錄database,把此目錄復(fù)制到/home/oracle,執(zhí)行命令:

chown –R oracle:oinstall   /home/oracle/database

現(xiàn)在切換到oracle帳號那個終端窗口,執(zhí)行“./runInstaller”,只要能出安裝界面,一般都不會有問題。

Oracle 12c dataguard云上挖坑記--為某機場貴賓業(yè)務(wù)部署oracle 12c到云端

往下進行的時候,選擇只安裝數(shù)據(jù)庫軟件,即第2個選項。再往下,會檢查依賴包,交換分區(qū)等,如有問題,會有輸出提示,按提示處理即可。安裝軟件所需要的時間,跟資源配置相關(guān),資源越好(cpu、內(nèi)存、硬盤)、速度越快,安裝時間也就越短。

安裝完軟件,檢查一下目錄,看看/u01/app/oracle路徑下,文件目錄是否都生成了。12c正確安裝以后,不需要執(zhí)行netca來配置監(jiān)聽器,默認已經(jīng)弄好了,直接以oracle帳號啟動即可:

[oracle@oradb95 ~]$ su – oracle

[oracle@oradb95 ~]$ lsnrctl start

[oracle@oradb95 ~]$ lsnrctl status

LSNRCTL for Linux: Version 12.2.0.1.0 -   Production on 14-JUN-2018 14:47:13

 

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

 

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

STATUS of the LISTENER

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

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version   12.2.0.1.0 - Production

Start Date                14-JUN-2018 10:32:21

Uptime                    0 days 4 hr. 14 min. 52   sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Log File           /u01/app/oracle/diag/tnslsnr/oradb95/listener/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oradb95)(PORT=1521)))

The listener supports no services

The command completed successfully

上述操作在兩個服務(wù)器都相同。

 

創(chuàng)建數(shù)據(jù)庫(僅在主庫操作)

繼續(xù)在vnc客戶端進行操作。終端窗口,以oracle帳號執(zhí)行“dbca”,彈出圖形操作界面,選擇“Create a database(創(chuàng)建一個數(shù)據(jù)庫)”。

Oracle 12c dataguard云上挖坑記--為某機場貴賓業(yè)務(wù)部署oracle 12c到云端

下一步選“typical configuration”,字符集選GBK(這個是對方要求的,也可以創(chuàng)建完后再更改),密碼設(shè)置設(shè)置建議不要用特殊字符,如“Sd4d@8_”這類的,在連接數(shù)據(jù)庫的時候,會比較惱火!如果選擇了“Advanced configuration(高級定制方式)”,就順手把歸檔項給選上。由于是舊的項目遷移,沒有選擇12c的新特性“容器數(shù)據(jù)庫”。內(nèi)存管理,可工具自己系統(tǒng)資源的情況自行調(diào)整(拉滾動條即可)。

Oracle 12c dataguard云上挖坑記--為某機場貴賓業(yè)務(wù)部署oracle 12c到云端

高級定制還可以把EM配置上,12c的em還是管理數(shù)據(jù)庫還是很方便的,特別是擴充系統(tǒng)表空間(默認系統(tǒng)表空間、系統(tǒng)輔助白空間太小,不太適應(yīng)真實應(yīng)用)。

Oracle 12c dataguard云上挖坑記--為某機場貴賓業(yè)務(wù)部署oracle 12c到云端

連續(xù)點幾個“Next”,到匯總界面后,基本就沒什么問題了。

Oracle 12c dataguard云上挖坑記--為某機場貴賓業(yè)務(wù)部署oracle 12c到云端

如果對創(chuàng)建的數(shù)據(jù)庫不滿意,在沒有正式導(dǎo)入數(shù)據(jù)投入生產(chǎn)以前,再用dbca進行刪除即可。

數(shù)據(jù)庫創(chuàng)建成功后,實例自動啟動,可查看系統(tǒng)進程進行驗證。更進一步,執(zhí)行命令:

[root@oradb162 ~]# su   - oracle

[oracle@oradb162 ~]$ sqlplus / as sysdba;

 

SQL*Plus: Release 12.2.0.1.0 Production   on Fri Jun 15 10:35:53 2018

 

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

 

 

Connected to:

Oracle Database 12c Enterprise Edition   Release 12.2.0.1.0 - 64bit Production

 

SQL> select   count(*) from v$session;

 

  COUNT(*)

----------

          46

如果得到如上的結(jié)果,可以認為一切正常。

前邊我強調(diào)過,oracle 默認系統(tǒng)表空間太小,需要調(diào)整。有兩種方法:一種是sqlplus客戶端進去執(zhí)行alter 語句,另一種是em瀏覽器方式。其實都是去操縱那個sql語句而已。下邊以圖形方式來演示這個更改過程,看起來更直觀一些.

Oracle 12c dataguard云上挖坑記--為某機場貴賓業(yè)務(wù)部署oracle 12c到云端

鼠標點左側(cè)“+SYSTEM”,選中文件那行,如下圖:

Oracle 12c dataguard云上挖坑記--為某機場貴賓業(yè)務(wù)部署oracle 12c到云端

點菜單“操作”下拉列表框,選“調(diào)整大小”項,彈出具體的操作框,如下兩圖所示:

Oracle 12c dataguard云上挖坑記--為某機場貴賓業(yè)務(wù)部署oracle 12c到云端

Oracle 12c dataguard云上挖坑記--為某機場貴賓業(yè)務(wù)部署oracle 12c到云端

填寫大小為2G,不急著確定,點“顯示 SQL”,可得到實際sql語句如下:

ALTER DATABASE DATAFILE   '/u01/app/oracle/oradata/GBDB/datafile/o1_mf_system_fl1mqhrq_.dbf' RESIZE 2G;

瞧,是不是跟sqlplus敲代碼的效果一樣呢?默認是810M,現(xiàn)在點“確定”按鈕是更改生效。到oracle數(shù)據(jù)庫目錄實際查看,看文件大小是否發(fā)生改變。

[oracle@oradb162 datafile]$ cd /u01/app/oracle/oradata/GBDB/datafile/

[oracle@oradb162 datafile]$ du -hs *

551M    o1_mf_sysaux_fl1msk5v_.dbf

2.1G      o1_mf_system_fl1mqhrq_.dbf

2.3M    o1_mf_temp_fl1mw9p0_.tmp

71M     o1_mf_undotbs1_fl1mtnct_.dbf

5.1M    o1_mf_users_fl1mtojb_.dbf

嘿嘿,沒騙人呢,文件大小確實變化了。再用此方法,把輔助表空間調(diào)成1G的容量。

 

Datagurd實現(xiàn)過程

主備兩機都需要操作,而且操作方法有差異,在描述中,我會特別標明,不至于讓他人困惑。

兩臺服務(wù)器的監(jiān)聽器隨oracle 12c的安裝已經(jīng)自動配置完成,默認監(jiān)聽并沒有生成文件,需要手動或者執(zhí)行netca去生成。

◆主庫的監(jiān)聽文件內(nèi)容為:

[oracle@oradb162 admin]$ pwd

/u01/app/oracle/product/12.2.0/network/admin

[oracle@oradb162 admin]$ more listener.ora

# listener.ora Network Configuration   File: /u01/app/oracle/product/12.2.0/network/admin/listener.ora

# Generated by Oracle configuration   tools.

 

LISTENER =

    (DESCRIPTION_LIST =

      (DESCRIPTION =

        (ADDRESS = (PROTOCOL = TCP)(HOST = oradb162)(PORT = 1521))

        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

      )

    )

 

SID_LIST_LISTENER=

    (SID_LIST =

      (SID_DESC =

        (GLOBAL_DBNAME = gbdb)

        (ORACLE_HOME =/u01/app/oracle/product/12.2.0)

        (SID_NAME = gbdb)

      )

     )

 

◆備庫的監(jiān)聽文件內(nèi)容為:

[oracle@oradb162 admin]$ pwd

/u01/app/oracle/product/12.2.0/network/admin

[oracle@oradb162 admin]$ more listener.ora

# listener.ora Network Configuration   File: /u01/app/oracle/product/12.2.0/network/admin/listener.ora

# Generated by Oracle configuration   tools.

 

LISTENER =

    (DESCRIPTION_LIST =

      (DESCRIPTION =

        (ADDRESS = (PROTOCOL = TCP)(HOST = oradb95)(PORT = 1521))

        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

      )

    )

 

SID_LIST_LISTENER=

    (SID_LIST =

      (SID_DESC =

        (GLOBAL_DBNAME = gbdb)

        (ORACLE_HOME =/u01/app/oracle/product/12.2.0)

        (SID_NAME = gbdb)

      )

     )

◎配置本地命名服務(wù)

兩臺服務(wù)器進行相同的操作。繼續(xù)在vnc客戶端,終端窗口以oracle帳號執(zhí)行netca(開始用文本編輯器編寫tnsname.ora文件,總是不行。比如第一行要定格,不要有空格等,書寫要求太嚴。后用圖形創(chuàng)建,創(chuàng)建完查看文件,即不出錯,又了解實質(zhì))。鼠標選取第三項,如圖所示:

Oracle 12c dataguard云上挖坑記--為某機場貴賓業(yè)務(wù)部署oracle 12c到云端

選取“add”點“Next”按鈕,“Service Name”填“gbdb”,接著點幾次“Next”,到填“Host name”這里填寫“oradb162(與/etc/hosts設(shè)定相一致)”,如下圖所示:

Oracle 12c dataguard云上挖坑記--為某機場貴賓業(yè)務(wù)部署oracle 12c到云端

配置完這個,再重復(fù)此操作,把oradb95給加上。執(zhí)行完畢后,tnsname.ora的內(nèi)容為:

[oracle@oradb95 admin]$ more tnsnames.ora

# tnsnames.ora Network Configuration   File: /u01/app/oracle/product/12.2.0/network/admin/tnsnames.ora

# Generated by Oracle configuration   tools.

 

ORADB162 =

    (DESCRIPTION =

      (ADDRESS_LIST =

        (ADDRESS = (PROTOCOL = TCP)(HOST = oradb162)(PORT = 1521))

      )

      (CONNECT_DATA =

        (SERVICE_NAME = gbdb)

      )

    )

 

ORADB95 =

    (DESCRIPTION =

      (ADDRESS_LIST =

        (ADDRESS = (PROTOCOL = TCP)(HOST = oradb95)(PORT = 1521))

      )

      (CONNECT_DATA =

        (SERVICE_NAME =   gbdb)

      )

    )

這樣再也不用擔(dān)心書寫格式、寫漏括號“)”啥的了。

得檢驗這些設(shè)置有沒有用,在兩臺服務(wù)器分別執(zhí)行如下指令進行驗證:

[oracle@oradb95 admin]$ tnsping oradb95

 

TNS Ping Utility for Linux: Version   12.2.0.1.0 - Production on 15-JUN-2018 12:08:46

 

Copyright (c) 1997, 2016, Oracle.  All rights reserved.

 

Used parameter files:

 

 

Used TNSNAMES adapter to resolve the   alias

Attempting to contact (DESCRIPTION =   (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = oradb95)(PORT = 1521)))   (CONNECT_DATA = (SERVICE_NAME = oradb95)))

OK   (0 msec)

[oracle@oradb95 admin]$ tnsping oradb162

 

TNS Ping Utility for Linux: Version   12.2.0.1.0 - Production on 15-JUN-2018 12:08:51

 

Copyright (c) 1997, 2016, Oracle.  All rights reserved.

 

Used parameter files:

 

 

Used TNSNAMES adapter to resolve the   alias

Attempting to contact (DESCRIPTION =   (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = oradb162)(PORT = 1521)))   (CONNECT_DATA = (SERVICE_NAME = oradb162)))

OK   (0 msec)


◎主庫啟用歸檔及force logging強制記錄日志

1、歸檔操作:檢查主庫是否處于歸檔,如果不是,則啟用它,具體指令如下(啟用要在mount下進行):

SQL> archive   log list;

Database   log mode              No Archive Mode

Automatic   archival             Disabled

Archive destination            USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     11

Current log sequence           13

 

SQL> alter   database archivelog;

 

Database altered.

SQL> archive   log list;

Database   log mode              Archive Mode

Automatic   archival             Enabled

Archive destination            USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     11

Next log sequence to archive   13

Current log sequence           13

SQL> alter database open;

 

Database altered.

2、force logging強制記錄日志:先檢查是否啟用,如未則啟用之(可在數(shù)據(jù)庫open狀態(tài)下執(zhí)行),步驟如下:

SQL> select   force_logging from v$database;

 

FORCE_LOGGING

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

NO

 

SQL> alter   database force logging;

 

Database altered.

 

SQL> select   force_logging from v$database;

 

FORCE_LOGGING

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

YES

   

◎為備庫準備控制文件

在主庫上執(zhí)行如下操作,生成的文件存放到一個臨時的位置,后邊等其它文件都到齊后,再把它移動到合適的位置。我參考好多文檔,都在創(chuàng)建者玩意,但實際上我用rman復(fù)制方式創(chuàng)建備庫,根本就不需要這個控制文件。分析原因,應(yīng)該是這樣:備庫以 startup nomount pfile 方式啟動實例,只讀取參數(shù)文件而已;主庫以rman同時連主備庫,以指令“duplicate target database”從主庫復(fù)制所需文件,也包括了控制文件。

SQL> alter   database create standby controlfile as '/home/oracle/gdbd.ctl';           

 

Database altered.


◎主庫創(chuàng)建standby redo log

盡量與主庫現(xiàn)有的日志文件大小相一致,創(chuàng)建的組不少于系統(tǒng)現(xiàn)有的。

查當(dāng)前日志組大小

SQL> select   GROUP#,BYTES/1024/1024 size_M,STATUS,ARCHIVED from v$log;

 

    GROUP#     SIZE_M STATUS           ARC

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

           1        200 CURRENT          NO

           2        200 INACTIVE         YES

           3        200 INACTIVE         YES

查存儲路徑

SQL> select   MEMBER from v$logfile;

 

MEMBER

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

/u01/app/oracle/oradata/GBDB/onlinelog/o1_mf_3_fl1mvv1j_.log

/u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/o1_mf_3_fl1mvvkc_.log

/u01/app/oracle/oradata/GBDB/onlinelog/o1_mf_2_fl1mvv0q_.log

/u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/o1_mf_2_fl1mvvfs_.log

/u01/app/oracle/oradata/GBDB/onlinelog/o1_mf_1_fl1mvty3_.log

/u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/o1_mf_1_fl1mvvgd_.log

 

6 rows selected.

###一個組兩個成員,路徑不同,大小內(nèi)容完全一致。

[root@oradb162 ~]# diff   /u01/app/oracle/oradata/GBDB/onlinelog/o1_mf_3_fl1mvv1j_.log   /u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/o1_mf_3_fl1mvvkc_.log

[root@oradb162 ~]# du   /u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/o1_mf_3_fl1mvvkc_.log

204804    /u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/o1_mf_3_fl1mvvkc_.log

[root@oradb162 ~]#   du /u01/app/oracle/oradata/GBDB/onlinelog/o1_mf_3_fl1mvv1j_.log

204804    /u01/app/oracle/oradata/GBDB/onlinelog/o1_mf_3_fl1mvv1j_.log

 

創(chuàng)建新的日志組,也存放在兩個位置

 

SQL> alter   database add standby logfile group 4   ('/u01/app/oracle/oradata/GBDB/onlinelog/standby01.log','/u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/stabdy01.log')   size 200M;

 

Database altered.

 

SQL> alter   database add standby logfile group 5   ('/u01/app/oracle/oradata/GBDB/onlinelog/standby02.log','/u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/stabdy02.log')   size 200M;

 

Database altered.

 

SQL> alter   database add standby logfile group 6   ('/u01/app/oracle/oradata/GBDB/onlinelog/standby03.log','/u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/stabdy03.log')   size 200M;

 

Database altered.

 

SQL> alter   database add standby logfile group 7 ('/u01/app/oracle/oradata/GBDB/onlinelog/standby04.log','/u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/stabdy04.log')   size 200M;

 

Database altered.

 

驗證所創(chuàng)建的組

SQL>select   group#,thread#,sequence#,archived,status from v$standby_log;

 

   GROUP#    THREAD#    SEQUENCE# ARC STATUS

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

           4          0          0 YES UNASSIGNED

           5          0          0 YES UNASSIGNED

           6          0          0 YES UNASSIGNED

           7          0          0 YES UNASSIGNED


◎準備初始化參數(shù)文件

主庫上生成文件,復(fù)制到備庫,然后兩個參數(shù)文件都需要做修改,以符合實際需求。主庫上對參數(shù)的修改,可以直接在sqlplus里執(zhí)行alter語句,但這不太保險,一旦出錯,容易給自己造成壓力。建議修改參數(shù)文件前,做個原始備份,然后修改此參數(shù)文件。萬一將來以此修改過的參數(shù)文件生成服務(wù)器參數(shù)文件(spfile)出現(xiàn)異常,備份的那個參數(shù)文件就是后悔藥。

◆執(zhí)行以下指令生成參數(shù)文件:

 SQL>  create pfile='/home/oracle/initgd.ora' from   spfile;

 

File created.

修改修改前做個原始備份

[oracle@oradb162 ~]$pwd

/home/oracle

[oracle@oradb162 ~]$cp   initgd.ora initgd.ora.bk20180617

復(fù)制一份參數(shù)文件initgd.ini到備庫服務(wù)器的/home/oracle目錄,等待修改。

◆修改主庫參數(shù)文件/home/oracle/initgb.ora

在源文件的基礎(chǔ)上增加如下內(nèi)容(一行太長,有些行自動換行了,書寫時請注意):

*.db_unique_name='oradb162'

*.fal_client='oradb162'

*.fal_server='oradb95'

*.log_archive_config='DG_CONFIG=(oradb162,oradb95)'

*.log_archive_dest_1='LOCATION=/u01/app/oracle/fast_recovery_area/gbdb/   VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=oradb162'

*.log_archive_dest_2='SERVICE=oradb95   LGWR ASYNC VALID_FOR=(ALL_LOGFILES,PRIMARY_ROLES) DB_UNIQUE_NAME=oradb95'

*.log_archive_dest_state_1='ENABLE'

*.log_archive_dest_state_2='ENABLE'

*.standby_file_management='AUTO'

◆準備庫參數(shù)文件/home/oracle/initgb.ora

從主庫復(fù)制文件,用同樣路徑。把所需文件放在/home/oracle目錄,一來沒權(quán)限不足的問題,而來不會與其它數(shù)據(jù)文件混在一起,等dataguard運行起來以后,這些文件就基本不再使用,不干擾后期維護。

備庫參數(shù)文件/home/oracle/initgb.ora的內(nèi)容如下,與主庫不同的地方,特別用底色做了標記。

[oracle@oradb95 ~]$ more initgb.ora

gbdb.__data_transfer_cache_size=0

gbdb.__db_cache_size=7918845952

gbdb.__inmemory_ext_roarea=0

gbdb.__inmemory_ext_rwarea=0

gbdb.__java_pool_size=67108864

gbdb.__large_pool_size=100663296

gbdb.__oracle_base='/u01/app/oracle'#ORACLE_BASE   set from environment

gbdb.__pga_aggregate_target=3388997632

gbdb.__sga_target=10099884032

gbdb.__shared_io_pool_size=536870912

gbdb.__shared_pool_size=1442840576

gbdb.__streams_pool_size=0

*.audit_file_dest='/u01/app/oracle/admin/gbdb/adump'

*.audit_trail='db'

*.compatible='12.2.0'

*.control_files='/u01/app/oracle/oradata/GBDB/controlfile/o1_mf_fl1mvrh5_.ctl','/u01/app/oracle/fast_recovery_area/gbdb/GBDB/controlfile

controlfile/o1_mf_fl1mvrls_.ctl'

*.db_block_size=8192

*.db_create_file_dest='/u01/app/oracle/oradata'

*.db_name='gbdb'

*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area/gbdb'

*.db_recovery_file_dest_size=8016m

*.diagnostic_dest='/u01/app/oracle'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=gbdbXDB)'

*.local_listener='LISTENER_GBDB'

*.open_cursors=300

*.pga_aggregate_target=3209m

*.processes=640

*.remote_login_passwordfile='EXCLUSIVE'

*.sga_target=9627m

*.undo_tablespace='UNDOTBS1'

 

*.db_unique_name='oradb95'

*.fal_client='oradb95'

*.fal_server='oradb162'

*.log_archive_config='DG_CONFIG=(oradb162,oradb95)'

*.log_archive_dest_1='LOCATION=/u01/app/oracle/fast_recovery_area/gbdb/   VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=oradb95'

*.log_archive_dest_2='SERVICE=oradb162 LGWR ASYNC   VALID_FOR=(ALL_LOGFILES,PRIMARY_ROLES) DB_UNIQUE_NAME=oradb162'

*.log_archive_dest_state_1='ENABLE'

*.log_archive_dest_state_2='ENABLE'

*.standby_file_management='AUTO'

兩臺云服務(wù)器(主備庫)資源配置、操作系統(tǒng)版本、oracle軟件、目錄結(jié)構(gòu)完全一樣,因此不需要做日志和數(shù)據(jù)文件轉(zhuǎn)換。書寫參數(shù)文件一定要仔細認真,我在這里踩了個大坑,整個端午節(jié)都耗在上邊了。

參數(shù)文件里邊有幾個值,要特別留意。db_name、db_unique_name、service,該怎么填?與哪些項目想關(guān)聯(lián),是必須弄清楚的。

(1)   db_name:主備庫用同樣的名稱,這里用的值是gbdb,oracle系統(tǒng)賬號環(huán)境變量.bash_profile里邊定義。

(2)   db_unique:主庫與備庫不同,主庫定義為oradb162,備庫為oradb95,與系統(tǒng)的/etc/hosts定義相同,也可以不同。也可以在oracle系統(tǒng)賬號環(huán)境變量.bash_profile里邊也設(shè)定一下。

(3)   service:這個最容易引起混淆,個人認為,應(yīng)該是從tnsname.ora取值,取的是那個net service name,不是代碼塊里邊那個service(代碼塊頂頭的那行,沒有括號,而真正的service,使用相同的設(shè)置gbdb,與sid也設(shè)定得一樣了)。

我犯的低級錯誤就在參數(shù)文件的log_archive_dest_1這一行,因為這行很長,轉(zhuǎn)換到下一行了,擔(dān)心不是一個正行,因此使用了刪除,未曾留心,把DB_UNIQUE_NAME=oradb162的字符“a”給刪掉,變成DB_UNIQUE_NAME=ordb162,配置完以后,死活不能同步數(shù)據(jù)。查看oracle告警日志,有l(wèi)og1目標找不到的信息,一直以為是監(jiān)聽器監(jiān)或者是是本地名稱服務(wù)tnsnames設(shè)置的問題呢。Sqlplus執(zhí)行 show parameter log_archive_dest能得到一些有用信息。

◆備庫服務(wù)器創(chuàng)建所需目錄

創(chuàng)建這些目錄的依據(jù)來自參數(shù)文件/home/oracle/initgb.ora,需逐個核對創(chuàng)建。

1、 創(chuàng)建控制文件目錄:

[oracle@oradb95 ~]$mkdir   /u01/app/oracle/oradata/GBDB/controlfile -p

[oracle@oradb95 ~]$mkdir   /u01/app/oracle/fast_recovery_area/gbdb/GBDB/controlfile -p

2、 創(chuàng)建歸檔日志目錄:

[oracle@oradb95 ~]$mkdir /u01/app/oracle/fast_recovery_area/gbdb -p

這步重復(fù)了,在創(chuàng)建控制文件目錄時,已經(jīng)創(chuàng)建過了。

3、 創(chuàng)建審計文件目錄:

[oracle@oradb95 ~]$mkdir -p /u01/app/oracle/admin/gbdb/adump

◆備庫服務(wù)器準備密碼文件及控制文件

這兩個文件都來自于主庫服務(wù)器,直接同步或者復(fù)制過來,注意不要改變文件的屬主,即這些文件的屬主是oracle和oinstall。

1、 根據(jù)參數(shù)文件的定義,我們需要把控制文件分別同步到目錄(這個步驟其實是多此一舉了)/u01/app/oracle/oradata/GBDB/controlfile/,/u01/app/oracle/fast_recovery_area/gbdb/GBDB/controlfile/。

[oracle@oradb95 ~]$ cp gdbd.ctl /u01/app/oracle/oradata/GBDB/controlfile [oracle@oradb95 ~]$ cp gdbd.ctl   /u01/app/oracle/fast_recovery_area/gbdb/GBDB/controlfile/

2、 復(fù)制數(shù)據(jù)庫密碼文件到目錄/u01/app/oracle/product/12.2.0/dbs.

[oracle@oradb95 ~]$cp orapwgbdb /u01/app/oracle/product/12.2.0/dbs

文件位于什么位置,一定要跟定義及oracle規(guī)定相符合。一些人寫的文檔,不做強調(diào),一頓亂貼;在哪個機器操作,主機命名,模棱兩可,給初學(xué)者帶來很多麻煩和困擾。

實際上,備庫有參數(shù)文件和密碼文件就夠了。如果在執(zhí)行數(shù)據(jù)庫復(fù)制過程出現(xiàn)異常,極有可能是備庫的目錄沒有被創(chuàng)建,根據(jù)提示創(chuàng)建就行??刂莆募詣颖粡?fù)制過來,因此無需手動搞一遍。

◎復(fù)制數(shù)據(jù)庫到備庫

分五個步驟,有順序地進行。

◆第一步:主庫以mount參數(shù)啟動實例:

SQL> startup mount   pfile='/home/oracle/initgb.ora';

ORACLE instance started.

 

Total System Global Area 1.0100E+10 bytes

Fixed Size                 12170040 bytes

Variable Size            1979714760 bytes

Database Buffers         8086618112 bytes

Redo Buffers               21381120 bytes

Database mounted.

參數(shù)文件有錯的話,換成原始備份的那個,就可以恢復(fù)到正常狀況,比直接sql里改參數(shù)要保險一些。

第二步,備庫啟動oracle實例。一定要安裝好oracle軟件,復(fù)制主庫的密碼文件到對應(yīng)的位置,還有那個參數(shù)文件,位置隨意,能讀取就行。

[oracle@oradb95 ~]$ sqlplus / as   sysdba

 

SQL*Plus: Release 12.2.0.1.0 Production on Tue Jun   19 12:59:58 2018

 

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

 

Connected to an idle instance.

 

SQL> startup nomount   pfile='/home/oracle/initgb.ora';

ORACLE instance started.

 

Total System Global Area 1.0100E+10 bytes

Fixed Size                 12170040 bytes

Variable Size              1979714760 bytes

Database Buffers         8086618112 bytes

Redo Buffers               21381120 bytes

注意:主庫是mount參數(shù),備庫是nomount。nomount不需要使用控制文件。

◆第三步,rman連主備庫,這個是在主庫上進行的操作:

[oracle@oradb162 oradata]$rman target sys/Oradb_162@oradb162 auxiliary   sys/Oradb_162@oradb95

Recovery Manager: Release 12.2.0.1.0 - Production   on Tue Jun 19 12:46:55 2018

 

Copyright (c) 1982, 2017, Oracle and/or its   affiliates.  All rights reserved.

 

connected to target database: GBDB (DBID=2214703447,   not open)

connected to auxiliary database: GBDB (not   mounted)

注意:連接字串只有@后邊的服務(wù)名不同,其它要一樣喲。為了不引起混亂,也可以簡化成“rman target /  auxiliary sys/Oradb_162@oradb95”。


◆第四步,復(fù)制數(shù)據(jù)庫到備庫,還是在主庫執(zhí)行呢,就在rman提示符里邊。

RMAN>duplicate target database   for standby from active database nofilenamecheck;

………大量輸出,略…………………


這一步是容易出問題的地方,要注意看輸出,最可能的原因就是需要的目錄沒有手工創(chuàng)建。另外,如果跟我想法相同(主備目錄結(jié)構(gòu)相同、oracle sid也相同),那么用rman復(fù)制時把參數(shù)“nofilenamecheck”加上。

◆第五步,主庫打開數(shù)據(jù)庫。

SQL> alter database open;

 

Database altered.

   

◎啟動備庫,使其與主庫同步

SQL> ALTER DATABASE RECOVER   MANAGED STANDBY DATABASE USING CURRENT LOGFILE  DISCONNECT FROM SESSION;

 

Database altered.

復(fù)制完數(shù)據(jù)庫以后,備庫把自己切換成mount狀態(tài)了,因此無需人為干涉。

 

◎驗證主備同步狀況

暴力一點,主庫上創(chuàng)建一個表空間,等待片刻,分別查看兩邊文件的生成情況。

SQL> create tablespace   WUHUSER  datafile   ‘/u01/app/oracle/oradata/whcrm/wuhuser01.fbf’ size 10G;

登錄到到備庫,查看目錄,看是否自動生成數(shù)據(jù)文件。

[oracle@oradb95 oradata]$ pwd

/u01/app/oracle/oradata

[oracle@oradb95 oradata]$ ls -al

total 4194332

drwxr-xr-x    4 oracle oinstall       4096 Jun   19 10:43 .

drwxrwxr-x 10 oracle oinstall       4096 Jun 18 14:15 ..

drwxr-xr-x    3 oracle oinstall       4096 Jun   18 22:17 gbdb

drwxr-xr-x    3 oracle oinstall       4096 Jun   18 15:27 GBDB

-rw-r-----  1 oracle oinstall 4294975488 Jun 19 13:19   wuhuser01.dbf

同時也查看兩邊的oracle告警日志,做進一步核實。再增一法,主備庫查歸檔情況。

主庫執(zhí)行

SQL> alter system switch logfile;

 

System altered

SQL> select   SEQUENCE#,FIRST_TIME,NEXT_TIME ,APPLIED from v$archived_log;

…………………………省略若干…………………

SEQUENCE# FIRST_TIM NEXT_TIME APPLIED

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

        46   19-JUN-18 19-JUN-18 NO

        46   19-JUN-18 19-JUN-18 YES

        47   19-JUN-18 19-JUN-18 NO

        47   19-JUN-18 19-JUN-18 YES

        48   19-JUN-18 19-JUN-18 NO

        48 19-JUN-18 19-JUN-18 NO

 

94 rows selected.

備庫執(zhí)行

select SEQUENCE#,FIRST_TIME,NEXT_TIME ,APPLIED   from v$archived_log;

…………………………省略若干…………………

SEQUENCE# FIRST_TIM NEXT_TIME APPLIED

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

        37   19-JUN-18 19-JUN-18 YES

        38   19-JUN-18 19-JUN-18 YES

        39   19-JUN-18 19-JUN-18 YES

        40   19-JUN-18 19-JUN-18 YES

        41   19-JUN-18 19-JUN-18 YES

        42   19-JUN-18 19-JUN-18 YES

        43   19-JUN-18 19-JUN-18 YES

        44   19-JUN-18 19-JUN-18 YES

        45   19-JUN-18 19-JUN-18 YES

        46   19-JUN-18 19-JUN-18 YES

        47 19-JUN-18   19-JUN-18 YES

 

 SEQUENCE#   FIRST_TIM NEXT_TIME APPLIED

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

        48 19-JUN-18 19-JUN-18   IN-MEMORY

 

34 rows selected.


Dataguard主備角色切換

為保證可靠性,需要進行主庫->備庫,備庫->主庫;原主庫->主庫,原備庫->備庫。能變過去也能變回來,方為好手。

切換有操作順序,需先在主庫操作,使其變成備庫,然后才可以在備庫進行切換。

 

◎主庫切換成備庫

查看主庫切換狀態(tài):

SQL> select switchover_status   from v$database;

 

SWITCHOVER_STATUS

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

TO STANDBY

主庫變備庫:

SQL> alter database commit to   switchover to standby;

 

Database altered.

主庫再啟動實例(現(xiàn)在角色是standby備庫了)

SQL> startup   mount;

ORACLE instance started.

 

Total System Global Area 1.0100E+10 bytes

Fixed Size                 12170040 bytes

Variable Size            1979714760 bytes

Database Buffers         8086618112 bytes

Redo Buffers               21381120 bytes

Database mounted.

SQL> ALTER DATABASE RECOVER   MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

 

Database altered.

   

◎備庫變主庫

主庫活著的話,執(zhí)行“select switchover_status from v$database;”得到的輸出為“NOT ALLOWED”。主庫轉(zhuǎn)換成備庫完成后,再執(zhí)行這個指令,這時輸出為:

SQL> select switchover_status   from v$database;

 

SWITCHOVER_STATUS

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

TO PRIMARY

備庫角色切換到主庫

SQL>alter   database commit to switchover to primary;

 

Database altered.

數(shù)據(jù)庫打開,這步別忘記了。

SQL> alter database open;

 

Database altered.

重復(fù)執(zhí)行上述步驟,又可以把角色還原。為防止意外,我強烈建議他們再增加一個云主機,把oracle安裝好,一旦主庫故障,立即把備庫提升成主庫,同時把預(yù)留的那臺做數(shù)據(jù)庫服務(wù),使之成為新的standby備庫。發(fā)生故障的主庫修復(fù)以后,準備好oracle,留著備用。

老田有話說

最近受邀在51CTO博客專欄出版《負載均衡高手煉成記》,依托自己十余年的IT運維經(jīng)驗,以實際工作經(jīng)驗為基礎(chǔ),介紹不同場景下,負載均衡的實現(xiàn)方式,以及負載均衡的日常維護。
本專欄適合于一直徘徊在運維初級未找到入佳境之門的運維工程師,也適合對負載均衡有興趣了解和學(xué)習(xí)的技術(shù)愛好者。跟著老田學(xué)完這個系列課程,不僅學(xué)知識,更是漲薪、升職、進心儀公司的一大捷徑!

《負載均衡高手煉成記》

Oracle 12c dataguard云上挖坑記--為某機場貴賓業(yè)務(wù)部署oracle 12c到云端

新聞名稱:Oracle12cdataguard云上挖坑記--為某機場貴賓業(yè)務(wù)部署oracle12c到云端
當(dāng)前路徑:http://muchs.cn/article42/iephec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司網(wǎng)頁設(shè)計公司、網(wǎng)站策劃外貿(mào)網(wǎng)站建設(shè)、ChatGPT網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)