大家好,我是明哥!
最近自己在某台 Centos7上安装了 Oracle 19c, 特地整理记录了下过程,跟大家分享下。(卷一下,搞大数据的,怎么能不懂 RDBMS的扛把子 Oracle 的方方面面呢,哈哈)
Oracle的安装,一般使用官方提供的Oracle Universal Installations (OUI) 来进行安装,OUI支持图形化的安装和非图形化的静默安装两种方式。
图形化的安装方式是向导式的比较直观,但需要在服务器上安装图形组件比如Gnome,且需要配置运行级别runLevel为多用户图形级别,此时对服务器资源消耗较大,所以在服务器没有安装图形组件时,或者在大规模批量安装部署数据库时,一般都选用静默安装。
本文重点讲述静默安装。
Oracle OUI 静默安装,即 Oracle OUI Silent Installations,之所以能实现静默,是因为底层通过三个 response files 指定了一些必需的配置项的具体设置,管理员可以通过修改这三个 response file,针对自己的情况进行定制配置,从而实现静默安装。
这三个 response files,说明如下:
$ORACLE_HOME/install/response/db_install.rsp: 静默式安装或升级 oracle 二进制包时使用;
$ORACLE_HOME/assistants/dbca/dbca.rsp: 静默式安装、配置、删除数据库实例时使用;
$ORACLE_HOME/assistants/netca/netca.rsp: 静默式配置 oracle 数据库的网络监听时使用;
在执行静默安装前,最好备份这三个文件。
该步骤是正式安装前的准备工作,主要涉及一些软硬件配置检查(硬件资源的检查和一些软件配置项的更改),以及 oracle 安装包的下载。
检查硬件配置:
内存至少8G: grep MemTotal /proc/meminfo
SWAP分区至少8G: grep SwapTotal /proc/meminfo
磁盘空间至少10g,其中/tmp目录下空间至少2g: df -h
配置 /etc/hosts 和 /etc/hostname;
配置 selinux 为permissive或disabled:涉及文件/etc/selinux/config 和命令 setenforce Permissive
关闭防火墙:systemctl stop/disalbe firewalld
确认操作系统版本,并下载对应版本的 preinstall rpm包(该rpm 包可以用来在正式安装前执行一些必要的配置);
下载 oracle19c 的二进制zip安装包;
说明:
preinstall rpm 包下载链接如下:https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
zip 安装包的下载链接如下:https://www.oracle.com/database/technologies/oracle19c-linux-downloads.html
该步骤是正式安装前的准备工作,主要涉及一些依赖包的安装,Oracle运行时必需目录的创建和赋权,oracle系统用户的创建和环境变量的配置,以及一些辅助脚本的创建及赋权。
执行安装前自动配置:yum localinstall ./oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm注意:该步骤自动在操作系统上创建了oracle系统用户;
创建oracle运行时必需的目录并赋权;
mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1
mkdir -p /u02/oradata
mkdir /u02/flash_recovery_area
chown -R oracle:oinstall /u01 /u02
chmod -R 775 /u01 /u02
创建配置环境变量的辅助脚本,和数据库启停的辅助脚本,并赋权:
mkdir /home/oracle/scripts
touch /home/oracle/scripts/setEnv.sh
touch /home/oracle/scripts/start_all.sh
touch /home/oracle/scripts/stop_all.sh
chown -R oracle:oinstall /home/oracle/scripts
chmod u+x /home/oracle/scripts/*.sh
上述脚本具体内容如下:
cat > /home/oracle/scripts/setEnv.sh < /home/oracle/scripts/start_all.sh < /home/oracle/scripts/stop_all.sh <
配置环境变量 /home/oracle/.bash_profile,引用上述环境变量配置辅助脚本:
echo ". /home/oracle/scripts/setEnv.sh" >> /home/oracle/.bash_profile
配置完成后,相关脚本内容截图如下:
注意:
上述环境变量辅助脚本 setEnv 中的配置项 ORACLE_SID=ORA19C 和 PDB_NAME=PORA19C1,跟后文 dbca 配置文件$oracle_home/assistants/dbca/dbca.rsp 中的配置项sid=ORA19C 和pdbName=PORA19C1 是一一呼应的。
说明:
以下操作,需要切换为 oracle 系统用户再进行操作;
Oracle 系统用户,是前一个步骤安装 preinstall rpm 包时自动创建的
Oracle 系统用户的密码,管理员可以手动通过命令进行设置 (passwd oracle)
以下是详细安装步骤。
解压下载的oracle19c的二进制zip包到 $ORACLE_HOME目录下;
配置静默安装配置文件 db_install.rsp,更改前最好备份,重点修改项如下:
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_HOME=/u01/app/oracle/product/19.0.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
执行静默安装前,可以执行以下命令,检查各种配置项是否配置正确:/u01/app/oracle/product/19.0.0/dbhome_1/runInstaller -executePrereqs -silent -responseFile /u01/app/oracle/product/19.0.0/db_1/install/response/db_install.rsp
执行静默安装
可以使用以下命令安装,此时其实就是传统的互动式的GUI界面安装方式:./runInstaller
静默安装命令:/u01/app/oracle/product/19.0.0/dbhome_1/runInstaller -silent -responseFile /u01/app/oracle/product/19.0.0/dbhome_1/install/response/db_install.rsp
也可以不更改配置文件 db_install.rsp 或只更改该配置文件中部分配置项,然后在执行runInstaller命令时在命令行指定配置项,比如:
/u01/app/oracle/product/19.0.0/dbhome_1/runInstaller -ignorePrereq -waitforcompletion -silent
-responseFile ${ORACLE_HOME}/install/response/db_install.rsp
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=${ORACLE_HOSTNAME}
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=${ORA_INVENTORY}
SELECTED_LANGUAGES=en,en_GB
ORACLE_HOME=${ORACLE_HOME}
ORACLE_BASE=${ORACLE_BASE}
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_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
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=true
image
根据runInstaller安装时的提示,切换使用root执行提示中的两个脚本文件
从执行结果的提示可以看出,root.sh执行时创建了配置文件 /etc/oratab,
配置文件/etc/oratab,是 oracle 运行时的一个比较重要的配置文件,后续的 dbca 命令会更新该配置文件。
使用 sqlplus 验证软件包安装结果 上述步骤完成后,oracle所有的二进制文件都已经安装完毕,可以通过sqlplus命令验证下安装结果:
NetCA,即Net Configuration Assistant,可以配置oracle监听服务;
同runInstaller一样,NetCA即支持 GUI 互动模式的配置,也支持SILENT静默模式的配置,静默模式下需要使用配置文件$oracle_home/assistants/netca/netca.rsp;
由于监听服务比较简单,笔者在这里使用了默认配置,未做该配置文件做任何修改;
可以使用以下命令安装,此时其实是非静默安装方式:./netca
以下是详细配置过程。
通过 netca 静默式配置监听服务:netca -silent -responseFile $ORACLE_HOME/assistants/netca/netca.rsp
使用命令 lsnrctl status 检查监听状态
可以对比下,没有通过 netca 配置监听服务前,lsnrctl status的输出:
DBCA ,即Database Configuration Assistant ,可以用来创建 Oracle 数据库实例;
DBCA 即支持 GUI 互动模式,也支持SILENT静默模式;
静默模式下需要更改配置文件 $oracle_home/assistants/dbca/dbca.rsp;
以下是详细创建过程。
配置静默安装配置文件 $oracle_home/assistants/dbca/dbca.rsp,改动前最好备份,重点修改项如下:
gdbName=ORA19C.dbaora.com
sid=ORA19C
createAsContainerDatabase=true
numberOfPDBs=1
pdbName=PORA19C1
pdbAdminPassword=hundsun
templateName=General_Purpose.dbc
sysPassword=hundsun
systemPassword=
dbsnmpPassword=hundsun
datafileDestination=/u02/oradata
recoveryAreaDestination=/u02/flash_recovery_area
characterSet=AL32UTF8
nationalCharacterSet=AL16UTF16
listeners=LISTENER
sampleSchema=true
databaseType=OLTP
通过dbca命令静默式创建数据库:dbca -silent -createDatabase -responseFile $ORACLE_HOME/assistants/dbca/dbca.rsp
重点说明:
Oracle12c 引进了multitenant database architecture, 在该多租户机制下,一个 Container Databases (CDB) 可以包含多个Pluggable Databases (PDB);
oracle 将CDB看成一个容器,用来存放数据库,在CDB中可以有多个PDB,其中存在一个root根容器(PDB$ROOT)、一个种子容器(PDB$SEED)和多个PDBS;
可以在dbca配置文件dbca.rsp 中通过配置项 createAsContainerDatabase=true,numberOfPDBs=1,pdbName=PORA19C1 来指定创建PDB,创建的PDB的个数,及PDB的名字;(当然也可以指定不创建PDB);
dbca 配置文件 dbca.rsp 中的配置项 sid=ORA19C 和 pdbName=PORA19C1,和上文环境变量辅助脚本 setEnv 中的配置项 ORACLE_SID=ORA19C 和 PDB_NAME=PORA19C1,是一一呼应的;
创建数据库实例时,也可以使用以下命令,此时其实是非静默安装方式:./dbca;
Dbca也可以用来删除数据库,实例命令如下:dbca -silent -deleteDatabase -sourceDB cdb2 -sysDBAUserName sys -sysDBAPassword OraPasswd1
创建数据库实例时,也可以不更改配置文件 dbca.rsp 或只更改该配置文件中部分配置项,然后在执行dbca命令时在命令行指定配置项,实例如下;
dbca -silent -createDatabase
-templateName General_Purpose.dbc
-gdbname ${ORACLE_SID} -sid ${ORACLE_SID} -responseFile NO_VALUE
-characterSet AL32UTF8
-sysPassword SysPassword1
-systemPassword SysPassword1
-createAsContainerDatabase true
-numberOfPDBs 1
-pdbName ${PDB_NAME}
-pdbAdminPassword PdbPassword1
-databaseType MULTIPURPOSE
-memoryMgmtType auto_sga
-totalMemory 2000
-storageType FS
-datafileDestination "${DATA_DIR}"
-redoLogFileSize 50
-emConfiguration NONE
-ignorePreReqs
数据库创建完成后,使用lsnrctl status验证下监听状态:
数据库创建完成后,通过sqlplus尝试登录验证下:
上述命令 “sqlplus sys/hundsun@ORA19C as sysdba” 中使用的 ORA19C 是配置文件 dbca.rsp 中指定的 sid=ORA19C,是 oracle数据库的System identifier (SID),;
上述命令执行成功后,登录的是根容器 CDB$ROOT,若要切换到某个可插拔数据库 pdb,可以使用命令 alter session set container=pdbName;。
配置监听:如果使用 dbca 创建数据库时创建了可插拔数据库 pdb,则需要更改配置文件 tnsnames.ora,添加对可插拔数据库实例的监听;
配置完毕的 tnsname.ora 内容如下,可见添加了对可插拔数据库实例 PORA19C1的监听配置(PORA19C1是通过配置文件dbca.rsp的配置项pdbName=PORA19C1指定的):
配置文件 listener.ora 在使用netca配置网络监听时就配置好了,一般可以不修改,其内容如下:
可以使用命令 tnsping 验证对可插拔数据库pdb的监听配置是否正确:
配置自启动:配置可插拔数据库随容器数据库的启动而自动启动
在启动数据库的时候,可插拔数据库 PDB 并不会随着容器数据库 CDB的启动而自动启动
我们可以通过创建一个触发器让 PDB 随CDB启动
触发器内容如下:
CREATE OR REPLACE TRIGGER open_pdbs
AFTER STARTUP ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';
END open_pdbs;
image
配置自启动:配置数据库实例的自启动
当使用/u01/app/oracle/product/19.0.0/dbhome_1/bin/dbstart 和 /u01/app/oracle/product/19.0.0/dbhome_1/bin/dbshut dbstart对oracle数据库进行启停管理时,某个数据库实例是否会自动启停,是通过配置文件 /etc/oratab 指定的;
/etc/oratab 配置文件中各个配置项的格式为 $ORACLE_SID:$ORACLE_HOME:
通过设置第三部分的 restart flag 为 'Y',即可实现该数据库实例随oracle系统启动的自启动:
4. 最后,上文还提供了封装的oracle数据库系统的启停脚本 /home/oracle/scripts/start_all.sh 和 /home/oracle/scripts/stop_all.sh,如果需要的话,还可以配置oracle数据库系统随 linux 操作系统的启动而自动启动,在此不再赘述。
在此总结提供下,Oracle 数据库创建完毕后的日常使用命令
登录本地ORACLE数据库: sqlplus / as sysdba
查询某容器是否是CDB:select name,cdb,open_mode,con_id from v$database;
查看当前容器数据库:show con_name;
查看所创建的容器数据库:show pdbs;
创建一个新的容器数据库PDB:create pluggable database pdb1 admin user pdb1 identified by pdb1 file_name_convert=('/u01/app/oracle/oradata/orcl/pdbseed/','/u01/app/oracle/oradata/orcl/pdb1/');
启动一个创建好的PDB:alter pluggable database pdb1 open;
切换使用一个启动了的PDB: alter session set container=pdb1;
创建表空间:create tablespace ts01 datafile '/u02/oradata/ORA19C/PORA19C1/ts01.dbf' size 1024M;
查看表空间大小:select tablespace_name, file_id, sum(bytes)/1024/1024"(M)" from dba_data_files group by tablespace_name, file_id ORDER BY file_id;
创建 oracle 数据库的用户:create user hs_liming identified by hundsun default tablespace ts01;
为 oracle 数据库用户赋权:grant connect,resource,dba to hs_liming;
创建 oracle表:create table hs_liming.student(
name varchar2(16) primary key,
sex number(1),
age number(3),
class number(2),
address varchar2(64)
)tablespace ts01;
正常时候用oralce表:insert into hs_liming.student values ('michael',1,35,1,'china');
正常时候用oralce表:SELECT * FROM hs_liming.student;
删除非空表空间(包含物理文件):drop tablespace data_space_hhh including contents and datafiles;
关闭一个创建好的PDB: alter pluggable database pdb1 close;
也可以使用传统的 startup和shutdown 命令来启动和关闭PDB:
alter session set container= PORA19C1;
startup;
shutdown immediate;
alter session set container=CDB$ROOT;
!关注不迷路 ~ 各种福利、资源定期分享!欢迎小伙伴们关注公众号!!欢迎小伙伴们添加明哥微信,备注“加群交流”,加入 ABC 技术交流群!
IT明哥