Linux安装Oracle 11g

一开始网上找的静默安装搞不定,最后还是用vnc用图形界面装完的。
演示使用的Linux发行版是CentOS 7。

准备:

安装依赖包:

查看安装状态:

rpm -q binutils compat-libstdc++-33 compat-libstdc++-33.i686 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc.i686 glibc-common glibc-devel glibc-devel.i686 glibc-headers ksh libaio libaio.i686 libaio-devel libaio-devel.i686 libgcc libgcc.i686 libstdc++ libstdc++.i686 libstdc++-devel make sysstat unixODBC unixODBC.i686 unixODBC-devel

全部安装:

yum install binutils compat-libstdc++-33 compat-libstdc++-33.i686 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc.i686 glibc-common glibc-devel glibc-devel.i686 glibc-headers ksh libaio libaio.i686 libaio-devel libaio-devel.i686 libgcc libgcc.i686 libstdc++ libstdc++.i686 libstdc++-devel make sysstat unixODBC unixODBC.i686 unixODBC-devel

安装Java:

yum install java-1.8.0-openjdk.x86_64

版本自己确定,不过Oracle 11g自带的JDK是1.5的,所以最好不要超过1.8。

创建用户:

groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
passwd oracle

创建Oracle的用户和用户组,Oracle安装强制不能使用root用户安装。

创建安装目录:

mkdir -p /home/data/database
mkdir -p /home/data/oracle
mkdir -p /home/data/oraInventory
mkdir -p /home/data/oracle/product/11.2.0/db_1

上面目录分别表示:安装文件、数据库安装主目录、数据库安装记录、数据库目录。

准备Oracle安装包:

http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-linx8664soft-100572.html

如果没有安装unzip命令需要安装:

yum install zip unzip

解压:

unzip linux.x64_11gR2_database_1of2.zip -d /home/data/database/
unzip linux.x64_11gR2_database_2of2.zip -d /home/data/database/

修改系统参数:

配置文件追加参数,不是替换所有配置。

vi /etc/sysctl.conf

kernel.shmmax = 8589934592
kernel.shmall = 4294967296
kernel.shmmni = 4096
fs.file-max = 6815744
fs.aio-max-nr = 1048576
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 1024 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586

修改后执行:sysctl -p

注:
上面的kernel.shmmax这个参数一定要注意大小必须要小于等于/dev/shm挂载的大小,可以使用df -h查看。否者启动Oracle时会提示:ORA-00845: MEMORY_TARGET not supported on this system
如果出现上面的错误可以执行:mount -o remount,size=8G /dev/shm来修改/dev/shm大小。

vi /etc/security/limits.conf

oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

vi /etc/pam.d/login

session    required     /lib64/security/pam_limits.so
session    required     pam_limits.so

vi /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

修改Oracle用户环境变量(可以忽略)vi /home/oracle/.bash_profile

export ORACLE_BASE=/home/data/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=orcl
export ORACLE_TERM=xterm
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export PATH=$PATH:$ORACLE_HOME/bin:/usr/sbin:$PATH

修改目录权限:

chown -R oracle:oinstall /home/data/

本地Windows安装XShellXManager

按照如下设置:

XShell配置

如果没有XManager(这个软件是收费的),可以选择Xming替代,但是下面要选择第二个选项(X DISPLAY)。

服务器安装vncserver:

yum install xhost tigervnc tigervnc-server

然后执行:

vncserver

输入密码,不用记住,后面也不会用到。

然后执行:

export DISPLAY=:1
xhost +

至于上面:1,这个数字怎么来的,你具体可以看一下启动vncserver时候的控制台输出内容,一般执行一次vncserver后就不会需要再次执行了。

安装:

现在我们切换到Oracle用户开始安装:

su oracle
./runInstaller

如果提示:Exception in thread "main" java.lang.NoClassDefFoundError

重新执行上面vncserver和后面的命令。

如果提示:xhost: unable to open display ":1"

表示没有启动vncserver。
如果root执行xclock可以打开时钟,但是切换到Oracle提示:Error: Can't open display: localhost:10.0
可以在root下面执行:ssh -AY oracle@localhost,然后执行后面的命令。

如果出现乱码

执行export LANG=C,修改为英文进行安装。

开始安装程序:

如果是本地会很快,如果是远程可能会非常慢,而且中断了就GG,重来。

安装过程:

Oracle安装
Oracle安装
Oracle安装
Oracle安装
Oracle安装
Oracle安装
Oracle安装
Oracle安装

如果上面的依赖包都安装了,下面的提示应该是依赖包的版本太高导致出现下面缺少依赖的问题,选择忽略。

Oracle安装
Oracle安装
Oracle安装

使用root用户执行后面的语句:

Oracle安装
Oracle安装

如果提示错误:

INFO: //usr/lib64/libstdc++.so.5: undefined reference to `memcpy@GLIBC_2.14'
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
Exception String: Error in invoking target 'install' of makefile '/home/data/oracle/product/11.2.0/db_1/ctx/lib/ins_ctx.mk'. See '/home/data/oraInventory/logs/installActions2018-06-22_04-41-52PM.log' for details.
Exception Severity: 1

