博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Oracle 启动常见的疑难

Posted on 2011-02-26 16:33  徐正柱-  阅读(463)  评论(0编辑  收藏  举报

  实例和数据库的启动与关闭是DBA的重要职责之一。只有打开数据库,其他用户才能对数据库中的数据进行操作。一旦数据库关闭,便不能对其操作。对于DBA们来说,关闭和重新启动数据库以便优化、调整应用程序的运行是经常碰到的事情。如果用户已经进入了数据库,使用SHUTDOWN IMMEDIATE 或SHUTDOWN ABORT命令来执行关闭数据库,则用户将失去连接,直到数据库重新启动。经常关闭和启动会对数据库性能造成一定的影响,当然也会影响到用户对数据库的使用。本文从管理数据库的角度来分析在Oracle启动和关闭时经常遇到的问题,并总结了在启动和关闭Oracle数据库中应该注意的问题和事项。
  
  启动常见问题
  
  (一)在一个控制文件被损坏情况下,如何正常启动?
  
  系统环境
  
  操作系统:Windows 2000 Advanced Server
  
  数据库: Oracle 8i R2 (8.1.6) for NT 企业版
  
  安装路径:C:ORACLE
  
  错误现象
  
  因硬盘有坏道,一个控制文件损坏了,或人工误删一个控制文件,控制面板的Oracle相关服务可以启动成功,但用SQL*Plus无法连接。错误提示为“ORA-01034: ORACLE not available”。
  
  解决方法
  
  (1)在开始菜单中直接运行命令,进入“svrmgrl>”提示符模式。
  
  (2)在“svrmgrl>”提示符下键入“connect internal”命令。
  
  (3)在“svrmgrl>”提示符下键入“shutdown abort”命令关闭数据库。
  
  (4)找到init.ora文件,它一般位于“C:Oracleadminoradbpfile”目录下,然后修改init.ora文件,使无法使用的控制文件不在control_files参数中定义。如“C:Oracleoradataoradbcontrol03.ctl”,可在init.ora中将其删除掉,或者更换成其它可启动的控制文件。中国公务网 2005-6-23 15:39:16
  
  修改前:
  
  control_files=(“C:Oracleoradataoradbcontrol01.ctl”.C:Oracleoradataoradbcontrol02.ctl“,”“C:Oracleoradataoradbcontrol03.ctl”)
  
  修改后:
  
  control_files=(“C:Oracleoradataoradbcontrol01.ctl”,“C:Oracleoradataoradbcontrol02.ctl”)
  
  (5)重新启动数据库实例,即可解决问题。
  
  注意:在控制文件中最少要有两个控制文件。
  
  (二)联机热备份失败后,如何打开数据库?
  
  系统环境:
  
  操作系统:Windows 2000 Advanced Server
  
  数据库: Oracle 8i R2 (8.1.6) for NT 企业版
  
  安装路径:C:ORACLE
  
  错误现象
  
  进行联机热备份时,服务器发生故障(如掉电等)。重新启动服务器后,再启动数据库时,无法打开数据库,Oracle要求进行介质恢复,因为表空间还处在热备份状态。
  
  解决方法
  
  (1)先将数据库设置为归档模式
  
  C:>svrmgrl
  svrmgrl>connect internal
  svrmgrl>alter tablespace 表空间名 begin backup;
  
  说明:这是在表空间进行热备份模式没结束时,就强行关闭数据库所造成的错误。
  
  svrmgrl>shutdown abort
  svrmgrl>startup mount
  
  (2)将此表空间的数据文件在没打开数据库时,设置成“end backup”模式
  
  svrmgrl>alter database datafile %27表空间的数据文件名%27 end backup;
  
  (3)执行表空间介质恢复
  
  svrmgrl>recover tablespace 表空间名;
  svrmgrl>alter database open;
  
  (三)Oracle启动时,监听器不启动或打开出错?
  
  错误现象:
  
  ORACLE启动时,监听器不启动或打开出错;服务器端:用username/password登录正常,但用username/password@alias登录不成功;客户端:用username/password@alias登录不成功
  
  解决方法
  
  (1)如果是因为修改了NT的机器名,则把listener.ora文件中的host参数全部改为新的NT机器名,重新启动OracleTNSListener80服务即可。
  
  例如:
  
  LISTENER =
  (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(Host = NT_Name)(Port = 1521))
  (ADDRESS=(PROTOCOL=TCP)(Host=NT_Name)(Port= 1526))
  )
  
  (2)使用监听器实用程序:LSNRCTL80.exe。
  
  (3)检查监听器参数文件:c:orantNET80adminlistener.ora。WWW.GONGWU.COM.CN 2005-8-14 19:20:43
  
  (4)检查监听器日志文件:c:orantNET80loglistener.log。
  
  (5)Tnsnames.ora文件配置错误,重新配置。
  
  (6)检查client端 Tnsnames.ora。
  
  (四)Oracle Enterprise Manager(OEM)工具中如何以SYSOPER、SYSDBA方式登录?
  
  软件环境:
  
  Windows NT4.0+ORACLE 8.0.4
  
  ORACLE安装路径为:C:ORANT
  
  错误现象
  
  在以Oracle Enterprise Manager(OEM)工具登录数据库时,不论是sys用户、system用户,还是其他用户,在Connect As栏中以sysdba或sysoper角色登录均遭拒绝,报错:Ora-01017:invalid username/password;logon denied,但以normal登录成功。
  
  出错分析
  
  在Oracle数据库中有三种连接方式:
  
  (1)normal正常方式,基本连接方式,级别较低。
  
  (2)sysopr系统方式,系统连接方式,高一级。
  
  (3)sysdba管理员方式,是数据库管理员连接方式,级别最高。WWW.GONGWU.COM.CN 2005-6-23 15:39:16
  
  Oracle8中,sys、system已经只是具有特权的普通用户,而internal才是DBA。所以在DBA进行管理数据时,只能使用具有特权的“internal”连接方式才不会出错。
  
  解决方法
  
  以internal/oracle方式连接即可。
  
  Oracle数据库的启动
  
  启动实例
  
  启动实例,以使Oracle Server完成如下任务:
  
  ◆ 读参数文件init.ora文件,以决定如何初始化该实例;
  
  ◆ 根据参数文件中提供的SGA大小,来为SGA分配存贮空间;
  
  ◆ 启动后台进程;
  
  ◆ 打开后台跟踪文件。
  
  实例启动分正常启动和约束启动。所谓约束启动,就是当数据库打开后,只能使具有RESTRICTED SESSION系统特权的用户与其相连接。而正常启动则允许所有用户与其相连接。
  
  实例启动有如下三种方式:
  
  ◆ 只启动实例;
  
  ◆ 启动实例并安装数据库,但不打开数据库;
  
  ◆ 启动实例,并安装和打开数据库。
  
  数据库安装
  
  数据库安装就是将指定的数据库与已启动的实例相联系。被安装的数据库在打开之前保持关闭,此时只有DBA能存取。在安装数据库时,实例查找参数文件中的CONTROL-Files参数所指定的控制文件,并打开它,从中取得数据库的数据文件名和日志文件名,然后确认这些文件是否存在。如果希望多个实例并发地安装同一个数据库,则DBA可选择并行方式安装该数据库。如果希望只有一个实例可安装该数据库,则选择专用方式安装该数据库。如果ORACLE版本不支持并行服务器选项,则只能按专用方式安装数据库。当选择并行方式安装数据库时,并发安装同一个数据库的实例个数受预定义最大值的限制,而且在参数文件中必须有命名的私用回滚段或可用的公用回滚段。
  
  打开数据库
  
  在安装的数据库被打开之前,所有合法的用户(除DBA)都不能对该数据库进行连接和存取;只有被打开以后才能进行连接和存取。在打开数据库的同时,实例也打开在线的数据文件和在线日志文件。如果数据库是由于实例的异常而中止或电源故障而被关闭时,则下次打开它时会自动执行实例恢复。在数据库被打开时,实例试图获取一个或多个回滚段。在分布事务中,若当—个数据库因电源故障等突然被关闭,此时若有一个或多个分布式事务还没提交或回滚,则在该数据库被重新打开时,继续完成实例恢复,RECO后台进程将自动、立即和一致地解决尚未提交或回滚的任何分布事务。
  
  常用打开数据库和实例命令方式
  
  (1)startup nomount
  
  非安装启动,这种启动方式下可执行:重建控制文件、重建数据库和启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。
  
  (2)startup mount dbname
  
  安装启动,这种启动方式下可执行:数据库日志归档、数据库恢复和重新命名一些数据库文件。
  
  (3)startup open dbname
  
  先执行“nomount”,然后执行“mount”,再打开包括Redolog文件在内的所有数据库文件,这种方式下可访问数据库中的数据。
  
  (4)startup等于以下三个命令
  
  startup nomount
  alter database mount
  alter database open
  
  (5)startup restrict
  
  约束方式启动,这种方式能够启动数据库,但只允许具有一定特权的用户访问,非特权用户访问时,会出现以下提示:
  
  ERROR:
  
  ORA-01035: Oracle 只允许具有RESTRICTED SESSION权限的用户使用。
  
  (6)startup force
  
  强制启动方式,当不能关闭数据库时,可以用startup force来完成数据库的关闭,先关闭数据库,再执行正常启动数据库命令。
  
  (7)startup pfile=参数文件名
  
  带初始化参数文件的启动方式,先读取参数文件,再按参数文件中的设置启动数据库。例:startup pfile=E:Oracleadminoradbpfileinit.ora
  
  (8)startup exclusive
  
  SQL>conect internal
  
  作为internal连接时,connect命令不需要口令,因为其授权是由操作系统隐式提供的。Internal连接等价于sys连接,它们都是拥有Oracle数据字典的用户。
  
  应用
  
  在Unix下启动Oracle8i,其整个过程步骤如下:
  
  (1)telnet 主机IP或者是主机名
  
  user:***** password:*****
  
  (2)lsnrctl start
  
  (3)svrmgrl
  
  (4)svrmgrl>connect internal
  
  (5)svrmgrl>startup
  
  实例和数据库的关闭
  
  关闭实例的步骤
  
  关闭实例后,SGA从内存撤消,后台进程被停止。关闭实例的步骤如下:
  
  (1)启动SQL*DBA
  
  (2)作为INTERNAL用户与数据库相连接
  
  (3)关闭实例
  
  ◆ 关闭数据库
  
  ◆ 卸下数据库
  
  ◆ 关闭实例
  
  关闭数据库
  
  数据库关闭时,首先将SGA中的所有数据库数据和日志项数据写入相应的数据文件和日志文件。然后关闭所有联机数据文件和日志文件。在数据库关闭后和卸下之前,控制文件仍保持打开,此时如果需要打开时,还可重新打开数据库。
  
  卸下数据库
  
  卸下数据库就是切断实例与数据库的联系,关闭数据库控制文件,使内存仅保留实例。
  
  常用关闭数据库和实例命令
  
  (1)shutdown normal(正常关闭数据库)
  
  在正常关闭情况下,Oracle在关闭数据库前,等待所有与之相连接的用户正常结束其对话。于是在下次启动数据库时,就不需要恢复实例。
  
  (2)shutdown immediate(立即方式关闭数据库)
  
  当选择Immediate关闭方式时,即实现直接关闭。在SVRMGRL中执行shutdown immediate,数据库并不立即关闭, 而是在Oracle执行某些清除工作后才关闭(终止会话、释放会话资源),当使用shutdown不能关闭数据库时,shutdown immediate可以完成数据库关闭的操作。
  
  该关闭方式主要用于下列情况:
  
  ①马上停电;
  
  ②Oracle正在非正规的运行数据库或一个数据库应用。
  
  该方式关闭数据库过程如下:
  
  ①Oracle结束当前正在处理的SQL语句;
  
  ②回滚未提交的事务;
  
  ③Oracle不等待与之相连接的用户退出连接,就直接中断他们,使用这种关闭方式,下次启动数据库时,Oracle应自动执行实例恢复。
  
  (3)shutdown abort(撤消实例方式关闭数据库)
  
  这是一种最快的关闭方式,它主要用于下列情况:
  
  ①一分钟后就要停电;
  
  ②Oracle正在非正规的运行数据库或一个数据库应用,并且其它的关闭方式失效;
  
  ③启动一个数据库实例时碰到问题。
  
  该方式关闭数据库的过程如下:
  
  ①Oracle不等待调用完成,直接中断正在处理的SQL语句;
  
  ②回滚未提交事物。
  
  使用这种关闭方式,下次启动数据库时,Oracle应自动执行实例恢复。启动和关闭实例和数据库的操作需要connect internal系统特权,安装和打开数据库的操作还要有alter database系统特权。直接关闭数据库,正在访问数据库的会话会被突然终止,如果数据库中有大量操作正在执行,这时执行shutdown abort后,重新启动数据库需要很长时间。
  
  应用
  
  在Unix中关闭Oracle8i,其具体步骤如下:
  
  svrmgrl>connect internal
  svrmgrl>shutdown
  svrmgrl>exit
  
  在关闭Oracle数据库时需注意问题
  
  不要提前关闭SQL*NET。
  
  当需要SHUTDOWN数据库,不要提前关闭SQL*NET,直到确认关闭了SERVER上的所有数据库后再关闭SQL*NET。如果关闭了SQL*NET,用户将失去和数据库的会话。
  
  存档或删除旧的trace files和logs
  
  当启动Oracle的一个实例时,Oracle把关于该实例的诊断信息写入指定的trace和log文件。每个后台进程都增加一个TRACE文件,它被存储在指定的目录,该路径由INIT.ORA或CONFIG.ORA文件中的BACKGROUND_DUMP_DEST参数指定。用户在数据库中遇到一个内部错误时也增加用户的TRACE文件,该文件的位置由INIT.ORA或CONFIG.ORA文件中的USER_DUMP_DEST参数指定。TRACE文件的个数和名称形式由使用数据库的操作系统决定。
  
  在每次启动和关闭数据库时,Oracle不会自动删除TRACE文件。如果长期不删除这些无用文件,它们将占据数据库中大量的自由空间。数据库管理员应该很好的管理这些文件,可以采取删除或者存档的策略来避免无用文件占用大量自由空间。
  
  SQL*NET也产生LOG文件,一般叫LISTENER.LOG,LISTENER.LOG文件大小也随着启动的次数不断的变大,所以通过妥善管理它也能有效的利用空间。查看该文件可以键入命令:
  
  lsnrctl status
  
  在Oracle8i中使用该命令,其显示结果为:
  
  o200 5% lsnrctl status
  LSNRCTL for SGI IRIX64: Version 8.1.6.0.0 - Production on 09-APR-2003 09:16:26
  (c) Copyright 1998, 1999, Oracle Corporation. All rights reserved.
  Connecting to (ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY))
  STATUS of the LISTENER
  Alias LISTENER
  Version TNSLSNR for SGI IRIX64: Version 8.1.6.0.0 - Production
  Start Date 19-MAR-2003 14:43:53
  Uptime 20 days 18 hr. 4607182418800017439 min. 56 sec
  Trace Level off
  Security OFF
  SNMP OFF
  Listener Log File /data/ora8i/OraHome/network/log/listener.log
  The listener supports no services
  The command completed successfully
  
  改名ALERT LOG文件
  
  ALERT LOG文件也是用来记录INSTANCE的诊断信息的。它的存放目录也通过BACKGROUND_DUMP_DEST参数来指定。一般情况下ALERT LOG文件命名方式为:ALERT_ .LOG。ALTER LOG文件包括了一些数据库主要事件信息,例如:startup和shutdown及redolog的使用、表空间的改变、文件的改变、内部错误信息和数据库备份状态的改变等。
  
  ALTER LOG在后续数据库的使用中,其增长速度非常快。如果一段时间后,再查看它时,其文件已经变得非常大,所以查看它是非常的费劲。一般来讲,为了既能留下这些有用的信息,同时不至于浪费很大的空间,最好的管理办法就是给它改名。可以在任何时候更改ALTER LOG文件名,建议在SHUTDOWN/STARTUP数据库时更改名字。  vnc server配置
1。使用root用户启动系统的vncserver服务;
#service vncserver start
2。然后切换到登陆用户下面,我这里假设要使用oracle系统帐户进行远程登陆
#su - oracle
3。使用oracle用户输入以下命令:
$vncserver
如果是第一次运行,则系统会出现提示信息,提示你输入密码,这是通过终端进行登陆时需要输入的;
另外,还有一个数字信息,这个也是需要在终端登陆时输入的,即冒号后面跟着的一个数字,如:1  ,:2等等,需要记住;
4。在windows客户端使用vncviewer,输入如下:xxx.xxx.xxx.xxx:1 或者xxx.xxx.xxx.xxx:2等,后面的数字需要和服务器端的对应才行;xxx是你服务器的ip地址了;
[linux as 5]
 软件要求
其他所需程序包的版本(或更高版本):
        gcc-2.96-124
        make-3.79
        binutils-2.11
        openmotif-2.1.30-11
        glibc-2.2.4-31
要查看系统上安装了这些程序包的哪些版本,运行以下命令:
rpm -q gcc make binutils openmotif glibc setarch
p4198954_21_linux.zip 在运行 runInstaller 之前打.
rpm -ivh compat-oracle-rhel4-1.0-5.i386.rpm     (p4198954_21_linux.zip)
 (不打PATH也可以)
