当前位置: 首页 > 工具软件 > Job Plus > 使用案例 >

oracle的job引起数据库崩溃,JOB忽然停止工作了

谢裕
2023-12-01

当前位置:我的异常网» 数据库 » JOB忽然停止工作了

JOB忽然停止工作了

www.myexceptions.net  网友分享于:2015-08-26  浏览:79次

JOB突然停止工作了

本文通过一次Oracle Job任务异常案例诊断,分析其原因及解决过程,从内部揭示Oracle Job任务调度及内部计时机制。

问题及环境

接到研发人员报告,数据库定时任务未正常执行,导致某些操作失败。

开始介入处理该事故.

系统环境:

SunOS DB 5.8 Generic_108528-21 sun4u sparc SUNW,Ultra-4

Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production

解决过程

首先介入检查数据库任务

$ sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.3.0 - Production on Wed Nov 17 20:23:53 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to:

Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.3.0 - Production

SQL> select job,last_date,last_sec,next_date,next_sec,broken,failures from

dba_jobs;

JOB LAST_DATE LAST_SEC NEXT_DATE NEXT_SEC B FAILURES

INTERVAL

---------- --------- ---------------- --------- ---------------- - ----------

----------------------------

31 16-NOV-04 01:00:02 17-NOV-04 01:00:00 N 0

trunc(sysdate+1)+1/24

27 16-NOV-04 00:00:04 17-NOV-04 00:00:00 N 0

TRUNC(SYSDATE) + 1

35 16-NOV-04 01:00:02 17-NOV-04 01:00:00 N 0

trunc(sysdate+1)+1/24

29 16-NOV-04 00:00:04 17-NOV-04 00:00:00 N 0

TRUNC(SYSDATE) + 1

30 01-NOV-04 06:00:01 01-DEC-04 06:00:00 N 0

trunc(add_months(sysdate,1),’MM’)+6/24

65 16-NOV-04 04:00:03 17-NOV-04 04:00:00 N 0

trunc(sysdate+1)+4/24

46 16-NOV-04 02:14:27 17-NOV-04 02:14:27 N 0

sysdate+1

66 16-NOV-04 03:00:02 17-NOV-04 18:14:49 N 0

trunc(sysdate+1)+3/24

8 rows selected.

发现JOB任务是都没有正常执行,最早一个应该在17-NOV-04 01:00:00执行。但是没有执行。

建立测试JOB

create or replace PROCEDURE pining

IS

BEGIN

NULL;

END;

/

variable jobno number;

variable instno number;

begin

select instance_number into :instno from v$instance;

dbms_job.submit(:jobno, ’pining;’, trunc(sysdate+1/288,’MI’),

’trunc(SYSDATE+1/288,’’MI’’)’, TRUE, :instno);

end;

/

发现同样的,不执行。

但是通过dbms_job.run()执行没有任何问题。

进行恢复尝试

怀疑是CJQ0进程失效,首先设置JOB_QUEUE_PROCESSES为0,Oracle会杀掉CJQ0及相应job进程

SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 0;

等2~3分钟,重新设置

SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 5;

此时PMON会重起CJQ0进程

Thu Nov 18 11:59:50 2004

ALTER SYSTEM SET job_queue_processes=0 SCOPE=MEMORY;

Thu Nov 18 12:01:30 2004

ALTER SYSTEM SET job_queue_processes=10 SCOPE=MEMORY;

Thu Nov 18 12:01:30 2004

Restarting dead background process CJQ0

CJQ0 started with pid=8

但是Job仍然不执行,而且在再次修改的时候,CJQ0直接死掉了。

Thu Nov 18 13:52:05 2004

ALTER SYSTEM SET job_queue_processes=0 SCOPE=MEMORY;

Thu Nov 18 14:09:30 2004

ALTER SYSTEM SET job_queue_processes=10 SCOPE=MEMORY;

Thu Nov 18 14:10:27 2004

ALTER SYSTEM SET job_queue_processes=0 SCOPE=MEMORY;

Thu Nov 18 14:10:42 2004

ALTER SYSTEM SET job_queue_processes=10 SCOPE=MEMORY;

Thu Nov 18 14:31:07 2004

ALTER SYSTEM SET job_queue_processes=0 SCOPE=MEMORY;

Thu Nov 18 14:40:14 2004

ALTER SYSTEM SET job_queue_processes=10 SCOPE=MEMORY;

