美文网首页程序员
CentOS 7 静默安装 Oracle 11g

CentOS 7 静默安装 Oracle 11g

作者: 书上得来终觉浅 | 来源:发表于2018-11-16 23:23 被阅读33次

    1 操作说明

    虚拟机:Virtual Box
    操作系统:CentOS 7
    Oracle 版本:Oracle 11g 11.2.0.1.0
    安装方式:静默安装

    如果CentOS系统是最小化安装版本,需要用root用户安装以下软件

    $yum install -y unzip vim
    $yum -y install gcc make binutils gcc-c++ compat-libstdc++-33 elfutils-libelf-devel elfutils-libelf-devel-static ksh libaio libaio-devel numactl-devel sysstat unixODBC unixODBC-devel pcre-devel
    

    2 添加硬盘

    使用Virtual Box安装CentOS时,因为我选择了20G的硬盘空间,系统装上后,要安装Oracle数据库,存在空间不足的问题。

    #使用df查看磁盘空间
    $df -h
    文件系统                 容量  已用  可用 已用% 挂载点
    /dev/mapper/centos-root   17G   13G  4.5G   74% /
    devtmpfs                 905M     0  905M    0% /dev
    tmpfs                    920M     0  920M    0% /dev/shm
    tmpfs                    920M   17M  903M    2% /run
    tmpfs                    920M     0  920M    0% /sys/fs/cgroup
    /dev/sda1               1014M  178M  837M   18% /boot
    tmpfs                    184M  4.0K  184M    1% /run/user/42
    tmpfs                    184M   32K  184M    1% /run/user/1000
    tmpfs                    184M     0  184M    0% /run/user/0
    

    2.1 为虚拟机分配硬盘

    在Virtual Box中添加一块硬盘

    添加硬盘

    这里添加了一块大小为8G的硬盘,启动Linux,查看硬盘情况。使用lsblk(list block device的缩写)命令,列出所有的存储设备。

    $lsblk
    
    NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda               8:0    0   20G  0 disk
    ├─sda1            8:1    0    1G  0 part /boot
    └─sda2            8:2    0   19G  0 part
      ├─centos-root 253:0    0   17G  0 lvm  /
      └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
    sdb               8:16   0    8G  0 disk
    sr0              11:0    1 1024M  0 rom  
    

    可以看出多了一块sdb的硬盘,不过目前我们还不能用它,要使用它,需要做以下几个步骤

    • 分区,使用fdisk工具
    • 格式化,使用mkfs.xfs工具
    • 挂载

    2.2 磁盘分区

    因为我的sda磁盘使用的是MBR分区表格式,所以对sdb这块新添加的磁盘,我也将采用MBR分区,我没有尝试过一块磁盘是MBR(Master Boot Record),另一块磁盘是GPT(GUID Partition Table)的方式,所以这里还是将sdb用fdisk工具分区。

    #查看sda磁盘的信息
    $parted /dev/sda print
    
    Model: ATA VBOX HARDDISK (scsi)  //生产厂商与磁盘接口scsi
    Disk /dev/sda: 21.5GB      // 磁盘空间
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos     //使用的是MBR分区
    Disk Flags: 
     
    Number  Start   End     Size    Type     File system  标志
     1      1049kB  1075MB  1074MB  primary  xfs          启动
     2      1075MB  21.5GB  20.4GB  primary               lvm
    

    这里需要要注意,如果使用MBR分区格式,请使用fdisk工具,如果要用GPT分区格式,使用gdisk工具,两者都操作步骤都差不多。

    $fdisk /dev/sdb
    
    # 欢迎使用 fdisk (util-linux 2.23.2)。
    # 
    # 更改将停留在内存中,直到您决定将更改写入磁盘。使用写入命令前请三思。
    # 
    # Device does not contain a recognized partition table
    # 使用磁盘标识符 0x96a97997 创建新的 DOS 磁盘标签。
    
    
    命令(输入 m 获取帮助):n
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    Select (default p): p
    分区号 (1-4,默认 1):1
    起始 扇区 (2048-16777215,默认为 2048):2048
    Last 扇区, +扇区 or +size{K,M,G} (2048-16777215,默认为 16777215):
    将使用默认值 16777215
    分区 1 已设置为 Linux 类型,大小设为 8 GiB
    
    命令(输入 m 获取帮助):w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    正在同步磁盘。
    

    对于fdisk的使用还是很简单的,需要注意的是,在你没有提交之前,所有的更改都是在内存中的,也就是说,你可以随意的分区,然后按q命令,不保存你的操作。这里我将sdb整个磁盘划分成了一个分区,使用命令查看:

    $lsblk
    
    NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda               8:0    0   20G  0 disk 
    ├─sda1            8:1    0    1G  0 part /boot
    └─sda2            8:2    0   19G  0 part 
      ├─centos-root 253:0    0   17G  0 lvm  /
      └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
    sdb               8:16   0    8G  0 disk 
    └─sdb1            8:17   0    8G  0 part 
    sr0              11:0    1 1024M  0 rom  
    

    可以看到sdb下多了一个类型为part的数据行,名为sdb1,它就是我们在sdb磁盘上的分区。

    2.3 格式化分区

    有了这个sdb1分区后需要对其格式化,使用命令mkfs(make filesystem),在CentOS 7中可以使用xfs的文件系统格式。

    $mkfs.xfs /dev/sdb1
    
    # meta-data=/dev/sdb1              isize=512    agcount=4, agsize=524224 blks
    #          =                       sectsz=512   attr=2, projid32bit=1
    #          =                       crc=1        finobt=0, sparse=0
    # data     =                       bsize=4096   blocks=2096896, imaxpct=25
    #          =                       sunit=0      swidth=0 blks
    # naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    # log      =internal log           bsize=4096   blocks=2560, version=2
    #          =                       sectsz=512   sunit=0 blks, lazy-count=1
    # realtime =none                   extsz=4096   blocks=0, rtextents=0
    

    2.4 挂载

    挂载sdb1分区

    # 创建一个文件夹
    $mkdir /data
    # 将sdb1 挂载到 data目录下
    $mount /dev/sdb1 /data/
    
    $df -h
     文件系统                 容量  已用  可用 已用% 挂载点
     /dev/mapper/centos-root   17G   13G  4.5G   74% /
     devtmpfs                 905M     0  905M    0% /dev
     tmpfs                    920M     0  920M    0% /dev/shm
     tmpfs                    920M  8.9M  911M    1% /run
     tmpfs                    920M     0  920M    0% /sys/fs/cgroup
     /dev/sda1               1014M  178M  837M   18% /boot
     tmpfs                    184M   12K  184M    1% /run/user/42
     tmpfs                    184M     0  184M    0% /run/user/0
     /dev/sdb1                8.0G   33M  8.0G    1% /data
    

    使用df命令查看挂载情况,发现多了一个/dev/sdb1的记录,这表示我们已经将磁盘挂载到指定的目录了。

    挂载完成后,需要设置开机自动挂载该磁盘,这里使用修改配置文件/etc/fstab的方式

    $vim /etc/fstab
    
    /dev/sdb1 /data xfs defaults 0 0
    

    将/dev/sdb1挂载到/data目录下,sdb1的格式是xfs

    3 创建oracle用户

    Oracle安装的时候不能用root用户安装,这里我们要为Oracle单独创建一个用户以及对应的组,Oracle安装时需要指定oinstall组,dba组以及oper组(在后面配置安装选项时能够看到该选项),但是这里我们只创建oinstall和dba两个组,在后面配置时,将oper放入dba组中。这种做法不是很正规,大家视情况而定需要不要加上oper组

    我们需要创建这样一个用户

    {
    "name":"oracle",
    "groups":["oinstall","dba"]
    }

    3.1 创建用户和组

    # 创建组和用户
    $groupadd oinstall
    $groupadd dba
    $useradd -g oinstall -G dba oracle
    $passwd oracle
    
    #查看用户的情况
    $id oracle
    uid=1002(oracle) gid=1004(oinstall) 组=1004(oinstall),1005(dba)
    

    3.2 创建Oracle安装目录与环境变量

    我在上一节挂载的硬盘上创建Oracle的安装目录,将该目录的拥有者改为Oracle,并修改相关目录权限。

    $mkdir -p /data/oracle/product/11.2.0
    $chown -R oracle:oinstall /data/oracle/
    $chmod -R 755 /data/oracle/
    

    有了安装目录后,我们就可以将环境变量指向该目录了,oracle用户需要用到的环境变量包括,ORACLE_BASE,ORACLE_HOME,ORACLE_SID,我们将这些环境变量写入oracle用户的.bashrc文件中。

    #切换至oracle用户,操作以下步骤
    $su - oracle
    $vim .bashrc
    
    # 设置如下内容
    ORACLE_BASE=/data/oracle
    ORACLE_HOME=$ORACLE_BASE/product/11.2.0
    ORACLE_SID=orcl
    PATH=$PATH:$ORACLE_HOME/bin
    NLS_LANG=AMERICAN_AMERICA.AL32UTF8
    export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
    
    # 刷新,并测试环境变量是否已加载
    $source .bashrc
    $echo $ORACLE_HOME
    
    #返回root用户
    $exit
    

    4 系统设置

    要保证顺利的安装Oracle,需要对CentOS系统进行一些修改,包括:关闭selinux,修改内核配置以及oracle用户对资源的使用限制等。

    4.1 关闭SELinux

    SELinux(Security-Enhanced Linux),翻译过来是安全性加强的Linux。简单的理解就是开启它后,使得linux进程在访问所需资源时会受到一定的控制,进程只能访问那些在他的任务中所需要的文件。至于为什么安装或使用Oracle时,要关闭selinux,我并没有深入的研究。

    $vim /etc/selinux/config
    
    SELINUX=disabled
    
    $setenforce 0
    

    修改配置文件/etc/selinux/config是永久设置的方式,但是需要重启系统,而setenforce 0则是临时关闭selinux,下次重启后还是要读取/etc/selinux/config中的配置,通过这两条命令的配置使用,可以保证关闭selinux而不需要重启服务器。

    4.2 修改Linux内核参数

    $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_default = 262144
    net.core.rmem_max = 4194304
    net.core.wmem_default = 262144
    net.core.wmem_max = 1048576
    
    # 刷新内核参数
    $sysctl -p
    

    这些内核参数不是很明白什么意思。

    4.3 配置用户对资源的使用限制

    配置oracle用户对系统资源的使用,配置文件在/etc/security/limits.conf,格式如下:

    <domain>        <type>  <item>  <value>
    @student        hard    nproc           20
    

    domain 表示要限制的用户或者是@用户组

    type 表示限制的类型,有两个值soft和hard,soft表示告警类型,hard表示强制类型,如果用户使用的资源超出了soft的范围,只会发出警告,而使用的资源超出了hard的范围则会报错。

    item 表示限制的项目,比如 nofile 表示用户最大能打开文件描述符的数量(即打开文件的个数),nproc表示能打开的最大进程数
    value 表示值

    $vim /etc/security/limits.conf
    
    #在limits.conf中设置Oracle用户的对资源的限制
    oracle soft nproc 2047   #oracle用户最大打开进程数
    oracle hard nproc 16384
    oracle soft nofile 1024  #oracle用户最大打开文件
    oracle hard nofile 65536
    oracle soft stack 10240
    
    $vim /etc/profile
    
    # 在profile最后添加
    
    if [ $USER = "oracle" ]; then
      if [ $SHELL = "/bin/ksh" ]; then
       ulimit -p 16384
       ulimit -n 65536
      else
       ulimit -u 16384 -n 65536
      fi
    fi
    
    unset i
    unset -f pathmunge
    

    这里同时在/etc/security/limits.conf/etc/profile文件同时设置oracle用户最大打开进程数和最大打开文件。

    切换到oracle用户,使用ulimit -a 查看oracle用户的资源使用限制情况

    $su - oracle
    $ulimit -a
    $exit
    

    4.4 修改登录验证

    修改login程序的验证过程,PAM模块参见鸟哥的Linux私房菜

    $ vim /etc/pam.d/login
    # 添加以下内容:
    session  required   /lib64/security/pam_limits.so
    session  required   pam_limits.so
    

    4.5 添加主机名

    # 查看主机名,我这里的主机名是CentOS
    $hostname
    
    #将主机名添加到/etc/hosts中
    $vim /etc/hosts
    
    127.0.0.1  CentOS localhost localhost.localdomain localhost4 localhost4.localdomain4
    

    目前,我暂时不知道为什么要将主机名加到hosts文件中,但是后面对Oracle安装文件配置时,有一个ORACLE_HOSTNAME参数需要指定主机名,那个名称就是现在指定的这个。

    4.6 添加防火墙规则

    CentOS7采用firewalld作为防火墙,远程客户端(如:SQLDeveloper)连接Oracle数据库时,一般使用的是tcp的1521端口,这里需要在firewalld上配置该规则

    #在public区域,添加一个tcp,1521端口,并永久保存
    $firewall-cmd --zone=public --add-port=1521/tcp --permanent
    

    5 安装Oracle

    5.1 解压安装包

    下载并解压Oracle安装包,这里我是在Mac上下载的Linux,然后用scp命令上传到CentOS中的。

    #从mac电脑上传Oracle安装到CentOS指定的目录
    $scp -r linux.x64_11gR2_database_1of2.zip oracle@192.168.0.208:/home/oracle/
    $scp -r linux.x64_11gR2_database_2of2.zip oracle@192.168.0.208:/home/oracle/
    
    

    我Virtual Box中CentOS的IP地址是192.168.0.208,上传完成后,使用oracle用户解压安装包。

    $ll -h /home/oracle/
    
    -rw-r--r--. 1 oracle oinstall 1.2G 11月 16 15:20 linux.x64_11gR2_database_1of2.zip
    -rw-r--r--. 1 oracle oinstall 1.1G 11月 16 15:23 linux.x64_11gR2_database_2of2.zip
    
    #使用oracle用户解压安装包
    $unzip linux.x64_11gR2_database_1of2.zip
    $unzip linux.x64_11gR2_database_2of2.zip
    
    $ll -h /home/oracle/database
    total 16K
    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 3.2K Aug 15  2009 runInstaller
    drwxrwxr-x.  2 oracle oinstall   29 Aug 15  2009 sshsetup
    drwxr-xr-x. 14 oracle oinstall 4.0K Aug 15  2009 stage
    -rw-r--r--.  1 oracle oinstall 5.3K Aug 18  2009 welcome.html
    

    Oracle安装文件会解压在一个database目录中,这里我们需要关注的是该目录下的runInstaller安装执行文件,以及response的配置文件目录。

    5.2 安装配置文件说明

    要静默安装Oracle,需要用到Oracle的配置文件,这个配置文件在database/response中,一般的做法是copy一份该目录,在copy的文件中做修改,这里我将response的内容copy到oracle目录下的etc目录中。

    $cp -a /home/oracle/database/response/ /home/oracle/etc
    $ll -h /home/oracle/etc
    
    -rw-rw-r--. 1 oracle oinstall  44K Feb 14  2009 dbca.rsp
    -rw-rw-r--. 1 oracle oinstall  23K Aug 15  2009 db_install.rsp
    -rwxrwxr-x. 1 oracle oinstall 5.7K Feb 26  2009 netca.rsp
    

    可以看出Oracle的安装配置文件主要有3个,

    • db_install.rsp 安装Oracle数据库的配置文件
    • netca.rsp 监听配置文件
    • dbca.rsp 创建Oracle数据库实例的配置文件

    有这些配置文件可以看出,我们需要分三步安装Oracle,第一步安装Oracle数据库,第二步安装监听,第三步安装Oracle数据库实例。

    5.3 安装Oracle数据库

    配置db_install.rsp

    $vim /home/oracle/etc/db_install.rsp
    
    #修改以下内容
    
    #安装方式,选择只安装数据库,因为后面我们需要单独安装实例和监听
    oracle.install.option=INSTALL_DB_SWONLY
    #服务器名称,使用hostname可以查看,需要在/etc/hosts中添加
    ORACLE_HOSTNAME=CentOS
    #oracle用户所在组
    UNIX_GROUP_NAME=oinstall
    #这个目录没有创建,在安装Oracle时会自动生成
    INVENTORY_LOCATION=/data/oracle/oraInventory
    #语言设置
    SELECTED_LANGUAGES=en,zh_CN
    #oracle_home路径,oracle数据库安装的位置
    ORACLE_HOME=/data/oracle/product/11.2.0
    #oracle的根目录
    ORACLE_BASE=/data/oracle
    #安装Oracle企业版
    oracle.install.db.InstallEdition=EE
    #dba用户组
    oracle.install.db.DBA_GROUP=dba
    #oper操作组,注意:我在创建组时,没有为oracle用户创建oper操作组,所以这里将操作组设置为了dba,读者可以根据实际情况修改
    oracle.install.db.OPER_GROUP=dba
    #数据库类型,一般类型
    oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
    #设置安全更新
    DECLINE_SECURITY_UPDATES=true
    
    

    配置文件完成后,终于要安装oracle数据库了,使用下列命令

    $/home/oracle/database/runInstaller -silent -responseFile /home/oracle/etc/db_install.rsp -ignorePrereq
    

    在安装过程中可以使用top去观察oracle的安装情况

    $top
    
      PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
     7619 oracle    20   0 1102340 142184   6124 S 93.0  7.5   1:43.33 java
     7501 root      20   0       0      0      0 S  2.3  0.0   0:02.38 kworker/0:1
    

    可以看到oracle用户正在安装Oracle数据库,安装完成后需要用root用户执行以下命令

    #使用root用户执行
    $sh /data/oracle/oraInventory/orainstRoot.sh
    $sh /data/oracle/product/11.2.0/root.sh
    
    

    5.4 安装监听

    Oracle数据库安装成功后,可以在Oracle的bin目录中找到网络助手程序netca,配置监听

    #使用oracle用户
    $netca /silent /responseFile /home/oracle/etc/netca.rsp
    
    #查看监听状态
    $lsnrctl status
    

    netca静默安装的时候,如果报了如下错误:

    UnsatisfiedLinkError exception loading native library: njni11
    java.lang.UnsatisfiedLinkError: /data/oracle/product/11.2.0/lib/libnjni11.so: libclntsh.so.11.1: cannot open shared object file: No such file or directory
    java.lang.UnsatisfiedLinkError: jniGetOracleHome
        at oracle.net.common.NetGetEnv.jniGetOracleHome(Native Method)
        at oracle.net.common.NetGetEnv.getOracleHome(Unknown Source)
        at oracle.net.ca.NetCALogger.getOracleHome(NetCALogger.java:230)
        at oracle.net.ca.NetCALogger.initOracleParameters(NetCALogger.java:215)
        at oracle.net.ca.NetCALogger.initLogger(NetCALogger.java:130)
        at oracle.net.ca.NetCA.main(NetCA.java:404)
    
    Error: jniGetOracleHome
    Oracle Net Services 配置失败。退出代码是1
    

    解决办法

    cp $ORACLE_HOME/inventory/Scripts/ext/lib/libclntsh.so.11.1  $ORACLE_HOME/lib/
    

    这里如果报这个错,一般后面的安装都会有问题,所以建议卸载,后重新安装一次,卸载Oracle参考: Linux下卸载Oracle 11g

    5.5 安装Oracle数据库实例

    修改数据库实例配置文件/home/oracle/etc/dbca.rsp,然后用数据库助手程序dbca,创建数据库

    $vim /home/oracle/etc/dbca.rsp
    
    #数据库名
    GDBNAME = "orcl"
    #sid
    SID = "orcl"
    #数据库字符集
    CHARACTERSET = "AL32UTF8"
    
    
    $dbca -silent -responseFile /home/oracle/etc/dbca.rsp
    

    登录数据库,查看实例状态

    $sqlplus / as sysdba
    SQL> select status from v$instance;
    
    # STATUS
    # ------------
    # OPEN
    

    5.6 手动启动Oracle

    当重启服务器后,如果没有配置自动启动Oracle,则需要手动对其进行启动,主要是监听和数据库两部分

    # 使用oracle用户启动监听
    $lsnrctl start
    
    # 使用IPC方式登录Oracle数据库,然后启动Oracle实例
    $sqlplus / as sysdba
    #在sqlplus中启动数据库
    SQL> startup
    

    6 测试

    6.1 添加测试用户

    create temporary tablespace test_temp tempfile '/data/oracle/oradata/orcl/test_temptemp.dbf' size 128M autoextend on next 100M maxsize 1024M extent management local;
    
    create tablespace test_data logging datafile '/data/oracle/oradata/orcl/test_data.dbf' size 128M autoextend on next 100M maxsize 1024M extent management local;
    
    create user test identified by aaaaaa default tablespace test_data temporary tablespace test_temp;
    
    grant connect,resource,create view to test;
    

    6.2 删除测试用户

    drop tablespace test_data including contents and datafiles cascade constraints;
    drop tablespace test_temp including contents and datafiles;
    drop user test;
    

    相关文章

      网友评论

        本文标题:CentOS 7 静默安装 Oracle 11g

        本文链接:https://www.haomeiwen.com/subject/nuivfqtx.html