安装 libaio-0.3.102-1.i386.rpm 和libaio-devel0.3.102-1.i386.rpm
  在Red Hat Enterprise Linux 介质的第三张 CD
  以 root 用户身份运行以下命令:
rpm -ivh /mnt/cdrom/RedHat/RPMS/ libaio-0.3.102-1.i386.rpm

创建数据库安装的准备工作:
1,创建user/group;
groupadd dba
groupadd oinstall
useradd oracle -g oinstall -G dba
passwd oracle
如果nobody用户不存在(id nobody命令查看),则创建:
useradd nobody
2,建立oracle安装文件夹(sample);
mkdir -p /opt/oracle/10.2.0.1 /opt/oracle/oradata /opt/oracle/archivelog
chown -R oracle.oinstall  /opt/oracle
chmod 755 -R /opt/oracle
2, 配置环境变量;
要使用 Oracle 产品,应该或必须设置几个环境变量。
如果您在同一服务器上安装了多个 Oracle 产品或数据库,则 ORACLE_HOME、ORACLE_SID 和 PATH 变量可能会更改。
ORACLE_BASE 变量不应更改,并可以在需要时在您的登录配置文件中设置它。Oracle 提供了一个称作 oraenv 的实用程序来设置其他变量。
对于数据库服务器,建议设置以下环境变量:
使用root用户:
 
