CentOS 8 (ARM64)并不是Oracle 19c ARM版认证的OS,但是这是在云上最容易获取的OS,经过测试发现,CentOS 8搭配Oracle Linux 8的一些软件包,是可以成功安装运行Oracle数据库的。
我们的实验是在华为云上进行的,创建一个ECS的过程就不赘述了,测试用虚拟机,选择2 vCPU,16GiB内存。OS镜像选择CentOS 8。
确认CPU类型
根据公开的资料,Vendor ID是0x48,代表CPU是鲲鹏920。
增加swap空间
因为Oracle 软件relink时,需要有swap空间,云服务器缺省是没有swap分区或swap文件的,需要手工添加。
# dd if=/dev/zero of=/swapfile bs=1M count=8192
# mkswap swapfile
# swapon swapfile
如果想重启以后自动挂载swap文件,需要在/etc/fstab里面增加一行:
/swapfile swap swap defaults 0 0
增加Oracle Linux 8 yum源,安装Oracle DB需要的软件包
#cat ol.repo
[ol8_BaseOS]
name=ol8 latest BaseOS
baseurl=http://yum.oracle.com/repo/OracleLinux/OL8/baseos/latest/aarch64
gpgcheck=0
enabled=1
[ol8_AppStream]
name=ol8 latest AppStream
baseurl=http://yum.oracle.com/repo/OracleLinux/OL8/appstream/aarch64
gpgcheck=0
enabled=1
# yum install oracle-database-preinstall-19c.aarch64
这个rpm包会自动安装Oracle需要的软件包,同时会对ulimit,内核参数等进行配置,还会创建Oracle用户。你当然可以按照安装文档,一步一步手工配置,使用这个包,是比较简单的方式。
设置编译工具
Oracle软件relink时,会到指定位置找ar和as工具,在CentOS 8上,虽然有这两个工具,但是位置不对,在Orace软件引用的位置创建符号链接:
# mkdir -p opt/rh/devtoolset-8/root/usr/bin/
# cd opt/rh/devtoolset-8/root/usr/bin/
# ln -s usr/bin/ar ar
# ln -s usr/bin/as as
设置Oracle用户环境变量
在oracle用户的.bash_profile中添加:
ORACLE_SID=htdb1
export ORACLE_SID
ORACLE_UNQNAME=htdb
export ORACLE_UNQNAME
ORACLE_BASE=/u01/app/oracle
export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
export ORACLE_HOME
umask 022
PATH=$ORACLE_HOME/bin:$PATH
export PATH
安装Oracle软件
上传介质,并在$ORACLE_HOME解压缩:
# su – oracle
$ cd $ORACLE_HOME
$ unzip LINUX.ARM64_1919000_db_home.zip
$ ./runInstaller
我使用的是xshell,会直接将DISPLAY forward到PC端,如果用别的工具,需要设置DISPLAY环境变量。
我们使用图形界面安装,选择“set up software only”。
然后所有界面使用缺省值,最终检查时,应该只提示swap区不够大,可以忽略。
Relink Oracle软件后,根据提示运行root相关脚本,根据提示完成安装。
创建数据库
首先配置监听,使用Oracle用户:
$ netca
图形界面配置监听,所有页面都适用缺省值。配置完成启动监听:
$ lsnrctl start
因为dbca在鲲鹏平台上运行会hang住,日志报错:
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) at oracle.ops.verification.framework.util.Assert.assertWorkDir(Assert.java:839) at oracle.cluster.verification.ClusterVerification.<init>(ClusterVerification.java:508) at oracle.cluster.verification.ClusterVerification.getInstance(ClusterVerification.java:639) at oracle.assistants.common.base.driver.AssistantConfigDriver.initializeCVU(AssistantConfigDriver.java:327) at oracle.assistants.common.base.driver.AssistantConfigDriver.load(AssistantConfigDriver.java:195) at oracle.assistants.dbca.driver.DBConfigDriver.load(DBConfigDriver.java:183) at oracle.assistants.common.base.driver.AssistantApplication.run(AssistantApplication.java:188) at oracle.install.commons.util.Application.startup(Application.java:1131) at oracle.install.commons.flow.FlowApplication.startup(FlowApplication.java:181) at oracle.install.commons.flow.FlowApplication.startup(FlowApplication.java:198) at oracle.assistants.common.base.driver.AssistantApplication.startup(AssistantApplication.java:336) at oracle.assistants.dbca.driver.DBConfigurator.startup(DBConfigurator.java:378) at oracle.assistants.dbca.driver.DBConfigurator.main(DBConfigurator.java:513) |
目前还没找到错误原因,所以我们只能手动创建数据库,手动创建数据库,最简单的方式就是在其他机器(x86的服务器或虚拟机),安装19c软件,使用dbca创建数据库,最后页面不选创建,而是将创建的过程存成脚本,然后将保存的脚本上传到ARM机器上,用脚本创建数据库。为了方便,最好两边的$ORACLE_BASE, $ORACLE_HOME设置一致。
过程就不赘述了。主要就是生成password文件,启动实例,创建数据库,运行catlog.sql, catproc.sql,这样数据库就创建成功了,如果还需要别的选件,需要创建相关的字典对象。我没有测试所有的选件,只测试了JVM,创建是没有问题的。
查看基本信息
CALIBRATE_IO 测试
初始化参数filesystem_options=‘SETALL’ 时,测试结果:
初始化参数filesystem_options=‘none’ 时,测试结果:
说句题外话,以前老有人问我,为啥超融合下Oracle测试的IO数据有时比物理机还高?其实就是都用缺省值测,filesystem_options=’none’ ,在虚拟化环境下,相当于全在内存中跑,iops和吞吐没法不高。
Swingbench测试
Swingbench测试碰到一个问题,dba需要将dbms_lock的执行权限授予soe用户。
SQL> grant all on dbms_lock to soe;
否则SOE.ORDERENTRY包会编译失败。
其他没有什么问题,用20并发,测了一晚上,数据库一直稳定运行。