执行下面命令:

yum install libstdc++*

当然还是不行,最后我在其他机器上面考了一个libstdc++.so.5.0.7,放到/usr/lib64里面就OK了。

下载地址:https://pan.baidu.com/s/1cuJBOrt-v8Q5hST6thodhQ

然后提示:

INFO: make[1]: Leaving directory `/home/data/oracle/product/11.2.0/db_1/sysman/lib'

INFO: make[1]: *** [/home/data/oracle/product/11.2.0/db_1/sysman/lib/emdctl] Error 1
make: *** [emdctl] Error 2

INFO: End output from spawned process.
INFO: ----------------------------------
INFO: Exception thrown from action: make
Exception Name: MakefileException
Exception String: Error in invoking target 'agent nmhs' of makefile '/home/data/oracle/product/11.2.0/db_1/sysman/lib/ins_emagent.mk'. See '/home/data/oraInventory/logs/installActions2018-06-22_05-18-11PM.log' for details.
Exception Severity: 1

修改ins_emagent.mk,将$(MK_EMAGENT_NMECTL)改为$(MK_EMAGENT_NMECTL) -lnnz11

安装完成。

创建数据库:

使用dbca进行创建数据库:

dbca -silent -createDatabase -templateName General_Purpose.dbc -gdbName acgist -sid acgist -responseFile NO_VALUE -characterSet AL32UTF8 -sysPassword oracle -systemPassword oracle

使用之前先设置Oracle的环境变量:. .bash_profile
上面命令执行后等待大概两分钟左右就完成创建了。

启动数据库:

登陆数据库:sqlplus

输入账号sys as sysdba和密码oracle

如果提示:Connected to an idle instance.

输入命令:startup

如果提示:LRM-00109: could not open parameter file '/home/data/oracle/product/11.2.0/db_1/dbs/initorcl.ora'

进入目录$ORACLE_BASE/admin/${SID}/pfile,也就是:/home/data/oracle/admin/acgist/pfile,目录下面有一个文件init.ora.*,拷贝为上面提示不存在的文件:

cp init.ora.* /home/data/oracle/product/11.2.0/db_1/dbs/initorcl.ora

再次执行:startup

可能提示:ORA-00845: MEMORY_TARGET not supported on this system,请参考上面。

如果提示:ORA-01102: cannot mount database in EXCLUSIVE mode,其实重启一下会有奇效。

重启后再次执行startup

Total System Global Area  768294912 bytes
Fixed Size		    2217304 bytes
Variable Size		  452987560 bytes
Database Buffers	  310378496 bytes
Redo Buffers		    2711552 bytes
Database mounted.
Database opened.

OK,数据库启动完成。

创建监听:

这是我们访问数据库会提示:ORA-12541:TNS:no listener,所以我们需要创建一个数据库监听来提供数据库访问。

创建命令:

netca -silent -responsefile /home/data/database/database/response/netca.rsp

提示:

完成对命令行参数进行语法分析。
Oracle Net Services 配置:
完成概要文件配置。
Oracle Net 监听程序启动:
    正在运行监听程序控制: 
      /home/data/oracle/product/11.2.0/db_1/bin/lsnrctl start LISTENER
    监听程序控制完成。
    监听程序已成功启动。
监听程序配置完成。
成功完成 Oracle Net Services 配置。退出代码是0

成功后可以使用命令:lsnrctl status查看监听状态。

然后就可以连接数据库了。

这里我们需要注意:
如果使用SID连接,那么SID的值是环境变量里面ORACLE_SID的值:orcl
如果使用服务名连接,那么服务名是gdbName的值:acgist

如果没有创建用户情况下,可以使用system进行登陆。
或者创建新用户,下面是创建和授权命令:

create user test identified by test;
grant connect, resource to test;

然后就可以使用test进行登陆了。

这里有几个概念:数据库名、实例名、服务名、ORACLE_SID。

数据库名:

查看配置文件/home/data/oracle/product/11.2.0/db_1/dbs/initorcl.ora里面的db_name
或者进入sqlplus使用以下命令进行查询:

select name from v$database;
show parameter db

实例名:

进入sqlplus使用以下命令查询:

select instance_name from v$instance;
show parameter instance

或者使用查看监听状态。

服务名:

进入sqlplus使用以下命令查询:

select name, value from v$parameter where name = 'service_names';
show parameter service_name

ORACLE_SID:

一般和实例名一样,并不是创建时的SID。

完成,感觉Oracle还是挺复杂的,工作主要还是使用MySQL数据库。😀

参考文章:
https://blog.csdn.net/rosicky198188/article/details/79555596
http://blog.itpub.net/26736162/viewspace-1448220/
https://www.cnblogs.com/ivictor/p/4384583.html
https://www.cnblogs.com/rootq/articles/1235647.html
https://www.cnblogs.com/xuezhen-huang/p/5531962.html