vi /home/oracle/.bash_profile
以下是配置文件的内容
ORACLE_BASE=/opt/oracle
ORACLE_HOME=/opt/oracle/10.2.0.1
ORACLE_SID=ge01
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH     
TNS_ADMIN=$ORACLE_HOME/network/admin
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
LANG=AMERICAN_AMERICA.ZHS16GBK
export PATH ORACLE_BASE ORACLE_HOME ORACLE_SID  TNS_ADMIN NLS_LANG LANG
   
4, 设置系统参数;
 Oracle 数据库 10g 需要以下所示的内核参数设置。
 一般情况下可以设置最大共享内存为物理内存的一半,如果物理内存是 2G,则可以设置最大共享内存为 1073741824,
如上;如物理内存是 1G,则可以设置最大共享内存为 512 * 1024 * 1024 = 536870912;以此类推。在redhat上最大共享内存不建议超过
  4*1024*1024*1024-1=4294967295
切换到root用户:
su root
 修改vi /etc/sysctl.conf, 添加:
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default=262144
net.core.rmem_max=262144
net.core.wmem_default=262144
net.core.wmem_max=262144
修改后运行"/sbin/sysctl -p"命令使得内核改变立即生效;
B) 设置oracle对文件的要求:
编辑文件:vi /etc/security/limits.conf 加入以下语句:
oracle           soft    nproc           2047
oracle           hard    nproc           16384
oracle           soft    nofile          1024
oracle           hard    nofile          65536
编辑文件:vi /etc/pam.d/login 加入以下语句(可能应该加在最后一条规则之前):session    required     /lib/security/pam_limits.so设置oraInst.loc文件:
[root@enterprice64 ~]#vi /etc/oraInst.loc 
inventory_loc=/opt/oracle/oraInventory
inst_group=oinstall
[root@enterprice64 ~]#chown oracle.oinstall /etc/oraInst.loc
确保/etc/oraInst.loc中包含上面的信息,且Oracle包含访问权限。
5.解压缩Oracle10G的安装文件 :
 使用Oracle用户登陆:
