阿里云部署oracle 11g数据库

某程序员在阿里云部署了一套oracle 11g,老板说他们搞了好几天,监听一直启动不来,让我给看看。登上去一瞧,原来是主机名设置的问题(把阿里云的弹性ip直接写在/etc/hosts文件,而云主机的网卡地址通常是私有地址)。这个事情,我还专门发了一篇文章,地址为https://blog.51cto.com/sery/2084706 。修复完这个问题之后,以为直接把数据库这样放在公网上很不稳当,同时又发现其它一些问题,好比磁盘空间规划不合理、混装java等。因而建议把此机做为测试环境,另购几台云主机,放入vpc网络,从新部署应用和数据库,把数据库与其它应用独立开来。猛戳此处视频html


都怪我多事,只好亲自操刀,从新在云上给部署oracle了。本人历来不推荐在公有云部署oracle,主要缘由有如下几点:java

 一、云主机没有交换分区swap,了解好几家服务商,都是这样呢!c++

 二、云服务器的操做系统可定制性不灵活。在个人经验中,oracle 11g部署在centos5这样的操做系统上,不会有依赖问题,而在centos6 以上版本,一些依赖包在安装oracle过程当中,校验就会出错。程序员

 三、云主机性能问题。通常状况下,咱们都会选很高配置的物理服务器来部署。sql

  

在公有云部署oracle,尽管别扭,但还得干活啊。虽然在安装过程当中,有几个包不匹配(实际是版本高了),忽略掉这些校验,部署上去,运行好一段时间(大概1个多月),也没见看开发人员叫唤,时不时查告警日志,也未见异常,说明安装仍是成功的。目前,我的手里没有线上的云服务器,这里就用虚拟环境,来还原一下整个部署过程,但愿能对有须要的人有所帮助.数据库


选购一台centos7的云主机,外加一个250G的云盘。云盘分两个区,一个用于交换分区,剩下的用做oracle的安装目录及数据存储。划分出来的数据分区,挂接到系统上。为了符合oracle的安装习惯,挂接点为/u01.centos

7HV3O{A`~J_`FJ)F3Y7H2OK.png


在正式执行oracle的安装脚本以前,有一系列的前置操作,因为本人常常作部署,为了省事,写了一个脚本,内容为:
安全

[root@oradb190 ~]# more oracle_rep.bash 

#!/bin/bashbash

#writed by sery 2012-05-16服务器


#########################################

#install depending packages             #

#########################################

yum install gcc* gcc-* gcc-c++-* glibc-devel-* glibc-headers-* compat-libstdc* libstdc* elfutils-libelf-devel* libaio-devel* sysstat* unixODBC-* pdksh-*


########################################

#add groups,user and create dir        #

########################################

/usr/sbin/groupadd -g 501 oinstall

/usr/sbin/groupadd -g 502 dba



useradd -u 1000 -g oinstall -G dba oracle


mkdir /u01/app/

mkdir -p /u01/app/oraInventory

mkdir -p /u01/app/oracle

chown -R oracle:oinstall /u01/app

chmod -R 775 /u01/app


##############################################

#modify  sysctl.conf                         #

##############################################

cat >> /etc/sysctl.conf <<done

fs.file-max = 6815744

kernel.shmall = 2097152

#kernel.shmmax = 536870912

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 = 1048576

fs.aio-max-nr = 1048576

done


sysctl -p


###############################################

#modify  /etc/security/limits.conf            #

###############################################

cat >> /etc/security/limits.conf << done

oracle soft nproc 2047

oracle hard nproc 16384

oracle soft nofile 1024

oracle hard nofile 65536

done


################################################

#modify /etc/pam.d/login                       #

################################################

echo "session    required     pam_limits.so">>/etc/pam.d/login


################################################

# setting user oracle env                      #

################################################

cat >> /home/oracle/.bash_profile <<done

export ORACLE_SID=zyzf1

export ORACLE_UNQNAME=zyzf1

