部署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  - 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家 。