站点图标 Linux-技术共享

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安装XShell和XManager

按照如下设置:

如果没有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,重来。

安装过程:

采集失败,请手动处理

https://static.acgist.com/resources/images/article/201806/15296567772951002.png

采集失败,请手动处理

https://static.acgist.com/resources/images/article/201806/15296567775411003.png

采集失败,请手动处理

https://static.acgist.com/resources/images/article/201806/15296567776791004.png



采集失败,请手动处理

https://static.acgist.com/resources/images/article/201806/15296567785501009.png

 

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

采集失败,请手动处理

https://static.acgist.com/resources/images/article/201806/15296567789001011.png

采集失败,请手动处理

https://static.acgist.com/resources/images/article/201806/15296608875201012.png

 

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

采集失败,请手动处理

https://static.acgist.com/resources/images/article/201806/15296609839961013.png

 

如果提示错误:

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数据库。

退出移动版