参考:
http://blog.51cto.com/12790274/2062955
https://blog.csdn.net/github_39294367/article/details/77057149
https://blog.csdn.net/sinat_41525226/article/details/78909706
https://blog.csdn.net/dbagaoshou/article/details/78964122
一、准备工作:
1.VM虚拟机:
2.CentOS7 映像:
3.Oracle12c 安装包:
4.Linux系统远程工具
5.文本编辑工具
二、系统环境部署
1.新建虚拟机,这里设置的两个虚拟硬盘属于个人习惯,可以忽略,主要用于试验;
2.安装CentOS7系统,这里安装的是64位的系统
3.系统安装时选择的是最小安装,使用的时候连 ifconfig 也用不了,正好把回顾一遍 yum 安装相关知识
CentOS7 设置yum安装的本地资源为光盘资源
CentOS7 ifconfig命令无法使用的解决办法
CentOS7 修改设置静态IP和DNS
【注意】修改IP和主机名,要设置一下HOSTS配置文件,不然启动oracle监听和实例会比较慢
[root@vs ~]# vi /etc/hosts
# 增加信息格式如下:
IP地址 主机名
三、安装Oracle数据库系统
1.检查oracle所需包 (以root身份操作)
rpm -q binutils compat-libcap1 compat-libstdc++-33 compat-libstdc++-33*.i686 glibc glibc*.i686 glibc-devel glibc-devel*.i686 ksh libaio libaio*.i686 libaio-devel libaio-devel*.i686 libX11 libX11*.i686 libXau libXau*.i686 libXi libXi*.i686 libXtst libXtst*.i686 libgcc libgcc*.i686 libstdc++ libstdc++*.i686 libstdc++-devel libstdc++-devel*.i686 libxcb libxcb*.i686 make nfs-utils net-tools smartmontools sysstat unixODBC unixODBC-devel gcc gcc-c++ libXext libXext*.i686 zlib-devel zlib-devel*.i686 unzip
2.安装oracle依赖包(以root身份操作)
yum install -y binutils compat-libcap1 compat-libstdc++-33 compat-libstdc++-33*.i686 glibc glibc*.i686 glibc-devel glibc-devel*.i686 ksh libaio libaio*.i686 libaio-devel libaio-devel*.i686 libX11 libX11*.i686 libXau libXau*.i686 libXi libXi*.i686 libXtst libXtst*.i686 libgcc libgcc*.i686 libstdc++ libstdc++*.i686 libstdc++-devel libstdc++-devel*.i686 libxcb libxcb*.i686 make nfs-utils net-tools smartmontools sysstat unixODBC unixODBC-devel gcc gcc-c++ libXext libXext*.i686 zlib-devel zlib-devel*.i686 unzip
# 也可以分段执行,避免遗漏
yum install -y compat-libcap1 compat-libstdc++-33 compat-libstdc++-33*.i686
yum install -y glibc*.i686 glibc-devel glibc-devel*.i686
yum install -y ksh libaio*.i686 libaio-devel libaio-devel*.i686
yum install -y libX11 libX11*.i686 libXau libXau*.i686 libXi libXi*.i686
yum install -y libXtst libXtst*.i686 libgcc*.i686 libstdc++*.i686 libstdc++-devel libstdc++-devel*.i686
yum install -y libxcb libxcb*.i686 make nfs-utils net-tools smartmontools sysstat unixODBC unixODBC-devel
yum install -y gcc gcc-c++ libXext libXext*.i686 zlib-devel zlib-devel*.i686 unzip
3.修改内核参数(参考的资料有这么一段,考虑到这个是系统性能优化的设置,所以没有做这一步)
[root@Oracle ~]# vim /etc/sysctl.conf
#修改或添加以下内容
fs.aio-max-nr = 1048576
fs.file-max = 6815744 // 设置最大打开文件数
kernel.shmall = 16777216 // 共享内存的总量,8G内存设置:2097152*4k/1024/1024
kernel.shmmax = 34359738360 // 最大共享内存的段大小,G换算成k计算
kernel.shmmni = 4096 // 整个系统共享内存端的最大数
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500 // 可使用的IPv4端口范围
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
#
[root@Oracle ~]# sysctl -p
# 检查并生效
[root@Oracle ~]# sysctl -a
4.创建用户组和用户(以root身份操作)
[root@Oracle ~]# groupadd oinstall
[root@Oracle ~]# groupadd dba
[root@Oracle ~]# groupadd oper
[root@Oracle ~]# useradd -g oinstall -G dba,oper oracle
#修改用户密码
[root@Oracle ~]# passwd oracle
或
[root@Oracle ~]# echo "123456" | passwd --stdin oracle
5.创建相关目录
[root@Oracle ~]# mkdir /u01
[root@Oracle ~]# mkdir -p /u01/app/oracle //oracle数据库安装目录
[root@Oracle ~]# mkdir -p /u01/app/oraInventory //oracle数据库配置文件目录
[root@Oracle ~]# mkdir -p /u01/app/oracle/oradata //存放数据库的数据目录
[root@Oracle ~]# mkdir -p /u01/app/oracle/oradata_back //存放数据库备份文件
[root@Oracle ~]# chmod -R 775 /u01/app
[root@Oracle ~]# chown -R oracle:oinstall /u01 //设置目录所有者为oinstall用户组的oracle用户
6.修改etc/profile
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536a
else
ulimit -u 16384 -n 65536
fi
fi
7.修改/home/oracle/.bash_profile
#oracle数据库安装目录
ORACLE_BASE=/u01/app/oracle
#oracle数据库路径
ORACLE_HOME=$ORACLE_BASE/product/12.2.0/db_1
#oracle启动数据库实例名
ORACLE_SID=orcl
#添加系统环境变量
PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
#添加系统环境变量
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
# 该部分重要,后续错误一般是该步骤造成
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH LD_LIBRARY_PATH
# 使配置生效
[root@Oracle ~]# source /home/oracle/.bash_profile
8.配置Java环境
[root@Oracle ~]# java -version # 查看安装版本
[root@Oracle ~]# yum remove openjdk # 如果是系统自带的openjdk,则卸载
[root@Oracle ~]# rpm -ivh jdk-8u191-linux-x64.rpm # 安装自己下载的JDK
这里要用到工具 ,把JDK安装包上传到虚拟机,oracle安装包也是用同样的方法上传,我是放到home目录下,用完就可以删掉。
9.解压oracle安装包,解压后路径:/u01/database
[root@Oracle ~]# unzip linuxx64_12201_database.zip -d /u01 # 没有unzip命令,则先安装unzip
10.修改应答文件,静默安装配置文件路径:/u01/database/response/db_install.rsp
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v12.2.0
# 30行 安装类型,只装数据库软件
oracle.install.option=INSTALL_DB_SWONLY
# 35行 用户组
UNIX_GROUP_NAME=oinstall
# 42行 INVENTORY目录(不填就是默认值)
INVENTORY_LOCATION=/u01/app/oraInventory
# 46行 oracle目录
ORACLE_HOME=/u01/app/oracle/product/12.2.0/db_1
# 51行 oracle基本目录
ORACLE_BASE=/u01/app/oracle
# 63行 oracle版本
oracle.install.db.InstallEdition=EE
# 80行
oracle.install.db.OSDBA_GROUP=dba
# 86行
oracle.install.db.OSOPER_GROUP=oper
# 91行
oracle.install.db.OSBACKUPDBA_GROUP=dba
# 96行
oracle.install.db.OSDGDBA_GROUP=dba
# 101行
oracle.install.db.OSKMDBA_GROUP=dba
# 106行
oracle.install.db.OSRACDBA_GROUP=dba
# 180行 数据库类型
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
# 185行
oracle.install.db.config.starterdb.globalDBName=orcl
# 190行
oracle.install.db.config.starterdb.SID=orcl
# 216行
oracle.install.db.config.starterdb.characterSet=AL32UTF8
# 384行
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
# 398行 设置安全更新(貌似是有bug,这个一定要选true,否则会无限提醒邮件地址有问题,终止安装。PS:不管地址对不对)
DECLINE_SECURITY_UPDATES=true
可以使用 SecureFxPortable 工具把 db_install.rsp 文件下载到本机,用 EditPlus 文本编辑工具修改,再上传替换,这样比较方便。
11.安装Oracle数据库软件(以oracle用户身份操作)
[oracle@vs database]$ ./runInstaller -force -silent -noconfig -ignorePrereq -ignoreSysPreReqs -responseFile /u01/database/response/db_install.rsp
可以边装边查看日志,日志文件路径在执行11的时候会给出
[oracle@vs OraInstall2018-11-12_12-40-15am]$ tail –f installActions2018-11-12_12-40-15AM.log
安装日志截图:
当出现上图提示时,可以在产品清单目录查看安装日志
[oracle@vs ~]$ tail –f/u01/app/oraInventory/logs/installActions2018-11-12_12-40-15AM.log
12.安装成功后会提示如下图命令,需要切换到root身份执行
[root@vs ~]# /u01/app/oraInventory/orainstRoot.sh
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.
Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.
[root@vs ~]# /u01/app/oracle/product/12.2.0/db_1/root.sh
Check /u01/app/oracle/product/12.2.0/db_1/install/root_Oracle_2017-04-15_20-56-27-813321685.log for the output of root script
13.配置监听,静默安装配置文件路径:/u01/database/response/netca.rsp
netca -silent -responsefile /u01/database/response/netca.rsp
可以通过 netstat -tlnp 命令查看监听地址
netstat -tlnp
tcp 0 0 :::1521 :::* LISTEN 5477/tnslsnr
14.修改dbca.rsp文件,静默安装配置文件路径:/u01/database/response/dbca.rsp
# 21行 不可更改
responseFileVersion=/oracle/assistants/rspfmt_dbca_response_schema_v12.2.0
# 32行 全局数据库名
gdbName=orcl
# 42行 系统标识符
sid=orcl
# 52行
databaseConfigType=SI
# 74行
policyManaged=false
# 88行
createServerPool=false
# 127行
force=false
# 163行
createAsContainerDatabase=true
# 172行
numberOfPDBs=1
# 182行
pdbName=orclpdb
# 192行
useLocalUndoForPDBs=true
# 203行 库密码
pdbAdminPassword=********
# 223行
templateName=/u01/app/oracle/product/12.2.0/db_1/assistants/dbca/templates/General_Purpose.dbc
# 233行 超级管理员密码
sysPassword=********
# 233行 管理员密码
systemPassword=********
# 273行
emExpressPort=5500
# 284行
runCVUChecks=false
# 313行
omsPort=0
# 341行
dvConfiguration=false
# 391行
olsConfiguration=false
# 401行
datafileJarLocation={ORACLE_HOME}/assistants/dbca/templates/
# 411行
datafileDestination={ORACLE_BASE}/oradata/{DB_UNIQUE_NAME}/
# 421行
recoveryAreaDestination={ORACLE_BASE}/fast_recovery_area/{DB_UNIQUE_NAME}
# 431行
storageType=FS
# 468行 字符集创建库之后不可更改
characterSet=AL32UTF8
# 478行
nationalCharacterSet=AL16UTF16
# 488行
registerWithDirService=false
# 526行
listeners=LISTENER
# 546行
variables=DB_UNIQUE_NAME=orcl,ORACLE_BASE=/u01/app/oracle,PDB_NAME=,DB_NAME=orcl,ORACLE_HOME=/u01/app/oracle/product/12.2.0.1/db_1,SID=orcl
# 555行
initParams=undo_tablespace=UNDOTBS1,memory_target=796MB,processes=300,db_recovery_file_dest_size=2780MB,nls_language=AMERICAN,dispatchers=(PROTOCOL=TCP) (SERVICE=orclXDB),db_recovery_file_dest={ORACLE_BASE}/fast_recovery_area/{DB_UNIQUE_NAME},db_block_size=8192BYTES,diagnostic_dest={ORACLE_BASE},audit_file_dest={ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/adump,nls_territory=AMERICA,local_listener=LISTENER_orcl,compatible=12.2.0,control_files=("{ORACLE_BASE}/oradata/{DB_UNIQUE_NAME}/control01.ctl", "{ORACLE_BASE}/fast_recovery_area/{DB_UNIQUE_NAME}/control02.ctl"),db_name=cdb1,audit_trail=db,remote_login_passwordfile=EXCLUSIVE,open_cursors=300
# 565行
sampleSchema=false
# 574行
memoryPercentage=40
# 584行
databaseType=MULTIPURPOSE
# 594行
automaticMemoryManagement=false
# 604行
totalMemory=0
15.创建数据库实例,使用 dbca 命令(dbca是oracle命令,如果提示命令找不到,检查环境变量)
[oracle@oracle response]$ dbca -silent -createDatabase -responseFile /u01/database/response/dbca.rsp
16.检查oracle进程状态
ps -ef | grep ora_ | grep -v grep
lsnrctl status
17.数据库实例的启动和关闭
# 以 DBA 身份进入 sqlplus,查看数据库状态
[oracle@Oracle ~]$ sqlplus / as sysdba
SQL> select open_mode from v$database; //查看数据库
SQL> select status from v$instance; //查看数据库实例
# 以 DBA 身份进入 sqlplus,修改管理员用户密码
[oracle@Oracle ~]$ sqlplus / as sysdba
SQL> alter user sys identified by ********; //改sys超级管理员密码
SQL> alter user system identified by ********; //改system管理员密码
# 以 DBA 身份进入 sqlplus,启动数据库
[oracle@Oracle ~]$ sqlplus / as sysdba
SQL> startup
# 以 DBA 身份进入 sqlplus,关闭数据库
[oracle@Oracle ~]$ sqlplus / as sysdba
SQL> shutdown abort
或
SQL> shutdown immediate
18.修改oracle启动配置文件
完成oracle12c数据库的安装后,相关服务器会自动启用,但并不表示下次开机后oracle服务器仍然可用。下面将介绍oracle的基本服务组件,以及如何编写服务脚本来控制oracle数据库系统的自动运行。
根据上面的安装过程,oracle的数据库软件将安装在变量ORACLE_HOME所指向的位置。例如 /u01/app/oracle/product/12.2.0/db_1/ ,而各种服务器组件程序(也包括sqlplus命令)正是位于其中的bin子目录下。
Oracle数据库的基本服务组件如下所述:(注:oracle服务组件最好以oracle用户身份运行如:su - oracle)
lsnrctl:监听器程序,用来提供数据库访问,默认监听TCP 1521端口。
dbstart、dbshut:数据库控制程序,用来启动、停止数据库实例。
emctl:管理器控制工具,用来控制OEM平台的开启与关闭,OEM平台通过1158端口提供HTTPS访问,5520端口提供TCP访问。
为了方便执行oracle的服务组件程序,建议对所有用户的环境配置作进一步的优化调整、补充PATH路径、oracle终端类型等变量设置。除此以外,还应该修改/etc/oratab配置文件,以便运行dbstart时自动启用数据库实例。
# 修改oratab配置如下,这样就可以通过dbstart 启动实例,也可以通过dbshut关闭实例。
[oracle@Oracle ~]$ vim /etc/oratab
racl:/u01/app/oracle/product/12.2.0/db_1:Y //把“N”改成“Y”
# 此时所有oracle的进程关闭,监听器也停止。
[oracle@Oracle ~]$ dbshut /u01/app/oracle/product/12.2.0/db_1/
# 启动监听器和实例。
[oracle@Oracle ~]$ dbstart /u01/app/oracle/product/12.2.0/db_1/
# 修改 dbstart 和 dbshut,如下
# 修改 #ORACLE_HOME_LISTNER=$1 为 ORACLE_HOME_LISTNER=$ORACLE_HOME
# 在 root 用户下编辑 rc.local
# dbstart 默认将 oratab 中参数为 Y 的所有库启动
[root@Oracle ~]# vi /etc/rc.d/rc.local
# 添加如下命令到 rc.local
# 用oracle用户登录,运行dbstart启动数据库
su - oracle -lc "/u01/app/oracle/product/12.2.0/db_1/bin/dbstart"
# 设置执行权限,因为Oracle linux 7.x 默认rc.local是没有执行权限,需执行chmod自己增加
[root@Oracle ~]# chmod +x /etc/rc.d/rc.local
# 查看监听状态及数据库状态
[oracle@Oracle ~]$ lsnrctl status
# 启动监听
[oracle@Oracle ~]$ lsnrctl start
# 停止监听
[oracle@Oracle ~]$ lsnrctl stop
19.防火墙开放端口(以root身份操作)
# 开启端口
[root@vs ~]# firewall-cmd --zone=public --add-port=1521/tcp --permanent
# 重启防火墙 (一般我们在开放完新的端口后,需要重新启动防火墙)
[root@vs ~]# firewall-cmd --reload
20.ORA-28040: 没有匹配的验证协议
在 $ORACLE_HOME/network/admin/sqlnet.ora
加入如下:
SQLNET.ALLOWED_LOGON_VERSION=8
21.安装报错
[oracle@yb-oracle response]$ dbca -silent -createDatabase -responseFile /ora01/database/response/dbca.rsp
[FATAL] [DBT-11211] The Automatic Memory Management option is not allowed when the total physical memory is greater than 4GB.
CAUSE: The current total physical memory is 15GB.
解决: automaticMemoryManagement=false
[FATAL] [DBT-06103] The port (5,500) is already in use.
ACTION: Specify a free port.
解决:hosts解析问题,eg:oracleip yb-oracle yb-oracle.example.com