一、概述
我一般都是用runInstaller和dbca的图形界面安装Oracle,但是这次安装,受到网络限制,不能用弹出窗口,只能用静默方式,还是使用这些可执行程序,不过要加一个 -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博客
建用户组、用户与文章中相似,只是这次我发现可以精简一些,以下以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
然后创建目录:
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
其中db_install.rsp就是配置选择所在的response文件。
$ORACLE_HOME/install/response/db_install.rsp中有个模板,里面的注释很详细,可以拷贝出一份,尝试修改和执行,-responseFile ~/db_install.rsp最好使用绝对路径。
-noconfig 表示忽略response文件中的configure部分
-ignorePrereq 表示不做预检查,因为在安装oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm时已经做了。
网上的文章,这一步还加了许多其它选项,我觉得没必要,也许他们只是照抄。
接下来就是关键的response文件怎么写,里面的参数基本和图形界面对应,静默安装oracle软件,相对比较简单,dbca会比较麻烦一些。
我的response文件内容如下,这里只有修改的变量,其它变量都用默认值:
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,因为我的操作系统是OpenEuler,Oracle以前没遇到过,所以这里要显式设置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 -silent -responsefile ~/netca.rsp
然后 lsnrctl status 查看一下状态,应该有 no services 因为数据库还没有建。
三、dbca 静默建库
dbca -silent -createDatabase -responseFile ~/dbca.rsp
response文件的模板在 $ORACLE_HOME/assistants/dbca/dbca.rsp 里面的注释很详细清晰,下面只有我修改的变量,我的配置是非容器化,单实例,是最简单的配置,需要注意的是
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来改变这些设置。
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
dbca完成建库后,会启动数据库,这时已经创建了SYS和SYSTEM用户,可以 sqlplus / as sysdba 登录,然后查看数据库状态:
select instance_name, status from v$instance ;
dbca建库启动是用的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数据库查看与修改内存配置_oracle内存分配与调整-CSDN博客
最好把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