openEuler安裝Oracle踩坑
不得不說Oracle安裝在Windows上就夠麻煩了,到Linux上直接地獄難度.
眾所周知Oracle是收費軟件,所以什么從倉庫一鍵安裝就不要想了,
現在更是變本加厲,下載必須注冊Oracle賬號,希望大家以后都別用了吧,用"世界上最先進的開源關系型數據庫"PG不好嗎.
-------------------------------------------------------------------------------------
言歸正傳,為了盡量簡單,選用了預安裝包的方法,過程參考文章:
Huawei Cloud EulerOS通過RPM包安裝Oracle19c數據庫_openeuler 歐拉 安裝oracle19c數據庫rpm包安裝-CSDN博客
在openEuler-24.03 (LTS-SP2)上RPM方式安裝Oracle19c_openeuler安裝oracle-CSDN博客
遇到的問題:
1.上面文章也有提到先安裝 Oracle 19c 的前置準備包oracle-database-preinstall-19c,會提示缺少依賴,
大多數可以直接 yum -y install 提示的缺少的依賴名 安裝,安裝不上的,從這里Oracle Linux 7 (x86_64) Latest | Oracle, Software. Hardware. Complete. 下載rpm,手動安裝.
最后剩一個/etc/redhat-release缺少,這個只是Oracle檢測操作系統版本,不影響安裝,直接加 --nodeps參數忽略:
rpm -ivh oracle-database-preinstall-19c-1.0-1.el9.x86_64.rpm --nodeps
2.執行/etc/init.d/oracledb_ORCLCDB-19c configure命令初始化數據庫實例(默認實例名為ORCLCDB)
從Oracle12 開始,Oracle 使用了多租戶模式,分為CDB和PDB,CDB包含多個PDB但沒有數據庫實例,PDB下有數據庫實例
3.參考文章里配置的開機啟動,我試了并沒有作用,因為時間有限,測試了一個systemd方案,沒有成功,現在是手動切換到linux oracle用戶下,進入sqlplus / as sysdba,直接執行startup手工啟動
4.監聽 可以使用systemd方案實現開機啟動,配置文件/etc/systemd/system/oracle-lsnrctl.service
[Unit] Description=Oracle Listener Control After=network.target [Service] Type=forking Environment=ORACLE_HOME=/opt/oracle/product/19c/dbhome_1 Environment=ORACLE_BASE=/opt/oracle Environment=LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib:/usr/local/lib:$ORACLE_HOME/oracm/lib:$ORACLE_HOME/lib Environment=PATH=$PATH:/opt/oracle/product/19c/dbhome_1/bin ExecStart=/opt/oracle/product/19c/dbhome_1/bin/lsnrctl start ExecStop=/opt/oracle/product/19c/dbhome_1/bin/lsnrctl stop User=oracle Group=oinstall Restart=on-failure
然后執行
sudo systemctl daemon-reload sudo systemctl enable oracle-lsnrctl.service sudo systemctl start oracle-lsnrctl.service
監聽手動啟動方法:
su - oracle
lsnrctl start
5.導入問題
這個是oracle最大的坑,客戶那邊可能是由于網絡限制,或者網絡質量問題,使用ssh隧道無法連接數據庫,只能把端口直接轉發到開啟的外網映射端口,
但是連接也及其不穩定,導入數據更是問題百出,開始在自己電腦上用imp導就丟表,后來分批次導,發現 有clob等大字段的表 只建了表,數據沒有導入,直接是空的,
后來把本機exp導出的dmp文件傳到數據庫服務器,用服務器上的imp導入,直接提示文件頭錯誤,deepseek后才知道,oracle imp/exp版本不一樣還不行,
后來把本機imp降級到19.23,不要問為什么不將到數據庫服務器上的19.0,因為管網根本不提供歷史小版本,服氣,
然后還是一樣的效果,數據導不進去,
不要跟我說用數據泵導出文件然后傳到服務器,因為我的測試數據庫在公司服務器上,我只有數據庫的賬號,沒有服務器的系統賬號,沒法獲取數據泵生成的文件(oracle那幫人怎么想的,正常客戶給linux服務器賬號的很多嗎?)
最后解決方案是建立一個dblink,然后在服務器上用數據泵導,這樣就不必生成文件,也自然沒有服務器賬號的問題,但明顯的,這個方法要求兩個庫網絡必須通
/etc/systemd/system/oracle-lsnrctl.service

浙公網安備 33010602011771號