Centos7虚拟机中oracle19c数据库安装
目录[-]
1.先诀条件
-
本文在安装oracle19c时,各项oracle配置操作都通过图形界面进行。因此CentOS7系统需要安装gnome图形程序,虚拟机安装时未默认安装gnome的同志可参考自行安装:https://www.tecmint.com/install-gui-in-rhel-centos-7/
-
oracle官网下载oracle19c安装包:https://www.oracle.com/database/technologies/oracle-database-software-downloads.html#db_free,选择linux版本x86_64版本即可,其中RPM(red hat package manager),即基于red hat发行版的linux软件包管理工具。RPM本文中安装未用到,也不是安装oracle的必须工具,但Oralce官网推荐安装此工具,以便在集群部署时更加快捷。本文不安装此工具,因为不会。
-
部署非生产的oracle环境,LINUX服务器最少分配2GB的内存,以及最少30GB的磁盘空间。如果VM安装LINUX虚拟机时,磁盘空间没分配够,可参考此文扩容:https://blog.csdn.net/RogerFedererGO/article/details/136920276?spm=1001.2014.3001.5501,内存空间的话,直接VM中调整就行(注意调整时保持虚拟机关机状态并无快照)
2.oracle19c安装准备(root用户下执行)
- 更新所有安装过的包至最新版并自动执行选项y,等待更新complete
yum update -y
yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的Shell 前端软件包管理器;基于 RPM 包管理.
- 安装数据库相关依赖及zip,unzip包,等待安装complete:
yum install -y binutils.x8664 compat-libcap1.x8664 gcc.x8664 gcc-c++.x8664 glibc.i686 glibc.x8664 glibc-devel.i686 glibc-devel.x8664 ksh compat-libstdc++-33 libaio.i686 libaio.x8664 libaio-devel.i686 libaio-devel.x8664 libgcc.i686 libgcc.x86_64 libstdc++.i686 libstdc++.x8664 libstdc++-devel.i686 libstdc++-devel.x8664 libXi.i686 libXi.x8664 libXtst.i686 libXtst.x8664 make.x8664 sysstat.x8664 zip unzip
- 为oracle用户分别安装用户属组及dba用户属组,以管理用户权限和组织用户。用户属组可以用来限制用户对文件和目录的访问权限,同时也可以方便地将用户分组管理,并添加oracle用户,将其分配给主用户组oinstall及附属用户组dba:
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
- 为新创建的oracle用户设定密码:
passwd oracle
- 在/etc/sysctl.conf文件中添加以下内核参数信息(如果已有内容的话就按情况调整)
fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 kernel.shmmax = 8329226240 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048586
各项内核参数说明:
-
net.ipv4.iplocalport_range :可使⽤的 IPv4 端⼝范围;
-
fs.file-max :该参数表⽰⽂件句柄的最⼤数量。⽂件句柄设置表⽰在 linux 系统中可以打开的⽂件数量;
-
kernel.shmall :该参数表⽰系统⼀次可以使⽤的共享内存总量(以⻚为单位);
-
kernel.shmmax :该参数定义了共享内存段的最⼤尺⼨(以字节为单位);
-
kernel.shmmni :这个内核参数⽤于设置系统范围内共享内存段的最⼤数量;
-
kernel.sem : 该参数表⽰设置的信号量;
-
net.core.rmem_default:默认的 TCP 数据接收窗⼝⼤⼩(字节);
-
net.core.wmem_default:默认的 TCP 数据发送窗⼝⼤⼩(字节);
-
net.core.rmem_max:最⼤的 TCP 数据接收窗⼝(字节);
-
net.core.wmem_max:最⼤的 TCP 数据发送窗⼝(字节);
-
fs.aio-max-nr :同时可以拥有的的异步 IO 请求数⽬。
-
使内核参数生效:
sysctl -p
sysctl: 用于在运行时检查和设置内核参数的命令。
-p: 告诉sysctl从指定的配置文件中读取参数并应用它们。如果没有指定任何文件,则默认使用/etc/sysctl.conf和/etc/sysctl.d/目录下的所有文件。
- 查看内核参数:
sysctl -a
- 在/etc/security/limits.conf文件中为oracle设定相关系统限制:
oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536
limits.conf文件实际是Linux PAM(插入式认证模块,Pluggable Authentication Modules)中pam_limits.so的配置文件,可以突破系统的默认限制,对系统访问资源起到一定保护作用。
而上面 nproc 和 nofile 是两个重要的内核参数,它们分别限制了用户可以拥有的进程数和打开的文件描述符的数量。这些限制对于运行大型数据库(如Oracle)的系统来说尤为重要,因为这些数据库可能会创建大量的进程和文件描述符。
在以上设定中实际是为oracle的用户设置资源限制的。具体来说:
-
oracle soft nproc 2047:为oracle用户设置软限制,即警告级别的进程数为2047。当该用户达到这个进程数时,系统会发出警告,但不会阻止用户创建更多进程。
-
oracle hard nproc 16384:为oracle用户设置硬限制,即最大的进程数为16384。这个限制是硬性的,达到此限制后,用户将无法创建更多的进程。
-
oracle soft nofile 1024:为oracle用户设置软限制,即警告级别的文件描述符数量为1024。当该用户打开的文件描述符数达到这个数值时,系统会发出警告,但不会阻止用户打开更多文件。
-
oracle hard nofile 65536:为oracle用户设置硬限制,即最大的文件描述符数量为65536。达到此限制后,用户将无法打开更多的文件或套接字。
-
通过FTP ,rz命令,将本地oracle19c zip 包上传至虚拟机,注意上传有乱码时调整xshell终端编码与CentOS虚拟机编码一致
-
创建一个新文件夹stage,将下载的oracle19c zip包解压至此文件夹:
mkdir /oracleUnzipFiles
unzip LINUX.X64193000db_home.zip -d /oracleUnzipFiles/
- 分别创建oracleBaseHome作为oracle基目录,oracleDataFiles作为数据存储目录(注意实际创建路径):
mkdir /oracleDBMS/oracleBaseHome
mkdir /oracleDBMS/oracleDataFiles
Oracle Base目录下包括admin和product等子目录,其中admin目录存放数据库的管理信息,product目录存放Oracle产品的信息。Oracle Base目录的位置可以在Oracle数据库安装过程中指定,也可以在数据库安装完成后通过修改Oracle的环境变量来设置。在Oracle数据库中,Oracle Base目录是一个非常重要的目录,它包含了Oracle数据库的所有文件和目录结构,是Oracle数据库正常运行的基础。
oracle database file是Oracle数据库的物理存储目录,用于存储数据库的各种对象和数据。
- 设置权限:
chown -R oracle:oinstall /oracleDBMS/oracleBaseHome
chown -R oracle:oinstall /oracleDBMS/oracleDataFiles
chown更改文件用户或组所有权,-R参数递归目录
chmod -R 775 /oracleDBMS/oracleBaseHome
chmod -R 775 /oracleDBMS/oracleDataFiles
-
chmod 是“change mode”的缩写,用于更改文件或目录的权限。
-
-R 是一个选项,表示“递归”,意味着命令将应用于指定目录及其所有子目录和文件。
-
775 是权限的表示方式,它是一个三位数字,分别代表文件拥有者、文件所属组和其他用户的权限。
-
数字 775 的权限分解如下:
-
第一个数字 7 代表文件拥有者的权限,它是 rwx(读、写、执行)的权限组合,对应的数字是 4(读)+ 2(写)+ 1(执行) = 7。
-
第二个数字 7 代表文件所属组的权限,也是 rwx,同样是 4 + 2 + 1 = 7。
-
第三个数字 5 代表其他用户的权限,它是 r-x(读、执行)的权限组合,对应的数字是 4(读)+ 0(写)+ 1(执行) = 5。
因此,chmod -R 775 directory_name 命令会递归地将 directory_name 目录及其所有子目录和文件的权限设置为:文件拥有者和文件所属组拥有读、写、执行权限,而其他用户只有读和执行权限。
chmod g+s /oracleDBMS/oracleBaseHome
chmod g+s /oracleDBMS/oracleDataFiles
- 设置或添加“set group ID” (SGID) 位。当SGID位被设置在一个目录上时,新创建在该目录下的文件或子目录将继承该目录的组,而不是创建者的主组。
以上操作全部完成后即可进行图形界面oracle数据库安装。
3.CentOS7上安装oracle19c
- 切换为oracle用户登录 ,执行oracle数据库安装命令:
/oracleUnzipFiles/runInstaller
以oracle用户执行执行命令时无权限时授权:
chown -R oracle:oinstall /oracleUnzipFiles/
chmod -R 775 /oracleUnzipFiles/
再次执行时若无法启动oracle图形安装界面:
以root用户执行以下命令,允许所有访问启动图形界面:
xhost +
-
xhost + 是一个在X Window System中使用的命令,用于控制哪些客户端可以访问X服务器。这个命令允许你指定哪些用户或哪些计算机可以连接到你的X服务器,从而控制对图形界面的访问权限。
xhost + 命令的具体作用取决于其后跟的参数。例如: -
xhost +local: 允许从本地网络访问。
- xhost -local: 禁止本地访问。
- xhost + :禁用访问控制,允许所有访问,包括远程访问(警告:这可能会带来安全风险)。
- xhost - :转回访问控制,即恢复默认的访问控制设置。
以oracle用户执行以下命令,在本linux虚拟机中输出图形界面:
export DISPLAY=:0.0
DISPLAY 环境变量通常用于告诉图形应用程序它们应该连接到哪个 X server,以便显示它们的用户界面。:0.0 是 DISPLAY 环境变量的一个常见值,它通常表示连接到本机的第一个 X server。
oralce安装界面看不太清的话,linux设置-设备-调整下分辨率。
- 进入安装界面,第一项配置选项,选第一项,创建并安装单实例:
- 第二项系统类,选桌面:
- 第三项典型安装,配置各项重要参数:
oracle base是oracle基目录,softwarelocation自动生成,可以看出是oralce安装包的解压路径,实际上是oracle这个软件产品即oracle home目录,一般情况下orace base 的product目录下包含oracle home目录,如果有不同版本的oracle软件安装,那么可以在oracle base 下有两个不同的oracle home目录。本文解压时没注意,分开放置了。各位可以按网上类似路径将oracle home目录放到oracle base 目录下,比如:Oracle base: /u01/app/oracle
Software location: /u01/app/oracle/product/12.2.0/ 。dbhome_1OSDBA group即之前创建的用户组,此处选dba;global dabase name 即全局数据库名,后面的create as container database即创建为窗口数据库,此时需要同步指定可拔插数据库名。容器数据库(CDB)是一个包含零个或多个可插拔数据库(PDBs)的数据库。每个PDB都是一个独立的、可插拔的数据库,它们共享同一个CDB的系统全局区(SGA)和其他资源
- 第四项创建安装库,主要保存安装过程中相关文件,比如install log files(注意有可能报ins-35179内存不足,free -m或free -h可查看内存使用情况。此时VM中直接给虚拟机增加内存,不需要关闭虚拟机,可能最小要加到3G,我之前是2G没够。)
root用户创建目录:
mkdir oralInvestory
分配权限:
chown -R oracle:oinstall /oracleDBMS/oralInvestory
- 执行中有些需以root用户权限进行,授权自动以root执行:
执行条件校验时swap交换内存不够,按下面这个操作以swap分区文件操作没调整好,可能因为是swap分区而不是文件的原因:
-
关闭所有交换分区命令如下:
swapoff -a
-
通过swap分区文件增加swap空间
创建swap分区的文件dd if=/dev/zero of=swapfile bs=1G count=3
其中bs是每块的大小,count是块的数量;bscount,就是swap文件的大小 此外,swapfile是swap文件的路径,可以根据需求修改。
-
格式化交换分区文件
mkswap swapfile
-
启用swap分区文件
swapon swapfile
-
添加开机启动 修改/etc/fstab这个文件,添加或者修改这一行:
swapfile swap swap defaults 0 0
有功夫的同志可以慢慢试下怎么扩展swap分区,我是直接先增大虚拟机磁盘,删除swap分区后重新将空闲空间分配为swap分区,完成后可通过free -m查看。https://blog.csdn.net/RogerFedererGO/article/details/136920276?spm=1001.2014.3001.5501
- 扩展后检查可通过,重新检查配置概况,确认安装,耗时较长。:
- 安装过程中有需要root用户执行的,没怎么注意,我直接点了yes,也是正常安装完成了。后面发现好像这个提示是要执行orainstRoot.sh与root.sh这两个脚本:
-
orainstRoot.sh 是 Oracle 数据库安装过程中的一个脚本文件,用于设置 Oracle Inventory 的目录权限。
-
Oracle Inventory 是一个存储 Oracle 软件安装信息的目录,它包含了关于已安装的软件包、补丁和依赖项的信息。orainstRoot.sh 脚本的主要目的是确保 Oracle Inventory 目录具有正确的权限设置,以便 Oracle 数据库和其他相关组件能够正常访问和更新其中的信息。
-
在安装 Oracle 数据库时,通常需要以 root 用户身份运行 orainstRoot.sh 脚本,以确保对 Oracle Inventory 目录的权限设置正确。这个脚本通常位于 Oracle 安装介质的 oraInventory 目录下。
-
运行 orainstRoot.sh 脚本后,它会执行一系列操作,包括创建或验证 Oracle Inventory 目录的存在,设置正确的权限,以及更新相关的配置文件。这些操作是确保 Oracle 数据库和其他组件能够正确安装和运行的重要步骤。
-
root.sh是Oracle数据库安装过程中的一个脚本文件,用于设置必要的操作系统权限。
具体来说,root.sh脚本主要执行以下操作:
-
设置Oracle数据库软件的文件权限,确保Oracle数据库软件的文件和目录具有正确的访问权限。
-
创建和配置Oracle数据库的环境变量,这些环境变量对于Oracle数据库的运行至关重要。 将Oracle数据库的相关命令和程序添加到系统的PATH环境变量中,以便用户可以直接在命令行中运行这些命令和程序。
-
配置Oracle数据库的网络设置,包括监听器配置和网络服务名配置等。
-
在安装Oracle数据库时,通常需要以root用户身份运行root.sh脚本,以确保对操作系统级别的设置和配置具有足够的权限。运行该脚本后,Oracle数据库将具备在操作系统中正常运行所需的所有必要权限和环境配置
直接以root用户手动执行:
/oracleDBMS/oralInvestory/orainstRoot.sh
/oracleUnzipFiles/root.sh
- 第五项,为了外部数据库连接,需要开通以下协议端口:
1521/TCP 5500/TCP 5520/TCP 3938/TCP
执行以下命令:
firewall-cmd --zone=public --add-port=1521/tcp --add-port=5500/tcp --add-port=5520/tcp --add-port=3938/tcp --permanent
-
firewall-cmd --zone=public 是 firewalld 防火墙的一个命令,用于管理公共区域(public zone)中的防火墙规则。firewalld 是 Linux 系统中的一个防火墙管理工具,它允许用户通过命令行或配置文件来配置防火墙规则,从而控制进出系统的网络流量。
-
具体来说,--zone=public 参数指定了命令应用于哪个防火墙区域。在这个例子中,它是应用于公共区域。公共区域通常是默认的区域,用于处理未被明确分配到其他区域的网络连接。
-
这个命令后面通常会跟着其他的选项和参数,用于添加、删除或查询防火墙规则。例如,你可以使用 --add-service 参数来添加一个服务到公共区域的允许列表中,或者使用 --remove-service 参数来从允许列表中移除一个服务。
这里有一些常用的 firewall-cmd 命令示例:
-
添加一个服务到公共区域的允许列表:firewall-cmd --zone=public --add-service=http
-
从公共区域的允许列表中移除一个服务:firewall-cmd --zone=public --remove-service=http
-
查询公共区域的当前配置:firewall-cmd --zone=public --list-all
以上我们执行的命令做了以下几件事情:
--zone=public:指定了规则应用于 public 区域。public 是 firewalld 的默认区域,通常用于不受信任的外部网络连接。
--add-port=1521/tcp:向 public 区域添加一个 TCP 端口规则,允许流量通过端口 1521。这个端口通常用于 Oracle 数据库的监听器。
--add-port=5500/tcp:向 public 区域添加一个 TCP 端口规则,允许流量通过端口 5500。这个端口可能用于某个自定义的应用程序或服务。
--add-port=5520/tcp:向 public 区域添加一个 TCP 端口规则,允许流量通过端口 5520。同样,这个端口也可能用于某个特定的应用程序或服务。
--add-port=3938/tcp:向 public 区域添加一个 TCP 端口规则,允许流量通过端口 3938。这个端口通常与 Oracle XML DB 相关。
--permanent:这个选项表示这些规则是永久性的,即使系统重启后也会保持。如果不加这个选项,规则只会临时生效,重启后失效。
重新加载linux防火墙以使以上设置生效:
firewall-cmd --reload
第六项设置oracle数据库环境变量:以oracle用户,在/home/oracle/.bash_profile路径下,添加如下内容:
TMPDIR=$TMP; export TMPDIR ORACLE_BASE=/oracleDBMS/oracleBaseHome; export ORACLE_BASE ORACLE_HOME=/oracleUnzipFiles; export ORACLE_HOME ORACLE_SID=orclFederer; export ORACLE_SID PATH=$ORACLE_HOME/bin:$PATH; export PATH LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/lib64; export LD_LIBRARY_PATH CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
linux中以.开头的文件一般是默认隐藏的,可以以ls -a命令显示查看。
ORACLE_BASE与ORACLE_HOME及ORACLE_SID注意按自己安装过程中的实际路径设置。
示例代码:
TMPDIR=$TMP; export TMPDIR ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1; export ORACLE_HOME ORACLE_SID=tecmint; export ORACLE_SID PATH=$ORACLE_HOME/bin:$PATH; export PATH LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/lib64; export LD_LIBRARY_PATH CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
每个环境变量的解释:
- TMPDIR=$TMP; export TMPDIR
TMPDIR 是一个环境变量,它定义了临时文件的默认目录。这里,它设置为$TMP的值,然后导出,使其在当前Shell会话及其子进程中可用。
- ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_BASE 定义了Oracle数据库安装的基础目录,即Oracle产品的根目录。这里,它被设置为/u01/app/oracle,并导出。
- ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1; export ORACLE_HOME
ORACLE_HOME 定义了Oracle软件产品的特定安装目录,通常是数据库软件的安装位置。这里,它被设置为ORACLE_BASE下的一个子目录,并导出。
- ORACLE_SID=tecmint; export ORACLE_SID
ORACLE_SID 定义了当前会话的Oracle系统标识符(SID)。它用于标识要连接的特定Oracle数据库实例。这里,它被设置为tecmint,并导出。
- PATH=$ORACLE_HOME/bin:$PATH; export PATH
PATH 是一个环境变量,它定义了系统搜索可执行文件的目录列表。这里,$ORACLE_HOME/bin被添加到$PATH的开头,以确保Shell首先在当前Oracle安装中的bin目录下查找可执行文件。
- LDLIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/lib64; export LD_LIBRARYPATH
LD_LIBRARY_PATH 是一个环境变量,它定义了动态链接器在查找共享库时应该搜索的目录列表。这里,它包含了Oracle库目录以及其他标准库目录,并导出。
- CLASSPATH=$ORACLEHOME/jlib:$ORACLEHOME/rdbms/jlib; export CLASSPATH
CLASSPATH 是一个环境变量,它定义了Java运行时环境查找用户定义的类和资源文件的目录和ZIP/JAR文件列表。这里,它包含了Oracle的Java库,并导出。
- 第六项调整监听文件localhost地址为0.0.0.0/oracleUnzipFiles/network/admin/listener.ora,以方便进行非本机的远程连接:
最后,在/home/oracle路径下执行命令加载.bash_profile文件,使配置生效:
source .bash_profile
使用以下任一方法查看数据库状态:
-
使用ps命令配合grep命令来查找正在运行的pmon进程 。pmon是Oracle的后台进程,如果存在pmon进程,那么说明Oracle数据库已经成功启动。
ps -ef | grep pmon
-
使用systemctl命令查看oracle服务的状态 。如果服务正在运行,那么说明Oracle数据库已经成功启动(仅适用于systemd系统)。
systemctl status oracle
使用lsnrctl命令来查看监听器的状态 。监听器是用于接受和处理Oracle数据库连接请求的进程,如果监听器正在运行,那么说明Oracle数据库已经成功启动。
lsnrctl status
服务未启动,执行以下命令之一启动oracle服务:
- linux的oracle用户下使用sqlplus命令行工具 你可以使用sqlplus作为Oracle用户登录,并使用STARTUP命令来启动数据库实例。
sqlplus / as sysdba
STARTUP;
- 使用dbstart脚本 Oracle提供了一个dbstart脚本来启动和停止数据库实例。你可以使用这个脚本来管理数据库的自动启动。
dbstart
这个命令会启动数据库实例,并且通常会读取oratab文件来确定哪些数据库实例应该被启动。
- 使用systemd服务(本文不适用) 如果你的Oracle数据库配置为使用systemd服务来管理,你可以使用systemctl命令来启动服务。
systemctl start oracle-rdbms.service
启动报错:
报ORACLE_HOME环境变量未配置,实际已经配置过了。分别修改以下两个命令文件中环境变量引用将 将ORACLE_HOME=$1 修改为 ORACLEHOME=$ORACLEHOME ,将ORACLE_HOME_LISTNER=$1 修改为 ORACLE_HOME_LISTNER=$ORACLE_HOME:
vim $ORACLE_HOME/bin/dbstart
vim $ORACLE_HOME/bin/dbshut
此处$ORACLE_HOME就是之前已配置过的oracle软件安装目录,本文为/oracleUnzipFiles
ORACLE_HOME=$1 在shell脚本中表示将脚本的第一个参数($1)赋值给环境变量 ORACLE_HOME;在Oracle数据库的启动脚本(如 dbstart)中,ORACLE_HOME_LISTNER 变量通常用于确定监听器的位置。然而,直接使用 $1 作为这个变量的值可能不是一个好的做法,因为它依赖于脚本调用时传入的参数,这可能会导致脚本的行为变得不可预测。
因此,本文我们将 ORACLE_HOME_LISTNER=$1 修改为 ORACLE_HOME_LISTNER=$ORACLE_HOME。这样做的好处是,$ORACLE_HOME 通常是一个已经设置好的环境变量,指向Oracle数据库软件的安装目录,这样可以确保监听器始终在正确的位置找到.
调整好后,重新执行dbstart命令启动数据库服务,不知道什么情况我执行dbstart与dbshut命令均不报错,但没效果……使用第一种sql命令行,执行后正常启动:
监听状态:
WINDOWS配置tnsnams.ora,即可远程登录 。注意本文虚拟机安装时采用的DHCP动态配置协议,虚拟机IP每次启动可能会不一样。
PLSQL以sys/sysdba即可登录,密码为安装过程中指定的数据库密码。
参考文档:https://www.tecmint.com/install-oracle-database-12c-on-centos-7/
https://docs.oracle.com/en/database/oracle/oracle-database/19/ladbi/index.html#Oracle%C2%AE-Database