OpenEuler 静默安装 Oracle19c

一、概述

我一般都是用runInstaller和dbca的图形界面安装Oracle,但是这次安装加数据迁移,受到网络限制,不能用弹出窗口,只能用静默方式,还是使用 runInstaller 可执行程序,不过要加一个 -silent 选项,参考了网上的文章,加上自己的实际情况,总结这次Oracle19c的静默安装,包括四部分:

1、runInstaller 静默安装19c软件包

2、netca静默配置网络

3、dbca静默建库

4、导入表结构和数据

二、runInstaller 静默安装软件19c软件包

这一步包括安装前的准备,安装19c至少需要两个包:

oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

LINUX.X64_193000_db_home.zip

这一步参考我之前的文章:安装 Oracle 19c_oracle个人使用收费吗-CSDN博客

建用户组、用户与那篇文章中相似,只是这次发现可以精简一些,因为这次安装的Oracle要求不高,只是作为演示,没有什么复杂的用户和权限的分工(以root用户操作):

# 预安装

rpm -ivh oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

# 只建一个用户组

groupadd -g 54321 oinstall

# 创建oracle用户并加到这个用户组

useradd -u 54321 -g oinstall oracle

# 如果之前创建过oracle或oinstall,最好先删除

然后创建目录:

mkdir -p /u01/app
chown -R oracle:oinstall /u01/app
chmod -R 775 /u01/app
mkdir -p /u01/app/oraInventory
chown -R oracle:oinstall /u01/app/oraInventory
chmod -R 775 /u01/app/oraInventory
mkdir -p /u01/app/oracle/cfgtoollogs
mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/app/oracle

然后在oracle用户的 .bash_profile文件中,加入环境变量: 

export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
export ORACLE_SID=platdb
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

接下来是解压 

​​​​​​LINUX.X64_193000_db_home.zip

到 $ORACLE_HOME目录下(以oracle用户执行,注意:一定要解压到$ORACLE_HOME下,更多细节看上面那篇文章) 

unzip LINUX.X64_193000_db_home.zip -d $ORACLE_HOME

之后就是图形安装和静默安装的区别了,图形安装见我上面那篇文章,静默安装就是把在图形界面的选项写在response文件里。

大道至简,静默安装的命令如下(以oracle用户执行):

./runInstaller -silent -noconfig -ignorePrereq -responseFile ~/db_install.rsp

-noconfig 表示忽略response文件中的configure部分

-ignorePrereq 表示不做预检查,因为在安装oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm时已经做了。

其中db_install.rsp就是配置项所在的response文件。

$ORACLE_HOME/install/response/db_install.rsp 中有个模板,里面的注释很详细,可以拷贝出一份,尝试修改和执行,另外,-responseFile ~/db_install.rsp 最好使用绝对路径。

网上的文章,这一步还加了许多其它选项,我觉得没必要,上面就是最简洁有效的形式,许多命令行设置,都是可以写在db_install.rsp文件中的。

接下来就是关键的db_install.rsp文件怎么写,里面的参数基本和图形界面对应,静默安装oracle软件,相对比较简单,但dbca这一步会比较麻烦。

我的db_install.rsp文件内容如下,这里只有修改了的变量,其它变量都是默认值:

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.3.0/dbhome_1
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=oinstall
oracle.install.db.OSOPER_GROUP=oinstall
oracle.install.db.OSBACKUPDBA_GROUP=oinstall
oracle.install.db.OSDGDBA_GROUP=oinstall
oracle.install.db.OSKMDBA_GROUP=oinstall
oracle.install.db.OSRACDBA_GROUP=oinstall
oracle.install.db.rootconfig.executeRootScript=false
oracle.install.db.rootconfig.configMethod=ROOT

我的配置是Enterprise Edition,只安装软件,组和用户模型只用了oinstall组,oracle用户属于这个组,我觉得其它操作系统用户组,对于我的这种简单管理模型,是不必要的。

然后执行runInstaller,执行过程中,可能会有一些坑,我是在 OpenEuler 上安装的,下面就是我遇到的坑:

1、需要修改 $ORACLE_HOME/cv/admin/cvu_config 中的变量 CV_ASSUME_DISTID=BCL21,因为 Oracle 不能识别 OpenEuler 的操作系统名,所以这里要显式设置 CV_ASSUME_DISTID,值其实可以随便设置,这个问题参考这篇帖子:

在SUSE 15 SP1上安装 Oracle 19C, 报错 PRVG-0282 : failed to retrieve the operating system distribution ID-CSDN博客

