1 安装部署
1.数据库服务器—bomserver
1.1.1 【安装前准备】
主机名 | bomser |
ip | 192.168.8.105 |
服务器版本(uname -a) | Linux bomserver 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux |
JAVA_HOME | /usr/java/jdk1.8.0_131 |
Oracle版本 | database_linux.x64_11gR2 |
root用户 | root/root |
oracle用户 | oracle/password |
oracle用户所属用户组 | dba |
oracleBase | /home/oracle/app/oracle |
Oracle安装目录 | /home/oracle/app/oracle/product/11.2.0/db_1 |
数据文件位置 | /home/oracle/app/oracle/oradata/orcl |
数据库管理员用户 | system/system |
实例SID | orcl |
数据库链接 | bomrmd/bomrmd@orcl,端口用默认的1521 |
bomdev用户权限 | DBA |
|
1.1.1.1 操作系统
l
l
l
l
l
1.1.1.2 Oracle安装包
l
linux.x64_11gR2_database_1of2.zip
linux.x64_11gR2_database_2of2.zip
1.1.1.3 其他
l
l
l
1.1.2 安装Oracle
1.1.2.1 准备
1.1.2.2 设置SWAP
(如果不符合要求,在安装Oracle的时候会提示,如果不清楚是否符合要求,也可以不用提前设置,)
安装系统时swap分区创建过小,动态调整。所以在安装操作系统的时候设置好swap分区及分配好大小即可
方法:用文件作为Swap分区,操作如下
创建要作为swap分区的文件:增加1GB大小的交换分区,则命令写法如下,其中的count等于想要的块的数量(bs*count=文件大小)。
# dd if=/dev/zero of=/root/swapfile bs=1M count=1024
格式化为交换分区文件:
# mkswap /root/swapfile #建立swap的文件系统
启用交换分区文件:
# swapon /root/swapfile #启用swap文件.
使系统开机时自启用,在文件/etc/fstab中添加一行:
/root/swapfile swap swap defaults 0 0
设置完后,重启Linux系统
1.1.2.3 修改主机名
[root@bomserver ~]# sed -i "s/HOSTNAME=localhost.localdomain/HOSTNAME=bomserver/" /etc/sysconfig/network
[root@bomserver ~]# hostname bomserver
1.1.2.4 添加主机名与IP对应记录
[root@bomserver ~]# vi /etc/hosts
192.168.1.8
1.1.2.5 关闭防火墙Selinux
[root@bomserver ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
[root@bomserver ~]# setenforce 0
1.1.2.6 安装依赖包
检查依赖包
[root@bomserver ~]rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE}(%{ARCH})\n' binutils \
elfutils-libelf \
elfutils-libelf-devel \
gcc \
gcc-c++ \
glibc \
glibc-common \
glibc-devel \
glibc-headers \
ksh \
libaio \
libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
make \
sysstat \
unixODBC \
unixODBC-devel
(\在Linux中表示命令未结束,但是回车,命令太长的时候,会这么输入,比较容易看)
执行上述命令后,系统会列出依赖包安装的版本,如果没有安装也会列出来,对没有安装的依赖包进行如下安装
网络OK时通过yum安装
[root@bomserver ~]#
yum -y install gcc gcc-c++ make binutils compat-libstdc++-33 elfutils-libelf \
elfutils-libelf-devel glibc glibc-common glibc-devel \
libaio libaio-devel libgcc libstdc++ libstdc++-devel \
unixODBC unixODBC-devel
网络不OK时,在系统光盘中找到rpm包,通过rpm安装
[root@bomserver ~]rpm -ivh gcc.rpm
rpm gcc gcc-c++ glibc
glibc-common \
glibc-devel \
glibc-headers \
ksh \
libaio \
libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
make \
sysstat \
unixODBC \
unixODBC-devel
这一步需要在安装光盘中找到没有的依赖包,然后拷贝到Linux某目录下,然后通过命令:
rpm –ivh + [依赖包的路径+名称]
进行安装,注意,Linux的安装包都很长,上面有软件的名称,版本等信息,但实际执行的时候只需要输入软件名称即可。
『特殊说明』:
(1)
(2)
(3)
1.1.2.7 修改内核参数
使用vi打开/etc/sysctl.conf文件:
[root@bomserver ~]# vi /etc/sysctl.conf
在文件末尾添加如下:
net.ipv4.ip_local_port_range= 9000 65500
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 10523004
kernel.shmmax = 6465333657
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_max=1048576
然后按ESC,输入:wq,回车,文本会保存并退出
完成后,输入命令:
[root@bomserver ~]# sysctl -p
可以输出配置后的结果,如果有错误会提示
1.1.2.8 修改系统资源限制
本步骤是为了修改打开进程数和文件数
使用vi打开/etc/security/limits.conf文件:
[root@bomserver ~]# vi /etc/security/limits.conf
在文件末尾添加如下:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
然后按ESC,输入:wq,回车,文本会保存并退出
使用vi打开/etc/pam.d/login文件:
[root@bomserver ~]# vi /etc/pam.d/login
查看是否存在下面几行,如果不存在或者内容不一致,修改:
session
session
session
session
然后按ESC,输入:wq,回车,文本会保存并退出
1.1.2.9 创建用户和组
执行如下命令:
[root@bomserver ~]# groupadd oinstall
[root@bomserver ~]# groupadd dba
[root@bomserver ~]# groupadd oper
[root@bomserver ~]# useradd -u600 -g oinstall oracle
[root@bomserver ~]# usermod -G dba,oper oracle
[root@bomserver ~]# id oracle
[root@bomserver ~]# passwd oracle
1.1.2.10 创建安装目录并赋权
执行如下命令:
[root@bomserver ~]# mkdir /home/oracle/app/oracle
[root@bomserver ~]# chown -R oracle:dba /home/oracle/app/oracle
[root@bomserver ~]# chown -R bomserver:oinstall /home/oracle/app/oracle
[root@bomserver ~]# su – oracle
[root@bomserver ~]# mkdir -p /home/oracle/app/oracle/product/11.2.0/db_1
[root@bomserver ~]# mkdir -p /home/oracle/app/oracle/oradata/ORCL
1.1.2.11 设置oracle环境变量
(使用oracle帐号登录桌面,并开启terminal窗口文件最后最后加入如下环境变量的设置行)
使用vi打开/home/oracle/.bash_profile文件:
[oracle@bomserver ~]# vi /home/oracle/.bash_profile
并在其中插入:
ORACLE_BASE=/home/oracle/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
LD_LIBRARY_PATH=$ORACLE_HOME/lib; export LD_LIBRARY_PATH
ORACLE_SID=ORCL; export ORACLE_SID
ORA_NLS33=$ORACLE_HOME/nls/admin/data; export ORA_NLS33
NLS_LANG=american_america.zhs16gbk;export NLS_LANG
LANG= zh_CN.GBK; export LANG
PATH=$ORACLE_HOME/bin:$PATH; export PATH
注意上面的ORACLE_BASE要和上一步创建的目录一致,作为ORACEL的安装根目录
然后按ESC,输入:wq并回车,文本会保存并退出
.bash_profile只是一个记录命令的隐藏文本文件,若想让里面设置的环境变量生效
需要随后执行如下命令:
[oracle@bomserver ~]# source /home/oracle/.bash_profile(这个命令相当于把.bash_profile文件里面的命令执行了一遍)
[oracle@bomserver ~]# env(检查环境变量设置是否OK)
也可以使用echo命令查看具体某个环境变量是否正确,比如查看ORACLE_HOME是否正确,输入:
[oracle@bomserver ~]# echo $ORACLE_HOME
如果设置正确,随后会显示环境变量的值:/home/oracle/app/oracle/product/11.2.0/db_11
关于环境变量:PATH,要说一句:
很多Linux的命令执行时,会显示command not found,很有可能是因为这个命令所在的目录没有设置到环境变量PATH里面,PATH里面存了很多路径,之间用冒号隔开,如果要往里面加的话,需要执行:
PATH=$ORACLE_HOME/bin:$PATH(这是在前面插入)
PATH=$PATH: $ORACLE_HOME/bin(这是在后面插入)
然后export PATH
在shell中直接执行export PATH=$ORACLE_HOME/bin:也可以,但是仅对当前shell会话有效,shell关闭了,环境变量又恢复了。正确的做法是打开.bash_profile文件:
[oracle@bomserver ~]#vi /etc/.bash_profile
插入export PATH=$ORACLE_HOME/bin;命令
然后:wq保存退出,然后
[oracle@bomserver ~]# source /etc/.bash_profile
使设置生效
正常情况,PATH环境变量会具有如下值:
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
注意:Linux的环境变量是对用户有效的,也就是说当前用户设置的环境变量只对当前用户有效,所以如上面所有ORACLE安装和运行需要的环境变量,一定要在oracle这个用户下设置环境变量,另外切换用户的命令su XXXX和su – XXXX是有差别的,前者不会携带环境变量到新切换到的用户上,后者会,所以从root用户换成oracle用户的时候要用后者。
1.1.2.12 上传安装文件
(1)使用oracle账号登录:SSH Secure File Transfer Client(使用XFTP工具也可以,建议使用XFTP)
(2)上传两个安装包到:/usr/local/dev_src/ 目录
1.1.2.13 解压oracle安装文件
执行如下两个代码进行解压:
[oracle@bomserver~]# unzip
[oracle@bomserver~]# unzip
(注意目录和目录之间的空格,前一个目录是解压的目标文件夹,后一个是需要解压文件所在的目录)
注意:中文名的压缩包解压后,会出现乱码,这个问题如果遇到百度即可,ORACEL安装文件不存在中文名
1.1.2.15 安装Oracle
这一步启动视图窗口安装Oracle
[root@bomserver ~]# xhost +
[root@bomserver ~]# su – oracle
[oracle@bomserver ~] cd /usr/local/dev_src/oracle/
[oracle@bomserver ~]#
接下来就会弹出安装界面,然后根据网上的图文并茂文章安装。
执行xhost +的时候可能存在错误,这个时候百度一下,主要是DISPLAY没有注册,建议是在CentOS的可视化界面里面安装,使用Shell工具远程命令行的情况没试过,不知道能不能远程出来ORACLE可视化界面。
Oracle安装过程和Windows下基本一致。
数据库安装目录
设置字符集,请务必选择ZHS16GBK字符集,否则会自动跟随系统(CentOS系统字符集是WE8MSWIN1252,中文会出现乱码)
数据库实例SID名
数据文件存放位置
管理员密码
最后会弹出Swap分区的问题和缺失的依赖包,Swap分区的设置参考前面【设置Swap分区】的说明。如果依赖包哪个没有安装请回到前面【安装依赖包】检查一遍,没有安装的按照上述方式安装,如果都安装完,这里面还有提示,那么不用理会,点击Ignore All就可以。
关于字符集选择,说句题外话:
ZHS16GBK支持ASCII7和简繁汉字,但不支持日文朝鲜等文字,汉字是用两个字节存储,而AL32UTF8则支持多国文字,但汉字用三个字节存储。所以如果公司将来业务可能要扩展到其他国家,最好用AL32UTF8,不要可惜这点占用空间。如果强用ZHS16GBK,则国家字符集用AL32UTF8来支持多国文字,但这给开发管理带来很多麻烦。本系统主要是面向中文和英文用户,选择ZHS16GBK问题不大。
1.1.3 启动Oracle
第一步:登陆
root登陆之后切换到oracle用户上,输入
su - oracle
第二步:连接
在oracle用户下,输入
sqlplus /nolog
第三步:使用管理员权限
输入
connect /as sysdba
第四步:启动/关闭服务
输入
startup
启动服务
第五步:启动监听:
退出sqlplus模式(输入quit回车),输入
lsnrctl start
如果需要关闭ORACLE服务,输入
shutdown
后面一定要接参数:
所以,数据库关闭很慢,这时我一心急,就直接退出了sqlplus,造成oracle文件被lock,当我再次startup时,操作失败,因为文件依然被锁定状态。报错ORA-01012: not logged on。
1.1.4 常见错误及解决办法
1.1.1.1SQL> startup 时候提示could not open parameter file错误的解决方法
装完oracle,服务是默认启动的,如果Linux重启之后,服务不会自动启动,这个时候需要手动启动,启动的时候,用oracle用户执行:
[oracle@localhost ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Wed Dec 28 04:23:22 2016
Copyright (c) 1982, 2009, Oracle.
SQL> conn /as sysdba
已连接。
SQL> startup
ora-01078failure in processing system parameters
LRM-00109:could not open parameter file ’/opt/oracle/app/oracle/product/10.1.0/Db_1/dbs/initoracle.ora’
这是因为在oracle9i和oracle10g中,数据库默认将使用spfile启动数据库,如果spfile不存在,则就会出现上述错误。
解决方法:
将$ORACLE_BASE/admin/数据库名称/pfile目录下的init.ora.012009233838形式的文件(那一串数字可能不同)copy到$ORACLE_HOME/dbs目录下,并重命名为:initXXX.ora即可。(注:XXX为数据库实例名,即安装ORACLE之前配置的环境变量 ORACLE_SID的值),initXXX.ora用gedit打开,找到local_listener这一行,然后将其值修改为:
local_listener=’(ADDRESS_LIST=(Address=(Protocol=tcp) (Host=your_hostname)(Port=1521)))’
SQL> startup
ORACLE instance started.
上述过程用命令的方式操作如下:
oracle@dbserver dbs]$ cd /u01/app/oracle/admin/orcl/pfile/
[oracle@dbserver pfile]$ ls
init.ora.6242012174552
[oracle@dbserver pfile]$ cp init.ora.6242012174552 /u01/app/oracle/product/11.2.0/db_1/dbs/
更改名字格式为:initORACLE_SID.ora
[oracle@dbserver dbs]$ mv init.ora.6242012174552 initORCL.ora
重启数据库
SQL> conn /as sysdba
Connected to an idle instance.
SQL> startup mount;
ORACLE instance started.
解决方案二:
因为:failure in processing system parameters
可能是与系统内存有关
1.1.1.2数据库远程连接监听配置
修改远程监听配置:
1./home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
2.修改生成的监听配置文件:
/home/oracle/app/oracle/product/11.2.0/db_1/dbs/initORCL.ora
找到如下节点进行配置
local_listener='(ADDRESS_LIST=(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)))'
1.1.1.3数据库中文乱码的问题
如果出现中文都是问号的情况,说明Oracle数据库安装时选择的字符集有问题,如下图:
解决办法如下:
首先检查一下当前的字符集,在PLSQL里面输入:
SQL>select * from v$nls_parameters
查询结果如下:
NLS_LANGUAGE | SIMPLIFIED CHINESE |
NLS_TERRITORY | CHINA |
NLS_CURRENCY | ? |
NLS_ISO_CURRENCY | CHINA |
NLS_NUMERIC_CHARACTERS | ., |
NLS_CALENDAR | GREGORIAN |
NLS_DATE_FORMAT | DD-MON-RR |
NLS_DATE_LANGUAGE | SIMPLIFIED CHINESE |
NLS_CHARACTERSET | WE8MSWIN1252 |
NLS_SORT | BINARY |
NLS_TIME_FORMAT | HH.MI.SSXFF AM |
NLS_TIMESTAMP_FORMAT | DD-MON-RR HH.MI.SSXFF AM |
NLS_TIME_TZ_FORMAT | HH.MI.SSXFF AM TZR |
NLS_TIMESTAMP_TZ_FORMAT | DD-MON-RR HH.MI.SSXFF AM TZR |
NLS_DUAL_CURRENCY | ? |
NLS_NCHAR_CHARACTERSET | AL16UTF16 |
NLS_COMP | BINARY |
NLS_LENGTH_SEMANTICS | BYTE |
NLS_NCHAR_CONV_EXCP | FALSE |
其中NLS_CHARACTERSET是字符集,如果值不是ZHS16GBK,那么则需要做字符集转换,如下:
按照如下一行一行的在sqlplus里执行(注意每一行都需要分号结束):
SQL> conn /as sysdba
SQL> shutdown immediate;
SQL> startup mount
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL> alter database open;
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
ORA-12712: new character set must be a superset of old character set
#提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改:
SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
#我们看到这个过程和之前ALTER DATABASE CHARACTER SET操作的内部过程是完全相同的,也就是说INTERNAL_USE提供的帮助就是使Oracle数据库绕过了子集与超集的校验.
SQL> select * from v$nls_parameters;
SQL> shutdown immediate;
SQL> startup
SQL> select * from v$nls_parameters;
成功!
再查一下字符集:
select * from v$nls_parameters
查询结果如下:
NLS_LANGUAGE | SIMPLIFIED CHINESE |
NLS_TERRITORY | CHINA |
NLS_CURRENCY | ¥ |
NLS_ISO_CURRENCY | CHINA |
NLS_NUMERIC_CHARACTERS | ., |
NLS_CALENDAR | GREGORIAN |
NLS_DATE_FORMAT | DD-MON-RR |
NLS_DATE_LANGUAGE | SIMPLIFIED CHINESE |
NLS_CHARACTERSET | ZHS16GBK |
NLS_SORT | BINARY |
NLS_TIME_FORMAT | HH.MI.SSXFF AM |
NLS_TIMESTAMP_FORMAT | DD-MON-RR HH.MI.SSXFF AM |
NLS_TIME_TZ_FORMAT | HH.MI.SSXFF AM TZR |
NLS_TIMESTAMP_TZ_FORMAT | DD-MON-RR HH.MI.SSXFF AM TZR |
NLS_DUAL_CURRENCY | ¥ |
NLS_NCHAR_CHARACTERSET | AL16UTF16 |
NLS_COMP | BINARY |
NLS_LENGTH_SEMANTICS | BYTE |
NLS_NCHAR_CONV_EXCP | FALSE |
已经改为:ZHS16GBK,说明字符集设置成功。然后需要重新初始化一下数据库。
另外,如果本地环境变量有问题,要修改本地环境变量,设置
NLS_LANG = SIMPLIFIED CHINESE.ZHS16GBK //这个是我们的数据库字符编码
需要注意:改变字符集后,原来已有的数据不会改变,只是之后新增的数据会是新的字符集,所以不要轻易调整字符集,要在Oracle安装的时候设置好字符集。
1.1.4.4
OUI-10022:The target area /oracle/oraInventory cannot be used because it is in an invalid state处理方法$
1.1.4.5
INS-20802 Oracle Net Congfiguration Assistant失败
Oracle
1.1.4.6
ORA-00845: MEMORY_TARGET not supported on this system
[root@aaaprod-db ~]# cat /etc/fstab | grep tmpfs
tmpfs
[root@aaaprod-db ~]#
[root@aaaprod-db ~]# mount -o remount,size=16G /dev/shm
[root@aaaprod-db ~]#
[root@aaaprod-db ~]# cat /etc/fstab | grep tmpfs
tmpfs
[root@aaaprod-db ~]# vi /etc/fstab
/dev/rootvg/LogVol02
/dev/rootvg/LogVol01
/dev/rootvg/lvol0
/dev/rootvg/lvol1
LABEL=/boot
tmpfs
devpts
sysfs
proc
/dev/rootvg/LogVol00
"/etc/fstab" 10L, 769C written
[root@aaaprod-db ~]# df -h|grep shm
tmpfs
1.1.4.7
ORA-01102: cannot mount database in EXCLUSIVE mode
root@qa-oracle dbs]# fuser -u lkNDMSQA
lkNDMSQA:
果然该文件没释放,用fuser命令kill掉:
[root@qa-oracle dbs]# fuser -k lkNDMSQA
lkNDMSQA:
[root@qa-oracle dbs]# fuser -u lkNDMSQA
1.1.4.8
Oracle启动监听报错:The listener supports no services解决
Listener.ora添加
SID_LIST_LISTENER=
1.1.4.9
Service "orcl" has 1 instance(s).
Service "orcl.192.83.163" has 1 instance(s).
监听未同步,执行顺序要一致!
1startup,2alter system register,3lsnrctl start
监听启动成功: