1. 程式人生 > 其它 >Oracle Apex 19.2 升級至21.2

Oracle Apex 19.2 升級至21.2

兩年前按照王方鋼 Oracle APEX 系列文章1:Oracle APEX, 讓你秒變全棧開發的黑科技 系列文章安裝Oracle apex

當時Oracle資料庫版本為XE-11g,APEX版本為19.2,ORDS版本為18.2。

現在截止2022年3月,APEX最新版本為21.2,新版本增添許多強大的功能,所以想對原來的APEX進行升級。

APEX 21.2 需要資料庫版本至少為12及以上,ORDS版本至少為19及以上,因此也需要同時升級ORACLE 資料庫和ORDS。

系統版本Centos 7.3
Oracle xe-11g  --> xe-18g
ORDS   18.2    --> 21.2
APEX   19.2    --> 21.2

Oracle 官方都給出了詳盡軟體升級文件,本教程主要參考官方文件給出。

我的個人部落格 https://tjfish.top/

升級前準備

備份

首先在阿里雲做好備份,選用阿里雲快照功能對整個磁碟做備份。

下載安裝包

資料庫選擇XE-18c版本,因為官方支援將APEX資料從XE-11g匯入到XE-18c。

ORACLE 資料庫 https://www.oracle.com/database/technologies/xe18c-downloads.html

APEX https://www.oracle.com/tools/downloads/apex-v191-downloads.html

ORDS https://www.oracle.com/database/technologies/appdev/rest-data-services-downloads.html

cd /u01/media/
wget https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-18c-1.0-1.x86_64.rpm
wget https://download.oracle.com/otn_software/apex/apex_21.2.zip
wget https://download.oracle.com/otn_software/java/ords/ords-21.4.1.025.0904.zip

升級Oracle 資料庫至XE 18c

從11g匯出資料

參考文件:Exporting and Importing Data between Oracle Database XE 11.2 and 18c

新建資料匯出目錄

su - root
mkdir -p /u01/dump_folder

連線資料庫進行授權

sqlplus "/ AS SYSDBA"
SQL> CREATE DIRECTORY DUMP_DIR AS '/u01/dump_folder';
SQL> GRANT READ, WRITE ON DIRECTORY DUMP_DIR TO SYSTEM;
SQL> exit

匯出資料(替換system_password為你的資料庫系統管理員密碼)

expdp system/system_password full=Y directory=DUMP_DIR dumpfile=DB11G.dmp logfile=expdpDB11G.log

匯出成功後可以看到匯出目錄下的DB11G.dmpexpdpDB11G.log檔案

解除安裝11g資料庫

解除安裝資料庫需要謹慎,確保自己已經做好資料備份。

參考文件: Deinstalling Oracle Database XE

執行下面命令進行資料庫解除安裝,會清空一切資料檔案和資料庫軟體,只留下資料庫根目錄和少許日誌。

su - root
rpm -e oracle-xe

安裝18c資料庫

參考文件: Installing Oracle Database XE Using RPM Packages

首先安裝預環境設定

cd /u01/media/

curl -o oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm

yum -y localinstall oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm

安裝資料庫

確保已經下載了xe-18c的安裝包到/u01/media目錄下

yum -y localinstall oracle-database-xe-18c-1.0-1.x86_64.rpm

優化記憶體佔用

安裝完成後,需要初始化資料庫。但是這一步特別消耗記憶體,至少需要1GB空閒記憶體。如果記憶體不足很可能中途卡死。可以按以下步驟提高系統可用記憶體。

首先關閉tomcat 和 nginx (以及其他可能佔用記憶體的程序)

systemctl stop tomcat
systemctl stop nginx

使用Swap 分割槽,調整swappiness引數

vi /etc/sysctl.conf
#修改vm.swappiness 引數(0~20之間,鑑於你機器實體記憶體的大小)
vm.swappiness = 20
# 儲存退出後執行
sysctl -p

通過free命令檢視記憶體佔用情況

初始化資料庫

初始化過程中將輸入新資料庫的sys、system的密碼,記得做好記錄儲存,之後也要用到。整個流程會比較久,需要耐心等待。

/etc/init.d/oracle-xe-18c configure

設定oracle 使用者環境變數

為oracle賬號設定環境變數,以便保證每次切換到oracle使用者時,都可以直接使用sqlplus等命令

su - oracle
echo 'ORACLE_SID=XE' >> ~/.bash_profile
echo 'ORAENV_ASK=NO' >> ~/.bash_profile
echo '. /opt/oracle/product/18c/dbhomeXE/bin/oraenv' >> ~/.bash_profile

測試一下環境變數是否已設定成功。

source ~/.bash_profile

測試一下資料庫是否安裝完成。直接用sqlplus連線資料庫,使用者名稱輸入system,密碼輸入安裝時的密碼,看是否能夠正常連上資料庫。

sqlplus

匯入資料至18c

參考文件:Exporting and Importing Data between Oracle Database XE 11.2 and 18c

匯入資料

連線資料庫進行授權

sqlplus / AS SYSDBA
SQL> ALTER SESSION SET CONTAINER=XEPDB1;
SQL> CREATE DIRECTORY DUMP_DIR AS '/u01/dump_folder';
SQL> GRANT READ, WRITE ON DIRECTORY DUMP_DIR TO SYSTEM;
SQL> exit;

匯入資料,system_password替換為剛剛設定的system 密碼。

impdp system/system_password@localhost/xepdb1 full=Y REMAP_DIRECTORY='/u01/app/oracle/oradata/XE/':'/opt/oracle/oradata/XE/XEPDB1' directory=DUMP_DIR dumpfile=DB11G.dmp logfile=impdpDB11G.log

