阿里雲部署oracle 11g數據庫

某程序員在阿里雲部署了一套oracle 11g,老闆說他們搞了好幾天,監聽一直啓動不來,讓我給看看。登上去一瞧,原來是主機名設置的問題(把阿里雲的彈性ip直接寫在/etc/hosts文件,而云主機的網卡地址通常是私有地址)。這個事情,我還專門發了一篇文章,地址爲https://blog.51cto.com/sery/2084706 。修復完這個問題之後,以爲直接把數據庫這樣放在公網上很不穩當,同時又發現其它一些問題,好比磁盤空間規劃不合理、混裝java等。因而建議把此機做爲測試環境,另購幾臺雲主機,放入vpc網絡,從新部署應用和數據庫,把數據庫與其它應用獨立開來。猛戳此處視頻html


都怪我多事,只好親自操刀,從新在雲上給部署oracle了。本人歷來不推薦在公有云部署oracle,主要緣由有如下幾點:java

 一、雲主機沒有交換分區swap,瞭解好幾家服務商,都是這樣呢!c++

 二、雲服務器的操做系統可定製性不靈活。在個人經驗中,oracle 11g部署在centos5這樣的操做系統上,不會有依賴問題,而在centos6 以上版本,一些依賴包在安裝oracle過程當中,校驗就會出錯。程序員

 三、雲主機性能問題。通常狀況下,咱們都會選很高配置的物理服務器來部署。sql

  

在公有云部署oracle,儘管彆扭,但還得幹活啊。雖然在安裝過程當中,有幾個包不匹配(實際是版本高了),忽略掉這些校驗,部署上去,運行好一段時間(大概1個多月),也沒見看開發人員叫喚,時不時查告警日誌,也未見異常,說明安裝仍是成功的。目前,我的手裏沒有線上的雲服務器,這裏就用虛擬環境,來還原一下整個部署過程,但願能對有須要的人有所幫助.數據庫


選購一臺centos7的雲主機,外加一個250G的雲盤。雲盤分兩個區,一個用於交換分區,剩下的用做oracle的安裝目錄及數據存儲。劃分出來的數據分區,掛接到系統上。爲了符合oracle的安裝習慣,掛接點爲/u01.centos

7HV3O{A`~J_`FJ)F3Y7H2OK.png


在正式執行oracle的安裝腳本以前,有一系列的前置操作,因爲本人常常作部署,爲了省事,寫了一個腳本,內容爲:
安全

[root@oradb190 ~]# more oracle_rep.bash 

#!/bin/bashbash

#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-*


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

#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.shmmax = 536870912

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=zyzf1

export ORACLE_UNQNAME=zyzf1

export ORACLE_base=/u01/app/oracle

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

export PATH=$ORACLE_HOME/bin:$PATH

done

授予該腳本執行權限,而後執行./oracle_rep.bash。執行完畢,挨個檢查一下,看是否生成目錄、是否建立了用戶、是否修改了相關配置文件....


接下來,配置和啓用vnc,以圖形方式來遠程安裝oracle。物理服務器時代,咱們還可能去機房,作在物理服務器前邊,接上顯示器。但用了雲主機之後,這個路沒有了喲,固然也算解放了,不用去機房接受噪音和輻射嘛!


雲主機安裝的centos可能沒有默認安裝vnc服務,須要把gnome桌面,vncserver給安裝上去。centos7默認啓動了防火牆,sshd也有些限制,爲了減小干擾,通通把它們關閉掉。操做步驟以下(文字多點沒關係,反正也沒人給稿費):

一、關閉防火牆

systemctl stop firewalld.service

systemctl disable firewalld.service

二、修改sshd配置文件/etc/ssh/sshd_config

..........省略若干.................................

PermitRootLogin yes

..............略...........................

ClientAliveInterval 900

ClientAliveCountMax 30

...............略.................

三、安裝vncsevncser

yum groupinstall "X Window System"

yum install tigervnc-server -y

yum groupinstall "GNOME Desktop" "Graphical Administration Tools"

假如與桌面環境相關的包不安裝完整,vnc客戶端去鏈接之後,就多是藍屏,一個圖標也沒有,也沒法進行任何操做。安裝好vncserver之後,執行指令vncserver,輸入密碼。我通常用root啓動,設置跟系統root同樣的密碼。我看有些人的文檔,把vncserver作成一個常規服務,這沒什麼必要,安裝完oracle之後,就不再須要桌面環境嘛(若是用靜默方式安裝,這個也vnc也能夠省掉了)。

blob.png

