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.dmp和expdpDB11G.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 进行优化