su - oracle
在/home/oracle 上传和解压缩10201_database_linux32.zip:
unzip 10201_database_linux32

 

6.开始安装oracle
L i n u x 命令行环境下安装(也可以在图形界面下安装)
使用Oracle用户登陆:
su - oracle
根据希望安装的数据库版本类型选择Silent安装模式的response_file文件的类似,比如:enterprise.rsp、standard.rsp还是custom.rsp。
这里选择enterpise.rsp类型,安装盘中的database/response目录下对应的response文件拷贝出来,根据文件里面的提示对输入值进行修改。
比如这个例子中对如下的参数进行设置:
UNIX_GROUP_NAME="oinstall"
FROM_LOCATION="/home/oracle/database/stage/products.xml"
ORACLE_BASE="/opt/oracle"
ORACLE_HOME="/opt/oracle/10.2.0.1"
ORACLE_HOME_NAME="OraDbHome1"
SHOW_INSTALL_PROGRESS_PAGE= true
SHOW_END_OF_INSTALL_MSGS= true
COMPONENT_LANGUAGES=
s_nameForDBAGrp= "dba"
s_nameForOPERGrp="dba"
INSTALL_TYPE="EE"
n_configurationOption=3
RESTART_SYSTEM=false
RESTART_REMOTE_SYSTEM=false
注意,所有的字符串需要放在双引号中,注意大小写。数字和布尔变量直接写就可以。
由于这里没有选择建立数据库而只安装软件,因此没有设置数据库相关的配置参数。
[oracle@enterprice64 data]$ chmod 700 enterprise.rsp
面可以开始SILENT安装了:
注意,响应文件需要使用绝对路径。
cd /home/oracle/database
[oracle@enterprice64 database]$ ./runInstaller -silent -responseFile /home/oracle/enterprise.rsp
用root执行如下脚本:
/opt/oracle/10.2.0.1/oraInventory/orainstRoot.sh
/opt/oracle/10.2.0.1/root.sh
不过这里Oracle存在一个bug,在root.sh脚本中,自动将OUI_SILENT参数设置为TRUE,而后的检查中,
如果发现这个值为TRUE,那么这个脚本运行会自动退出了。这里需要手工将其修改为false,
最后使用root执行一下$ORACLE_HOME/root.sh脚本就可以了。
根据提示按 Enter 就可以了。
这样就在字符下成功安装了。
通过SILENT模式安装数据库之后,下面继续使用SILENT模式进行数据库的建立,
仍然是拷贝安装目录下的/home/oracle/database/response/dbca.rsp到安装目录,并进行编译,
根据数据库建立方式的不同编辑不同的数据库库选项。
比如在本次安装过程中设置了下列参数:
RESPONSEFILE_VERSION = "10.0.0"
OPERATION_TYPE = "createDatabase"
GDBNAME = "ge01"
SID = "ge01"
TEMPLATENAME = "New_Database.dbt"
SYSPASSWORD = "georacle"
SYSTEMPASSWORD = "georacle"
DATAFILEDESTINATION ="/opt/oracle/oradata/"
RECOVERYAREADESTINATION="/opt/oracle/flash_recovery_area"
STORAGETYPE=FS
CHARACTERSET = "ZHS16GBK"
MEMORYPERCENTAGE = "40"
SCRIPTDESTINATION ="/opt/oracle/admin/ora10g/scripts"
EMCONFIGURATION=”LOCAL”
SYSMANPASSWORD = "georacle"
DBSNMPPASSWORD = "georacle"
其中最后1项不是必须的,这个的目的是在建立数据库的同时生成脚本。
下面就可以开始SILENT模式的数据库创建了:
[oracle@enterprice64 database]$ dbca -silent -responseFile /home/oracle/dbca.rsp
用root执行如下脚本:
/opt/oracle/10.2.0.1/oraInventory/orainstRoot.sh
最后可以利用netca来SILENT方式设置网络部分,同样的方法设置netca.rsp:
RESPONSEFILE_VERSION="11.1"
CREATE_TYPE= "CUSTOM"
SHOW_GUI=false
LOG_FILE=""/opt/oracle/10.2.0.1/network/tools/log/netca.log""
INSTALLED_COMPONENTS=
INSTALL_TYPE=""typical""
LISTENER_NUMBER=1
LISTENER_NAMES=
LISTENER_PROTOCOLS=
LISTENER_START=""LISTENER""
NAMING_METHODS=
设置的参数包括上面的部分,然后就可以使用netca启动silent配置:
[oracle@enterprice64 database]$ netca /silent /responsefile  /home/oracle/netca.rsp
----------------------------------------------------------------静默卸载Oracle数据库ge01
dbca -silent -deleteDatabase -sourceDB    <source database sid> [-sysDBAUserName     <user name  with SYSDBA privileges> -sysDBAPassword <password for sysDBAUserName user name>]
例如:dbca -silent -deleteDatabase -sourceDB ge01 -sysDBAUserName sys -sysDBAPassword georacle
静默卸载Oracle数据库软件
 