接下來,大部分的操做,咱們就在vnc裏邊進行了。容易出問題的地方,應該在export DISPLAY這個地方,必定要覈對本身vncserver啓動時顯示的那個帶冒號後邊的數字(有些人只會抄,直接複製網上的例子)。

blob.png

其實咱們vnc客戶端鏈接也是用ip:加這個數字。

blob.png

至於上傳oracle安裝包,解壓和目錄受權一類的,這裏就略過。我通常是把oracle解壓出來的目錄,複製在/home/oracle目錄,而後再給它來一下 chown -R oracle:oinstall /home/oracle ,這樣切換成oracle賬號,執行安裝就不用擔憂權限問題。oracle 11g的兩個安裝包,解壓後,獲得一個大的目錄database,安裝腳本runInstaller及其它所需的全部文件,都在裏邊。

[root@localhost ~]# su - oracle

Last login: Thu Apr 26 22:13:21 CST 2018 on pts/2


[oracle@localhost ~]$ ls -al database/

total 16

drwxr-xr-x.  8 oracle oinstall  128 Aug 21  2009 .

drwx------.  6 oracle oinstall  123 Apr 26 22:14 ..

drwxr-xr-x. 12 oracle oinstall  203 Aug 17  2009 doc

drwxr-xr-x.  4 oracle oinstall  223 Aug 15  2009 install

drwxrwxr-x.  2 oracle oinstall   61 Aug 15  2009 response

drwxr-xr-x.  2 oracle oinstall   34 Aug 15  2009 rpm

-rwxr-xr-x.  1 oracle oinstall 3226 Aug 15  2009 runInstaller

drwxrwxr-x.  2 oracle oinstall   29 Aug 15  2009 sshsetup

drwxr-xr-x. 14 oracle oinstall 4096 Aug 15  2009 stage

-rw-r--r--.  1 oracle oinstall 5402 Aug 18  2009 welcome.html


假定不作前置處理,咱們在vnc客戶端執行命令 su - oracle ;cd database ; ./runInstaller 會提示「

>>> Could not execute auto check for display colors using command /usr/bin/xdpyinfo. Check if the DISPLAY variable is set.    Failed <<<<

」。在root帳戶下,執行xhost + 及在oracle帳戶下執行 export DISPLAY=:1(注意,這裏很容易出問題,不少網上文檔,寫的都是DISPLAY=:0.0; export DISPLAY) ,前邊強調過了,必定要與vncserver啓動時主機名加冒號後帶的那個數字,vnc客戶端連的那個ip後的數字也是一樣的數字嘛!

blob.png

我在這裏踩過坑,從網上覆制過來,死活找不到緣由呢!都設置對了,確定會彈出安裝界面。step 1 of 9 不選不填,直接按 「Next」。step 2 of 9 選第二個「install database soft only」(只安裝數據庫軟件,數據庫自己後邊手動建立)。

blob.png

下一步選單實例數據庫,.....後邊接着選企業級數據庫版本「Enterprise Edition」.到step 9 of 12 這裏,安裝校驗會出現好幾處不知足oracle安裝要求的項目。我曾經試着按提示去修復(修改系統參數文件/etc/sysctl.conf、以yum方式安裝所須要的依賴包--實際大部分包都存在了,只是版本比要求的高或者須要32位的版本),沒什麼效果,直接忽略掉。

blob.png

實踐證實,這個決策是對的(centos 5.X安裝一點也沒問題)。由於這個oracle部署完成後,已經穩定運行了一個多月,開發人員沒叫喚,查告警日誌也沒啥異常呢!參看網上其餘人寫的文檔,也是通通忽略,嘿嘿!一路點下一步,到複製文件的時候,有點耗時,若是選的是sata盤,更是慢得要命了。當複製到84%的時候,出來一個報錯,看不到內容,只有一點點框框,真是悲催。blob.png

鼠標怎麼點、怎麼拉,都看不見報錯信息之真容。你藏起來,覺得我找不到你喲,我看日誌行不?我仍是認識幾個英語。

tail -100 /u01/app/oraInventory/logs/installActions2018-04-26_11-30-49PM.log

..........................略.....................

