点击上方'伦少的博客'关注与您一起成长~

前言
由于需要学习配置oracle goldengate(ogg),奈何没有oracle环境,所以想自己装一个oracle,搜了一下相关文档,跟着安装了一下,发现oracle安装比mysql安装麻烦多了,而且出现了很多博客上没有提到的错误,所以特此记录一下~
1、下载
下载地址:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html,我下载的是Oracle Database 11g Release 2
(11.2.0.1.0) Linux x86-64,注意File1和File2都要下载
2、为host添加映射
我的虚拟机之前已经配好
1192.168.44.128 ambari.master.com
3、安装依赖
3.1 先安装pdksh
centos7没有相关安装包可用,可下载pdksh的rpm包
1wget http://vault.centos.org/5.11/os/x86_64/CentOS/pdksh-5.2.14-37.el5_8.1.x86_64.rpm
2rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm
3.2 安装其他依赖
1yum -y install binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel expat gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers libaio libaio-devel libgcc libstdc++ libstdc++-devel make pdksh sysstat unixODBC unixODBC-devel
3.3 检查所有依赖是否安装完整
1rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel expat gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers libaio libaio-devel libgcc libstdc++ libstdc++-devel make pdksh sysstat unixODBC unixODBC-devel | grep "not installed"
其中中文系统"not installed" 可能需要替换成中文相关的
4、添加oracle用户组和用户
1groupadd oinstall
2groupadd dba
3groupadd asmadmin
4groupadd asmdba
5useradd -g oinstall -G dba,asmdba oracle -d /home/oracle
查看oracle用户
1id oracle
为oracle 用户设置密码
1passwd oracle
5、优化系统内核
1vim /etc/sysctl.conf
1fs.aio-max-nr=1048576
2fs.file-max=6815744
3kernel.shmall=2097152
4kernel.shmmni=4096
5kernel.shmmax = 2147483648
6kernel.sem=250 32000 100 128
7net.ipv4.ip_local_port_range=9000 65500
8net.core.rmem_default=262144
9net.core.rmem_max=4194304
10net.core.wmem_default=262144
11net.core.wmem_max=1048586
其中kernel.shmmax为内存的一半,比如内存为4G,则kernel.shmmax=210241024*1024=2147483648
使参数生效
1sysctl -p
6、限制oracle用户的shell权限
1vim /etc/security/limits.conf
1oracle soft nproc 2047
2oracle hard nproc 16384
3oracle soft nofile 1024
4oracle hard nofile 65536
1vim /etc/pam.d/login
1session required /lib64/security/pam_limits.so
2session required pam_limits.so
1vim /etc/profile
1if [ $USER = "oracle" ]; then
2if [ $SHELL = "/bin/ksh" ]; then
3ulimit -p 16384
4ulimit -n 65536
5else
6ulimit -u 16384 -n 65536
7fi
8fi
7、创建oracle相关目录
1mkdir -p /db/app/oracle/product/11.2.0
2mkdir /db/app/oracle/oradata
3mkdir /db/app/oracle/inventory
4mkdir /db/app/oracle/fast_recovery_area
5chown -R oracle:oinstall /db/app/oracle
6chmod -R 775 /db/app/oracle
7mkdir -p /u01/app/oracle/inventory
8chown -R oracle:oinstall /u01/app/oracle/inventory
8、配置oracle用户环境变量
1su oracle
2vim .bash_profile
1umask 022
2export ORACLE_HOSTNAME=ambari.master.com
3export ORACLE_BASE=/db/app/oracle
4export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/
5export ORACLE_SID=ORCL
6export PATH=.:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/jdk/bin:$PATH
7export LC_ALL="en_US"
8export LANG="en_US"
9export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
10export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
使之生效
1source ~/.bash_profile
关于Linux权限的小问题,此处网上资料是配置在.bash_profile即/home/oracle/.bash_profile文件里,我开始也是这样设置的,但每次重新登录切换到oracle用户发现每次都要重新source一下,后来发现必须以oracle用户登录才能每次都生效,不用重新source,如果用root用户登录,再切换到oracle用户的话,需要重新source的,为了方便,我把环境变量在/home/oracle/.bashrc里有配置了一份,这样我从root切换到oracle用户的也不需要重新source了,方便了我后面的使用,当然在生产上还是建议只配置在/home/oracle/.bash_profile,具体的Linux文件权限问题可自行在网上查一下相关资料,希望能对Linux文件权限不太熟悉的同学有所帮助,因为这也困扰了我好多天~
9、解压安装包
如果安装包在root用户下,现切换到root用户
1su
1unzip linux.x64_11gR2_database_1of2.zip -d /db
2unzip linux.x64_11gR2_database_2of2.zip -d /db
然后执行
1mkdir /db/etc/
2cp /db/database/response/* /db/etc/
3vim /db/etc/db_install.rsp
1oracle.install.option=INSTALL_DB_SWONLY
2DECLINE_SECURITY_UPDATES=true
3UNIX_GROUP_NAME=oinstall
4INVENTORY_LOCATION=/u01/app/oracle/inventory
5SELECTED_LANGUAGES=en,zh_CN
6ORACLE_HOSTNAME=ambari.master.com
7ORACLE_HOME=/db/app/oracle/product/11.2.0
8ORACLE_BASE=/db/app/oracle
9oracle.install.db.InstallEdition=EE
10oracle.install.db.isCustomInstall=true
11oracle.install.db.DBA_GROUP=dba
12oracle.install.db.OPER_GROUP=dba
10、安装
先切换到oracle
1su oracle
2cd /db/database/
3./runInstaller -silent -ignorePrereq -responseFile /db/etc/response/db_install.rsp

可按他提示的查看日志,新增一个命令窗口,执行
1tail -f /u01/app/oracle/inventory/logs/installActions2018-05-04_11-48-18AM.log
安装成功:

根据提示,执行
1su
2sh /u01/app/oracle/inventory/orainstRoot.sh
3sh /db/app/oracle/product/11.2.0/root.sh
11配置静默监听
1su oracle
2netca /silent /responsefile /db/etc/netca.rsp
查看监听端口
1netstat -tnulp | grep 1521

11、静默创建数据库
1vim /db/etc/dbca.rsp
2GDBNAME = "orcl"
3SID = "orcl"
4SYSPASSWORD = "oracle"
5SYSTEMPASSWORD = "oracle"
6SYSMANPASSWORD = "oracle"
7DBSNMPPASSWORD = "oracle"
8DATAFILEDESTINATION =/db/app/oracle/oradata
9RECOVERYAREADESTINATION=/db/app/oracle/fast_recovery_area
10CHARACTERSET = "AL32UTF8"
11TOTALMEMORY = "3277"
其中TOTALMEMORY 设置为总内存的80%(410240.8)
在root用户下执行(如果没有权限)
1chown -R oracle:oinstall /db/etc/dbca.rsp
执行静默建库
1dbca -silent -responseFile /db/etc/dbca.rsp

然后查看一下日志看看有没有报错
1vim /db/app/oracle/cfgtoollogs/dbca/orcl/orcl.log
如下
1Copying database files
2DBCA_PROGRESS : 1%
3DBCA_PROGRESS : 3%
4DBCA_PROGRESS : 11%
5DBCA_PROGRESS : 18%
6DBCA_PROGRESS : 26%
7DBCA_PROGRESS : 37%
8Creating and starting Oracle instance
9DBCA_PROGRESS : 40%
10DBCA_PROGRESS : 45%
11DBCA_PROGRESS : 50%
12DBCA_PROGRESS : 55%
13DBCA_PROGRESS : 56%
14DBCA_PROGRESS : 60%
15DBCA_PROGRESS : 62%
16Completing Database Creation
17DBCA_PROGRESS : 66%
18DBCA_PROGRESS : 70%
19DBCA_PROGRESS : 73%
20DBCA_PROGRESS : 85%
21DBCA_PROGRESS : 96%
22DBCA_PROGRESS : 100%
23Database creation complete. For details check the logfiles at:
24 /db/app/oracle/cfgtoollogs/dbca/orcl.
25Database Information:
26Global Database Name:orcl
27System Identifier(SID):orcl
查看oracle实例进程
1ps -ef | grep ora_ | grep -v grep
1root@ambari:~# ps -ef | grep ora_ | grep -v grep
2oracle 3531 1 0 05:48 ? 00:00:00 ora_pmon_orcl
3oracle 3533 1 11 05:48 ? 00:00:12 ora_vktm_orcl
4oracle 3537 1 0 05:48 ? 00:00:00 ora_gen0_orcl
5oracle 3539 1 0 05:48 ? 00:00:00 ora_diag_orcl
6oracle 3541 1 0 05:48 ? 00:00:00 ora_dbrm_orcl
7oracle 3543 1 0 05:48 ? 00:00:00 ora_psp0_orcl
8oracle 3545 1 0 05:48 ? 00:00:00 ora_dia0_orcl
9oracle 3547 1 16 05:48 ? 00:00:17 ora_mman_orcl
10oracle 3549 1 0 05:48 ? 00:00:00 ora_dbw0_orcl
11oracle 3551 1 0 05:48 ? 00:00:00 ora_lgwr_orcl
12oracle 3553 1 0 05:48 ? 00:00:00 ora_ckpt_orcl
13oracle 3555 1 0 05:48 ? 00:00:00 ora_smon_orcl
14oracle 3557 1 0 05:48 ? 00:00:00 ora_reco_orcl
15oracle 3559 1 1 05:48 ? 00:00:01 ora_mmon_orcl
16oracle 3561 1 0 05:48 ? 00:00:00 ora_mmnl_orcl
17oracle 3563 1 0 05:48 ? 00:00:00 ora_d000_orcl
18oracle 3565 1 0 05:48 ? 00:00:00 ora_s000_orcl
19oracle 3615 1 0 05:48 ? 00:00:00 ora_qmnc_orcl
20oracle 4088 1 1 05:48 ? 00:00:00 ora_cjq0_orcl
21oracle 4121 1 0 05:48 ? 00:00:00 ora_q000_orcl
22oracle 4134 1 0 05:48 ? 00:00:00 ora_q001_orcl
查看监听状态
1lsnrctl status

12、登录到oracle,测试
1sqlplus / as sysdba
2select status from v$instance;
这是发现oracle执行任何语句报错如图:

崩溃~
13、各种错误及解决
13.1 首先检查前面的步骤有没有错的
如果没有,则执行后面,一开始我发现前面日志异常,第一次装没有经验,试了几下干脆卸载重装。
13.2 ORACLE not available
先根据ORACLE not available上网查了一下,解决方法:startup
13.3 startup 报错
错误:
1could not open parameter file '/db/app/oracle/product/11.2.0/dbs/initORCL.ora'
13.4解决could not open parameter
执行以下命令即可(确保oracle用户对下面的文件夹有权限,前面已经执行过)
1cp $ORACLE_BASE/admin/orcl/pfile/init.ora.43201822553 $ORACLE_HOME/dbs/initORCL.ora
参考:Linux下无法启动oracle could not open parameter file 解决方法
继续startup,又报错:MEMORY_TARGET not supported on this system
1SQL> startup
2ORA-00845: MEMORY_TARGET not supported on this system
13.5 解决 MEMORY_TARGET not supported on this system
root 用户下执行
1mount -t tmpfs shmfs -o size=7g /dev/shm
参考:ORA-00845: MEMORY_TARGET not supported on this system报错解决
继续startup
1SQL> startup
2ORACLE instance started.
3
4Total System Global Area 1720328192 bytes
5Fixed Size 2214056 bytes
6Variable Size 1006634840 bytes
7Database Buffers 704643072 bytes
8Redo Buffers 6836224 bytes
9ORA-01102: cannot mount database in EXCLUSIVE mode
如果执行查询会报错:database not mounted,因为上面已经报错ORA-01102: cannot mount database in EXCLUSIVE mode
13.6 解决 cannot mount database in EXCLUSIVE mode
先关闭数据库
1shutdown immediate
1SQL> shutdown immediate
2ORA-01507: database not mounted
3
4
5ORACLE instance shut down.
然后在root用户执行
1cd $ORACLE_HOME/dbs
2fuser -k lkORCL
3/db/app/oracle/product/11.2.0/dbs/lkORCL: 2933 2939 2943 2945 2949 2951 2953 2955 2957 2959 2961 2963 3138 3140 3142 3144 3341 3343 3345 3869 3961
其中lkORCL 为自己设置oracle实例名的大写。
再执行fuser -u lkORCL没有任何输出即可
参考:ORA-01507: database not mounted (转)
这时再执行startup就可以了
1SQL> startup
2ORACLE instance started.
3
4Total System Global Area 1720328192 bytes
5Fixed Size 2214056 bytes
6Variable Size 1006634840 bytes
7Database Buffers 704643072 bytes
8Redo Buffers 6836224 bytes
9Database mounted.
10Database opened.
11SQL> select * from v$version;
12
13BANNER
14--------------------------------------------------------------------------------
15Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
16PL/SQL Release 11.2.0.1.0 - Production
17CORE 11.2.0.1.0 Production
18TNS for Linux: Version 11.2.0.1.0 - Production
19NLSRTL Version 11.2.0.1.0 - Production
20
21SQL>
再执行其他查询语句测试一下即可
14、创建用户供远程连接
开放1521端口
1firewall-cmd --zone=public --add-port=1521/tcp --permanent
2firewall-cmd --reload
1create user bigdata identified by bigdata;
2grant connect, resource to bigdata;
利用连接数据库的工具就可以远程连接oracle,如DBeaver,然后建表,插入几条记录,查询测试一下,具体方法不再赘述。
参考资料
https://blog.csdn.net/Kenny1993/article/details/75038670
关注我





