LINUX系统运维技术交流群:4930609
部署Oracle数据库手册
Name: 北京——东东
QQ:6762567
简介
在计算机信息安全领域中,数据库系统无疑有着举足轻重的地位,例如微软的SQL Server、IMB公司的DB2,以及甲骨文公司的Oracle、MySQL等,都是比较知名的数据库管理软件,其中Oracle数据库更是在电信、银行、证券、交通等大型应用场合拥有着绝对领先的优势。
一、安装Oracle 11g数据库
[root@localhost ~]# unzip linux_11gR2_database_1of2.zip -d /
[root@localhost ~]# unzip linux_11gR2_database_2of2.zip -d /
[root@localhost ~]# chmod 777 /database/
[root@localhost ~]# ls /database/
doc install response rpm runInstaller sshsetup stage welcome.html
1、前提条件的准备
Oracle数据库是一个相对庞大的应用软件,对服务器的系统类型,内存和交换分区,硬盘空间,内核参数,软件环境,用户环境等都有着相应的要求。只有满足了这些必备的条件,才能够确保Oracle 11g安装成功,运行稳定。
1)系统及配置要求
Oracle 11g明确支持的linux系统包括Asianux 2.0/3.0、Oracle Enterprise Linux4.0/5.0、Red Hat Enterprise 4.0/5.0、SUSE Linux Enterprise Server 10.0/11.0 。在其他的Linux系统中安装时,个别软件或配置文件可能需要做适当调整。
物理内存不少于1GB,
确保/tmp空间不少于1G
硬盘建议不少于8GB
服务器的IP地址应该提前确定无误。一旦Oracle数据库安装完成,建议不要再修改主机名、否则会导致数据库启动失败。
[root@localhost ~]# hostname dbserver.benet.com //修改主机名
[root@localhost ~]# hostname
dbserver.benet.com
[root@localhost ~]# vi /etc/hosts //添加hosts文件
192.168.0.19 dbserver dbserver.benet.com
[root@localhost ~]# vi /etc/sysconfig/network //永久修改主机名
HOSTNAME=dbserver.benet.com
2)软件环境要求
Oracle 11g的安装过程通常在图形桌面进行,因此建议使用已安装有GNOME中文桌面环境的RHEL 6 服务器。软件开发工具当然也是必不可少的。如gcc、glibc、binutils等软件包。建议使用yum工具来安装必要的软件环境。
[root@localhost ~]# yum -y install binutils compat-libstdc++-33 compat-libstdc++ 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
经过实际测试,挡在RHEL 6 系统中安装Oracle 11g时,对ksh软件包的识别会存在兼容性冲突。只要卸载RHEL 6 中的ksh软件包。改用RHEL 5光盘中的pdksh软件包,就可以避免这个问题
[root@localhost ~]# rpm -e ksh
[root@localhost ~]# rpm -ivh pdksh-5.2.14-36.el5.i386.rpm
Oracle 11g自身集成了Java运行环境,但安装界面中对中文的支持并不是完善,因此若希望使用中文的Oracle安装界面,建议提前安装好java-1.6.0软件包,并对中文字体进行少许调整,否则可以跳过此处的Java安装及配置操作。
[root@localhost ~]# yum -y install java-1.6.0
[root@localhost ~]# cd /usr/lib/jvm/jre-1.6.0/lib/
[root@localhost lib]# mv fontconfig.bfc fontconfig.bfc.origin //备份默认字体配置
[root@localhost lib]# cp fontconfig.RedHat.6.0.bfc fontconfig.bfc //建立REHL 6的字体配置
3)用户环境要求
Oracle 11g需要固定的运行用户oracle,安装组oinstall,管理组dba,这些帐号应提前建立好。用来存放oracle程序及数据库文件的基本目录(如/opt/oracle)也应该提前创建好
[root@localhost lib]# groupadd oinstall //创建安装组
[root@localhost lib]# groupadd dba //创建管理组
[root@localhost lib]# useradd -g oinstall -G dba oracle //创建运行用户
[root@localhost lib]# passwd oracle //设置好密码
[root@localhost lib]# mkdir /opt/oracle //建立基本目录
[root@localhost lib]# chown -R oracle.oinstall /opt/oracle/
[root@localhost lib]# chmod -R 775 /opt/oracle/
Oracle 11g的安装任务应以运行用户oracle的身份执行、需适当调整oracle用户的环境配置以便满足要求,Oracle 11g 安装界面的语言类型取决于环境变量LANG.若希望用中文安装界面,则应确保LANG变量的值为"zh_CN.UTF-8",中文安装界面有时会缺少字体,字体配置不当等原因导致界面乱码,也可改用"en_US.UTF-8"英文环境以回避类似问题。
[root@localhost lib]# vi ~oracle/.bash_profile
……//省略部分内容
export PATH
umask 022
export ORACLE_BASE=/opt/oracle
export ORACLE_SID=orcl
export DISPLAY=:0.0
export LANG=zh_CN.UTF-8
当环境当前的图形桌面环境是以其他用户登录的,则还应添加授权以允许用户oracle使用图形终端。
[root@localhost lib]# xhost +
access control disabled, clients can connect from any host
4)内核及会话要求
为了确保数据库运行稳定,Oracle 11g针对Linux内核参数,进行会话限制提出了一些要求,其中一部分设置可以在安装过程中自动检测并修复,但并不一定很完整,所以以最好的做法还是根据安装文档提前进行配置。
内核参数调整体现在/etc/sysctl.conf文件中,主要包括对内存调度,端口范围,打开文件数,I/O请求等相关的一些设置,相关数值不可低于安装要求,修改完毕通过执行“sysctl -p”命令使新配置的立即生效。
[root@localhost ~]# vi /etc/sysctl.conf
……//省略部分信息
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
[root@localhost ~]# sysctl -p //重新加载配置文件
进程会话限制可以采用pam_limits认证模块来实现,通过修改登录程序login的PAM设置以启用该认证、然后修改/etc/security/limits.conf文件,将用户oracle能够打开的进程数,进程使用的文件数加大。
[root@localhost ~]# vi /etc/pam.d/login
session required pam_limits.so
[root@localhost ~]# vi /etc/security/limits.conf
oracle soft nproc 8192
oracle hard nproc 16384
oracle soft nofile 32768
oracle hard nofile 65536
2、 Oracle 11g安装过程
所有前提条件都准备好以后,就可以正式开始安装了。以用户oracle登录到RHEL6 的图形桌面环境
[oracle@dbserver ~]$ cd /database/
[oracle@dbserver database]$ ./runInstaller -jreLoc /usr/lib/jvm/jre-1.6.0
正在启动 Oracle Universal Installer...
检查临时空间: 必须大于 80 MB。 实际为 9620 MB 通过
检查交换空间: 必须大于 150 MB。 实际为 4063 MB 通过
检查监视器: 监视器配置至少必须显示 256 种颜色。 实际为 16777216 通过
准备从以下地址启动 Oracle Universal Installer /tmp/OraInstall2012-04-24_07-20-56PM. 请稍候...
选择“是”
密码是由“大写字母”、“小写字母”、“数字”三部分组成
[root@dbserver ~]# /opt/oracle/oraInventory/orainstRoot.sh
更改权限/opt/oracle/oraInventory.
添加组的读取和写入权限。
删除全局的读取, 写入和执行权限。
更改组名/opt/oracle/oraInventory 到 oinstall.
脚本的执行已完成。
[root@dbserver ~]# /opt/oracle/product/11.2.0/dbhome_1/root.sh
Running Oracle 11g root.sh script...
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /opt/oracle/product/11.2.0/dbhome_1
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.
2、Oracle 11g的基本管理
1)启动、停止Oracle数据库
完成Oracle 11g数据库的安装以后,相关服务器组件会自动启动,但并不表示下次开机后Oracle服务器仍然可用。
①Oracle的服务组件
❤ lsnrctl:监听器程序,用来提供数据库访问,默认监听TCP 1521端口。
❤ dbstart、dushut:数据库控制程序,用来启动、停止数据库实例。
❤ emctl:管理器控制工具,用来控制OEM平台的开启与关闭,OEM平台通过1158端口提供HTTPS访问,5520端口提供TCP访问。
为了方便执行Oracle 11g的服务组件程序,建议对所有 用户的环境配置作进一步优化调整,补充PATH路径,Oracle终端类型等变量设置。除此以外,还应修改该/etc/oratab配置文件,以便运行dbstart时自动启用数据库实例。
[root@dbserver 桌面]# vi /etc/profile
……//省略部分信息
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_OWNER=oracle
export ORACLE_SID=orcl
export ORACLE_TERM=xterm
export PATH=$PATH:$ORACLE_HOME/bin
[root@dbserver ~]# vi /etc/oratab
orcl:/opt/oracle/product/11.2.0/dbhome_1:Y //将末尾的N改为Y
这样一来,用户oracle就可以直接用上述组件了。
[oracle@dbserver ~]$ lsnrctl status //查看监听器状态
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 25-APR-2012 07:55:10
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 25-APR-2012 07:51:06
Uptime 0 days 0 hr. 4 min. 4 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /opt/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File /opt/oracle/diag/tnslsnr/dbserver/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dbserver)(PORT=1521)))
Services Summary...
Service "orcl" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@dbserver ~]$ emctl stop dbconsole //停止OEM管理控制台
Oracle Enterprise Manager 11g Database Control Release 11.2.0.1.0
Copyright (c) 1996, 2009 Oracle Corporation. All rights reserved.
https://dbserver:1158/em/console/aboutApplication
Stopping Oracle Enterprise Manager 11g Database Control ...
... Stopped.
[oracle@dbserver ~]$ dbshut $ORACLE_HOME //停止数据库实例
Processing Database instance "orcl": log file /opt/oracle/product/11.2.0/dbhome_1/shutdown.log
[oracle@dbserver ~]$ sqlplus sys AS SYSDBA //以超级管理员身份连接数据库
SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 25 08:05:49 2012
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Enter password: //输入管理密码
Connected to an idle instance.
SQL>
SQL> SHOW USER; //查看当前用户
USER is "SYS"
SQL> help index; //查看支持的指令列表
Enter Help [topic] for help.
@ COPY PAUSE SHUTDOWN
@@ DEFINE PRINT SPOOL
/ DEL PROMPT SQLPLUS
ACCEPT DESCRIBE QUIT START
APPEND DISCONNECT RECOVER STARTUP
ARCHIVE LOG EDIT REMARK STORE
ATTRIBUTE EXECUTE REPFOOTER TIMING
BREAK EXIT REPHEADER TTITLE
BTITLE GET RESERVED WORDS (SQL) UNDEFINE
CHANGE HELP RESERVED WORDS (PL/SQL) VARIABLE
CLEAR HOST RUN WHENEVER OSERROR
COLUMN INPUT SAVE WHENEVER SQLERROR
COMPUTE LIST SET XQUERY
CONNECT PASSWORD SHOW
SQL>
使用sqlplus命令工具时,若以超级管理员sys登录,则在“SQL>”环境中执行“STARTUP;”、“SHUTDOWN IMMEDIATE;”指令也可以启用、关闭默认的数据库实例。
②添加oracle服务
虽然通过各种服务组件程序能够启动,停止整个Oracle 11g数据库系统,但显然还不够方便。在RHEL6服务器中,更好的做法是将相关操作写成服务脚本,交给chkconfig工具来管理,从而实现随着系统开,关机自动启动、停止Oracle数据库。
[root@dbserver ~]# vi /etc/init.d/oracle
#!/bin/bash
# chkconfig: 35 90 10
# description: Oracle Database Service Daemon.
ORACLE_BASE="/opt/oracle"
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
ORACLE_OWNER=oracle
case "$1" in
start)
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/lsnrctl start"
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/emctl start dbconsole"
touch /var/lock/subsys/oracle11g
;;
stop)
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/emctl stop dbconsole"
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME"
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/lsnrctl stop"
rm -rf /var/lock/subsys/oracle11g
;;
status)
if (pgrep "tnslsnr" && netstat -antp | grep ":1521") &> /dev/null
then
echo "Oracle 11g Net Listener is running."
else
echo "Oracle 11g Net Listener is not running."
fi
if (netstat -antp | grep ":1158" && netstat -antp | grep ":5520") &> /dev/null
then
echo "Oracle 11g Enterprise Manager is running."
else
echo "Oracle 11g Enterprise Manager is not running."
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 (start|stop|restart|status)"
exit 1
;;
esac
exit 0
[root@dbserver ~]# chmod +x /etc/init.d/oracle
[root@dbserver ~]# chkconfig --add oracle //添加oracle服务
在oracle脚本文件中,数据库的启动、停止操作通过“su - oracle -c 命令行”的形式来执行,这是为了获得oracle用户的登录环境,且因为由root切换为普通用户无需验证密码,从而省去了交互式登录的过程,便于脚本的后台执行。
[root@dbserver ~]# service oracle status //查看oracle服务状态
Oracle 11g Net Listener is not running.
Oracle 11g Enterprise Manager is not running.
[root@dbserver ~]# service oracle start //启动oralce数据库服务
……//省略启动过程信息
[root@dbserver ~]# service oracle status
Oracle 11g Net Listener is running.
Oracle 11g Enterprise Manager is running.
2)数据库的逻辑备份
Oracle 11g提供了两个命令工具expdp、impdp、前者用来对数据库进行逻辑备份,后者用来执行恢复操作。导出、导入操作可以在不同的oracle 11g服务器中执行,从而便于实现数据的迁移。
①配置备份目录
在使用expdp备份工具之前,需要预先创建备份目录,定义给O racle 11g数据库进行维护,并为指定的用户赋予读写权限。
[root@dbserver ~]# mkdir /opt/mydbbackup
[root@dbserver ~]# chown oracle:oinstall /opt/mydbbackup/
[root@dbserver ~]# sqlplus sys AS SYSDBA
SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 25 08:53:19 2012
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Enter password:
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> create directory dmpdir AS '/opt/mydbbackup'; //指定备份目录位置
Directory created.
SQL> grant read,write ON DIRECTORY dmpdir TO sysman; //授权备份用户
Grant succeeded.
SQL>
②备份(导出)数据
执行备份操作时,需指定备份操作用户(如sysman),然后结合DIRECTORY参数指定Oracle管理的备份位置,结合DUMPFLE参数指定备份文件名称。
[root@dbserver ~]# expdp sysman DIRECTORY=dmpdir DUMPFILE=orcl20120425.dmp
……//省略部分信息
. . exported "SYSMAN"."MGMT_USER_TEMPLATES" 0 KB 0 rows
Master table "SYSMAN"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSMAN.SYS_EXPORT_SCHEMA_01 is:
/opt/mydbbackup/orcl20120425.dmp
Job "SYSMAN"."SYS_EXPORT_SCHEMA_01" successfully completed at 09:21:29
[root@dbserver ~]# ls -lh /opt/mydbbackup/orcl20120425.dmp
-rw-r-----. 1 oracle oinstall 48M 4月 25 09:21 /opt/mydbbackup/orcl20120425.dmp
③恢复(导入)数据
执行恢复操作时,同样需指定操作用户(如sysman),然后结合DIRECTORY参数指定Oracle管理的备份位置,结合DUMPFILE参数指定备份文件。例如,一下操作将从备份文件orcl20111014.dmp中读取数据,导入到用户sysman所所拥有的数据库中。
[root@dbserver ~]# impdp sysman DIRECTORY=dmpdir DUMPFILE=orcl20120425.dmp REUSE_DATAFILES=Y TABLE_EXISTS_ACTION=REPLACE
……//省略部分信息
SYS.DBMS_AQ_IMP_INTERNAL.IMPORT_SIGNATURE_TABLE('AQ$_MGMT_NOTIFY_QTABLE_G');COMMIT; END;
ORA-39083: Object type PROCACT_INSTANCE failed to create with error:
ORA-00942: table or view does not exist
Failing sql is:
BEGIN
SYS.DBMS_AQ_IMP_INTERNAL.IMPORT_HISTORY_TABLE('AQ$_MGMT_LOADER_QTABLE_H');COMMIT; END;
ORA-39083: Object type PROCACT_INSTANCE failed to create with error:
ORA-01403: no data found
ORA-01403: no data found
Failing sql is:
BEGIN
SYS.DBMS_AQ_IMP_INTERNAL.IMPORT_SIGNATURE_TABLE('AQ$_MGMT_LOADER_QTABLE_G');COMMIT; END;
Processing object type SCHEMA_EXPORT/TABLE/POST_INSTANCE/PROCDEPOBJ
Processing object type SCHEMA_EXPORT/POST_SCHEMA/PROCOBJ
Processing object type SCHEMA_EXPORT/POST_SCHEMA/PROCACT_SCHEMA
Job "SYSMAN"."SYS_IMPORT_FULL_01" completed with 1994 error(s) at 12:26:28