部署Oracle 12c企业版数据库( 安装及使用)
作者:筱振
在计算机信息安全领域中,数据库系统无疑有着举足轻重的地位。比如:SQL Server、MySQL、DB2、Oracle等,都是比较知名的数据库管理软件,由于Oracle数据库的安全性,所以在一些比较重要的场合被普遍使用,比如:电信、银行、政府部门等。
本次博文以Oracle 12c数据库的64位企业版为例,学习如何在Centos 操作系统中的安装和基本配置,包括安装的准备等。
博文大纲:
一、安装Oracle 12c
二、创建Oracle 12c数据库
三、Oracle 12c数据库的启动与关闭
四、将Oracle数据库设置为开机自启动
一、安装Oracle 12c
1.安装CentOS 7操作系统的注意事项
由于本次安装Oracle 12c软件是在CentOS 7系统上实现的,那么首次安装CentOS 7操作系统有几点要求:
- 防火墙的配置选项设置为禁用;
- SELinux设置为禁用;
- 默认安装设置为软件开发;
- 内核选择3.10.0-862.el7.x86_64及以上版本;
2.前置条件的准备
Oracle数据库是一个相对庞大的应用软件,对服务器的系统类型、内存和交换分区、硬盘空阿金、内核参数、软件环境、用户环境等都有相应的要求。只要满足了这些必备的条件,才能确保Oracle 12c安装成功并稳定运行。
(1)系统及配置要求
Oracle 12c明确支持的Linux操作系统包括Oracle Linux 7、Oracle Linux 6、Oracle Linux 5、Red Hat Enterprise Linux 7、Red Hat Enterprise Linux 6、Red Hat Enterprise Linux 5等,因为Red Hat Enterprise 和CentOS属于同步并行的操作系统,所以Oracle 12 c同样支持CentOS 7、CentOS 6、CentOS 5操作系统。在其他Linux系统中安装时,个别软件或配置文件可能需要进行适当的调整。
[root@localhost ~]# cat /etc/centos-release //查看系统版本信息 CentOS Linux release 7.5.1804 (Core) [root@localhost ~]# uname -r //查看系统内核信息 3.10.0-862.el7.x86_64
Linux操作系统要求:
- 物理内存:必须高于1GB,对于VMware虚拟机建议不少于2GB;
- 交换空间:物理内存为1~2GB时,交换分区为物理内存的1.5~2倍;物理内存为2~16GB时,交换分区于物理内存大小相同;物理内存超过16GB时,交换分区使用16GB就可以了;
如果交换分区空间不足的话,可以使用以下方式扩展交换分区
[root@localhost ~]# dd if=/dev/zero of=/swap_file bs=1024 count=2097152 //这是扩展了2GB的交换分区,2097152除以1024等于2048,所以是2GB [root@localhost ~]# mkswap /swap_file [root@localhost ~]# swapon /swap_file //完成之后,再次查询就会发现交换分区多了2GB的空间
[root@localhost ~]# grep MemTotal /proc/meminfo MemTotal: 7992344 kB [root@localhost ~]# grep SwapTotal /proc/meminfo SwapTotal: 18568716 kB //交换分区空间及内存空间已经满足要求
对于Oracle 12c数据库,若程序文件和数据文件安装在同一分区,则该分区硬盘空间的最要要求为企业级为6.4G,标准版6.1G;除此之外,还应确保/tmp目录的可用空间不少于1G。总的来说,建议安装Oracle 12c准备至少15G的硬盘空间。
[root@localhost ~]# df -hT /tmp //查看/tmp目录的磁盘使用情况 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root xfs 50G 21G 30G 42% / //很明显,满足了要求
安装Oracle数据库前,要求规划好主机名和IP。服务器的主机名、IP地址应提前确认无误,一旦Oracle数据库安装完成,建议不要轻易的修改主机名,否则会导致数据库启动失败。方法如下:
[root@localhost ~]# sed -i '1c oracle' /etc/hostname //设置主机名为oracle [root@localhost ~]# echo -e "192.168.1.1 oracle" >> /etc/hosts //添加主机名与IP地址的对应关系
(2)软件环境要求
Oracle 12c的安装过程通常是在图形界面中进行,因此建议使用已安装有GNOME中文桌面环境的CentOS服务器,软件开发工具当然是必不可少的,应使用yum方式安装以下必要的软件环境。
[root@localhost ~]# yum -y install binutils compat-* gcc gcc-c++ glibc glibc-devel ksh \ libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat \ unixODBC unixODBC-devel //使用本地光盘或者网络yum都可以
Oracle 12c自身集成了Java运行环境,但安装界面对中文的支持并不完善,因此若希望使用中文的Oracle安装界面,建议提前安装好Java软件包。
(3)内核要求
为了确保数据库运行稳定,Oracle 12c针对Linux内核参数,进程会话限制提出了一些要求,其中一部分设置可以在安装过程中自动检测并进行修复,但并一定很完整,所以最好的做法是根据安装文档提前进行配置。
内核参数调整体现在/etc/sysctl.conf文件中,主要包括与内存调度、端口范围、打开文件数、I/O请求等相关的一些设置,相关数值不可低于安装要求。如下:
[root@localhost ~]# vim /etc/sysctl.conf ……………… //省略部分内容,在末尾添加即可! fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 kernel.shmmax = 4294967295 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_max = 4194304 net.core.rmem_default = 262144 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 [root@localhost ~]# sysctl -p //重新加载配置文件
各参数详解:
- fs.aio-max-nr:此参数限制并发未完成的请求,应该设置避免I/O子系统故障;
- fs.file-max:该参数决定了系统中所允许的最大可以打开的文件数量;
- kernel.shmall:该参数控制可以使用的共享内存的总页数;.
- kernel.shmmax:是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值。
- 建议:
- 32位linux系统:可取最大值为4GB(4294967296bytes)-1byte,即4294967295。建议值为多于内存的一半,所以如果是32为系统,一般可取值为4294967295。
- 64位linux系统:可取的最大值为物理内存值-1byte,建议值为多于物理内存的一半,例如,如果为12GB物理内存,可取1210241024*1024-1=12884901887。
- kernel.shmmni:该参数是共享内存段的最大数量。shmmni缺省值4096,一般肯定是够用了。
- kernel.sem:
- 以kernel.sem = 250 32000 100 128为例:
- 250是参数semmsl的值,表示一个信号量集合中能够包含的信号量最大数目。
- 32000是参数semmns的值,表示系统内可允许的信号量最大数目。
- 100是参数semopm的值,表示单个semopm()调用在一个信号量集合上可以执行的操作数量。
- 128是参数semmni的值,表示系统信号量集合总数。
- net.ipv4.ip_local_port_range:表示应用程序可使用的IPv4端口范围;
- net.core.rmem_default:表示套接字接收缓冲区大小的缺省值;
- net.core.rmem_max:表示套接字接收缓冲区大小的最大值;
- net.core.wmem_default:表示套接字发送缓冲区大小的缺省值;
- net.core.wmem_max:表示套接字发送缓冲区大小的最大值;
(4)Oracle用户环境要求
Oracle 12c需要固定的运行用户oracle、安装组oinstall、管理组dba,这些账号应提前创建好。用于存放Oracle程序及数据库文件的基本目录也应提前创建好。
[root@localhost ~]# groupadd oinstall [root@localhost ~]# groupadd dba [root@localhost ~]# useradd -g oinstall -G dba oracle [root@localhost ~]# echo '123456' | passwd --stdin oracle 更改用户 oracle 的密码 。 passwd:所有的身份验证令牌已经成功更新。 [root@localhost ~]# mkdir -p /u01/app/oracle [root@localhost ~]# chown -R oracle:oinstall /u01/app [root@localhost ~]# chmod -R 775 /u01/app/oracle
Oracle 12c的安装任务应以运行用户oracle的身份执行,需适当调整oracle用户的环境配置以满足需求。
[root@localhost ~]# vim /home/oracle/.bash_profile ……………… //省略部分内容,在末尾添加即可! umask 022 ORACLE_BASE=/u01/app/oracle #oracle基本目录 ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1/ #安装家目录 ORACLE_SID=orcl #定义数据库实例名称 NLS_LANG="SIMPLIFIED CHINESE_CHINA".UTF8 #是针对Oracle语言、地区、字符集的设置 PATH=$PATH:$ORACLE_HOME/bin LANG=zh_CN.UTF-8 #LANG是针对Linux系统的语言、地区、字符集的设置。 DISPLAY=:0.0 #在哪个终端可以使用图形 export PATH LANG NLS_LANG ORACLE_BASE ORACLE_HOME ORACLE_SID DISPLAY #将变量导出为全局变量
(5)oracle用户资源限制要求
进程会话限制可以采用pam_limits认证模块来实现,通过修改登录程序login的PAM设置以启用该认证,然后修改/etc/security/limits.conf 文件,使用户oracle能够打开的进程数、进程使用的文件数加大。
[root@localhost ~]# vim /etc/pam.d/login ……………… //省略部分内容,在末尾添加即可! session required /lib/security/pam_limits.so session required pam_limits.so [root@localhost ~]# vim /etc/security/limits.conf ……………… //省略部分内容,在末尾添加即可! oracle soft nproc 2047 #设置进程数软限制 oracle hard nproc 16384 #设置进程数硬限制 oracle soft nofile 1024 #设置文件数软限制 oracle hard nofile 65536 #设置文件数硬限制 oracle soft stack 10240 # Oracle软堆栈限制
配置oracle用户资源限制,不配置也不会影响oracle数据库的成功安装,但是考虑到若有糟糕的sql语句对服务器资源的无限占用,导致长时间对用户请求无响应,建议提前限制oracle用户资源。
[root@localhost ~]# vim /etc/profile if [ $USER = "oracle" ];then if [ $SHELL = "/bin/ksh" ];then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi
准备工作完成后重新启动系统,重启之后,再次检查之前的配置是否生效。
3.Oracle 12c安装过程
Oracle的中文官方网址是https://www.oracle.com/index.html 可以自行进行下载,也可通过本人提供的Oracle安装包 进行安装。
[root@oracle ~]# cd / [root@oracle /]# unzip /root/linuxx64_12201_database.zip //进入根目录对下载的Oracle软件包进行解压 [root@oracle /]# ls database/ //解压之后生成database目录 install response rpm runInstaller sshsetup stage welcome.html
授权允许用户oracle使用图形终端,例如执行:xhost + oracle@localhost,表示允许用户oracle从本机访问,或者执行xhost + 表示取消所有限制,这里执行xhost +即可。
[root@oracle /]# xhost + //一定要以root用户的身份在图形环境中操作 [root@oracle /]# su - oracle //切换到oracle用户 [oracle@oracle ~]$ cd /database/ [oracle@oracle database]$ export DISPLAY=:0.0 设置DISPLAY环境变量 [oracle@oracle database]$ ./runInstaller //执行安装脚本
执行完成后会弹出图形化界面,进行以下操作:
执行过程中,会有这样的提示信息:
[root@oracle ~]# /u01/app/oraInventory/orainstRoot.sh [root@oracle ~]# /u01/app/oracle/product/12.2.0/dbhome_1/root.sh //执行第二个脚本,遇到提示,一路回车即可!
Web页面访问如下:
接下来使用命令行进行登录访问:
首先需要解决sqlplus命令行方向键不能使用的问题,方法如下:
获取rlwrap软件包
[root@oracle ~]# yum -y install ncurses* readline* //安装软件包所需依赖 [root@oracle ~]# tar zxf rlwrap-0.30.tar.gz.zip -C /usr/src [root@oracle ~]# cd /usr/src/rlwrap-0.30/ [root@oracle rlwrap-0.30]# ./configure && make && make install //使用root身份进行编译安装,安装完成后即可使用! [oracle@oracle ~]$ rlwrap sqlplus "/ as sysdba" SQL*Plus: Release 12.2.0.1.0 Production on 星期二 11月 26 10:51:44 2019 Copyright (c) 1982, 2016, Oracle. All rights reserved. 连接到: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL>
这样登录到数据库库时,就可以使用方向键了。但是这样每次登录数据库时都需要使用 rlwrap 命令稍嫌麻烦,可以进行一下操作:
[oracle@oracle ~]$ vim /home/oracle/.bash_profile ……………… //在末尾添加以下内容 alias sqlplus='rlwrap sqlplus' alias rman='rlwrap rman' //就是将命令创建别名而已
退出当前oracle用户,重新登录才可使用。
[oracle@oracle ~]$ sqlplus sys/123456 as sysdba //使用命令行登录 SQL*Plus: Release 12.2.0.1.0 Production on 星期二 11月 26 10:57:41 2019 Copyright (c) 1982, 2016, Oracle. All rights reserved. 连接到: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL>
或者
[oracle@oracle ~]$ sqlplus /nolog SQL*Plus: Release 12.2.0.1.0 Production on 星期二 11月 26 10:59:10 2019 Copyright (c) 1982, 2016, Oracle. All rights reserved. SQL> conn sys/123456 as sysdba 已连接。 //也可以使用这样方式登录Oracle数据库
二、创建Oracle 12c数据库
如果在安装oracle产品时不创建数据库,那么要使用oracle系统就必须先创建数据库。如果在安装oracle时选择建立数据库,也可以再创建第二个数据库(不过为了使oracle数据库充分利用系统资源,建议一个服务器上只创建一个数据库)。
创建数据库的方法有两种:通过图形化界面,或者采用“CREATE DATABASE”命令,这里说一下图形化界面创建数据库的方法:
[oracle@oracle ~]$ dbca //使用oracle用户创建数据库 //执行这条命令就会弹出图形化界面创建数据库
如果没有弹出窗口,可以参考前面的步骤,以root用户运行“xhost +”命令,再以oracle身份运行“export DISPLAY=:0.0”命令。
弹出的图形化界面如下:
数据库已经创建完成!
三、Oracle 12c数据库的启动与关闭
oracle数据库的启动与关闭是日常工作之一。对于大多数oracle DBA来说,启动和关闭oracle数据库最常用的方式是在命令行方式下执行。
1.启动、关闭Oracle数据库
要启动和关闭数据库,必须具有Oracle管理员权限的用户登录,通常以具有SYSDBA权限的用户登录。
(1)数据库的启动
启动一个数据库需要三个步骤:①启动oracle实例(非装载阶段);②由实例装载数据库(装载阶段);③打开数据库(打开阶段)。
在startup命令中,可以使用不同的选项来控制数据库的不同启动步骤。
1)startup nomount(该命令不常用)
nomount选项仅仅启动一个oracle实例,读取init.ora初始化参数文件、启动后台进程、初始化SGA。当实例启动后,系统将显示一个SGA内存结构和大小的列表,如下:
[oracle@oracle ~]$ sqlplus / as sysdba //以oracle用户登录数据库 SQL*Plus: Release 12.2.0.1.0 Production on 星期二 11月 26 11:18:36 2019 Copyright (c) 1982, 2016, Oracle. All rights reserved. 连接到: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL> startup nomount
2)startup mount(某些时候会用到该命令)
startup mount 命令启动实例并且装载数据库,但是没有打开数据库。oracle系统读取控制文件中关于数据文件和重做日志文件的内容,但并不打开该文件。这种打开方式常在数据库维护操作中使用,如对数据文件的更名、改变重做日志及打开归档模式等。在这种打开方式下,除了可以看到SGA系统列表以外,系统还会给出“数据库装载完毕”的提示。
SQL> alter database mount; //由于上面已经执行了startup nomount命令,所以再更改它的状态,就需要使用该命令
3)startup(正常时使用的命令)
startup命令完成启动实例,装载数据库和打开数据库三个步骤。此时,数据库使数据文件和重做日志文件在线,通常还会请求一个或者多个回滚段;系统除了可以看到前面startup mount 方式下的所有提示外,还会给出一个“数据库已经打开”的提示;数据库系统处于正常的工作状态,可以接收用户的请求。
如果采用startup nomount或者startup mount的数据库打开方式,必须采用alter database命令来执行装载或打开数据库的操作。
前面两条命令都执行过了(startup nomount和alter database mount),所以这里再执行下面命令,数据库就可以说是正确启动完成了。如下:
SQL> alter database open;
正常来说,可以直接使用下面一条命令来正常启动数据库,如下:
SQL> startup //在数据库关闭状态下执行该命令,数据库会依次启动、装载、打开。 ORACLE 例程已经启动。 Total System Global Area 1593835520 bytes Fixed Size 8793256 bytes Variable Size 1023411032 bytes Database Buffers 553648128 bytes Redo Buffers 7983104 bytes 数据库装载完毕。 数据库已经打开。
(2)数据库的关闭
对于数据库的关闭,有四种不同的关闭选项。
1)shutdown normal
shutdown normal是shutdown命令的默认选项。也就是说,如果用户发出shutdown命令,即执行shutdown normal命令。
发出该命令后,任何新的连接都将不再允许连接到数据库。在数据库关闭之前,oracle将等待目前连接的所有用户都从数据库中退出后才开始关闭数据库。采用这种方式关闭数据库,在下一次启动时不需要进行任何的实例恢复。但需要注意的是,采用这种方式时,也许关闭一个数据库需要几天或更长的时间。
2)shutdown immediate
shutdown immediate是常用的一种关闭数据库的方式。若即想很快地关闭数据库,又想让数据库“干净”的关闭,则常采用这种方式。
发出该命令后,当前正在被oracle处理的SQL语句立即中断,系统中任何没有提交的事务全部回滚。如果系统中存在一个很长的未提交的事务,那么采用这种方式关闭数据库也需要一段时间(该事务回滚时间)。系统不会等待连接到数据库的所有用户退出系统,而会强行回滚当前所有的活动事务,然后断开所有的连接用户。
3)shutdown transactional
shutdown transactional 命令常用来计划关闭数据库,它会等待当前连接到系统且正在活动的事务执行完毕,运行该命令后,任何新的连接和事务都是不允许的。它所有活动的事务执行完成后,数据库将以和shutdown immediate同样的方式关闭数据库。
4)shutdown abort
shutdown abort是关闭数据库方式的最后选择,是在没有任何办法关闭数据库的情况下不得不采用的方式,一般不要采用。在下列情况出现时可以考虑采用这种方式关闭数据库。
- 数据库处于一种非正常工作状态,不能用shutdown normal或shutdown immediate命令关闭数据库;
- 需要立即关闭数据库;
- 在启动数据库实例时遇到问题。
发出该命令后,所有正在运行的SQL语句将立即中止,所有未提交的事务将不回滚,oracle也不等待目前连接到数据库的用户退出系统;下一次启动数据库时需要实例恢复,因此,下一次启动可能比平时需要更多的时间。
在关闭数据库时最好使用shutdown immediate方式,因为这种方式安全且相对较快。不是万不得已不要使用shutdown abort 方式,因为这种方式会造成数据丢失,并且恢复数据库也需要较长时间。
2.启动、关闭oracle监听进程
当oracle数据库实例启动完成后,为了使客户端用户能连接到oracle实例,DBA还需要在oracle所在的服务器上使用lsnrctl命令启动监听进程。如果数据库实例关闭,一般也要关闭监听进程。
(1)启动监听
启动监听是oracle用户在操作系统下执行的命令,可以直接在lsnrctl后加参数,也可在该命令提示符后进行操作,具体如下:
[oracle@oracle ~]$ lsnrctl //执行该命令 LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 25-9月 -2019 21:59:04 Copyright (c) 1991, 2016, Oracle. All rights reserved. 欢迎来到LSNRCTL, 请键入"help"以获得信息。 LSNRCTL> start //启动监听 启动/u01/app/oracle/product/12.2.0/dbhome_1//bin/tnslsnr: 请稍候... TNSLSNR for Linux: Version 12.2.0.1.0 - Production 系统参数文件为/u01/app/oracle/product/12.2.0/dbhome_1/network/admin/listener.ora 写入/u01/app/oracle/diag/tnslsnr/oracle/listener/alert/log.xml的日志信息 监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=1521))) 监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle)(PORT=1521))) LISTENER 的 STATUS ------------------------ 别名 LISTENER 版本 TNSLSNR for Linux: Version 12.2.0.1.0 - Production 启动日期 25-9月 -2019 21:59:12 正常运行时间 0 天 0 小时 0 分 0 秒 跟踪级别 off 安全性 ON: Local OS Authentication SNMP OFF 监听程序参数文件 /u01/app/oracle/product/12.2.0/dbhome_1/network/admin/listener.ora 监听程序日志文件 /u01/app/oracle/diag/tnslsnr/oracle/listener/alert/log.xml 监听端点概要... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) 监听程序不支持服务 命令执行成功
也可以直接使用以下命令“来启动监听:
[oracle@oracle ~]$ lsnrctl start //启动监听
(2)关闭监听
[oracle@oracle ~]$ lsnrctl stop //关闭监听 LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 25-9月 -2019 22:00:31 Copyright (c) 1991, 2016, Oracle. All rights reserved. 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle)(PORT=1521))) 命令执行成功
四、将Oracle数据库设置为开机自启动
[root@oracle ~]# vim /etc/oratab ……………… //修改以下内容 orcl:/u01/app/oracle/product/12.2.0/dbhome_1:Y [root@oracle ~]# vim /etc/rc.local su - oracle -c 'dbstart' //启动数据库 su - oracle -c 'lsnrctl start' //启用监听进程 [root@oracle ~]# chmod +x /etc/rc.d/rc.local //添加执行权限
重启之后,进行验证:
[root@oracle ~]# netstat -anpt | grep 5500 //oracle数据库的监听端口 tcp6 0 0 :::5500 :::* LISTEN 2144/tnslsnr [root@oracle ~]# netstat -anpt | grep 1521 //oracle数据库监听进程 tcp 0 0 192.168.1.1:24251 192.168.1.1:1521 ESTABLISHED 1816/ora_lreg_orcl tcp6 0 0 :::1521 :::* LISTEN 2144/tnslsnr tcp6 0 0 192.168.1.1:1521 192.168.1.1:24251 ESTABLISHED 2144/tnslsnr tcp6 0 0 192.168.1.1:1521 192.168.1.1:24143 TIME_WAIT -
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。