信創ARM_鯤鵬920安裝Oracle19c的過程

济南小老虎發表於2024-05-13

信創ARM_鯤鵬920安裝Oracle19c的過程


概要說明

五一加班被Oracled的 Oracle23ai刷爆了朋友圈.
自己也嘗試了下容器部署 Oracle23ai的操作
但是發現 free 版本最多 自定義 12GB的資料,
再多就不幹了.

所以我一直想能夠找到一個 ee 版本的oracle23ai
結果找來找去依舊無法找到,
但是翻到了一個 Oracle的釋出說明
ARM版本的Oracle19c 其實在2023年6月份釋出了.

然後想著自己一直搞信創, 能不能在鯤鵬上面安裝一下.
當然擔心的是, 如果真有客戶CTO這麼幹, 還的捯飭環境
不如先自己驗證一把

結果發現安裝過程曲曲折折, 耗費了三四個晚上熬夜自學才搞定.

主要是有坑, 坑還很深.

概要說明之坑

還好之前總結過 銀河麒麟安裝Oracle 所以相當順利一些. 

第一步是修改 /etc/os-release 等資訊
安裝 preinstall
建立目錄等操作
第二步 進行安裝
但是發現一直報錯,無法解決.
百度也沒有解決辦法, google上面也不符合我這個場景
最終發現是因為 ar 和 as 兩個二進位制, Oracle使用的是絕對路徑
沒辦法, 進行一下 ln 才繞過.
mkdir -p /opt/rh/devtoolset-8/root/usr/bin/
ln -s /bin/ar /opt/rh/devtoolset-8/root/usr/bin/ar
ln -s /bin/as /opt/rh/devtoolset-8/root/usr/bin/as

第三步:
應用千辛萬苦安裝上了
結果dbca建庫報錯. 
百度無果.google無果 .本來計劃在飛騰上面安裝OEL進行驗證
結果同事告知 飛騰2500 上面沒法安裝 OEL. 幹!-_-!
繼續搜搜,發現雲和恩墨上面有一個很隱晦的說法
需要用dbca 匯出建庫SQL
然後我嘗試了一晚上. 發現還似乎失敗. 整整一晚上.

最終解決問題.
我想到最近一直進行冷備資料庫的方式.
我認為Oracle應該也可以.
所以我又下載了 oracle19c 的x86的zip包
在銀河麒麟v10sp3 x86 上面部署
路徑和sid完全一樣
然後建立資料庫. 
將 data 和 pfile 複製到 arm 上面
啟動. 驗證可以啟動起來. 

正文

過程指令碼
其實可以寫一個一鍵部署
但是感覺意義不大. 
安裝的過程, 總結的過程都是學習的過程.

第一步 preinstall

https://yum.oracle.com/repo/OracleLinux/OL8/appstream/aarch64/getPackage/oracle-database-preinstall-19c-1.0-3.el8.aarch64.rpm

cat > /etc/redhat-release <<EOF
CentOS Linux release 8.0
EOF

cat > /etc/oracle-release <<EOF
CentOS Linux release 8.0
EOF

然後
yum install ksh* libaio* libnsl*  -y
rpm -ivh /oracle-database-preinstall-19c-1.0-3.el8.aarch64.rpm --nodeps --force


安裝過程


建立目錄

mkdir -p /u01/app/oracle/product/19/db_1
chown -R oracle:oinstall /u01/app/
chmod -R 775 /u01/app/

mkdir -p /home/oracle/etc
chown -R oracle:oinstall /home/oracle/etc
chmod -R 775 /home/oracle/etc

mkdir -p /home/data
chown -R oracle:oinstall /home/data
chmod -R 775 /home/data

修改環境變數

cat >/etc/profile.d/oracle.sh <<EOF
export ORACLE_SID=ORA19C    #資料庫database.rsp中的SID 
export ORACLE_BASE=/u01/app/oracle                   #BASE目錄
export ORACLE_HOME=/u01/app/oracle/product/19/db_1   #oracle安裝包的目錄
export PATH=/u01/app/oracle/product/19/db_1/bin:/u01/app/oracle/product/19/db_1/OPatch:$PATH
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/lib/usr/lib:/usr/local/lib
export TEMP=/tmp
export TMP=/tmp
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

set -o vi
stty erase ^h

if [ -t 0 ]; then
   stty intr ^C
fi
umask 022
EOF

cat >/home/oracle/.bashrc <<EOF
export ORACLE_SID=ORA19C    #資料庫database.rsp中的SID 
export ORACLE_BASE=/u01/app/oracle                   #BASE目錄
export ORACLE_HOME=/u01/app/oracle/product/19/db_1   #oracle安裝包的目錄
export PATH=/u01/app/oracle/product/19/db_1/bin:/u01/app/oracle/product/19/db_1/OPatch:$PATH
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/lib/usr/lib:/usr/local/lib
export TEMP=/tmp
export TMP=/tmp
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
EOF

安裝過程

scp /LINUX.ARM64_1919000_db_home.zip /u01/app/oracle/product/19/db_1/
cd /u01/app/oracle/product/19/db_1/
unzip LINUX.ARM64_1919000_db_home.zip

scp  /u01/app/oracle/product/19/db_1/install/response/db_install.rsp  /home/oracle/etc/
scp /u01/app/oracle/product/19/db_1/assistants/netca/netca.rsp  /home/oracle/etc/
scp /u01/app/oracle/product/19/db_1/assistants/dbca/dbca.rsp /home/oracle/etc/


修改配置節

cat > /home/oracle/etc/db_install.rsp <<EOF
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0
oracle.install.option=INSTALL_DB_SWONLY 
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_HOME=/u01/app/oracle/product/19/db_1
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=dba
oracle.install.db.OSBACKUPDBA_GROUP=dba
oracle.install.db.OSDGDBA_GROUP=dba
oracle.install.db.OSKMDBA_GROUP=dba
oracle.install.db.OSRACDBA_GROUP=dba
oracle.install.db.rootconfig.executeRootScript=
oracle.install.db.rootconfig.configMethod=
oracle.install.db.rootconfig.sudoPath=
oracle.install.db.rootconfig.sudoUserName=
oracle.install.db.CLUSTER_NODES=
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.globalDBName=ORA19C
oracle.install.db.config.starterdb.SID=ORA19C
oracle.install.db.ConfigureAsContainerDB=
oracle.install.db.config.PDBName=
oracle.install.db.config.starterdb.characterSet=ZHS16GBK
oracle.install.db.config.starterdb.memoryOption=
oracle.install.db.config.starterdb.memoryLimit=
oracle.install.db.config.starterdb.installExampleSchemas=
oracle.install.db.config.starterdb.password.ALL=Testxxxxxxxx
oracle.install.db.config.starterdb.password.SYS=Testxxxxxxxx
oracle.install.db.config.starterdb.password.SYSTEM=Testxxxxxxxx
oracle.install.db.config.starterdb.password.DBSNMP=Testxxxxxxxx
oracle.install.db.config.starterdb.password.PDBADMIN=Testxxxxxxxx
oracle.install.db.config.starterdb.managementOption=
oracle.install.db.config.starterdb.omsHost=
oracle.install.db.config.starterdb.omsPort=
oracle.install.db.config.starterdb.emAdminUser=
oracle.install.db.config.starterdb.emAdminPassword=
oracle.install.db.config.starterdb.enableRecovery=
oracle.install.db.config.starterdb.storageType=
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=
oracle.install.db.config.asm.diskGroup=
oracle.install.db.config.asm.ASMSNMPPassword=
EOF