INFO: /usr/lib64/libstdc++.so.5: undefined reference to `memcpy@GLIBC_2.14'

INFO: collect2: error: ld returned 1 exit status

INFO: make: *** [ctxhx] Error 1

INFO: End output from spawned process.

INFO: ----------------------------------

INFO: Exception thrown from action: make

Exception Name: MakefileException

.........................略........................

查了資料,說是「glibc的版本太高所致」-當前系統的glibc版本爲glibc-2.17-196.el7_4.2.x86_64,網上有這個錯誤的修正辦法,我試了好幾遍不修復,也沒什麼問題。若是諸位要修復這個問題,以關鍵詞「INFO: /usr/lib64/libstdc++.so.5: undefined reference to」搜索便可得出方案。點右上角那個×,安裝繼續進行,片刻,有跳出來一個如出一轍的報錯框,也是同樣的尿性(點不開,看不到信息),緣由、查看是什麼問題及解決辦法同上(我是直接點×取消)。複製文件繼續進行,大概進行到94%的時候,再跳出框,也是一條線(真是考驗人的眼力啊)。

oracle安裝.png

到執行兩個腳本的時候,那個彈出框是能夠用鼠標拉來的,總算鬆了口氣。


blob.png

以root賬號按順序執行完提示的那兩個腳本,完成安裝過程。接下來,必不可少的步驟是配置監聽器和建立數據庫。這兩步是有順序的,即必須先建立監聽器,而後才能建立數據庫。


一、建立監聽器(主機名最好設置上):oracle環境變量若是設置正確的話(.bash_profile 文件有這麼一行

export PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:$ORACLE_HOME/bin」),仍是在vnc客戶端圖形界面下以oracle賬號執行netca命令,點幾回鼠標就能順利完成這個操做。爲了檢驗監聽器是否正確安裝,可執行監聽器命令行 lnsrctl  start啓動監聽器,因爲oracle數據庫沒有建立,天然就不能註冊監聽器,所以輸出信息就會有「The listener supports no services」。更能夠進入oracle的安裝目錄,查看/u01/app/oracle/product/11.2.0/network/admin文件listener.ora是否存在,內容是否與啓動監聽器時的輸出相符合。

[oracle@localhost ~]$ lsnrctl start


LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 27-APR-2018 01:34:01


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


Starting /u01/app/oracle/product/11.2.0/bin/tnslsnr: please wait...


TNSLSNR for Linux: Version 11.2.0.1.0 - Production

System parameter file is /u01/app/oracle/product/11.2.0/network/admin/listener.ora

Log messages written to /u01/app/oracle/diag/tnslsnr/db217/listener/alert/log.xml

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=db217)(PORT=1521)))


Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db217)(PORT=1521)))

STATUS of the LISTENER

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

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production

Start Date                27-APR-2018 01:34:01

Uptime                    0 days 0 hr. 0 min. 0 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/app/oracle/product/11.2.0/network/admin/listener.ora

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

Listening Endpoints Summary...

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

The listener supports no services

The command completed successfully

二、建立數據庫:仍然是在vnc客戶端圖形界面,以oracle賬號執行dbca指令,彈出操做界面後,連續點幾回鼠標,到 step 2 of 12 這個地方,選定製數據庫「Custom database」,往下幾步,到填寫數據庫名,通常狀況下,dbca能自動讀取oracle環境變量裏面設置的值。

blob.png

再日後進行幾步,到 step 7 of 12 的地方,把歸檔給選上(也可在建立完之後,從sqlplus進去開啓)。

blob.png

連續點幾回鼠標,點到「finish」時,就開始真正建立數據(數據文件、重作日誌等),這個過程比安裝oracle複製文件更慢一些,要耐心等待一下。執行完成後,可到數據目錄,查看生成的文件:

[oracle@localhost zyzf1]$ pwd

/u01/app/oracle/oradata/zyzf1


[oracle@localhost zyzf1]$ ll

total 1705316

-rw-r----- 1 oracle oinstall   9748480 Apr 27 02:00 control01.ctl

-rw-r----- 1 oracle oinstall  52429312 Apr 27 02:00 redo01.log

-rw-r----- 1 oracle oinstall  52429312 Apr 27 02:00 redo02.log

-rw-r----- 1 oracle oinstall  52429312 Apr 27 01:59 redo03.log

-rw-r----- 1 oracle oinstall 629153792 Apr 27 02:00 sysaux01.dbf

-rw-r----- 1 oracle oinstall 734011392 Apr 27 02:00 system01.dbf

-rw-r----- 1 oracle oinstall  20979712 Apr 27 01:59 temp01.dbf

-rw-r----- 1 oracle oinstall 209723392 Apr 27 02:00 undotbs01.dbf

-rw-r----- 1 oracle oinstall   5251072 Apr 27 02:00 users01.dbf

同時,oracle實例也會自動啓動,經過查看系統進程,便可驗證。如今,咱們在回過頭去查看監聽器的狀態,看看與未建立數據庫以前的差別:

[oracle@localhost zyzf1]$ lsnrctl status


LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 27-APR-2018 02:36:15


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


Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db217)(PORT=1521)))

STATUS of the LISTENER

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

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production

Start Date                27-APR-2018 01:34:01

Uptime                    0 days 1 hr. 2 min. 13 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/app/oracle/product/11.2.0/network/admin/listener.ora

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

Listening Endpoints Summary...

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

Services Summary...

Service "zyzf1" has 1 instance(s).

  Instance "zyzf1", status READY, has 1 handler(s) for this service...

Service "zyzf1XDB" has 1 instance(s).

  Instance "zyzf1", status READY, has 1 handler(s) for this service...

The command completed successfully

實例自動註冊進來了(是監聽器註冊到實例,仍是實例註冊到監聽器,這個有點昏,哪位大大神幫回答一下)。看進程及監聽還不夠,還須要從sqlplus登進去,執行「select count(*) from v$session;」看輸出;關閉實例,再啓動,以檢驗其正確性。


花了大把時間,僅僅是把oracle部署上去了,要交付使用,還有一些工做須要完成,包括修改密碼過時時間、修改太小的默認表空間(system、sysaux、temp等)、建立大的redo日誌文件、控制文件多路複用、建立單獨的用戶表空間等等。若是不把這些規範作好,開發人員極有可能直接就開始在system上建立數據表、應用程序直接使用system賬號鏈接數據庫.....


默認密碼過時時間是180天,把它改爲不過時也無妨。

SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;


Profile altered.


SQL>SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT

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

DEFAULT                        PASSWORD_LIFE_TIME               PASSWORD UNLIMITED


系統相關表空間擴容(以system爲例),直接看看幾個表空間文件的情況。

[oracle@db217 zyzf1]$ pwd

u01/app/oracle/orada/ta/zyzf1


[oracle@db217 zyzf1]$ du -hs *

9.3M    control01.ctl

51M     redo01.log

51M     redo02.log

51M     redo03.log

601M    sysaux01.dbf

701M    system01.dbf

9.2M    temp01.dbf

851M    undotbs01.dbf

5.1M    users01.dbf

如今硬盤容量都以TB計算了,別捨不得把size搞大一點。

SQL> alter database datafile '/u01/app/oracle/oradata/zyzf1/system01.dbf' resize 10G;


oracle@db217 zyzf1#du -hs *

9.3M    control01.ctl

21G     qhwy201801.dbf

513M    redo004.log

513M    redo005.log

513M    redo006.log

51M     redo01.log

51M     redo02.log

51M     redo03.log

621M    sysaux01.dbf

11G     system01.dbf

16M     temp01.dbf

1.1G    undotbs01.dbf

42M     users01.dbf


建立大的redo日誌文件,刪除系統默認的小的redo,偷了一下懶,一個日誌組只建立了一個成員。

SQL> alter database add logfile group 4(‘/u01/app/oracle/oradata/orcl/redo04.log’size 512M;


SQL> alter database add logfile group 5(‘/u01/app/oracle/oradata/orcl/redo05.log’size 512M;


SQL> alter database add logfile group 6(‘/u01/app/oracle/oradata/orcl/redo06.log’size 512M;



SQL>alter system switch logfile;

SQL>select GROUP#,THREAD#,BYTES,MEMBERS,STATUS from v$log;


GROUP#   THREAD#      BYTES    MEMBERS STATUS

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

1       1   52428800          1 INACTIVE

2       1   52428800          1 INACTIVE

3       1   52428800          1 CURRENT

4         1   536870912            1 INACTIVE

5         1   536870912            1 INACTIVE

6         1   536870912            1 CURRENT


SQL>  alter system switch logfile;

SQL> alter database drop logfile group 1;

連續切換,以便於幹掉舊的小的聯機重作日誌文件。


控制文件多路複用:默認均可能在一個分區下邊,至少要再建立一個,以防萬一。

SQL> select inst_id,name from gv$controlfile;
   INST_ID                                              NAME
----------------------------------------------------------------------------------------------   
1  /u01/app/oracle/oradata/zyzf1/control01.ctl   
1  /u01/app/oracle/flash_recovery_area/zyzf1/control02.ctl
SQL> alter system setcontrol_files='/u01/app/oracle/oradata/zyzf1/control01.ctl','/u01/app/oracle/flash_recovery_area/zyzf1/control02.ctl','/home/oracle/control03.ctl'scope=spfile;
[oracle@db217 ~]$cp /u01/app/oracle/oradata/zyzf1/control01.ctl /home/oracle/control03.ctl
SQL> alter database mount;
Database altered.
SQL> alter database open;
Database altered.


 建立用戶及其默認表空間。表空間大小固定,建議20G,用滿了再新增一個20G的,這樣方便管理,也相對安全一些。具體操做方法,再也不描述。不過癮可點此處。


下載安裝前腳本,猛戳此處。

相關文章
相關標籤/搜索