Oracle Database大概是我用過最難搞的資料庫,實在不理解為什麼那麼多人或企業對它情有獨鍾或推崇,光是安裝過程我就遇到無數障礙,許多設定與參數都很艱澀又難理解,不像是MySQL和PostgreSQL那樣讓使用者親善,大概是一年前我有安裝成功,但是當時偷懶沒有紀錄,最近有點時間就想來重新安裝一次,但光是安裝Single Instance我就耗掉了快一週時間,挺後悔之前沒有紀錄,平白浪費了許多時間,所以這次一定要寫起來。只能怪說我沒事要越級打怪,挑戰這個史上最困難的資料庫,而且我還沒有安裝成功過更艱難的RAC,只能等到之後有閒工夫時再繼續了。
一‧事前準備
一台VM,基本配備:
核心CPU、4GB RAM、50GB硬碟
IP:10.113.112.50
管理帳號密碼:root / 1qaz@WSX#EDC
1.安裝遠端桌面(optional)
$ rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ yum install xrdp tigervnc-server
$ systemctl start xrdp
$ systemctl enable xrdp
$ netstat -antup | grep xrdp
$ firewall-cmd --permanent --zone=public --add-port=3389/tcp \\一定要讓3389 port打開,遠端桌面才能連
$ firewall-cmd --reload
$ systemctl status xrdp
2.遠端桌面的必要性
須說明一下,由於一開始已經知道安裝過程中一定會用到UI畫面(Oracle Database最麻煩處之一),而且還要留意可能會出現語言衝突,所以安裝VM時我就選擇了英文版、有Gnome的CentOS7來安裝,然後用遠端方式連入電腦,但在後面安裝時仍然發生了GUI彈出視窗無法顯示的問題,而且至少花了我三天的時間,結果還是沒有很徹底搞定,所以這邊要先註明,下次在安裝開始前,直接在VM的Console上操作,不要再用遠端去連電腦,光是這點就很想一直抱怨,Oracle Database明明就是個難用又愛找碴的爛資料庫,到底是哪些大德那麼推它的???
二.安裝軟體及相關套件
1.安裝所需基本套件
$ sudo apt update -y
$ yum install -y binutils.x86_64 compat-libcap1.x86_64 gcc.x86_64 gcc-c++.x86_64 glibc.i686 glibc.x86_64 glibc-devel.i686 glibc-devel.x86_64 ksh compat-libstdc++-33 libaio.i686 libaio.x86_64 libaio-devel.i686 libaio-devel.x86_64 libgcc.i686 libgcc.x86_64 libstdc++.i686 libstdc++.x86_64 libstdc++-devel.i686 libstdc++-devel.x86_64 libXi.i686 libXi.x86_64 libXtst.i686 libXtst.x86_64 make.x86_64 sysstat.x86_64 zip unzip
2.建立oracle所需帳號和群組
$ groupadd oinstall
$ groupadd dba
$ useradd -g oinstall -G dba oracle
$ passwd oracle \\密碼先給1qaz@WSX#EDC
3.設定內核參數
$vim /etc/sysctl.conf
下面的參數我完全不知道是什麼意義,直接照抄網路上別人的設定,但kernel.shmall和kernel.shmmax照抄後再安裝的話會出錯,後來爬文才發現參數值要更大,所以特此紅字註記。
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 18350080
kernel.shmmax = 75161927680
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 = 1048586
設定完後要執行
$ sysctl -p
$ sysctl -a
4.設定安全限制參數
$ vim /etc/security/limits.conf
我也不知道這些參數的意義,只知道也是關於內核限制的一些設定,直接照抄。
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
5.下載好要安裝的軟體
這些軟體不是很好找,無法用wget或curl等其他方式就從指令列下載,得要先去網頁上找,下載完後再scp傳到這台VM上,並不是很便利。
$ scp linuxx64_12201_database.zip linuxamd64_12102_database_1of2.zip linuxamd64_12102_database_2of2.zip oracle@10.113.112.50:/home/oracle
linuxamd64_12102_database_1of2.zip
linuxamd64_12102_database_1of2.zip
6.解壓縮檔案至一個資料夾內
unzip linuxamd64_12102_database_1of2.zip -d /stage/
unzip linuxamd64_12102_database_2of2.zip -d /stage/
\\其實不一定要下載amd64核心用的版本,我只是隨便下載隨便用的
7.建立安裝資料庫用的資料夾
要執行安裝之前,要先自己建立這些資料夾和賦予相對的權限,以便安裝完畢後資料庫檔案有地方放,這部分我也是覺得莫名其妙,簡直是一點也不自動化的愚蠢行為,別的資料庫在建立時都會自動產生,只有Oracle要手動,真是非常惱人。
$ mkdir /u01
$ mkdir /u02
$ chown -R oracle:oinstall /u01
$ chown -R oracle:oinstall /u02
$ chmod -R 775 /u01
$ chmod -R 775 /u02
$ chmod g+s /u01
$ chmod g+s /u02
三.安裝資料庫
1.確定Linux的display效能正常
這部分我搞了整整超過三天,按照網路上的許多教程都不會提到這段,但是Google上很多關於debug Oracle Database的問題裡面都有人反映,這裡也呼應前面說安裝遠端桌面的必要性,開始按下安裝指令後,發現要麼彈不出安裝視窗、要麼就是一片白、再不然就是根本亂碼,嚴重懷疑這款資料庫軟體有故意想要搞死人的動機。
 |