chown oracle:oinstall /home/oracle/ -R
chown oracle:oinstall /u01/ -R
mkdir -p /opt/rh/devtoolset-8/root/usr/bin/
ln -s /bin/ar /opt/rh/devtoolset-8/root/usr/bin/ar
ln -s /bin/as /opt/rh/devtoolset-8/root/usr/bin/as
mkdir -p /oradata/ORA19C/audit
chown oracle:oinstall /oradata/ORA19C/audit -R
su - oracle
cd   /u01/app/oracle/product/19/db_1
rm -rf /u01/app/oraInventory/*
export CV_ASSUME_DISTID=RHEL7.6
mkdir -p /u01/temp
export TMP=/u01/temp
export TMPDIR=/u01/temp

./runInstaller -silent -responseFile /home/oracle/etc/db_install.rsp -ignorePrereq

exit  到 root使用者執行如下命令
/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/19/db_1/root.sh


mkdir -p /u01/app/oracle/admin/orcl/adump
mkdir -p /u01/app/oracle/fast_recovery_area


建立資料庫

mkdir -p /u01/app/oracle/data
cd /u01/app/oracle/data
dbca -silent -createDatabase -templateName General_Purpose.dbc -gdbname ora19c -sid ora19c -responseFile  /u01/app/oracle/data/dbca.log -characterSet ZHS16GBK -datafileDestination /u01/app/oracle/data  -memoryPercentage 30 -emConfiguration LOCAL 

蛋疼的事情發生了 鯤鵬上面的銀河麒麟這一步操作
/u01/app/oracle/cfgtoollogs/dbca

報錯為:

Exception in thread "main"
java.lang.UnsatisfiedLinkError: oracle.ops.mgmt.nativesystem.Native.getEnvironment(Ljava/lang/String;Loracle/ops/mgmt/nativesystem/NativeResult;)V
        at oracle.ops.mgmt.nativesystem.Native.getEnvironment(Native Method)
        at oracle.ops.mgmt.nativesystem.NativeSystem.getEnvironment(NativeSystem.java:399)
        at oracle.ops.mgmt.nativesystem.NativeSystem.getEnvironment(NativeSystem.java:315)
        at oracle.ops.verification.framework.util.VerificationUtil.getEnv(VerificationUtil.java:9202)
        at oracle.ops.verification.framework.util.VerificationUtil.isCVUTestEnv(VerificationUtil.java:13529)

這個就是一個深坑, 無法安裝. 

dbca問題繞過

使用 x86 的機器完全一樣的指令碼建庫. 
我這邊建庫之後的檔案主要在
資料檔案:
/u01/app/oracle/data
配置檔案
/u01/app/oracle/product/19/db_1/dbs/initORA19C.ora

將這兩個檔案放到 鯤鵬ARM上面對應的目錄上面. 
然後執行啟動
sqlplus / as sysdba
startup pfile=/u01/app/oracle/product/19/db_1/dbs/initORA19C.ora

然後 使用 
create spfile from pfile 
搞定. 

一些資料

配置檔案
/u01/app/oracle/product/19/db_1/dbs/initORA19C.ora
日誌檔案
/u01/app/oracle/diag/rdbms/ora19c/ORA19C/trace/alert_ORA19C.log

配置檔案內容
cat > /u01/app/oracle/product/19/db_1/dbs/initORA19C.ora <<EOF
db_name='ora19c'
memory_target=8G
processes = 1500
audit_file_dest='/u01/app/oracle/admin/orcl/adump'
audit_trail ='db'
db_block_size=8192
db_domain=''
db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='<ORACLE_BASE>'
dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
control_files = (/u01/app/oracle/data/ORA19C/control01.ctl, /u01/app/oracle/data/ORA19C/control02.ctl)
compatible ='19.0.0'
EOF

啟動服務
sqlplus / as sysdba
startup
create spfile from pfile ; 

檢視版本, 檢視字符集
select * from v$version;
select userenv('language') from dual;

/u01/app/oracle/data/ORA19C/control01.ctl
/u01/app/oracle/data/ORA19C/control02.ctl

相關文章