执行以下命令静默卸载Oracle数据库软件
$./runInstaller -silent -deinstall -removeallfiles -removeAllPatches "REMOVE_HOMES=" -responseFile ~/enterprise.rsp
---------------------------------------------------------------------------------------(一)图形界面开始安装:
1.以oracle用户登录X-WINDOWS系统,进行Oracle的安装(远程安装需打开XDM):
[ linux 5}
export DISPLAY=
cd /opt/database (或者你解压缩安装程序包的目录)
./runInstaller 或者./runInstaller   -ignoreSysPrereqs
过一会儿就会出现Oracle的X安装界面
注意:
1、选择advance install
2、数据库home设置为/opt/oracle/10.2.0.1
3、数据库全局名称设置为ge01
4、数据库字符集选Simplified Chinese ZHS16GBK
2.其他用默认设置!
注意:安装过程中会提示以root用户登陆执行一些脚本 ,执行后再按“ok”按钮继续安装。

 


3、登陆并启动数据库的操作。
su - oracle
[oracle@oracle oracle]$ lsnrctl start
[oracle@oracle oracle]$ sqlplus /nolog
SQL*Plus: Release 9.2.0.0 - Production on Sat Mar 12 22:58:53 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> connect / as sysdba
Connected.
SQL> startup; 启动数据库
ORACLE instance started.
Total System Global Area 236000356 bytes
Fixed Size 451684 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
SQL> shutdown immediate ;关闭数据库 (OR "dbshut" command)
Database closed.
Database dismounted.
ORACLE instance shut down.
4, dbstart脚本修改
数据库创建完成后,修改vi /etc/oratab,把ge01:/opt/oracle/10.2.0.1:N那一行最后的N改成Y,
修改vi /opt/oracle/10.2.0.1/bin/dbstart中ORACLE_HOME_LISTNER=/opt/oracle/10.2.0.1
然后执行dbstart启动数据库数据库可能无法启动,报告Can’t find init file …的错误,需要复制一个初始化文件:
cp /opt/oracle/admin/ge01/pfile/init.ora.* /opt/oracle/10.2.0.1/dbs/initge01.ora
重新执行dbstart就可以了。
可以执行dbshut 停止ORACLEvi /etc/rc.local 加入下面一行 起动ORACLE ON system boot
su - oracle -c "lsnrctl start"
su - oracle -c "dbstart"
5. 为了root方便管理,可以写一个启动脚本
vi /etc/init.d/ora10g
 