2、提示找不到库 -lclntshcore,这个库是在 $ORACLE_HOME/lib 下的 libclntshcore.so.19.1 软链接,可以拷贝一份放到 /usr/lib64 下面,软链接也可以。

3、报缺少静态库 libpthread_nonshared.a ,也不用安装,参考 

glibc缺少静态库libpthread_nonshared.a导致Oracle数据库安装失败 · Issue #I5F6U6 · src-openEuler/glibc - Gitee.com

只要 

ar cr /usr/lib64/libpthread_nonshared.a

生成一个空的静态文件,就可以了,至于为啥,我也不知道!

以上就是Oracle19c的静默安装,总操作框架就是如此,具体实施可能有细微差别。

这只是安装完软件,还没有建库,建库用dbca,也是静默模式。

我参考了网上一篇文章,步骤是:runInstaller安装软件(静默) => netca配置网络(静默) => dbca建库(静默),我觉得挺合理,所以下一步是用netca配置网络。

二、netca 静默配置网络

netca 和 dbca 类似,静默模式也是 -silent 选项再加 response 文件,操作关键是 response 文件的设置,它有一个初始模板在 $ORACLE_HOME/assistants/netca/netca.rsp 。

配置 netca 好处是,这个模板可以不加任何修改,使用默认值就行。

我使用的netca命令如下:

netca -silent -responsefile ~/netca.rsp

然后 lsnrctl status 查看一下状态,应该有 no services 因为数据库还没有建。

三、dbca 静默建库

dbca -silent -createDatabase -responseFile ~/dbca.rsp

dbca 的 response 文件的模板在 $ORACLE_HOME/assistants/dbca/dbca.rsp,里面的注释很详细清晰,下面只有我修改的变量,我的配置是非容器化,单实例,是最简单的配置:

responseFileVersion=/oracle/assistants/rspfmt_dbca_response_schema_v19.0.0
gdbName=platdb
sid=platdb
databaseConfigType=SI
policyManaged=false
createServerPool=false
force=false
createAsContainerDatabase=false
numberOfPDBs=0
templateName=/u01/app/oracle/product/19.3.0/dbhome_1/assistants/dbca/templates/General_Purpose.dbc
sysPassword=Paas1015
systemPassword=Paas1015
emConfiguration=DBEXPRESS
emExpressPort=5500
omsPort=0
storageType=FS
characterSet=ZHS16GBK
nationalCharacterSet=AL16UTF16
listeners=LISTENER
variables=ORACLE_BASE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1, ORACLE_BASE=/u01/app/oracle, PDB_NAME=, DB_NAME=platdb, ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1, SID=platdb
initParams=undo_tablespace=UNDOTBS1, sga_target=10093MB, db_block_size=8192BYTES, nls_language=AMERICAN, diagnostic_dest={ORACLE_BASE}, control_files=("{ORACLE_BASE}/oradata/{DB_UNIQUE_NAME}/control01.ctl", "{ORACLE_BASE}/fast_recovery_area/{DB_UNIQUE_NAME}/control02.ctl"), remote_login_passwordfile=EXCLUSIVE, audit_file_dest={ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/adump, processes=1500, nls_territory=CHINA, memory_target=0, SGA_TARGET=800MB,PGA_AGGREGATE_TARGET=200MB, db_recovery_file_dest_size=50GB, open_cursors=300, shared_pool_size=1G, compatible=19.0.0, db_name=platdb, db_recovery_file_dest={ORACLE_BASE}/fast_recovery_area/{DB_UNIQUE_NAME}, audit_trail=db
sampleSchema=false
memoryPercentage=40
databaseType=MULTIPURPOSE
automaticMemoryManagement=false
totalMemory=0

需要注意的是,这三项配置,应该与要迁移的目标数据库相同:

characterSet=ZHS16GBK
nationalCharacterSet=AL16UTF16
listeners=LISTENER

其中 gdbName、sid为了简单,都设置为相同的名字:platdb

至于 variables 和 initParams 中的参数,我感觉并没有生效,这些可以等数据库建好后再设置,尤其是内存相关的参数。

其中 

templateName=/u01/app/oracle/product/19.3.0/dbhome_1/assistants/dbca/templates/General_Purpose.dbc 

这个设置了默认数据文件、控制文件、redo文件的位置和大小,这些信息存储在模板文件General_Purpose.dbc中,可以通过修改General_Purpose.dbc来改变这些设置。

dbca完成建库后,会启动数据库,这时已经创建了SYS和SYSTEM用户,可以 sqlplus / as sysdba 登录,然后查看数据库状态:

select instance_name, status from v$instance ;

dbca建库启动是用的spfile,这时可以修改一些内存设置参数,并存储到spfile。

我的机器内存有128G,我开启了(Automatic Shared Memory Management),开启这个设置,只需要设置和保存 sga_target、pga_aggregate_target 两个参数,而 memory_target 和memory_max_target 设为 0,然后重启:

# 关闭 AMM

alter system set memory_max_target = 0M scope=spfile;
alter system set memory_target = 0M scope=spfile;

# 开启 ASMM

# sga_target 一般配置为物理内存的30%到70%之间;
# pga_aggregate_target 一般配置为物理内存的5%到25%之间;
# sga_target 和pga_aggregate_target 之和不要超过物理内存的80%;

alter system set sga_max_size=70G scope=spfile;
alter system set sga_target=60G scope=spfile;
alter system set pga_aggregate_target=5G scope=spfile;

# ASMM 可另外设置 sga 中的 shared_pool_size不小于1G
alter system set shared_pool_size=1G scope=spfile;

关于 oracle 内存管理参数的配置,这篇帖子讲的很清晰:Oracle数据库查看与修改内存配置_oracle内存分配与调整-CSDN博客

之前搜了网上那么多文章都没说明白,包括Oracle的官方文档,而这篇讲的清晰明了简洁。

最好把spfile备份为pfile,遇到过参数设置错,数据库无法启动,此时可以修改一下备份的pfile,再启动,这样可以保存之前spfile的大部分设置:

create pfile from spfile

关于启动时spfile和pfile参考我的文章:OCP 体系结构_ocp架构服务器-CSDN博客 -> 参数文件

数据库启动后查看以下网络服务:

lsnrctl status

tnsnames.ora配置(给客户端用,可选):

YUNPAAS =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 36.133.172.224)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = platdbXDB)
    )
  )

