# 安裝Oracle 19c ###### tags: `安裝` `database` ## 系統環境 IP 位置 : 120.114.140.50 OS : Rocky linux 8.7 oracle database version : 19.3.0.0.0 file:///C:/Users/4070D043/Documents/Downloads/Database%20Systems,%204th%20Edition_%20A%20Practical%20Approach%20to%20Design,%20Implementation%20and%20Management%20(%20PDFDrive%20).pdf ## 使用軟體 * [LINUX.X64_193000_db_home.zip](https://www.oracle.com/database/technologies/oracle-database-software-downloads.html) * [oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm](https://www.oracle.com/database/technologies/oracle19c-linux-downloads.html) * [compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm](http://www.rpmfind.net/linux/rpm2html/search.php?query=compat-libstdc%2B%2B-33(x86-64)) * [compat-libcap1-1.10-7.el7.x86_64.rpm](https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/index.html) ## 前置作業 ### 更新 # dnf update -y ### 更改主機名稱 在安裝Oracle Database 19c 之前,需要為主機名配置好主機解析。主機解析可以通過DNS 服務器完成 開啟 /etc/hostname # ol8-19.localdomain ### 增加IP地址和主機名稱 開啟 /etc/hosts # 120.114.140.50 ol8-19.localdomain ol8-19 ### 設定所需群組及用戶 開啟/etc/group oinstall:x:64890:oracle dba:x:64891:oracle oper:x:64892:oracle backupdba:x:64893:oracle dgdba:x:64894:oracle kmdba:x:64895:oracle racdba:x:64896:oracle ### 更改user(oracle)的UID和GID 開啟/etc/passwd # oracle:x:64890:64890::/home/oracle:/bin/bash ### 安裝 libstdc++ 包含 GCC 3.3.4 的兼容標準 C++ 庫 Oracle Text所需要的,在RedHat 7的安裝包中已刪除了。 # dnf localinstall -y compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm ### 安裝所需軟體 # dnf install -y bc binutils elfutils-libelf elfutils-libelf-devel fontconfig-devel \ gcc gcc-c++ glibc glibc-devel ksh ksh libaio libaio-devel libgcc libnsl libnsl.i686 \ libnsl2 libnsl2.i686 librdmacm-devel libstdc++ libstdc++-devel libX11 libXau libxcb \ libXi libXrender libXrender-devel libXtst make net-tools nfs-utils smartmontools \ sysstat targetcli unixODBC ## 設置安裝oracle database 條件 ### 安裝 Oracle 安裝先決條件 (OIP) 包 # dnf localinstall -y oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm ### 安裝 libcapl 庫獲取和設置 POSIX.1e C 語言環境也稱為 POSIX 語言環境,是所有 POSIX 相容系統的 POSIX 系統預設語言環境。 # dnf localinstall -y compat-libcap1-1.10-7.el7.x86_64.rpm ### 編輯selinux為寬容模式 開啟/etc/selinux/config SELINUX=permissive 檢查 getenforce  ### 設置 kernel 參數 開啟/etc/sysctl.conf fs.file-max = 6815744 kernel.sem = 250 32000 100 128 kernel.shmmni = 4096 kernel.shmall = 1887436 kernel.shmmax = 7730941132 kernel.panic_on_oops = 1 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 net.ipv4.conf.all.rp_filter = 2 net.ipv4.conf.default.rp_filter = 2 fs.aio-max-nr = 1048576 *net.ipv4.ip_local_port_range = 9000 65500 :::spoiler :::info *fs.file-max 系統可以打開 Kernal files 最大數量,當 Kernal open files 全部都在使用中,Linux 系統就無法作任何事情 kernel.sem = 250 32000 100 128 信號 250 SEMMSL max semaphores per array 每組訊息容納最大訊號數量 32000 SEMMNS max semaphores system wide 全部系統內所有訊息的最大數量 100 SEMOPM max ops per semop call 每個系統調用單個訊號集中最大訊號數量 128 SEMMNI max number of arrays 全部系統訊號集的最大值 kernel.shmmni 設置系統範圍內共享記憶體段的最大數量, kernel.shmall 設置可在系統範圍內使用的共享記憶體頁的總量 kernel.shmmax 用於定義單個共享記憶體段的最大值。設置一個共享記憶體段下容納下整個的SGA , 設置的過低可能會導致需要創建多個共享記憶體段,這樣可能導致系統性能的下降。 kernel.panic_on_oops 控制kernel的行為時遇到錯誤。 0 嘗試繼續運行。 1 延遲幾秒鐘(輸出klogd時間記錄),然後警告,如果警告sysctl也是非0後機器將重新啟動。 *net.core.rmem_default = 262144 網路接收與傳送 處理大文件,網絡性能非常差。並且可能會導致性能降低 Linux的stack是沒有為廣域網之間的大文件高速傳輸而配置的,這樣做是為了節約記憶體資源。為了使連接的系統服務之間能有更加高速的網絡處理更多的封包,可以很容易的通過增加網絡buffer size 來調整Linux 網絡stack 最大的發送buffer size (wmem) 和接收buffer size (rmem) *net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 net.ipv4.conf.all.rp_filter = 2 net.ipv4.conf.default.rp_filter = 2 *fs.aio-max-nr 定義為所有非同步I/O情況的事件之最大允許數,發起I/O請求的執行緒不等I/O操作完成,就繼續執行隨後的程式執行,電腦的CPU 的執行速度遠大於I/O 讀寫的執行速度,所以如果利用傳統的blocking或non-blocking操作I/O 的話,在同一個執行緒中就不能同時操作兩個以上的文件I/O,每次只能對一個文件進行I/O 操作,這樣效率很低下,因此允許一個執行緒同時發起多個 I/O 操作,而不必等待其中任何一個完成。有助於提高能夠重疊處理和 I/O 的應用程序的性能,提供當前系統範圍內的異步請求數。 linux的fs.aio-max-nr的默認值通常為65536。在Oracle Database等需要大量I/O操作的應用程序中,將fs.aio-max-nr的值設置為較高的1048576(*10241024)可以提高系統的I/O性能,理論上來說,也可以將fs.aio-max-nr的值設置為2097152甚至更高,但這取決於系統的硬體資源和應用程式的需求。但是如果過高的fs.aio-max-nr值可能會導致系統的I/O操作過度使用,從而降低系統的性能和穩定性。此外,一些Linux發行版可能有fs.aio-max-nr值的最大限制,因此需要確認系統是否支持將fs.aio-max-nr設置為較高的值。 net.ipv4.ip_local_port_range = 9000 65500 開啟的port範圍,相當於可連線數 ::: 更新 sysctl -p  ### Oracle 用户設置安全限制 開啟/etc/security/limita.d/oracle.conf oracle soft nofile 1024 可開檔案數 oracle hard nofile 65536 *oracle soft nproc 16384 最大程序數量 *oracle hard nproc 16384 oracle soft stack 10240 最大堆疊數量 oracle hard stack 32768 oracle hard memlock 134217728 oracle soft memlock 134217728 :::info ::: ### 設置oracle 用戶配置linux環境變量 切換至user(oracle) su - oracle 開啟~/.bash_profile # Oracle Settings export TMP=/tmp export TMPDIR=$TMP export ORACLE_HOSTNAME=oracle export ORACLE_UNQNAME=cdb1 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1 export ORA_INVENTORY=/u01/app/oraInventory export ORACLE_SID=orcl export PDB_NAME=pdb1 export DATA_DIR=/u01/oradata export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib export LC_ALL="zh_TW.UTF-8" export LANG="zh_TW.UTF-8" export NLS_LANG="TRADITIONAL CHINESE_TAIWAN.AL32UTF8" :::info AL32UTF8 有額外的可用字符,但它與 UTF8 完全相同。但這裡有一個重要的區別。雖然 UTF8 僅使用 2 個字節來存儲數據,但 AL32UTF8 使用 2 或 4 個字節。 ::: 執行 # source ~/.bash_profile ### 建立所需資料夾 # mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1 # mkdir -p /u02/oradata 更改目錄擁有者和群組 # chown -R oracle:oinstall /u01 /u02 更改目錄權限 # chmod -R 775 /u01 /u02 ### 解壓縮 LINUX.X64_193000_db_home.zip 切換至root # su - root 解壓縮 # unzip LINUX.X64_193000_db_home.zip -d /u01/app/oracle/product/19.3.0/dbhome_1/ ## 安裝oracle database ### 安裝資料庫 切換至user(oracle) # su - oracle 進入資料夾 # cd /u01/app/oracle/product/19.3.0/dbhome_1/ 安裝 export CV_ASSUME_DISTID=RHEL8.0 ./runInstaller -ignorePrereq -waitforcompletion -silent \ oracle.install.option=INSTALL_DB_SWONLY \ ORACLE_HOSTNAME=${ORACLE_HOSTNAME} \ UNIX_GROUP_NAME=oinstall \ INVENTORY_LOCATION=${ORA_INVENTORY} \ ORACLE_HOME=${ORACLE_HOME} \ ORACLE_BASE=${ORACLE_BASE} \ oracle.install.db.InstallEdition=EE \ oracle.install.db.OSDBA_GROUP=dba \ oracle.install.db.OSBACKUPDBA_GROUP=backupdba \ oracle.install.db.OSDGDBA_GROUP=dgdba \ oracle.install.db.OSKMDBA_GROUP=kmdba \ oracle.install.db.OSRACDBA_GROUP=racdba \ SECURITY_UPDATES_VIA_MYORACLESUPPORT=false \ DECLINE_SECURITY_UPDATES=true ### 初始化建立資料庫 切換至root # su - root 進入解壓縮的目錄 # cd /u01/app/oracle/product/19.3.0/dbhome_1/ 安裝資料庫 dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbname ${ORACLE_SID} -sid ${ORACLE_SID} \ -responseFile NO_VALUE \ -characterSet AL32UTF8 \ -sysPassword Abc123456 \ -systemPassword Abc123456 \ -createAsContainerDatabase true \ -numberOfPDBs 1 \ -pdbName ${PDB_NAME} \ -pdbAdminPassword Abc123456 \ -databaseType MULTIPURPOSE \ -automaticMemoryManagement false \ -totalMemory 12288 \ -storageType FS \ -datafileDestination "${DATA_DIR}" \ -redoLogFileSize 512 \ -emConfiguration NONE \ -ignorePreReqs DECLINE_SECURITY_UPDATES=true  #/u01/app/oraInventory/orainstRoot.sh #/u01/app/oracle/product/19.3.0/dbhome_1/root.sh ### 設置防火牆 切換至root # su - root ### 防火牆 # firewall-cmd --zone=public --add-port=1521/tcp --permanent # firewall-cmd --reload ### 啟動資料庫 切換至uesr(oracle) # su - oracle 開啟/etc/oratab orcl:/data/app/oracle/product/12.2.0/dbhome_1:Y ### 啟動oracle database lsnrctl start  ### 開啟oracle database 切換至user(oracle) # su - oracle 開啟 oracle database # sqlplus / as sysdba  ## 建立 table 建立 auser 資料表 CREATE TABLE auser( id NUMBER, name VARCHAR2(10), sex NUMBER ); 寫入資料 INSERT INTO auser VALUES (1, 'oracle' , 2); 查看 auser 資料表所有內容 SELECT * from auser; 刪除資料表 DROP TABLE auser;  ## 參考文獻 * https://jovepater.com/article/centos-7-oracle-database-19c-installation/ * https://docs.oracle.com/cd/E19253-01/819-0403/overview-1002/index.html * https://blog.csdn.net/bisal/article/details/100909708 * https://blog.51cto.com/ios9/4309700 * https://zhuanlan.zhihu.com/p/571407167 * https://support.oracle.com/knowledge/Oracle%20Database%20Products/2588500_1.html * https://www.yiibai.com/oracle/oracle-drop-table.html * https://zhuanlan.zhihu.com/p/54260924 * https://www.modb.pro/db/124719
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up