一开始网上找的静默安装搞不定,最后还是用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数据库。