Windows下的PL/SQL Developer连接数据库配置参考我的文章:

Windows安装PL/SQL Developer_windows安装plsql-CSDN博客

另外,如果失败,可以用dbca删除数据库,然后再建库(不必担心重复操作的副作用),dbca删除数据库用命令:

dbca -silent -deleteDatabase -sourceDB platdb

这里platdb是就是sid也是数据库名,dbca是希望数据库运行时执行删库的,但是需要删库的时候,常常是因为数据库起不来了,此时删库还要手动删除数据文件所在目录和fast_recovery_area等。

四、创建用户和导入数据

# 创建表空间

create tablespace PAAS datafile '/u01/app/oracle/oradata/PLATDB/paas.dbf' size 2048m autoextend on next 2048m maxsize 30G;

# 创建用户

create user paasapp identified by Paas1015 default tablespace paas;
grant connect, resource to paasapp;
grant create session to paasapp;
grant dba to paasapp ;
grant imp_full_database to paasapp;
grant exp_full_database to paasapp;
alter user paasapp quota unlimited on paas;

sqlplus新用户连接数据库:

sqlplus paasapp/Paas1015@platdb

关于客户端连接Oracle数据库的详细讨论,参考我的文章:Oracle 网络配置_protocol = ipc-CSDN博客

这一步是可选的,我的项目类似迁移项目,需要在新数据库上,创建另一个数据库对应的用户、表空间、导入表结构和数据,之所以在这里记录,是因为遇到了一个问题,就是从其它Oracle导出的表定义和insert脚本,导入新数据库后,出现中文乱码。

关于Oracle的字符集等配置,之前总结过,但是很久不用忘记了 OCP Oracle全球化与字符集_al16utf16 gb18030-CSDN博客

之前的知识并没有解决这里的问题,一开始是猜测导出的sql脚本编码问题,用notepad++转为utf-8编码,在vim中打开,中文确实能正常显示,但是用sqlplus导入后,查询数据库,中文仍然是乱码。

在公司DBA的提示下,根据数据库的NLS_LANGUAGE、NLS_TERRITORY、NLS_CHARACTERSET配置,对应的设置环境变量设置了NLS_LANG为 export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK,再导入SQL脚本(未转为utf8),这次查询中文不是乱码了!

看来关键是NLS_LANG环境变量,尤其是在使用sqlplus时,很重要!

参考

以下三个连接,静默安装三部曲,写的清晰简洁 

RunInstaller 19c Silent Mode - How to SOP

How to Run NETCA in Silent Mode - How to SOP

DBCA Silent Database Creation 19c - How to SOP

[FATAL] [DBT-11211] 19c DBCA: The AMM option is not allowed while the physical memory is greater than 4GB | Wadhah DAOUEHI

  • 27
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值