#!/bin/bash
#
# chkconfig: 2345 91 19
# description: starts the oracle listener and instance
status() {
    pid=`ps -ef | grep ora_pmon | grep -v grep | awk '{print $8}'`
    if [ "X$pid" = "X" ]
    then
        echo "oracle10g is not running."
        exit 1
    else
        echo "oracle10g is running."
        exit 0
    fi
}
case "$1" in
    start)
        #startup the listener and instance
        echo -n "oracle begin to startup: "
        su - oracle -c "lsnrctl start"
        su - oracle -c dbstart
        echo "oracle10g started"
        ;;
    stop)
        # stop listener, apache and database
        echo -n "oracle begin to shutdown:"
        su - oracle -c "lsnrctl stop"
        su - oracle -c dbshut
        echo "oracle10g shutdowned"
        ;;
    reload|restart)
        $0 stop
        $0 start
        ;;
    'status')
        status
        ;;
     *)
        echo "Usage: ora10g [start|stop|reload|restart]"
        exit 1
esac
exit 0
存为ora10g后,然后
chmod a+x /etc/init.d/ora10g
即可在以后以root身份运行/etc/rc.d/init.d/ora10g start |stop 来管oracle的启动和停止了。
如果要将这个脚本加入到系统中使其可开机运行,那么要运行以下命令:
chkconfig --level 35 ora10g on
 
