一开始网上找的静默安装搞不定,最后还是用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
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
上面目录分别表示:安装文件、数据库安装主目录、数据库安装记录、数据库目录。
如果没有安装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/
按照如下设置:
如果没有XManager(这个软件是收费的),可以选择Xming替代,但是下面要选择第二个选项(X DISPLAY)。
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,重来。
安装过程:
如果上面的依赖包都安装了,下面的提示应该是依赖包的版本太高导致出现下面缺少依赖的问题,选择忽略。
使用root用户执行后面的语句:
如果提示错误:
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了。
然后提示:
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 -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
一般和实例名一样,并不是创建时的SID。
完成,感觉Oracle还是挺复杂的,工作主要还是使用MySQL数据库。😀