资源描述
oracle安装配置手册 V1.0版
Oracle安装配置手册
V1.0版
第 34 页 共 35 页
1 安装Oracle前的系统准备工作
1.1 检查需要的软件包
以root用户登录系统,使用rpm -q 软件包关键词命令进行检测
rpm -q --qf binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel gcc glibc gcc-c++ glibc-common glibc-devel glibc-headers libaio libaio-devel libgcc libstdc libstdc++-devel make sysstat unixODBC unixODBC-devel
将缺少的软件包用命令: rpm –ivh加上缺少的软件包名称进行安装,如:
# rpm –ivh compat-libstdc++-33-3.2.3-61.i386.rpm
【注释:本系统缺少3个软件安装包,详细见附录/SQMPMS/soft/oracle/package下,名称:libaio-devel-0.3.106-5.i386.rpm,unixODBC-2.2.11-7.1.i386.rpm,unixODBC-devel-2.2.11-7.1.i386.rpm】
1.2 修改系统内核参数
在/etc/sysctl.conf中添加以下行:
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
运行下面的命令应用以上OS参数:
/sbin/sysctl –p
添加以下行到/etc/security/limits.conf文件中:
vi /etc/security/limits.conf
* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536
如果/etc/pam.d/login文件中没有以下行,则添加以下内容:
vi /etc/pam.d/login
session required pam_limits.so
修改/etc/selinux/config文件来关闭linux防火墙,确保SELINUX设置如下:
vi /etc/selinux/config
SELINUX=disabled
1.3 创建oracle组和用户
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
passwd oracle
1.4 创建oracle安装目录
mkdir /oracle
chown -R oracle:oinstall /oracle
chmod -R 775 /oracle
1.5 设置oracle用户环境变量
以oracle用户登陆系统,覆盖.bash_profile文件内容:
vi /home/oracle/.bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
ORACLE_SID=sqmpms
ORACLE_BASE=/oracle
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID ORACLE_BASE ORACLE_HOME
PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
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
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
2 安装Oracle
2.1 解压缩安装文件
$ mkdir /oracle/soft
通过SSH上传安装包到/oracle/soft/目录下【SSH的实用详细见SSH实用说明】
使用命令unzip 文件名 解压安装包
$ cd /oracle/soft
unzip p10404530_112030_Linux-x86-64_1of7.zip
unzip p10404530_112030_Linux-x86-64_2of7.zip
设置oracle帐户可以操作安装文件所在的目录
chown -R oracle:oinstall /oracle/soft/
chmod -R 755 /oracle/soft/
【注释:安装包见:附录/SQMPMS/soft/oracle目录下,名称为:
p10404530_112030_Linux-x86-64_1of7.zip,p10404530_112030_Linux-x86-64_2of7.zip】
2.2 安装ORACLE
用oracle帐户进入安装文件所在目录,执行如下命令即可看到安装界面
# su – oracle
$ cd /oracle/soft/database
$ ./runInstaller
如果无法看到安装界面,请使用root帐户执行如下命令后再运行安装程序:
# export DISPLAY=:0.0或者ip:0.0
# xhost +
# su – oracle
$ cd /oracle/soft/database
$ ./runInstaller 或 ./runInstaller -ignoreSysPreReqs (跳过系统检查)
如果出现界面乱码现象,执行以下命令:
export LANG=en
出现安装界面后,根据界面提示进行相关的设置:
如果出现程序包警告异常,选择全部忽略,并执行下一步
安装完成的最后步骤,操作如下:
$ su - root
# cd /oracle/oralnventory/
# ./orainstRoot.sh
# cd /oracle/product/11.2.0/dbhome_1/
# ./root.sh
# 回车完成
3 创建数据库
3.1 配置监听
1、 以oracle用户登录系统运行netca命令,操作步骤如下:
1) :# su - oracle
2) 先进入oracle bin目录,命令:# cd /oracle/product/11.2.0/dbhome_1/bin
3) :$ netca
4) :系统会弹出弹出操作窗口,如下图
2、添加监听程序,如图
3、输入监听程序名,如图
4、使用默认端口1521(生产环境下,不能使用默认端口,需改为1522,因为国网安全测试通不过)
5、完成配置
6、启动监听,命令如下:
$ lsnrctl start
3.2 创建数据库实例
切换到oracle用户,运行dbca命令创建数据库实例,命令:$ dbca,系统弹出数据库实例创建操作界面,如下图
1、选择创建数据库
2、选择创建数据库模板,选 一般用途或事务处理
3、输入数据库全局名及SID: sqmpms
4、设定数据库账号密码(建议生成环境下,选择不同用户不同密码管理)【当前密码为Oracle123】
5、设置闪回区大小,这里选择默认值大小
6、设置数据库实例SGA、PGA大小,视操作系统内存大小,一般如果此系统只有ORACLE应用,建议分配给ORACLE实例80%的大小,如果数据库为OLTP应用的,则其应用一般都是小的短的进程,所需要的pga也相应较少,所以该值通常为总共分配给Oracle实例的20%,另外的80%给SGA,如果是OLAP的应用,建议各占50%。而如果数据库是混合类型的,一般会先分配给pga 40%的初始值,然后随着应用不断监控和调整PGA。
7、设置数据库实例数据块大小及用户最大进程数(生产环境下,建议连接数至少为1500以上)
8、设置数据库实例字符集(一般建议选AL32UTF8)
9、检查参数文件及所有数据文件位置是否正确
10、点击 完成 开始创建数据库实例,直至实例安装成功。
3.3 检查oracle实例是否安装成功
1、终端中切换到oracle用户,命令:su - oracle
2、$ sqlplus / as sysdba;
SQL*Plus: Release 11.2.0.3.0 Production on Wed Nov 21 15:11:28 2012
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
3、在调出的sqlplus命令模式中,运行命令:select * from v$version,如果有数据库版本信息显示,则表示数据库实例创建成功。
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
4、退出sqlplus命令模式,命令:exit;
SQL>exit;
3.4 设置开机自启动数据库实例
1、 切换到root用户登录,命令:su – root,
2、 执行以下命令:# vi /oracle/oraclestart.sh,编辑oraclestart.sh文件,添加以下内容
# !/bin/sh
su - oracle <<EON
export ORACLE_SID=sqmpms
lsnrctl start
sqlplus /nolog <<EOF
conn / as sysdba
startup
exit
EOF
exit
EON
3、保存并退出文件编辑模式,具体步骤:先按键盘“ESC”键,进入命令模式,然后同时按住键盘“Shift”+“;”键,输入命令“wq”,文件保存退出。
4、导入启动配置文件到系统启动空间中,命令: echo "/oracle/oraclestart.sh ">>/etc/rc.loca
4 数据库配置
4.1 数据库基本信息
Ø 数据库类型:Oracle
Ø 数据库版本:11.2.0.3.0
Ø 数据库SID:sqmpms
Ø 数据库别名: sqmpms
Ø 语言:AMERICAN_AMERICA
Ø 数据库字符集(NLS_CHARACTERSET):UTF8
Ø 国家区域字符集(NLS_NCHAR_CHARACTERSET):UTF8
4.2 修改ORACLE核心参数
1、 切换到oracle用户,命令:su – oracle
2、 执行以下命令:$ sqlplus / as sysdba;
3、 逐句执行以下命令:
alter system set nls_length_semantics = CHAR scope=both; (如果字符集选的是UTF-8,一定要执行此语句,利于建表语句中字符字段长度的规范。原来的值为spfile;)
alter system set sessions=3000 scope=spfile;
alter system set processes=2500 scope=spfile;
alter system set open_cursors=3000 scope=both;
alter system set db_files=500 scope=spfile ;
alter system set job_queue_processes=30 scope=both;
alter system set nls_date_format=’YYYY-MM-DD’ scope=spfile;
4、关闭数据库,命令:shutdown immediate;
5、启动数据库实例,命令:startup;
4.3 导入数据
1、根据“附录/SQMPMS/data/数据库脚本”中的数据脚本,按照建立表空间、新建用户、数据库表结构初始化、建立索引、平台数据依次执行各个脚本(执行脚本之前必须先认真阅读文件夹下的“重要说明.txt”文件)。
4.4 编译数据库失效对象
1、 以oracle用户执行命令:$ sqlplus / as sysdba; (如果没有切换或者退出当前用户,则不用执行此命令,直接执行以下脚本)
2、 执行以下数据库编译脚本
@/oracle/product/11.2.0/dbhome_1/rdbms/admin/utlrp.sql
5 系统故障处理
5.1 数据库文件损坏
口令文件损坏处理方法:
重新生成口令文件即可,采用orapwd命令进行生成相应的口令文件到指定的位置,然后重启数据库即可
单个控制文件损坏处理方法:
1、 停止数据库,shutdown immediate;
2、 查看初始化文件/initpmdb.ora,确定所有控制文件的路径,一般初始化参数文件路径在$ORACLE_BASE/admin/pfile
3、 用操作系统命令将其它正确的控制文件覆盖错误的控制文件
4、 重启数据库,startup
5、 用适当的方法进行数据库全备份
全部控制文件损坏处理方法:
1. 确保数据库已经关闭,如果没有用下面的命令来关闭数据库:
>shutdown immediate;
2. 从相应的备份结果集中恢复最近的控制文件。对于没有采用带库备份的点可以直接从磁带上将最近的控制文件备份恢复到相应目录;对于采用带库备份的点用相应的rman脚本来恢复最近的控制文件
3. 用下面的命令来创建产生数据库控制文件的脚本:
>startup mount;
>alter database backup controlfile to trace noresetlogs;
4. 修改第三步产生的trace文件,将其中关于创建控制文件的一部分语句拷贝出来并做些修改,使得它能够体现最新的数据库结构。假设产生的sql文件名字为createcontrol.sql.
注意:
Trace文件的具体路径可以在执行完第3)步操作后查看$ORACLE_BASE/admin/bdump/alert_ORCL.ora文件来确定
5. 用下面命令重新创建控制文件:
>shutdown abort;
>startup nomount;
>@createcontrol.sql;
6. 用适当的方法进行数据库全备份
重做日志文件损坏处理方法:
(1)、确定损坏的重做日志的位置及其状态:
1. 如果数据库处于可用状态:
select * from v$logfile;
select * from v$log;
2. 如果数据库处于已经异常终止:
>startup mount;
>select * from v$logfile;
>select * from v$log;
其中,logfile的状态为INVALID表示这组日志文件出现已经损坏;log状态为Inactive:表示重做日志文件处于非激活状态;Active: 表示重做日志文件处于激活状态;Current:表示是重做日志为当前正在使用的日志文件
(2)、损坏的日志文件处于非激活状态:
1. 删除相应的日志组:
>alter database drop logfile group group_number;
2. 重新创建相应的日志组:
>alter database add log file group group_number (’log_file_descritpion’,…) size log_file_size;
(3)、损坏的日志文件处于激活状态且为非当前日志:
1. 清除相应的日志组:
>alter database clear unarchived logfile group group_number;
损坏的日志文件为当前活动日志文件:
用命令清除相应的日志组:
>alter database clear unarchived logfile group group_number;
如果清除失败,则只能做基于时间点的不完全恢复。
打开数据库并且用适当的方法进行数据库全备份:
>alter database open;
非system表空间的数据文件损坏 :
1. 确定损坏的文件名字:
>select name from v$datafile where status=’INVALID’;
2. 将损坏的数据文件处于offline状态:
>alter database datafile ‘datafile_name’ offline;
3. 从相应的备份结果集中恢复关于这个数据文件的最近的备份。对于没有采用带库备份的点可以直接从磁带上恢复;对于用带库备份的点用相应的rman脚本来恢复。
4. 恢复数据文件:
>alter database recover datafile ‘file_name’;
5. 使数据库文件online:
>alter database datafile ‘datafile_name’ online;
6. 用适当的方法进行数据库全备份。
system表空间的数据文件损坏:
1. 以mount方式启动数据库
>startup mount;
2. 从相应的备份结果集中恢复关于这个数据文件的最近的备份。对于没有采用带库备份的点可以直接从磁带上恢复;对于用带库备份的点用相应的rman脚本来恢复。
3. 恢复system表空间:
>alter database recover datafile ‘datafile_name’;
4. 打开数据库:
>alter database open;
5. 用适当的方法进行数据库全备份
非system表空间损坏:
1. 将损坏的表空间处于offline状态:
>alter tablespace ‘tablespace_name’ offline;
2. 从相应的备份结果集中恢复关于这个表空间最近的备份。对于没有采用带库备份的点可以直接从磁带上恢复;对于用带库备份的点用相应的rman脚本来恢复。
3. 恢复表空间:
>alter database recover tablespace ‘tablespace_name’;
4. 使表空间online:
>alter tablespace ‘tablespace_name’ online;
5. 用适当的方法进行数据库全备份.
system表空间损坏:
1. 以mount方式启动数据库
>startup mount;
2. 从相应的备份结果集中恢复system表空间最近的备份。对于没有采用带库备份的点可以直接从磁带上恢复;对于用带库备份的点用相应的rman脚本来恢复。
3. 恢复system表空间:
>alter database recover tablespace system;
4. 打开数据库:
>alter database open;
5. 用适当的方法进行数据库全备份。
整个数据库的所有文件损坏:
整个数据库所有文件的损坏一般是在共享磁盘阵列发生无法恢复的灾难时才发生,这种情况下只能对数据库进行恢复。若数据库的归档目录也已经丢失,则数据库不可能做完全恢复,会有用户数据的丢失。
没采用带库备份的现场:
1. 将最近的备份从磁带上把各个文件解包到相应的目录下。
2. 以mount方式打开数据库:
>startup mount;
3. 恢复数据库:
>recover database until cancel;
4. 打开数据库:
>alter database open resetlogs;
5. 用适当的方法进行数据库全备份。
采用带库备份的现场:
1. 以nomount方式打开数据库:
>startup nomount;
2. 通过相应的rman脚本进行数据库软恢复。
$rman cmdfile=hot_database_restore.rcv
3. 打开数据库:
>alter database open resetlogs;
4. 用适当的方法进行数据库全备份。
存在最近的数据库完整冷备份前提下的一些经典紧急情况的处理:
数据文件,归档重作日志和控制文件同时丢失或损坏:
无新增archives 时的状况:
条件和假设:自上次镜像备份以来尚未生成新的archive log(s); Archivelog Mode; 有同步的datafile(s) 和control file(s) 的镜像(冷)拷贝
恢复步骤:
1. 将镜像拷贝的datafile(s) 和control file(s) 抄送回原始地点:
$ cp /backup/good_one.dbf /orig_loc/bad_one.dbf
$ cp /backup/control1.ctl /disk1/control1.ctl
2. 以mount 选项启动数据库:
$ sqlplus /nolog
> connect / as sysdba
> startup mount
3. 以旧的control file 来恢复数据库:
> recover database using backup controlfile until cancel;
*** 介质恢复完成
(必须马上cancel )
4. Reset the logfiles (对启动而言不可省略):
> alter database open resetlogs;
5. 关闭数据库并做一次全库冷备份。
新增archives 时的状况:
条件和假设:自上次镜像备份以来已经生成新的archive log(s); Archivelog Mode; 有同步的datafile(s) 和control file(s) 的镜像(冷)拷贝;archive log(s) 可用。
恢复步骤:
1. 如果数据库尚未关闭,则首先把它关闭:
$ sqlplus /nolog
> connect /as sysdba
> shutdown abort
2. 将备份文件抄送回原始地点:
所有Database Files
所有Control Files(没有archive(s) 或redo(s) 的情况下,control files 的更新无任何意义)
所有On-Line Redo Logs (Not archives)
init.ora file(选项)
3. 启动数据库:
$ sqlplus /nolog
> connect /as sysdba
> startup
数据文件, 重作日志和控制文件同时丢失或损坏:
条件和假设:Archivelog Mode; 有同步的所有所失文件的镜像(冷)拷贝;archive log(s) 可用
恢复步骤(必须采用不完全恢复的手法):
1. 如果数据库尚未关闭,则首先把它关闭:
$ sqlplus /nolog
> connect /as sysdba
> shutdown abort
2. 将备份文件抄送回原始地点:
所有Database Files
所有Control Files
所有On-Line Redo Logs(Not archives)
init.ora file(选项)
3. 启动数据库然而并不打开:
>startup mount
4. 做不完全数据库恢复,应用所有从上次镜像(冷)备份始积累起来的archives:
> recover database until cancel using backup controlfile;
......
......
cancel
5. Reset the logfiles (对启动而言不可省略):
> alter database open resetlogs;
6. 关闭数据库并做一次全库冷备份。
数据文件和控制文件同时丢失或损坏:
条件和假设:Archivelog Mode; 有同步的datafile(s) 和control file(s) 的冷拷贝;archive log(s) 可用
恢复步骤:
1. 将冷拷贝的datafiles(s) 和control file(s) 抄送回原始地点:
$ cp /backup/good_one.dbf /orig_loc/bad_one.dbf
$ cp /backup/control1.ctl /disk1/control1.ctl
2. 以mount 选项启动数据库:
$ sqlplus /nolog
> connect /as sysdba
> startup mount
3. 以旧的control file 来恢复数据库:
> recover database until cancel using backup controlfile;
*** 介质恢复完成
(须在应用完最后一个archive log 后cancel )
4. Reset the logfiles (对启动而言不可省略):
> alter database open resetlogs;
重作日志和控制文件同时丢失或损坏时:
条件和假设:Control Files 全部丢失或损坏;Archivelog Mode; 有Control Files 的镜像(冷)拷贝。
恢复步骤:
1. 如果数据库尚未关闭,则首先把它关闭:
$ sqlplus /nolog
> connect /as sysdba
> shutdown abort
>exit
2. 以Control File 的镜像(冷)拷贝覆盖损坏了的Control File:
$ cp /backup/control1.ctl /disk1/control1.ctl
3. 启动数据库然而并不打开:
$ sqlplus /nolog
> connect /as sysdba
> startup mount
4. Drop 坏掉的redo log (排除硬件故障):
> alter database drop logfile group 2;
5. 重新创建redo log:
> alter database add logfile group 2 '/orig_loc/log2.dbf' size 10M;
6. 以旧的control file 来恢复数据库:
> recover database until cancel using backup controlfile;
(必须马上cancel )
7. Reset the logfiles (对启动而言不可省略):
> alter database open resetlogs;
8. 关闭数据库并做一次全库冷备份
只发生归档重作日志丢失或损坏时:
根据不同环境和情况,选择下述手段之一:
a. 马上backup 全部datafiles (如果系统采用一般热备份或RMAN 热备份)
b. 马上正常关闭数据库并进行冷备份(如果系统采用冷备份)
c. 冒险前进!不做备份而让数据库接着跑,直等到下一个备份周期再做备份。这是在赌数据库在下一个备份周期到来之前不会有需要恢复的错误发生。
注意:冒险前进的选择:如果发生错误而需要数据库恢复,则最多只能恢复到出问题archive log 之前的操作现场。从另一个角度讲,archive log(s) 出现问题时,数据库若不需要恢复则其本身并没有任何问题。
5.2 Oracle逻辑结构故障的处理方法
逻辑结构的故障一般指由于人为的误操作而导致重要数据丢失的情况。在这种情况下数据库物理结构是完整的也是一致的。对于这种情况采取对原来数据库的全恢复是不合适的,我们一般采用三种方法来恢复用户数据。
采用exp/imp工具来恢复用户数据:
如果丢失的数据存在一个以前用exp命令的备份,则可以才用这种方式。
1. 在数据库内创建一个临时用户:
>create user test_user identified by test;
>grant connect,resource to test_user;
2. 从以前exp命令备份的文件中把丢失数据的表按照用户方式倒入测试用户:
$imp system/manager file=export_file_name tables=(lost_data_table_name…) fromuser=lost_data_table_owner touser=test_user constraint=n;
3. 用相应的DML语句将丢失的数据从测试用户恢复到原用户。
4. 将测试用户删除:
>drop user test_user cascede;
采用logminer来恢复用户数据:
Logminer是oracle提供的一个日志分析工具。它可以根据数据字典对在线联机日志、归档日志进行分析,从而可以获得数据库的各种DML操作的历史记录以及各种DML操作的回退信息。根据这些用户就可以将由于误操作而丢失的数据重新加入数据库内。
1. 确认数据库的utl_file_dir参数已经设置,如果没有则需要把这个参数加入oracle的初始化参数文件,然后重新启动数据库。下面例子中假设utl_file_dir=’/opt/oracle/db01’;
2. 创建logminer所需要的数据字典信息,假设生成的数据字典文本文件为dict.ora:
>execute dbms_logmnr_d.build(dictionary_filename=>'dict.ora', dictionary_location=>'/opt/oracle/db01’);
3. 确定所需要分析的日志或者归档日志的范围。这可以根据用户误操作的时间来确定大概的日志范围。假设用户误操作时可能的日志文件为/opt/oracle/db02/oradata/ORCL/redo3.log和归档日志’/opt/oracle/arch/orcl/orclarc_1_113.ora’。
4. 创建要分析的日志文件列表,按日志文件的先后顺序依次加入:
>execute dbms_logmnr.add_logfile(logfilename=>’/opt/oracle/arch/orcl/orclarc_1_113.ora’,options=>dbms_logmnr.NEW);
> execute dbms_logmnr.add_logfile(logfilename=>’ /opt/oracle/db02/oradata/ORCL/redo3.log’,options=>dbms_logmnr.ADDFILE);
5. 开始日志分析,假设需要分析的时间在’2009-06-28 12:00:00’和’2009-06-28 13:00:00’之间:
>execute dbms_logmnr.start_logmnr(dictfilename=>’ /opt/oracle/db01/dict.ora’,starttime=>to_date(’ 2009-06-28 12:00:00’,’YYYY-MM-DD HH:MI:SS’),endtime=>to_date(to_date(‘2009-06-28 13:00:00’,’YYYY-MM-DD HH:MI:SS’));
6. 获取分析结果:
>select
展开阅读全文