export ORACLE_base=/u01/app/oracle

export ORACLE_HOME=/u01/app/oracle/product/11.2.0

export PATH=$ORACLE_HOME/bin:$PATH

done

授予该脚本执行权限,而后执行./oracle_rep.bash。执行完毕,挨个检查一下,看是否生成目录、是否建立了用户、是否修改了相关配置文件....


接下来,配置和启用vnc,以图形方式来远程安装oracle。物理服务器时代,咱们还可能去机房,作在物理服务器前边,接上显示器。但用了云主机之后,这个路没有了哟,固然也算解放了,不用去机房接受噪音和辐射嘛!


云主机安装的centos可能没有默认安装vnc服务,须要把gnome桌面,vncserver给安装上去。centos7默认启动了防火墙,sshd也有些限制,为了减小干扰,通通把它们关闭掉。操做步骤以下(文字多点没关系,反正也没人给稿费):

一、关闭防火墙

systemctl stop firewalld.service

systemctl disable firewalld.service

二、修改sshd配置文件/etc/ssh/sshd_config

..........省略若干.................................

PermitRootLogin yes

..............略...........................

ClientAliveInterval 900

ClientAliveCountMax 30

...............略.................

三、安装vncsevncser

yum groupinstall "X Window System"

yum install tigervnc-server -y

yum groupinstall "GNOME Desktop" "Graphical Administration Tools"

假如与桌面环境相关的包不安装完整,vnc客户端去链接之后,就多是蓝屏,一个图标也没有,也没法进行任何操做。安装好vncserver之后,执行指令vncserver,输入密码。我通常用root启动,设置跟系统root同样的密码。我看有些人的文档,把vncserver作成一个常规服务,这没什么必要,安装完oracle之后,就不再须要桌面环境嘛(若是用静默方式安装,这个也vnc也能够省掉了)。

blob.png

接下来,大部分的操做,咱们就在vnc里边进行了。容易出问题的地方,应该在export DISPLAY这个地方,必定要核对本身vncserver启动时显示的那个带冒号后边的数字(有些人只会抄,直接复制网上的例子)。

blob.png

其实咱们vnc客户端链接也是用ip:加这个数字。

blob.png

至于上传oracle安装包,解压和目录受权一类的,这里就略过。我通常是把oracle解压出来的目录,复制在/home/oracle目录,而后再给它来一下 chown -R oracle:oinstall /home/oracle ,这样切换成oracle账号,执行安装就不用担忧权限问题。oracle 11g的两个安装包,解压后,获得一个大的目录database,安装脚本runInstaller及其它所需的全部文件,都在里边。

[root@localhost ~]# su - oracle

Last login: Thu Apr 26 22:13:21 CST 2018 on pts/2


[oracle@localhost ~]$ ls -al database/

total 16

drwxr-xr-x.  8 oracle oinstall  128 Aug 21  2009 .

drwx------.  6 oracle oinstall  123 Apr 26 22:14 ..

drwxr-xr-x. 12 oracle oinstall  203 Aug 17  2009 doc

drwxr-xr-x.  4 oracle oinstall  223 Aug 15  2009 install

drwxrwxr-x.  2 oracle oinstall   61 Aug 15  2009 response

drwxr-xr-x.  2 oracle oinstall   34 Aug 15  2009 rpm

-rwxr-xr-x.  1 oracle oinstall 3226 Aug 15  2009 runInstaller

drwxrwxr-x.  2 oracle oinstall   29 Aug 15  2009 sshsetup

drwxr-xr-x. 14 oracle oinstall 4096 Aug 15  2009 stage

-rw-r--r--.  1 oracle oinstall 5402 Aug 18  2009 welcome.html


假定不作前置处理,咱们在vnc客户端执行命令 su - oracle ;cd database ; ./runInstaller 会提示“

>>> Could not execute auto check for display colors using command /usr/bin/xdpyinfo. Check if the DISPLAY variable is set.    Failed <<<<

