某程序員在阿里雲部署了一套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
在正式執行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也能夠省掉了)。
接下來,大部分的操做,咱們就在vnc裏邊進行了。容易出問題的地方,應該在export DISPLAY這個地方,必定要覈對本身vncserver啓動時顯示的那個帶冒號後邊的數字(有些人只會抄,直接複製網上的例子)。
其實咱們vnc客戶端鏈接也是用ip:加這個數字。
至於上傳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後的數字也是一樣的數字嘛!
我在這裏踩過坑,從網上覆制過來,死活找不到緣由呢!都設置對了,確定會彈出安裝界面。step 1 of 9 不選不填,直接按 「Next」。step 2 of 9 選第二個「install database soft only」(只安裝數據庫軟件,數據庫自己後邊手動建立)。
下一步選單實例數據庫,.....後邊接着選企業級數據庫版本「Enterprise Edition」.到step 9 of 12 這裏,安裝校驗會出現好幾處不知足oracle安裝要求的項目。我曾經試着按提示去修復(修改系統參數文件/etc/sysctl.conf、以yum方式安裝所須要的依賴包--實際大部分包都存在了,只是版本比要求的高或者須要32位的版本),沒什麼效果,直接忽略掉。
實踐證實,這個決策是對的(centos 5.X安裝一點也沒問題)。由於這個oracle部署完成後,已經穩定運行了一個多月,開發人員沒叫喚,查告警日誌也沒啥異常呢!參看網上其餘人寫的文檔,也是通通忽略,嘿嘿!一路點下一步,到複製文件的時候,有點耗時,若是選的是sata盤,更是慢得要命了。當複製到84%的時候,出來一個報錯,看不到內容,只有一點點框框,真是悲催。
鼠標怎麼點、怎麼拉,都看不見報錯信息之真容。你藏起來,覺得我找不到你喲,我看日誌行不?我仍是認識幾個英語。
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%的時候,再跳出框,也是一條線(真是考驗人的眼力啊)。
到執行兩個腳本的時候,那個彈出框是能夠用鼠標拉來的,總算鬆了口氣。
以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環境變量裏面設置的值。
再日後進行幾步,到 step 7 of 12 的地方,把歸檔給選上(也可在建立完之後,從sqlplus進去開啓)。
連續點幾回鼠標,點到「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的,這樣方便管理,也相對安全一些。具體操做方法,再也不描述。不過癮可點此處。