就是這個彈出畫面搞了我好幾天 |
解決方法:
a. 用VM的console視窗即可。
b. 先root登入,修改DISPLAY設定
$ export DISPLAY=:0 \\一定要這樣設定,不然後面就不用繼續了
$ echo $DISPLAY
$ xhost + \\允許其他使用者也能執行DISPLAY的修改
c. 切換使用者為oracle,並再執行一樣的指令
$ export DISPLAY=:0
$ echo $DISPLAY
 |
對嘛!VM打開就不會有問題,雖然有視窗大小限制,但比遠端桌面好搞多了! |
2.開始UI介面的安裝流程
 |
不需要透過Email接受Oracle的資訊,所以留空白後下一步 |
 |
安裝過程很多這種故意嚇人的訊息,我都不鳥它 |
 |
預設選第一項,不用改 |
 |
我只需要桌面版 |
 |
此步驟需要注意: a. 路徑的設定會跟前面步驟二之7有關,要確保前後一致性。 b. Software location:有兩種版本(12.2.0和12.1.2),這邊我選的是前者,選下去上面的Oracle Base會自動反灰。 c. OSDBA group:有兩個選項(oinstall和dba),我選後者。 d .Global database name:用預設的orcl e. Administrative password:隨便輸入,但是不能有@符號(我用1qaz2wsx#EDC。在Oracle裡面,@符號是有用途的,之後在建立新帳號密碼時也要注意這點!) f. Create as Container database打勾,下面用預設的pdborcl(Oracle Database 有所謂的插拔式容器資料庫的概念,後面導入範例資料庫時會遇到,屆時再說明) |
 |
用預設的倉庫資料夾,不調整 |
 |
安裝前的自動檢查,通常會勾右上角的ignore All |
 |
要出現提醒訊息,就直接按Yes,不接受恐嚇 |
 |
安裝開始....... |
 |
快結束前,噴出提醒訊息:要用root才能執行的檔案 |
 |
又想恐嚇我,不鳥它,按下yes就能一路到安裝完畢 |
四.測試資料庫
1.防火牆開啟指定port號(使用root)
$ firewall-cmd --zone=public --add-port=1521/tcp --add-port=5500/tcp --add-port=5520/tcp --add-port=3938/tcp --permanent
$ firewall-cmd --reload
2.安裝rlwrap指令用工具
這又是另一個我覺得Oracle Database很愚蠢的地方,別家的資料庫在用指令時都可以透過上下鍵找尋歷史指令,但Oracle自以為很特別地不提供這個功能,導致在後面的SQL和RMAN指令列時,按上下鍵只會出現奇怪的訊息,被迫一定要另外安裝rlwrap工具(爛)。
$ yum install rlwrap
3.設定資料庫工具的執行路徑 (使用oracle)
$ su - oracle
$ vim .bash_profile
TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/lib64; export LD_LIBRARY_PATH
CLASSPATH=$ORACaLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
\\順便將rlwrap指令寫入bash_profile才會比較方便
結束編輯後,要記得執行,設定才會生效
$ source .bash_profile
4.測試用sqlplus連入資料庫
$ sqlplus / as sysdba
\\ 也可以用sqlplus system@orcl方式來登入,密碼就是前面安裝時設定的1qaz2wsx#EDC
\\ 或者是用sqlplus sys/1qaz2wsx#EDC@orcl as sysdba,直接把密碼打上去,不過通常不會有人這樣用
緊接著測試一下資料庫有沒有啟動
SQL> select * from dual;
D
-
X
看樣子是成功了,dual是個預設的測試用db,也可以拿來當計算機用。
SQL> select 1000/5 from dual;
1000/5
----------
200
五.匯入資料庫
1.下載範例資料庫(本機)
在網路上找到一個很好的教學網站(https://www.oracletutorial.com/),非常適合我這種初學者,它除了有提供完整各種資料庫SQl指令教學,也給了很基本練習用的資料可以下載,進入後選Download Oracle Sample Database即可。
下載完後再傳到資料庫主機上:
$ scp oracle-sample-database.zip oracle@10.113.112.50:/home/oracle
到主機上解壓縮
$ unzip oracle-sample-database.zip -d /home/oracle/oracle-sample-database
2.修改資料庫network檔 (使用oracle)
這部分非常重要,Oracle Database的連線方式非常嚴謹(或者是說呆板),不像是MYSQL或PostgreSQL比較直覺和單純的連線方式(任何使用者進入都能看到DB,只差在能否使用和檢視),Oracle的每個不同使用者無法看到他人的DB,連連線方式都有很嚴格的限制。
$ vim $ORACLE_HOME/network/admin/listener.ora
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
\\本機預設的設定,這部分在前面安裝時有出現過,尤其注意service_name=orcl
PDBORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdborcl)
)
)
\\因為接下來要匯入的範例資料庫是pluggable database,且service_name=pdborcl,上面一整段一定要加入!
\\ pluggable database 是Oracle特有的一種設計,有點類似於USB隨身碟或隨身硬碟的隨插隨拔概念,要用的時候要接上去,接上去也不一定能使用,還得確定它能打開,這樣的使用方式猜想是為了安全性(?)。
3.匯入範例資料庫
$ sqlplus / as sysdba
SQL> SHOW con_name;
CON_NAME
------------------------------
CDB$ROOT
SQL> ALTER SESSION SET CONTAINER = pdborcl;
SQL> SHOW con_name; \\ 要切換成pluggable databas
CON_NAME
------------------------------
PDBORCL
SQL> CREATE USER OT IDENTIFIED BY Orcl1234; \\ 此user是範例資料的使用者,必須先建立好才能匯入
SQL> GRANT CONNECT, RESOURCE, DBA TO OT; \\ 賦予user OT應有個權限
SQL> CONNECT ot@pdborcl \\ 轉換使用者為OT
Enter password: \\ 密碼Orcl1234
Connected.
SQL>@/home/oracle/oracle-sample-database/ot_create_user.sql \\ create user
SQL>@/home/oracle/oracle-sample-database/ot_schema.sql \\ create table
SQL>@/home/oracle/oracle-sample-database/ot_data.sql \\ insert data
SQL> SELECT table_name FROM user_tables ORDER BY table_name;
TABLE_NAME
--------------------------------------------------------------------------------
CONTACTS
COUNTRIES
CUSTOMERS
EMPLOYEES
INVENTORIES
LOCATIONS
ORDERS
ORDER_ITEMS
PRODUCTS
PRODUCT_CATEGORIES
REGIONS
WAREHOUSES
12 rows selected.
到這邊就先告一段落了,以後若還有機會使用此資料庫再進一步研究。
沒有留言:
張貼留言