RedHat Enterprise Linux 5下Oracle11g安装
一、系统要求
1、最小内存容量:1 GB of RAM
2、虚拟内存容量(如下):
Available RAM | Swap Space Required |
Between 1 GB and 2 GB | 1.5 times the size of RAM |
Between 2 GB and 16 GB | Equal to the size of RAM |
More than 16 GB | 16 GB |
3、硬盘空间要求:
Installation Type | Requirement for Software Files (GB) |
Enterprise Edition | 3.95 |
Standard Edition | 3.88 |
4、/tmp目录需要1 GB的空闲空间
5、Oracle 11g R2数据库支持的操作系统:
Oracle Database 11g Release 2 (11.2) for Linux x86:
Asianux 2.0
Asianux 3.0
Oracle Enterprise Linux 4.0 Update 7 or later
Oracle Enterprise Linux 5.0
Red Hat Enterprise Linux 4.0 Update 7 or later
Red Hat Enterprise Linux 5.0
SUSE Linux Enterprise Server 10.0
SUSE Linux Enterprise Server 11.0
二、安装Oracle 11g数据库前系统配置
1、 安装Oracle 11g R2数据库所需相依赖的软件包
binutils-2.17.50.0.6
compat-libstdc++-33-3.2.3
compat-gcc-34-3.4.6-4.i386.rpm
compat-gcc-34-c++-3.4.6-4.i386.rpm
elfutils-libelf-0.125
elfutils-libelf-devel-0.125
elfutils-libelf-devel-static-0.125
gcc-4.1.2
gcc-c++-4.1.2
glibc-2.5-24
glibc-common-2.5
glibc-devel-2.5
glibc-headers-2.5
kernel-headers-2.6.18
ksh-20060214
libaio-0.3.106
libaio-devel-0.3.106
libgcc-4.1.2
libgomp-4.1.2
libstdc++-4.1.2
libstdc++-devel-4.1.2
make-3.81
sysstat-7.0.2
unixODBC-2.2.11
unixODBC-devel-2.2.11
最后检查包是否已经安装:
rpm -q gcc binutils compat elfutils glibc libaio libgcc libgomp libstdc++ make sysstat
(注:可能有的包还提示“没有安装”,但是明明安装了,并且安装成功就不用管它。)
2、 创建Oracle用户
# /usr/sbin/groupadd oinstall
# /usr/sbin/groupadd dba
# /usr/sbin/groupadd oper
# /usr/sbin/useradd -g oinstall -G dba oracle
# passwd oracle
3、 配置内核相关参数,以便支持Oracle数据库
# vi /etc/sysctl.conf
# For Oracle
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
(注:如果没有相应的参数则添加之;若相应参数值较我给出的值大,请不要修改!)
修改好内核参数后,执行如下命令使新的设置生效:
# /sbin/sysctl -p
4、 修改用户限制:
# vi /etc/security/limits.conf
# For Oracle
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
5、 修改用户验证选项:
# vi /etc/pam.d/login
# For Oracle
session required /lib/security/pam_limits.so
session required pam_limits.so
6、 创建安装Oracle软件所需要的目录:
# mkdir -p /opt/oracle
# chown -R oracle:oinstall /opt/oracle
# chmod -R 775 /opt/oracle
7、 配置Oracle用户环境变量,以便支持Oracle数据库安装以及今后的操作、维护:
# su - oracle
$ vi ~/.bash_profile
# For Oracle
export ORACLE_SID=PLAYBAR
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_ADMIN=$ORACLE_BASE/admin
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/jlib
export JAVA_HOME=$ORACLE_HOME/jdk
export ORA_NLS10=$ORACLE_HOME/nls/data
export PATH=$PATH:$ORACLE_HOME/bin:/usr/bin:/usr/sbin:/usr/local/sbin:/usr/lib:$JAVA_HOME/bin
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
保存后使用如下命令,使设置生效:
$ source ~/.bash_profile
三、安装Oracle 11g数据库
1、解压缩文件:
$ unzip linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip
由于压缩包是由root用户上传上去的,所以oracle用户无法读取,需要对文件分配权限:# chmod 755 /文件目录(zip所在目录)
2、运行xhost ip 命令启动X-Windows安装界面,如下图所示:
$ xhost +
# su - oracle
# cd database
# export LANG=EN
# ./runInstaller
安装完毕后用root用户执行两个脚本
[root@c app]# /u01/app/oraInventory/orainstRoot.sh
更改权限/u01/app/oraInventory.
添加组的读取和写入权限。
删除全局的读取, 写入和执行权限。
更改组名/u01/app/oraInventory 到 oinstall.
脚本的执行已完成。
[root@c app]# /u01/app/oracle/product/11.2.0/dbhome_2/root.sh
Running Oracle 11g root.sh script...
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/oracle/product/11.2.0/dbhome_2
Enter the full pathname of the local bin directory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...
Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
Finished product-specific root actions.
[root@c app]#
安装完毕
3、开机自动启动:
1、修改oratab
# su - root
# vi /etc/oratab
找到
orcl:/u01/app/oracle/product/10.2.0/db_1:N
改为
orcl:/u01/app/oracle/product/10.2.0/db_1:Y
也就是将最后的N改为Y,意思是将不允许自动启动改为允许自动启动。
然后,是修改ORACLE自带的启动与关闭脚本,分别是dbstart和dbshut。执行这两个脚本就可以实现ORACLE脚本的启动与关闭。
2、修改dbstart
# su - oracle
$ cd $ORACLE_HOME/bin
$ vi dbstart
找到 ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle
显然这个ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle是不存在的,修改成ORACLE_HOME_LISTNER=$ORACLE_HOME
3、编写启动shell
# su - root
# vi /etc/rc.d/init.d/orastart
将下面的内容拷贝到/etc/rc.d/init.d/orastart
# chkconfig: 2345 90 10
export ORACLE_BASE=/home/oracle_11/app/
export ORACLE_HOME=$ORACLE_BASE/oracle/product/11.2.0/db_1
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
ORCL_OWN="oracle"
# if the executables do not exist -- display error
if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]
then
echo "Oracle startup: cannot start"
exit 1
fi
# depending on parameter -- start, stop, restart
# of the instance and listener or usage display
case "$1" in
start)
# Oracle listener and instance startup
echo -n "Starting Oracle: "
su - $ORCL_OWN -c "$ORACLE_HOME/bin/dbstart"
touch /var/lock/subsys/oradb
su - $ORCL_OWN -c "$ORACLE_HOME/bin/emctl start dbconsole"
echo "OK"
;;
stop)
# Oracle listener and instance shutdown
echo -n "Shutdown Oracle: "
su - $ORCL_OWN -c "$ORACLE_HOME/bin/emctl stop dbconsole"
su - $ORCL_OWN -c "$ORACLE_HOME/bin/dbshut"
rm -f /var/lock/subsys/oradb
echo "OK"
;;
reload|restart)
$0 stop
$1 start
;;
*)
echo "Usage: 'basename $0' start|stop|restart|reload"
exit 1
esac
exit 0
4、授权、启动
# su - root
# chmod 700 /etc/rc.d/init.d/orastart
# cd /etc/rc.d/init.d/
# chkconfig --add orastart
# chkconfig --list orastart
5、其他
# chkconfig: 2345 99 01
其中chkconfig:2345 99 01 是指脚本将为运行级2、3、4、5启动oracle 10g服务,启动优先级为99,关闭优先级为01。
参考:http://blog.youkuaiyun.com/westmaniac/article/details/6539487
http://www.liusuping.com/ubuntu-linux/redhat-linux-oracle-11g-r2.html
四、升级Oracle 11.2.0.1到11.2.0.3
1、关闭数据库
SQL> conn sys as sysdba
Enter password: sys
Connected.
SQL> shutdown immediate
2、停止所有服务
a、关闭所有可能访问数据库的工具。例如Oracle Enterprise Manager/Database Control or SQL*Plus。
b、emctl stop dbconsole
c、isqlplusctl stop
d、lsnrctl stop
e、sqlplus /nolog
f、SQL> conn sys as sysdba
Enter password: sys
Connected.
SQL> shutdown
g、使用控制面板关闭服务。
3、备份系统
备份内容包括:Oracle Inventory, Oracle 11g Home 和 Oracle 11g Database
tar -cvf /home/oracle/orabak/DBsoft.tar $ORACLE_BASE --确保Oracle相关的所有配置都位于$ORACLE_BASE目录,如监听等
cp *.dbf con*.ctl redo*.log /orabak/ --对数据库实施冷备
4、升级Oracle database软件
升级DB,只需要其中的第一个和第二个文件。将2个文件解压缩,然后将第二个文件的内容copy到第一个文件的对应目录里。即将2个文件合成一个文件。
unzip p10404530_112030_Linux-x86-64_1of7.zip
unzip p10404530_112030_Linux-x86-64_2of7.zip
$ cd database/
$ ./ runInstaller
注意这里,我们选择第三个选项,skip software update,因为我们的patchset已经下载过了,如果选择第二个选项,会遇到如下错误,
INS-20704 Thelocation provided is not in the expected directory structure
Oracle 给的解决方式是用如下命令来执行:
./runInstaller –downloadUpdates
但是这个命令需要收费的Metalink帐号。 MOS 的相关文档:
How To Download The Latest Updates AndPatches Using 11.2.0.2 OUI [ID 1295074.1]
Error: INS-20704 While Installing 11.2.0.2with "Use pre-downloaded software updates" Option [ID 1265270.1]
这里要注意,我们之前讲过11gR2的Patchset 可以直接用来安装。在这个界面就可以选择操作类型,这个功能比较方便,从而也导致patchset 越来越大,我们这里选择upgrade an existing database。
注意这里的安装位置,我之前的安装目录是11.2.0. 这里我改成了11.2.0.3. 即将oracle 安装到其他位置,这样可以减少宕机时间,也是oracle 推荐的方法。
注意这里的Inventory directory,这里用来存放安装文件的,我们之前安装过DB,所以这个目录已经存在,2种解决方法,删除之前的目录,二放到其他目录,我这里将安装文件存放到其他目录。
[root@dave oraInventory]#/u01/app/oraInventory2/orainstRoot.sh
Changing permissions of/u01/app/oraInventory2.
Adding read,write permissions for group.
Removing read,write,execute permissions forworld.
Changing groupname of/u01/app/oraInventory2 to oinstall.
The execution of the script is complete.
[root@dave oraInventory]#/u01/app/oracle/product/11.2.0.3/db_1/root.sh
Performing root user operation for Oracle11g
The following environment variables are setas:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/oracle/product/11.2.0.3/db_1
Enter the full pathname of the local bindirectory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...
Entries will be added to the /etc/oratabfile as needed by
Database Configuration Assistant when adatabase is created
Finished running generic part of rootscript.
Now product-specific root actions will beperformed.
Finished product-specific root actions.
这里会提示我们配置监听,因为监听之前已经存在,所以这里取消监听配置。
我们点击下一步时,会提示一些配置失败,是否继续,我们点是。结束Oracle database 软件的安装。
从上面来看,如果没有错误,在监听配置完毕会,会自动调用DBUA 来升级我们的实例。这里我们配置失败,正好验证下手工升级实例。
3.3 配置新的ORACLE_HOME
这部分工作,主要是准备新的ORACLE_HOME,因为我们的Oracle database 安装到了新的位置,所以我们需要配置一下相关的信息。
这部分即使在上面自动调用了DBUA,我们也还是需要进行操作的。
4. 修改Oracle的.bash_profile 文件
我们重新指定了ORACLE_HOME,需要更新到.bash_profile 里。
5. 修改/etc/oratab,该目录下也有ORACLE_HOME
[oracle@dave db_1]$ cat /etc/oratab
anqing:/u01/app/oracle/product/11.2.0.3/db_1:N
具体操作步骤:
[oracle@dave dbs]$ pwd
/u01/app/oracle/product/11.2.0/db_1/dbs
[oracle@dave dbs]$ cp * /opt/oracle/product/11.2.0.3/db_2/dbs/
[oracle@dave admin]$ pwd
/u01/app/oracle/product/11.2.0/db_1/network/admin
[oracle@dave admin]$ ls
listener11092710PM3007.bak samples sqlnet11092710PM3007.bak tnsnames11092710PM3007.bak
listener.ora shrept.lst sqlnet.ora tnsnames.ora
[oracle@dave admin]$ cp -R * /opt/oracle/product/11.2.0.3/db_2/network/admin
[oracle@dave admin]$ cat /home/oracle/.bash_profile|grep ORACLE_HOME
ORACLE_HOME=$ORACLE_BASE/product/11.2.0.3/db_1; export ORACLE_HOME
TNS_ADMIN=$ORACLE_HOME/network/admin;exportTNS_ADMIN
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;export CLASSPATH
手工使用命令升级实例
SQL>conn / as sysdba
SQL> STARTUP UPGRADE
SQL> SPOOL /home/oracle/temp/upgrade_info2.log
SQL>@?/rdbms/admin/utlu112i.sql
SQL> @?/rdbms/admin/catupgrd.sql
SQL> SPOOL OFF
还有一点要注意,就是执行这个脚本会产生大量的归档文件,平均3分钟产生40M的归档。
该脚本运行了80分钟。而在Oracle10g下,运行该脚本在40分钟左右。时间增加了一倍。增加了升级系统的宕机时间。
SQL> startup
SQL>@?/rdbms/admin/utlrp.sql
Verify that all expectedpackages and classes are valid:
SQL> SELECT count(*) FROM dba_invalid_objects;
SQL> SELECT distinct object_name FROM dba_invalid_objects;
最后调用一下dbca 重建一下OEM。
如果dbca 显示OEM 已经配置过,rm 掉如下2个目录,再次运行就ok了。
ORACLE_HOME/hostname_dbname
ORACLE_HOME/oc4j/j2ee/OC4J_DBConsole_hostname_dbname
至此,通过命令升级操作结束。
最后验证一下各个组件的版本和状态:
SQL> SELECT COMP_NAME, VERSION, STATUS FROM SYS.DBA_REGISTRY;
增加shared pool和java pool大小
[oracle@10gpri Disk1]$ sqlplus / as sysdba
SQL>startup
SQL>alter system set shared_pool_size='250M' scope=spfile;
SQL>alter system set java_pool_size='150M' scope=spfile;
SQL>shutdown immediate