”。在root帐户下,执行xhost + 及在oracle帐户下执行 export DISPLAY=:1(注意,这里很容易出问题,不少网上文档,写的都是DISPLAY=:0.0; export DISPLAY) ,前边强调过了,必定要与vncserver启动时主机名加冒号后带的那个数字,vnc客户端连的那个ip后的数字也是一样的数字嘛!

blob.png

我在这里踩过坑,从网上复制过来,死活找不到缘由呢!都设置对了,确定会弹出安装界面。step 1 of 9 不选不填,直接按 “Next”。step 2 of 9 选第二个“install database soft only”(只安装数据库软件,数据库自己后边手动建立)。

blob.png

下一步选单实例数据库,.....后边接着选企业级数据库版本“Enterprise Edition”.到step 9 of 12 这里,安装校验会出现好几处不知足oracle安装要求的项目。我曾经试着按提示去修复(修改系统参数文件/etc/sysctl.conf、以yum方式安装所须要的依赖包--实际大部分包都存在了,只是版本比要求的高或者须要32位的版本),没什么效果,直接忽略掉。

blob.png

实践证实,这个决策是对的(centos 5.X安装一点也没问题)。由于这个oracle部署完成后,已经稳定运行了一个多月,开发人员没叫唤,查告警日志也没啥异常呢!参看网上其余人写的文档,也是通通忽略,嘿嘿!一路点下一步,到复制文件的时候,有点耗时,若是选的是sata盘,更是慢得要命了。当复制到84%的时候,出来一个报错,看不到内容,只有一点点框框,真是悲催。blob.png

鼠标怎么点、怎么拉,都看不见报错信息之真容。你藏起来,觉得我找不到你哟,我看日志行不?我仍是认识几个英语。

tail -100 /u01/app/oraInventory/logs/installActions2018-04-26_11-30-49PM.log

..........................略.....................

INFO: /usr/lib64/libstdc++.so.5: undefined reference to `memcpy@GLIBC_2.14'

INFO: collect2: error: ld returned 1 exit status

INFO: make: *** [ctxhx] Error 1

INFO: End output from spawned process.

INFO: ----------------------------------

INFO: Exception thrown from action: make

Exception Name: MakefileException

.........................略........................

查了资料,说是“glibc的版本太高所致”-当前系统的glibc版本为glibc-2.17-196.el7_4.2.x86_64,网上有这个错误的修正办法,我试了好几遍不修复,也没什么问题。若是诸位要修复这个问题,以关键词“INFO: /usr/lib64/libstdc++.so.5: undefined reference to”搜索便可得出方案。点右上角那个×,安装继续进行,片刻,有跳出来一个如出一辙的报错框,也是同样的尿性(点不开,看不到信息),缘由、查看是什么问题及解决办法同上(我是直接点×取消)。复制文件继续进行,大概进行到94%的时候,再跳出框,也是一条线(真是考验人的眼力啊)。

oracle安装.png

到执行两个脚本的时候,那个弹出框是能够用鼠标拉来的,总算松了口气。


blob.png

以root账号按顺序执行完提示的那两个脚本,完成安装过程。接下来,必不可少的步骤是配置监听器和建立数据库。这两步是有顺序的,即必须先建立监听器,而后才能建立数据库。


一、建立监听器(主机名最好设置上):oracle环境变量若是设置正确的话(.bash_profile 文件有这么一行

export PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:$ORACLE_HOME/bin”),仍是在vnc客户端图形界面下以oracle账号执行netca命令,点几回鼠标就能顺利完成这个操做。为了检验监听器是否正确安装,可执行监听器命令行 lnsrctl  start启动监听器,因为oracle数据库没有建立,天然就不能注册监听器,所以输出信息就会有“The listener supports no services”。更能够进入oracle的安装目录,查看/u01/app/oracle/product/11.2.0/network/admin文件listener.ora是否存在,内容是否与启动监听器时的输出相符合。

[oracle@localhost ~]$ lsnrctl start


LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 27-APR-2018 01:34:01


Copyright (c) 1991, 2009, Oracle.  All rights reserved.


Starting /u01/app/oracle/product/11.2.0/bin/tnslsnr: please wait...


TNSLSNR for Linux: Version 11.2.0.1.0 - Production

System parameter file is /u01/app/oracle/product/11.2.0/network/admin/listener.ora

Log messages written to /u01/app/oracle/diag/tnslsnr/db217/listener/alert/log.xml

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=db217)(PORT=1521)))


Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db217)(PORT=1521)))

STATUS of the LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production

Start Date                27-APR-2018 01:34:01

Uptime                    0 days 0 hr. 0 min. 0 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/app/oracle/product/11.2.0/network/admin/listener.ora

Listener Log File         /u01/app/oracle/diag/tnslsnr/db217/listener/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=db217)(PORT=1521)))

The listener supports no services

The command completed successfully

二、建立数据库:仍然是在vnc客户端图形界面,以oracle账号执行dbca指令,弹出操做界面后,连续点几回鼠标,到 step 2 of 12 这个地方,选定制数据库“Custom database”,往下几步,到填写数据库名,通常状况下,dbca能自动读取oracle环境变量里面设置的值。

blob.png

再日后进行几步,到 step 7 of 12 的地方,把归档给选上(也可在建立完之后,从sqlplus进去开启)。

blob.png

连续点几回鼠标,点到“finish”时,就开始真正建立数据(数据文件、重作日志等),这个过程比安装oracle复制文件更慢一些,要耐心等待一下。执行完成后,可到数据目录,查看生成的文件:

[oracle@localhost zyzf1]$ pwd

/u01/app/oracle/oradata/zyzf1


[oracle@localhost zyzf1]$ ll

total 1705316

-rw-r----- 1 oracle oinstall   9748480 Apr 27 02:00 control01.ctl

-rw-r----- 1 oracle oinstall  52429312 Apr 27 02:00 redo01.log

-rw-r----- 1 oracle oinstall  52429312 Apr 27 02:00 redo02.log

-rw-r----- 1 oracle oinstall  52429312 Apr 27 01:59 redo03.log

-rw-r----- 1 oracle oinstall 629153792 Apr 27 02:00 sysaux01.dbf

-rw-r----- 1 oracle oinstall 734011392 Apr 27 02:00 system01.dbf

-rw-r----- 1 oracle oinstall  20979712 Apr 27 01:59 temp01.dbf

-rw-r----- 1 oracle oinstall 209723392 Apr 27 02:00 undotbs01.dbf

-rw-r----- 1 oracle oinstall   5251072 Apr 27 02:00 users01.dbf

同时,oracle实例也会自动启动,经过查看系统进程,便可验证。如今,咱们在回过头去查看监听器的状态,看看与未建立数据库以前的差别:

[oracle@localhost zyzf1]$ lsnrctl status


LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 27-APR-2018 02:36:15


Copyright (c) 1991, 2009, Oracle.  All rights reserved.


Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db217)(PORT=1521)))

STATUS of the LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production

Start Date                27-APR-2018 01:34:01

Uptime                    0 days 1 hr. 2 min. 13 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/app/oracle/product/11.2.0/network/admin/listener.ora

Listener Log File         /u01/app/oracle/diag/tnslsnr/db217/listener/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=db217)(PORT=1521)))

Services Summary...

Service "zyzf1" has 1 instance(s).

  Instance "zyzf1", status READY, has 1 handler(s) for this service...

Service "zyzf1XDB" has 1 instance(s).

  Instance "zyzf1", status READY, has 1 handler(s) for this service...

The command completed successfully

实例自动注册进来了(是监听器注册到实例,仍是实例注册到监听器,这个有点昏,哪位大大神帮回答一下)。看进程及监听还不够,还须要从sqlplus登进去,执行“select count(*) from v$session;”看输出;关闭实例,再启动,以检验其正确性。


花了大把时间,仅仅是把oracle部署上去了,要交付使用,还有一些工做须要完成,包括修改密码过时时间、修改太小的默认表空间(system、sysaux、temp等)、建立大的redo日志文件、控制文件多路复用、建立单独的用户表空间等等。若是不把这些规范作好,开发人员极有可能直接就开始在system上建立数据表、应用程序直接使用system账号链接数据库.....


默认密码过时时间是180天,把它改为不过时也无妨。

SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;


Profile altered.


SQL>SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT

------------------------------ -------------------------------- -------- ----------------------------------------

DEFAULT                        PASSWORD_LIFE_TIME               PASSWORD UNLIMITED


系统相关表空间扩容(以system为例),直接看看几个表空间文件的情况。

[oracle@db217 zyzf1]$ pwd

u01/app/oracle/orada/ta/zyzf1


[oracle@db217 zyzf1]$ du -hs *

9.3M    control01.ctl

51M     redo01.log

51M     redo02.log

51M     redo03.log

601M    sysaux01.dbf

701M    system01.dbf

9.2M    temp01.dbf

851M    undotbs01.dbf

5.1M    users01.dbf

如今硬盘容量都以TB计算了,别舍不得把size搞大一点。

SQL> alter database datafile '/u01/app/oracle/oradata/zyzf1/system01.dbf' resize 10G;


oracle@db217 zyzf1#du -hs *

9.3M    control01.ctl

21G     qhwy201801.dbf

513M    redo004.log

513M    redo005.log

513M    redo006.log

51M     redo01.log

51M     redo02.log

51M     redo03.log

621M    sysaux01.dbf

11G     system01.dbf

16M     temp01.dbf

1.1G    undotbs01.dbf

42M     users01.dbf


建立大的redo日志文件,删除系统默认的小的redo,偷了一下懒,一个日志组只建立了一个成员。

SQL> alter database add logfile group 4(‘/u01/app/oracle/oradata/orcl/redo04.log’size 512M;


SQL> alter database add logfile group 5(‘/u01/app/oracle/oradata/orcl/redo05.log’size 512M;


SQL> alter database add logfile group 6(‘/u01/app/oracle/oradata/orcl/redo06.log’size 512M;



SQL>alter system switch logfile;

SQL>select GROUP#,THREAD#,BYTES,MEMBERS,STATUS from v$log;


GROUP#   THREAD#      BYTES    MEMBERS STATUS

---------- ---------- ---------- ---------- --------------------------------

1       1   52428800          1 INACTIVE

2       1   52428800          1 INACTIVE

3       1   52428800          1 CURRENT

4         1   536870912            1 INACTIVE

5         1   536870912            1 INACTIVE

6         1   536870912            1 CURRENT


SQL>  alter system switch logfile;

SQL> alter database drop logfile group 1;

连续切换,以便于干掉旧的小的联机重作日志文件。


控制文件多路复用:默认均可能在一个分区下边,至少要再建立一个,以防万一。

SQL> select inst_id,name from gv$controlfile;
   INST_ID                                              NAME
----------------------------------------------------------------------------------------------   
1  /u01/app/oracle/oradata/zyzf1/control01.ctl   
1  /u01/app/oracle/flash_recovery_area/zyzf1/control02.ctl
SQL> alter system setcontrol_files='/u01/app/oracle/oradata/zyzf1/control01.ctl','/u01/app/oracle/flash_recovery_area/zyzf1/control02.ctl','/home/oracle/control03.ctl'scope=spfile;
[oracle@db217 ~]$cp /u01/app/oracle/oradata/zyzf1/control01.ctl /home/oracle/control03.ctl
SQL> alter database mount;
Database altered.
SQL> alter database open;
Database altered.


 建立用户及其默认表空间。表空间大小固定,建议20G,用满了再新增一个20G的,这样方便管理,也相对安全一些。具体操做方法,再也不描述。不过瘾可点此处。


下载安装前脚本,猛戳此处。

相关文章
相关标签/搜索