安装前请仔细将文档通读一遍,安装过程中根据安装命令仔细核对,特别留意一些字体加粗或标红的字样,遇到问题请及时咨询博主
1、基础环境
1.1、操作系统
cat /etc/redhat-release
1.2、主机名
医院默认分配的主机名可能跟其他主机会有重复,所以分配给智慧护理的数据库服务器建议强制改下名。
1.2.1、查询主机名
hostnamectl
1.2.2、修改主机名
vi /etc/hostname
修改主机名为:ZHHL-DB
1.2.3、重启
主机名修改后需要重启才能生效,执行reboot命令后,正常启动,可以看到命令左侧的主机名已变更:
1.2.4、主机名与IP绑定
输入ifconfig查询当前服务器的IP地址,IP地址较为敏感,大家自行获取,获取到IP后编辑系统主机代理文件:
vi /etc/hosts
2、环境准备
2.1、创建Oracle用户和用户组
以下命令在root用户下执行:
bash
groupadd oinstall
groupadd dba
groupadd oper
useradd -g oinstall -G dba,oper oracle
修改oracle用户的密码:
passwd oracle
修改oracle用户的密码为:12345678
连续两次输入重复密码确认即可(忽略中间密码规则复杂度校验的提示)
2.2、创建文件夹并赋予权限
以下命令在root用户下执行:
bash
mkdir -p /home/oracle/product/19.3.0/dbhome_1
mkdir -p /home/oracle/oraInventory
mkdir -p /home/oracle/oradata
mkdir -p /home/oracle/oradatabak
chown -R oracle:oinstall /home/oracle/* chmod -R 775 /home/oracle/*
2.3、安装Oracle依赖包
2.3.1、下载依赖包和Oracle安装包
2.3.2、安装依赖包
以下命令在root用户下执行:
bash
unzip oracle-preinstall-oraclelinux8.zip
cd oracle-preinstall-oraclelinux8/
rpm -Uvh ./* --nodeps --force
2.3.3、放置安装包
将oracle19C安装包拷贝到/home/oracle/product/19.3.0/dbhome_1目录下面,然后分配用户组,授权。以下命令在oracle用户下执行:
bash
su - oracle
cd /home/oracle/product/19.3.0/dbhome_1/
unzip Oracle_19c_LINUX.X64_193000_db_home.zip
2.3.4、配置操作系统limits限制参数
在2.3.2步骤中,只要正确执行了安装依赖包的步骤,在Oracle Linux8.10操作系统中,安装这些依赖会默认修改操作系统的部分参数配置,包括以下操作系统Limits限制参数,相应修改的配置文件在:/etc/security/limits.d/oracle-database-preinstall-19c.conf 中,可作为参考。
以下命令在root用户下执行:
bash
vi /etc/security/limits.conf
* soft nproc 16384
* hard nproc 16384
* soft nofile 65535
* hard nofile 65535
* soft memlock 3145728
* hard memlock 3145728
调整操作系统层面硬限制:
bash
vi /etc/systemd/system.conf
DefaultLimitNOFILE=65535
2.3.5、配置登录PAM验证
以下命令在root用户下执行:
bash
vi /etc/pam.d/login
session required pam_limits.so
2.3.6、修改操作系统内核参数
如果确定已执行2.3.2提前已安装oracle-preinstall依赖包,则在安装依赖包时会自动设置操作系统内核参数。不过最好核验下,防止安装依赖时未自动设置的情况
bash
vi /etc/sysctl.conf
# 以下内容时编辑sysctl.conf配置文件的内容
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
# kernel.shmmax是共享内存,用内存 * 1024 * 1024 * 1024 * 0.9 算出结果,详细的对照表参考下方表格
kernel.shmmax = 123695058124
# kernel.shmall=kernel.shmmax / 4KB 算出来
kernel.shmall = 30923764531
kernel.shmmni = 4096
kernel.panic_on_oops = 1
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
修改完系统内核参数后,执行"sysctl -p"使之生效。
以下是根据部分服务器内存可参考的配置快查表:
|-------|---------------|---------------|
| 内存 | kernel.shmall | kernel.shmmax |
| 4GB | 1932735283 | 7730941132 |
| 16GB | 3865470566 | 15461882265 |
| 32GB | 7730941132 | 30923764531 |
| 64GB | 15461882265 | 61847529062 |
| 128GB | 30923764531 | 123695058124 |
2.3.7、扩展虚拟内存(可选)
如是内存小于4G,才需要执行此步骤,否则后面会报内存不足的问题,有些虚拟机会报,购买的云服务器若是小于4G,则必须执行此步骤,若是大于4G,则跳过此步直接执行下一步。
以下命令在root用户下执行:
bash
# 使用dd命令创建名为swapfile 的swap交换文件,count指定扩展4G虚拟内存
dd if=/dev/zero of=/var/swapfile bs=1024 count=4194304
# 对交换文件格式化并转换为swap分区
mkswap /var/swapfile
# 挂载并且激活分区
swapon /var/swapfile
# 查看新swap分区是否激活
free -h
# 修改 fstab 配置,设置开机自动挂载该分区,添加如下代码
vim /etc/fstab
/var/swapfile swap swap defaults 0 0
2.3.8、设置Oracle用户环境变量
以下命令在oracle用户下执行:
bash
vi /home/oracle/.bash_profile
# 以下内容可直接粘贴至这个配置文件中
export CV_ASSUME_DISTID=OL7
export PATH
export TMP=/tmp
export LANG=en_US
export TMPDIR=$TMP
export ORACLE_UNQNAME=orcl
export ORACLE_SID=orcl
export ORACLE_BASE=/home/oracle
export ORACLE_HOME=/home/oracle/product/19.3.0/dbhome_1
export NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS" PATH=$PATH:$HOME/.local/bin:$HOME/bin:$ORACLE_HOME/bin
# 配置文件中粘贴内容截止到此
source /home/oracle/.bash_profile
需要注意的是,每次登录oracle都需要应用一次环境变量,若是想让他永久生效,则需要把上面的内容同步添加到 /home/oracle/.bashrc 这个配置文件中
3、部署安装
3.1、安装数据库软件
以下命令在oracle用户下执行:
bash
cd /home/oracle/product/19.3.0/dbhome_1/install/response/
cp db_install.rsp db_install.rsp.bak
vi db_install.rsp
# 以下在db_install.rsp配置文件中修改编辑
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/home/oracle/oraInventory
ORACLE_HOME=/home/oracle/product/19.3.0/dbhome_1
ORACLE_BASE=/home/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=dba
oracle.install.db.OSBACKUPDBA_GROUP=dba
oracle.install.db.OSDGDBA_GROUP=dba
oracle.install.db.OSKMDBA_GROUP=dba
oracle.install.db.OSRACDBA_GROUP=dba
oracle.install.db.rootconfig.executeRootScript=false
# 以上db_install.rsp配置文件截止编辑
# 以下命令开始执行安装
$ORACLE_HOME/runInstaller -silent -responseFile $ORACLE_HOME/install/response/db_install.rsp
重新开一个xshell窗口,登录root账号,以root用户执行下面2个脚本,第一个脚本是对目录和用户组权限的一些修改,第二个是检查日志是否有错误。
/home/oracle/oraInventory/orainstRoot.sh
/home/oracle/product/19.3.0/dbhome_1/root.sh
3.1.1 异常情况处理
若出现如下错误,
CAUSE: Some of the mandatory prerequisites are not met. See logs for details. /u01/app/oraInventory/logs/InstallActions2021-08-20_11-08-55PM/installActions20 21-08-20_11-08-55PM.log
需要忽略报错,再执行两个脚本(没有报错忽略此操作)
bash
$ORACLE_HOME/runInstaller -ignorePrereq -silent -responseFile $ORACLE_HOME/install/response/db_install.rsp
注意:在这里会有有一个问题,若是只生成了root.sh,没有orainstroot.sh脚本,说明你之前装过oracle,且卸载的时候没有删除/etc/oraInst.loc文件,此时就只会生成root.sh一个脚本, 只执行者一个即可。
3.2、启动监听
以下命令在oracle用户下执行:
bash
lsnrctl status
# 若是遇到"bash: lsnrctl: command not found..."的问题,需要使用"source /home/oracle/.bash_profile"重新应用环境变量
# 打开监听 lsnrctl start
3.3、创建监听(可选)
如果3.2启动监听时发现没有找到监听,使用以下命令创建监听,使用oracle用户执行以下命令:
bash
# 执行创建监听命令
netca /silent /responseFile $ORACLE_HOME/assistants/netca/netca.rsp
# 查看监听
lsnrctl status
# 打开监听
lsnrctl start
3.4、创建数据库
以下命令在oracle用户下执行:
bash
cd /home/oracle/product/19.3.0/dbhome_1/assistants/dbca/
cp dbca.rsp dbca.rsp.bak
# 修改dbca.rsp配置文件
vi dbca.rsp
# 以下是配置文件中的需要调整的配置项
gdbName=orcl
sid=orcl
databaseConfigType=SI
templateName=General_Purpose.dbc
# 数据库默认管理员密码DBA123456
sysPassword=ZHHL1234
systemPassword=ZHHL1234
datafileDestination={ORACLE_BASE}/oradata
characterSet=AL32UTF8
nationalCharacterSet=UTF8
listeners=LISTENER
# 原则上是sga_target占物理内存的75%,pga_aggregate_target占物理内存的25%。以下是依据128GB内存设置
# 可以自行根据实际内存设定换取更好的性能 initParams=processes=3000,sga_target=98304MB,pga_aggregate_target=32768MB
执行以下命令开始安装数据库:
bash
dbca -silent -createDatabase -responseFile /home/oracle/product/19.3.0/dbhome_1/assistants/dbca/dbca.rsp
开始安装数据库,安装数据库持续时间较长。
3.4.1、异常情况一
出现此错误,则在oracle用户下执行:
lsnrctl start
3.4.2、异常情况二
若出现以下报错:
[FATAL] [DBT-50000] Unable to check for available memory. [FATAL] [DBT-50001] Unable to check the value of kernel parameter {0}
则执行安装脚本添加一个参数,去掉内存检查:
bash
dbca -silent -createDatabase -J-Doracle.assistants.dbca.validate.ConfigurationParams=false -responseFile /home/oracle/product/19.3.0/dbhome_1/assistants/dbca/dbca.rsp
到此数据库安装就已经完成了,下面开始进行测试和调优设置。
若数据库未自动启动,以下命令在oracle用户下执行:
bash
sqlplus / as sysdba
startup
使用plsql连接数据库后,执行select * from v$instance查看实例状态:
3.5、数据库调优
3.5.1、配置开机自启动
通过各步骤已完成数据库的安装,但存在数据库实例不会开机自启动的问题,即服务器重新启动后,数据库服务自动启动,但数据库实例不会自动,需要单独配置才能开机自启动。
dbca建库时都会自动创建/etc/oratab文件
以下命令在root用户下执行:
bash
vi /etc/oratab
# 以下是oratab配置文件中的需要修改的内容
# 将"orcl:/home/oracle/product/19.3.0/dbhome_1:N",改为"orcl:/home/oracle/product/19.3.0/dbhome_1:Y"
# orcl为实例名;/home/oracle/product/19.3.0/dbhome1为oracle安装目录;会因安装的情况不同而有所不同
orcl:/home/oracle/product/19.3.0/dbhome_1:Y
编辑/etc/rc.d/rc.local启动文件,添加数据库启动脚本dbstart
bash
vi /etc/rc.d/rc.local
# 以下是rc.local配置文件中的内容
# 末尾添加:
su - oracle -lc "/home/oracle/product/19.3.0/dbhome_1/bin/lsnrctl start"
su - oracle -lc /home/oracle/product/19.3.0/dbhome_1/bin/dbstart
# 如果实例名SID不是orcl,则可以添加以下命令,替换实例名ORCL部分
su - oracle -lc"/home/oracle/product/19.3.0/dbhome_1/bin/lsnrctl start ORCL"
su - oracle -lc /home/oracle/product/19.3.0/dbhome_1/bin/dbstart
# 以上配置文件截止,命令中-c代表执行脚本,脚本dbstart中指定启动的实例,脚本lsnrctl中启动配置的监听
为使得rc.local配置文件生效,记得执行以下命令使这个配置文件生效:
chmod +x /etc/rc.d/rc.local
最后使用"reboot"命令验证下数据库服务和监听是否自动启动(上线前务必要验证至少一遍)。
3.5.2、初始化表空间
以下脚本需要用SYSTEM用户登录PL/SQL_Developer的SQL窗口执行。
创建表空间,用于存放业务用户相关对象,包括表、视图、存储过程等数据库对象及业务数据,创建原则为:硬盘满足医院病历业务数据库存储需求,包括空间大小,读写速度,安全性等,服务器挂有硬盘柜且原设计用于数据存储的,要把数据存储目录创建到盘符上。
创建DBF文件前,先检查下当前服务器的"数据盘"(也就是容量最大)的盘符在哪个目录下,切记务必在盘符最大的目录下创建,不要在系统盘里创建数据文件,很容易上线没多久就磁盘被占满,引发线上事故。
这里,假设以"/home"路径就是当前服务器的数据库挂载路径为例进行创建:
sql
# 以下以创建DEMO(DEMO)关联的数据文件为例:
CREATE TABLESPACE DEMO_DATA DATAFILE '/home/oracle/oradata/DEMO_DATA01.DBF' SIZE 30G AUTOEXTEND ON NEXT 200M;
增加表空间数据文件,每个数据文件最大为32G容量,不同规模医院配置的数据文件数量不同,可在部署部署服务器时,一次性增加完成,也可后期增加,一般是在部署服务器数据库时一次增加满足未来1~2年的使用,增加时数据文件命名安照名称+序号的命名方式,具体大小参考值:二级医院200G以上,需要7个数据文件,即32G*7=224G,三级医院300G以上,需要10个数据文件,即32G*10=320G。
增加第二个数据文件脚本:
sql
ALTER TABLESPACE HLBL_DATA ADD DATAFILE '/home/oracle/oradata/HLBL_DATA02.DBF' SIZE 30G AUTOEXTEND ON NEXT 200M;
依次类推,逐步增加到自己需要的数据文件数量。
3.5.3、初始化用户
以下脚本需要用SYSTEM用户登录PL/SQL_Developer的SQL窗口执行。
创建用户脚本 :
sql
CREATE USER DEMO IDENTIFIED BY USER1234 DEFAULT TABLESPACE DEMO_DATA
# 用户名称:DEMO
# 用户赋值权限:
GRANT CONNECT,RESOURCE,DBA TO DEMO;
3.5.4、参数调优
以下脚本需要用SYSTEM用户登录PL/SQL_Developer的SQL窗口执行。
sql
# 修改用户密码默认有效期不限制
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
# 修改账户密码错误次数限制
alter PROFILE default limit failed_login_attempts unlimited;
# 关闭审计
alter system set audit_trail=none scope=spfile;
# 关闭延迟段创建
alter system set deferred_segment_creation=FALSE;
# 禁用基数反馈和LGWR日志自适应切换
alter system set "_optimizer_use_feedback"=FALSE scope=spfile sid='*';
alter system set "_use_adaptive_log_file_sync"=false scope=spfile sid='*';
alter system set "_optimizer_adaptive_cursor_sharing"=FALSE scope=spfile;
alter system set "_optimizer_extended_cursor_sharing"=NONE scope=spfile;
alter system set "_optimizer_extended_cursor_sharing_rel"=NONE scope=spfile;
alter system set "_undo_autotune"=FALSE scope=spfile;
alter system set "_optimizer_null_aware_antijoin"=FALSE scope=spfile;
alter system set "_partition_large_extents"=FALSE scope=spfile;
alter system set "_memory_imm_mode_without_autosga"=false sid='*' scope=spfile;
alter system set "_b_tree_bitmap_plans"=false sid='*' scope=spfile;
alter system set "_optimizer_reduce_groupby_key"=off scope=spfile sid='*';
alter system set "_PX_use_large_pool"=TRUE scope=spfile;
# 修改数据库允许最大连接数
alter system set processes = 3000 scope = spfile;
# 以上设置项需要重启数据库服务才能生效:
shutdown immediate;
startup;
由于系统数据库一部分数据使用CLOB数据类型存储,在导出备份时用时较长,数据库系统在导出查询数据时,超出UNDO_RETENTION设置的长时,容易造成读取数据不一致,造成导出数据时包含CLOB数据类型的表无法正常导出,备份文件缺少个别表的问题。
修改数据库系统级undo_retention参数值脚本:
sql
ALTER SYSTEM SET UNDO_RETENTION=1800;
# 查询出所有clob数据类型的字段及所属表,并拼接成修改retention属性值的字符串
select 'ALTER TABLE ' ||TABLE_NAME||' MODIFY LOB ('||column_name||')(RETENTION);' from user_TAB_columns where data_type='CLOB' ORDER BY TABLE_NAME;
执行修改各个表参数脚本:
sql
ALTER TABLE BB_AGI_CON MODIFY LOB (MR_TYPE_SET)(RETENTION);
ALTER TABLE BB_AGI_EVE MODIFY LOB (EVENT_SQL_XML)(RETENTION);
ALTER TABLE BB_BAS_KB MODIFY LOB (BLOB_CONT)(RETENTION);
ALTER TABLE BB_CERT_INFO MODIFY LOB (CERT_PIC)(RETENTION);
ALTER TABLE BB_CON_ELEM MODIFY LOB (MON_ELEM)(RETENTION);
ALTER TABLE BB_CON_RELA MODIFY LOB (CON_UNIT)(RETENTION);
ALTER TABLE BB_CON_XOR MODIFY LOB (KEY_WORD)(RETENTION);
ALTER TABLE BB_CON_XOR MODIFY LOB (REJE_ELEM)(RETENTION);
ALTER TABLE BB_MR_MARK MODIFY LOB (QC_EMPH)(RETENTION); ......