6, 关于数据库删除重新安装的问题:
1 . 去除 /usr/local/bin 目录 下的 coraenv dbhome oraenv
2 . 去除 /etc/oratab , /etc/oracle
3 . 去掉安装 目录 /opt/oracle 目录下的 product admin oradata oralnventor 目录 。
# userdel -r oracle
# groupdel dba oinstall
rm -rf /tmp/ora*
rm -rf /opt/oracle/*
rm -rf /opt/ORCLfmap
rm -f /etc/ora*
rm -f /usr/local/bin/oraenv
rm -f /usr/local/bin/coraenv
rm -f /usr/local/bin/dbhome

7.修改Oracle10g数据库字符集
SQL> connect sys/oracle as sysdba
SQL> startup mount
SQL> alter session set sql_trace=true;
Session altered.SQL> alter system enable restricted session;System altered.SQL> alter system set job_queue_processes=0;System altered.SQL> alter system set aq_tm_processes=0;System altered.SQL> alter database open;Database altered.SQL> set linesize 120;
SQL> alter database character set zhs16gbk;
alter database character set zhs16gbk
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
SQL> ALTER DATABASE character set INTERNAL_USE zhs16gbk; # 使用INTERNAL_USE可以跳过超集的检查,ALTER DATABASE character set INTERNAL_USE Database altered.SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP
SQL> select name,value$ from props$ where name like '%NLS%';
NLS_CHARACTERSET
ZHS16GBK
8. oracle database异机备份脚本
su - oracle
mkdir /home/oracle/dbbackup
(1)vi /home/oracle/dbbackup/bachupdb.sh
#!/bin/bash
#As oracle user, chmod 744 /home/oracle/dbbackup/DBbackuprecover.sh
#crontab -e 35 1 * * * /home/oracle/dbbackup/DBbackuprecover.sh >/dev/null 2>&1
#@tip: modify local database's home directory
#@tip <ip> is remote database ip address
export ORACLE_HOME=/opt/oracle/10.2.0.1
export PATH=$ORACLE_HOME/bin:$PATH:
export NLS_LANG=AMERICAN_AMERICA.zhs16gbk
export LANG=AMERICAN_AMERICA.ZHS16GBK
export ORACLE_SID=ge01
dmpfile=gedb_`date +%F`.dmp
logfile=gedb_`date +%F`.log
restoredblog=restoredb_`date +%F`.log
WORK_DIR=~/dbbackup
cd $WORK_DIR
exp USERID=gedb/gegedb@<ip>/ge01 file=$dmpfile log=$logfile  owner=gedb
if [ 0 -eq "$?" ]
     then
         sqlplus / as sysdba @user.sql 
         imp USERID=gedb/gegedb file=$dmpfile log=./$restoredblog fromuser=gedb  touser=gedb
         find  ./*.dmp -type f -mtime +7 -exec rm {} ;
         find  ./*.log -type f -mtime +30 -exec rm {} ;
         exit 0
      else
         echo "backup error,quit!" > $logfile
         exit 1
fi
 
#@tip ip地址修改为要备份的oracle的主机地址
exp USERID=gedb/gedb@10.248.1.5/ge01 file=$dmpfile log=$logfile  owner=gedb direct=y
  (2)更改脚本权限:
     chown oracle.oinstall backupdb.sh
     chmod 744 backupdb.sh   
    
 
 (3)以oracle user role
    crontab -e
    35 2 * * * /home/oracle/dbbackup/backupdb.sh
9. restore oracle backup
(1) 先创建gedb用户和授权:
  su - oracle
  sqlplus / as sysdba @createUser.sql 
(2)imp USERID=gedb/gegedb file=110.dmp fromuser=gedb touser=gedb
  如果要第二次IMP操作要先删除用户gedb,再新建用户gedb,这样imp才不会出错.
  DROP USER gedb CASCADE;
  CREATE USER gedb  IDENTIFIED BY gegedb;
  GRANT UNLIMITED TABLESPACE TO gedb;
  GRANT CONNECT TO gedb;
  GRANT RESOURCE TO gedb;
  GRANT DBA TO gedb;
 
10. oracle优化
SQL> alter system set "_kgl_large_heap_warning_threshold"=8388608 scope=spfile ; (ONLY FOR 10.2.0.1.0 )
SQL> shutdown immediate
SQL> startup

 

 
  
11.BUG FIX(1)10g EM乱码之快速解决
[oracle@danaly ~]$ cd $ORACLE_HOME/jdk/jre/lib
[oracle@danaly lib]$ ls font*zh_CN*
font.properties.zh_CN.Redhat font.properties.zh_CN.Redhat2.1
font.properties.zh_CN.Sun font.properties.zh_CN_UTF8.Sun
[oracle@danaly lib]$ cd $ORACLE_HOME/jre/1.4.2/lib/
[oracle@danaly lib]$ ls font*zh_CN*
font.properties.zh_CN.Redhat font.properties.zh_CN.Redhat2.1
font.properties.zh_CN.Sun font.properties.zh_CN_UTF8.Sun
我们只要用合适的中文字符集文件替换缺省文件即可,我选择使用font.properties.zh_CN.Redhat来替换缺省字体定义文件: [oracle@danaly lib]$ cp font.properties.zh_CN.Redhat font.properties 替换之后需要清理一下Cache,重启EM即可. Cache路径通常位于: $ORACLE_HOME/oc4j/j2ee/oc4j_applications/applications/em/em/cabo/images/cache/zhs 清除所有gif文件即可.然后重新启动EM(2)10201上一个严重的BUG
环境 10201,AIX53
但据ORACLE解释,在任何操作系统版本都有此问题。
现象:监听器启动后,隔一段时间(长短不定),就会出现无法
连接: 若是用10201版本的SQLPLUS,则会出现 NO LISTENER。
9207 版本的SQLPLUS,则会出现:没反应,HANG住。
原因:10201 版本上的一个BUG:4518443。其会自动创建一个子
监听器,当出现此情况时,监听器将会挂起。
/opt/oracle/product/10g/network/log/listener.log有如下语句:
WARNING: Subscription for node down event still pending
检查是否真因为此BUG造成此现象:
$ ps -ef | grep tnslsnr
ora10g 8909 1 0 Sep 15 ? 902:44 /u05/10GHOME/DBHOME/bin/tnslsnr sales -inherit
ora10g 22685 8909 0 14:19:23 ? 0:00 /u05/10GHOME/DBHOME/bin/tnslsnr sales –inherit
正常情况只有一个监听器,而此BUG则会出现两个监听器。
解决方法:
打补丁4518443
或者在listener.ora 文件里加入:
SUBSCRIBE_FOR_NODE_DOWN_EVENT_<listener_name>=OFF
其中,<listener_name> 是数据库的监听器的名称。如:
默认情况下,监听器名为:LISTENER 。则语句就是:
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF
同时:
cd $ORACLE_HOME/opmn/conf
mv ons.config ons.config.orig
重启监听程序:
lsnrctl stop
lncrctl start

 

转载:http://server.zol.com.cn/127/1274030.html