執行資料庫匯入後腳本

下載 https://www.oracle.com/technetwork/developer-tools/apex/application-express/apxfix-5137274.zip and extract the apfix.sql script on your server.

cd /u01/media
wget https://www.oracle.com/technetwork/developer-tools/apex/application-express/apxfix-5137274.zip
## 解壓至apex目錄
unzip apxfix-5137274.zip /u01/apex

連線資料庫執行指令碼,執行 apxfix.sql,引數是老版本APEX的schema 名稱。比如,我apex是19.2版本,那麼引數名稱是APEX_190200 。

sqlplus / AS SYSDBA
SQL> ALTER SESSION SET CONTAINER=XEPDB1;
SQL> @apxfix.sql APEX_190200 
SQL> EXIT

升級APEX

確保已經下載APEX最新版至/u01/media目錄

安裝最新版本APEX

將老版本apex 備份

mv /u01/apex /u01/apex_19_2

解壓新版本apex

cd /u01/media
mkdir -p /u01/apex
unzip apex_20.2.zip -d /u01/
chown -R oracle:dba /u01/apex

現在新的APEX安裝檔案已經放在/u01/apex/目錄下了,登入資料庫執行升級。

cd /u01/apex

-- 以超級管理員身份登入資料庫
sqlplus / as sysdba

--切換至xepdb1
SQL> ALTER SESSION SET CONTAINER=XEPDB1;

-- 安裝APEX,指定預設表空間和靜態檔案別名
SQL> @apexins.sql SYSAUX SYSAUX TEMP /i/
   
-- 安裝完畢後資料庫會話會自動斷開,再次以超級管理員身份登入資料庫
sqlplus / as sysdba

-- 建立APEX例項管理員(Instance Administration)及密碼,這個密碼必須包含特殊符號,否則設定不上。這個密碼很重要,是管理APEX平臺的賬號密碼,以後建立新的應用schema、解鎖賬號等都靠它,第一次登入APEX時也要用到。
SQL> @apxchpwd.sql

-- 配置RESTful Services服務,記錄好配置的兩位使用者密碼
SQL> @apex_rest_config.sql

-- 禁用資料庫內建的PL/SQL閘道器
SQL> exec dbms_xdb.sethttpport(0);
SQL> exec dbms_xdb.setftpport(0);

-- 解鎖ORDS使用者賬號
SQL> alter user apex_public_user account unlock;
SQL> alter user apex_public_user identified by "your password";

-- 斷開資料庫會話
SQL> exit

複製APEX靜態檔案到Tomcat目錄

## 切換到root使用者
su - root

## 刪除老版本apex的靜態檔案
rm -rf /u01/tomcat/webapps/i/

## 在Tomcat的webapps目錄下新建一個名為`i`的資料夾
mkdir -p /u01/tomcat/webapps/i/

## 將APEX靜態檔案複製過去
cp -a /u01/apex/images/* /u01/tomcat/webapps/i/

## 重啟Tomcat服務
systemctl restart tomcat

升級ORDS

解除安裝老版本ORDS

cd /u01/ords
java -jar ords.war uninstall

輸入資料庫

安裝配置 ORDS

解壓縮安裝包

mkdir -p /u01/ords
unzip /u01/media/ords-21.4.1.025.0904.zip -d /u01/ords/

執行安裝指令碼

cd /u01/ords
java -jar ords.war install advanced

按照提示完成ORDS的安裝配置。這裡的引數要認真填寫。注意database service name 是xepdb1。資料庫名稱name of the database server一定要跟資料庫監聽器裡 /opt/app/oracle/product/18c/xe/network/admin/listener.ora 保持一致,否則後面會因為ORDS連線不上資料庫,導致訪問報錯。另外這裡要設定好幾個資料庫賬號的密碼,建議第一次安裝時統一設定成一個,並做好記錄,避免後面錯亂。

若安裝出錯,重新安裝

如果配置過程中出現引數配錯的情況,或者ords報錯的情況,可以重新設定ORDS的各項引數

java -jar ords.war setup

如果實在不行,就解除安裝重灌

java -jar ords.war uninstall 
java -jar ords.war install advanced

為tomcat賬號授權(需切換到root使用者)

確保tomcat賬號(安裝Tomcat伺服器時自動建立的)可以訪問/u01/ords/config目錄。

su - root
chown -R tomcat:tomcat /u01/ords/config

將 ords.war 部署到 Tomcat

現在我們可以將剛才生成的ords.war檔案部署到Tomcat上了。

cp -a /u01/ords/ords.war /u01/tomcat/webapps/

## 重啟Tomcat服務
systemctl restart tomcat

驗證是否正常工作

記得啟動tomcat和nginx 服務

## 重啟Tomcat服務
systemctl restart tomcat
## 重啟nginx服務
systemctl restart nginx

開啟瀏覽器,訪問http://your_ip:8080/ords,如果一切正常,應該可以訪問到APEX的頁面了。

後續步驟(可選)

安裝中文語言包

語言安裝包在apex/builder/zh-cn下

su - oracle
cd /u01/apex/builder/zh-cn

## 登入資料庫
sqlplus / as sysdba

SQL> ALTER SESSION SET CONTAINER=XEPDB1;
SQL> alter session set current_schema=APEX_210200;
SQL> @load_zh-cn.sql

重新進入apex選擇中文

對系統進行優化

參考 Oracle APEX 系列文章5:在阿里雲上打造屬於你自己的APEX完整開發環境 (進一步優化) 對資料庫,ORDS,Tomcat,Nginx 進行優化