Thu Nov 18 14:40:28 2004

ALTER SYSTEM SET job_queue_processes=0 SCOPE=MEMORY;

Thu Nov 18 14:40:33 2004

ALTER SYSTEM SET job_queue_processes=1 SCOPE=MEMORY;

Thu Nov 18 14:40:40 2004

ALTER SYSTEM SET job_queue_processes=10 SCOPE=MEMORY;

Thu Nov 18 15:00:42 2004

ALTER SYSTEM SET job_queue_processes=0 SCOPE=MEMORY;

Thu Nov 18 15:01:36 2004

ALTER SYSTEM SET job_queue_processes=15 SCOPE=MEMORY;

尝试重起数据库,这个必须在晚上进行:

PMON started with pid=2

DBW0 started with pid=3

LGWR started with pid=4

CKPT started with pid=5

SMON started with pid=6

RECO started with pid=7

CJQ0 started with pid=8

QMN0 started with pid=9

....

CJQ0正常启动,但是Job仍然不执行。

没办法了...

继续研究...居然发现Oralce有这样一个bug

1. Clear description of the problem encountered:

slgcsf() / slgcs() on Solaris will stop incrementing after

497 days 2 hrs 28 mins (approx) machine uptime.

2. Pertinent configuration information

No special configuration other than long machine uptime. .

3. Indication of the frequency and predictability of the problem

100% but only after 497 days.

4. Sequence of events leading to the problem

If the gethrtime() OS call returns a value > 42949672950000000

nanoseconds then slgcs() stays at 0xffffffff. This can

cause some problems in parts of the code which rely on

slgcs() to keep moving.

eg: In kkjssrh() does "now = slgcs(&se)" and compares that

to a previous timestamp. After 497 days uptime slgcs()

keeps returning 0xffffffff so "now - kkjlsrt" will

always return 0. .

5. Technical impact on the customer. Include persistent after effects.

In this case DBMS JOBS stopped running after 497 days uptime.

Other symptoms could occur in various places in the code.

好么,原来是计时器溢出了,一检查我的主机:

bash-2.03$ uptime

10:00pm up 500 day(s), 14:57, 1 user, load average: 1.31, 1.09, 1.08

bash-2.03$ date

Fri Nov 19 22:00:14 CST 2004

刚好到事发时是497天多一点.ft.

安排重起主机系统..

这个问题够郁闷的,NND,谁曾想Oracle这都成...

Oracle最后声称:

fix made it into 9.2.0.6 patchset

在Solaris上的9206尚未发布...晕.

好了,就当是个经历吧,如果有问题非常不可思议的话,那么大胆怀疑Oracle吧,是Bug,可能就是Bug。

重起以后问题解决,状态如下:

$ sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.3.0 - Production on Fri Nov 26 09:21:21 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to:

Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.3.0 - Production

SQL> select job,last_date,last_sec,next_date,next_sec from user_jobs;

JOB LAST_DATE LAST_SEC NEXT_DATE NEXT_SEC

---------- --------- ---------------- --------- ----------------

70 26-NOV-04 09:21:04 26-NOV-04 09:26:00

SQL> /

JOB LAST_DATE LAST_SEC NEXT_DATE NEXT_SEC

---------- --------- ---------------- --------- ----------------

70 26-NOV-04 09:26:01 26-NOV-04 09:31:00

SQL>

SQL> select * from v$timer;

HSECS

----------

3388153

SQL> select * from v$timer;

HSECS

----------

3388319

SQL>

FAQ  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 setarchp4198954_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 nobody2,建立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/oracle2, 配置环境变量;

要使用 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    [-sysDBAUserName     -sysDBAPassword ]

例如: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 ZHS16GBK2.其他用默认设置!

注意:安装过程中会提示以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 setSQL> 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

ZHS16GBK8. 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 is remote database ip addressexport 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=ge01dmpfile=gedb_`date +%F`.dmp

logfile=gedb_`date +%F`.log

restoredblog=restoredb_`date +%F`.log

WORK_DIR=~/dbbackupcd $WORK_DIR

exp USERID=gedb/gegedb@/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_=OFF

其中, 是数据库的监听器的名称。如:

默认情况下,监听器名为:LISTENER 。则语句就是:

SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF

同时:

cd $ORACLE_HOME/opmn/conf

mv ons.config ons.config.orig

重启监听程序:

lsnrctl stop

lncrctl start

文章评论

 类似资料: