oracle11gfetch,ORACLE11g在CENTOS5.8下的安装

参考文献:

http://www.5ienet.com/note/html/st11g/index.shtml

Oracle Enterprise Linux Server 5 U3安装64位ORACLE11gR2

=======================================================

较早期的服务器在centos5.5 64位操作系统下安装oracle很顺利。

而后来的IBM服务器推出的M4机器以及其他品牌后期的机器,有些驱动在centos5.8的版本才有,因此,推荐使用centos5.8 64位操作系统安装oracle11g。

而centos6版本由于缺少oracle11g安装所需的依赖包,因此,不推荐使用centos6版本。

1,将11g安装文件上传到服务器的/tmp目录下并解压:

1)linux.x64_11gR2_database_1of2.zip

2)linux.x64_11gR2_database_2of2.zip

解压命令:

unzip linux.x64_11gR2_database_1of2.zip

unzip linux.x64_11gR2_database_2of2.zip

解压完成后,在tmp目录下会生成database的安装包目录。

2,添加以下行到 /etc/security/limits.conf 文件中

#vi /etc/security/limits.conf

oracle soft nproc 2047

oracle hard nproc 16384

oracle soft nofile 1024

oracle hard nofile 65536

或:

sed -i '$ a\oracle soft nproc 2047'   /etc/security/limits.conf

sed -i '$ a\oracle hard nproc 16384'  /etc/security/limits.conf

sed -i '$ a\oracle soft nofile 1024'  /etc/security/limits.conf

sed -i '$ a\oracle hard nofile 65536' /etc/security/limits.conf

3,添加以下行到 /etc/pam.d/login 文件中:

#vi /etc/pam.d/login

session required pam_limits.so

或:

sed -i '$ a\session required pam_limits.so' /etc/pam.d/login

4,修改 /etc/selinux/config 文件来关闭linux防火墙,确保SELINUX设置如下:

#vi /etc/selinux/config

SELINUX=disabled

5,编辑文件 /etc/profile ,增加以下内容设置oracle用户的默认的shell

#vi /etc/profile

if [ $USER = "oracle" ]; then

if [ $SHELL = "/bin/ksh" ]; then

ulimit -p 16384

ulimit -n 65536

else

ulimit -u 16384 -n 65536

fi

umask 022

fi

6,创建oracle用户及关联组

groupadd oinstall

groupadd -g 502 dba

useradd -u 502 -g oinstall -G dba oracle

passwd oracle

输入oracle用户密码

7,建立oracle安装目录

mkdir -p /u01/oracle/product/11.2.0/db_1

chown -R oracle:oinstall /u01/

chmod -R 775 /u01/oracle

mkdir /u01/oradata

chown -R oracle:oinstall /u01/oradata

chmod 775 /u01/oradata

mkdir /u01/recovery_area

chown -R oracle:oinstall /u01/recovery_area

chmod 775 /u01/recovery_area

如果创建的数据库表空间目录不在这个目录中,也需要通过这个方法授于数据库目录的权限

8,使用vi命令编辑/home/oracle/.bash_profile,添加oracle环境变量:

#su - oracle

$vi .bash_profile

export TMP=/tmp

export TMPDIR=$TMP

export ORACLE_BASE=/u01/oracle/

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1

export ORACLE_SID=voddb

export ORACLE_TERM=xterm

export PATH=/usr/sbin:$ORACLE_HOME/bin:$PATH

export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

export LD_ASSUME_KERNEL=2.6.18

export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"

#安装了rlwrap的rpm包后,加入这个配置可以在sqlplus环境下使用Backspace键和上下键

alias sqlplus='rlwrap sqlplus'

alias rman='rlwrap rman'

9,为了使所有设置生效,需要重启一下系统

# reboot

10,重启完后,可使用oracle用户登录,也可使用root用户登录进行安装数据库。

如果是使用root用户登录的,则需要在字符控制台上执行以下命令,并切换到oracle用户进行安装数据库

#xhost +

#su - oracle

$cd /tmp/database

$./runInstaller

11,在oracle用户环境中,执行以下命令进行oracle的安装:

$/tmp/database/runInstaller

12,oracle11g的安装界面的验证页面中,会提示缺失的rpm包,根据提示信息,安装缺失的rpm包及其依赖包;

64位的依赖包一般包括:

compat-libstdc++-33-3.2.3-61.x86_64.rpm

libaio-devel-0.3.106-5.x86_64.rpm

pdksh-5.2.14-36.el5.x86_64.rpm

sysstat-7.0.2-3.el5.x86_64.rpm

unixODBC-2.2.11-7.1.x86_64.rpm

unixODBC-devel-2.2.11-7.1.x86_64.rpm

rlwrap-0.37-1.el5.x86_64.rpm    这个包可以让你登录sqlplus环境后,可以使用Backspace键以及上下键;

32位的操作系统也有相对应的依赖包。请安装以上的依赖包后,再次在安装界面中进行验证。

如果还有其他的依赖包尚未安装,一般可以到centos安装镜像文件中找到。确保所有的依赖包都安装,保证验证通过。

(如果是centos6.4版本的,则高版本的rpm又不验证不过去,只好使用强制命令安装低版本的rpm包,但目前尚未有资料说这样安装是否可靠。

rpm -i --force --nodeps  [rpm_name].rpm)

13,执行验证页面中的 fixup & Check Again 按钮,执行提示中的脚本后,再次点击这个按钮,直到系统参数验证通过。

14,以上12、13步骤执行后,可按 check again按钮进行重新验证。我们选择安装企业版,只安装oracle系统软件而不创建数据库(数据库到后面用命令去创建)。

15,如果分配给ORACLE的内存比较大,则会提示/dev/shm不够,或者在创建数据库时提示 ORA-00845 错误,则修改/etc/fstab文件:

将其中的

tmpfs                   /dev/shm                tmpfs   defaults        0 0

改成

tmpfs                   /dev/shm                tmpfs   defaults,size=1024M 0 0

这里增大到了1G,然后重新mount即可生效(根据提示的错误信息,将size参数值修改成大于提示的值)。

mount -o remount /dev/shm

16,具备安装环境后,数据库软件就能顺利的安装上了。

17,安装完数据库系统后,使用netca创建监听,默认一直按next下去就行;然后使用dbca创建数据库。

需要注意的是,在创建数据库,选择字符集时,需要选择简体中文字符集,以支持简体中文,即

Choose from the list of character sets

Database Character Sets: ZHS16GBK - GBK 16-bit Simplified Chinese

National Character Sets: AL16UTF16 - Unicode UTF-16 Universal character set (默认)

Default Language: Simplified Chinese

Default Date Format: China

SGA参数值可以使用创建数据库时界面上的推荐值。

如果服务器只当数据库服务器使用,SGA使用的内存推荐系统内存的50%到70%。

如果服务器还有其他的应用,则SGA使用的内存推荐系统内存的50%以下。

18,数据库创建完毕后,去除用户密码3个月过期和输入密码10次错误后用户锁定的限制

--SELECT username,PROFILE FROM dba_users;

--SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';

--SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='FAILED_LOGIN_ATTEMPTS';

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED;

否则,可能会由于审计过于频繁导致数据库表空间用完后报错,甚至数据库不可用。

alter system set audit_trail=none scope=spfile;

然后重启数据库.

shutdown immediate;

startup;

删除审计数据:

sqlplus / as sysdba

truncate table SYS.AUD$;

20,如果在sqlplus环境中,使用类似:

conn sys/password as sysdba 能够连接到数据库,而是用

conn sys/password@voddb as sysdba 不能连接数据库报:

ora-12514 错误,请查看listener:

lsnrctl status,如果有发现 有类似信息:

The listener supports no services

则可以在listener.ora中添加如下信息,然后重启监听,看看是否就能解决问题了:

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = voddb)

(ORACLE_HOME = /u01/oracle//product/11.2.0/db_1)

(SID_NAME = voddb)

)

)

21,jdbc链接oracle 11g时, 会报ora-01017的错误的解决方法,摘录网上的一段原话:

在oracle的之前版本时, 你的用户名密码是大小写不敏感的, 但在11g中, 数据库默认密码的大小写是敏感的, 于是我们就知道了一个事实,

那就是jdbc在给oracle密码时, 会将其变成大写,真是一个奇怪的事情啊.

你可能会说: 那好, 那我就把密码设置为大写的好了, 哈哈哈哈, 你完了, 要知道有些程序, 在链接oracle时, 会将密码变为小写, 这是不是很奇怪, 很晕菜呢?

在oracle数据库的密码是大小写敏感的事实千秋万代, 一统江湖前, 你还会遇上很多会把密码改来改去的奇妙程序, 那怎么办呢?

其实很简单, 那就是去除oracle的密码大写敏感设定:

alter system set sec_case_sensitive_logon=false

22,默认的联机日志为3组,每组1个文件,每个文件100M;可以将联机日志增加到6组,每组可保持1个文件,每个文件可增加到200M;

某地的一个生产系统可能在进行批处理时候,需要处理大量数据,由于联机日志文件组不够多,文件不够大而报错。

后来将日志组更加到6个,每个文件增加到200M就能减少报错的频率。

23,数据库创建完后,建议安装 rlwrap,方便在sql环境下使用上下按键获取以往输入过的命令。上面已经安装了。

24,如果oracle安装文件是独立的分区,建议总共容量在40G左右或以上,因为数据库的默认日志是放在oracle主目录下,系统如果运行了好几年的话,这些日志可能会很大。

25,安装完后,进入sqlplus,如果连不上数据库,可能是listener监听问题。

在安装数据库时候,安装界面会提示创建监听。请在安装完数据库后,最好将创建的这个监听删除,重新用图形化界面创建下,一般能够解决这个问题。

26,配置oracle自动启动服务

--1,以root用户登录,首先在/etc/init.d/目录下配置Oracle的服务文件:

#cd /etc/init.d

touch oracle11g

chmod a+x oracle11g

--2,然后编辑此oracle11g文件。内容如下:

################################################

# !/bin/bash

# whoami

# root

# chkconfig: 345 51 49

# /etc/init.d/oracle11g

# description: starts the oracle dabase deamons

#

ORACLE_HOME=/u01/oracle/product/11.2.0/db_1

ORACLE_OWNER=oracle

case "$1" in

start)

echo -n "Starting oracle11g: "

su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbstart" &

su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/lsnrctl start"

touch /var/lock/subsys/oracle11g

echo

;;

stop)

echo -n "shutting down oracle11g: "

su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbshut" &

su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/lsnrctl stop"

rm -f /var/lock/subsys/oracle11g

echo

;;

restart)

echo -n "restarting oracle11g: "

$0 stop

$0 start

echo

;;

*)

echo "Usage: `basename $0` start|stop|restart"

exit 1

esac

exit 0

################################################

--3,保存文件,退出以后,添加并启动服务

#chkconfig --add oracle11g

#chkconfig --list oracle11g

#service oracle11g status

#service oracle11g start

--4,重新启动Linux的时候,如果看到启动项Oracle出现OK,代表Oracle成功随Linux启动了.

--5,注意:

--1)这样的脚本启动一般不会启动实例,如果想让实例也随脚本一起启动的话,

--   就需要修改文件:/etc/oratab 。如果这个文件不存在,那么就得运行脚本文件产生它:

一般情况下,这个脚本是能够找到的。因为安装数据库的最后阶段会提示你去执行两个脚本,其中之一就是要你去执行/u01/oracle/product/11.2.0/db_1/root.sh。如果没有执行的话,就现在执行吧:

#sh /u01/oracle/product/11.2.0/db_1/root.sh

--2)vi /etc/oratab 代码如下:

voddb:/oracle/product/11.2.0/db_1:N

--修改为:

voddb:/oracle/product/11.2.0/db_1:Y

--Y 表示自动启动;N表示不自动启动

--3)如果系统还不能自动启动,报 ORACLE_HOME_LISTNER 没有设置,则需要修改 /oracle/product/11.2.0/db_1/bin/ 文件夹下 dbstart 和 dbshut 文件。

这个必须要修改,请提前修改吧:

--找到 ORACLE_HOME_LISTNER=$1 将其修改为 ORACLE_HOME_LISTNER=$ORACLE_HOME

-- dbstart 文件

# First argument is used to bring up Oracle Net Listene

#ORACLE_HOME_LISTNER=$1

ORACLE_HOME_LISTNER=$ORACLE_HOME

-- dbshut 文件

# The  this to bring down Oracle Net Listener

#ORACLE_HOME_LISTNER=$1

ORACLE_HOME_LISTNER=$ORACLE_HOME

--可以在root用户下使用 service oracle11g start|stop|restart 启动,关闭或重启数据库

--可以使用ps -ef|grep ora_ 和 ps -ef|grep tns 检查数据库和监听是否正常启动

27,自动数据库备份

#su - oracle

--1)创建备份目录:

$mkdir /u01/oradata/orabak

sqlplus /nolog

SQL>conn sys/password@voddb as sysdba

--drop directory expdp_dir;

create directory expdp_dir as '/u01/oradata/orabak';

grant read,write on directory expdp_dir to system;

exit

--2)创建备份脚本

$cd /u01/oradata

$mkdir orabak

$vi orabak.sh

##########################################################################

ORACLE_HOME=/u01/oracle/product/11.2.0/db_1

export ORACLE_HOME

ORACLE_SID=voddb

export ORACLE_SID

export NLS_LANG=american_america.zhs16gbk

rq=voddb`date +%d`

#rqyes=voddb`date +%d -d "3 days ago"`

echo "++++++++++++++++++" >> /tmp/oracle.log

$ORACLE_HOME/bin/expdp system/password@voddb DIRECTORY=expdp_dir DUMPFILE="${rq}".dmp SCHEMAS=VOD LOGFILE="${rq}".log

tar -cf - /u01/oradata/orabak/"${rq}".dmp /u01/oradata/orabak/"${rq}".log | gzip > /u01/oradata/orabak/"${rq}".tar.gz

#scp /oradata/orabak/"${rq}".tar.gz root@192.168.50.100:/usr/local/remote/voddb_bak

rm /oradata/orabak/"${rq}".dmp /oradata/orabak/"${rq}".log

#rm /oradata/orabak/"${rq}".tar.gz

#rm /oradata/orabak/"${rqyes}".tar.gz

##########################################################################

--创建每天晚上10点自动执行备份动作:

$chmod a+x orabak.sh

$crontab -e

0 22 * * * /u01/orabak/orabak.sh

--如果条件允许,可以在自动备份脚本中增加 scp 上传,将备份的数据库压缩文件自动上传到文件备份服务器(以上脚本中有删除3天前的数据命令,即在本地保留3天数据,其他备份到文件备份服务器):

--#配置sftp上传

--1,在本机上创建密钥:

ssh-keygen -t dsa

--2,将公钥传给服务器:

scp id_dsa.pub 192.168.50.100:/root/.ssh

--3,登录服务器,将客户机公钥文件改成认证文件:

ssh 192.168.50.100

cd /root/.ssh

mv id_dsa.pub authorized_keys

--如果已经存在 authorized_keys 文件,则可以通过以下命令将公钥粘贴到 认证文件中:

cat id_dsa.pub >> authorized_keys

--更改属性:

chmod 600 authorized_keys

28,表回收站

删除的表会放到表回收站中。一旦表空间吃紧,Oracle会自动清空回收站中的对象。

下面,进行手工清空回收站及从回收站中取回删除的表:

1)查看回收站:

show recyclebin  或:

select * from recyclebin;

2)清空回收站中的表:

purge table [recyclebin name]

3)清空所有的表:

purge recyclebin;

4)彻底删除表(不把该表扔到回收站)

drop  table tb_name purge;

5)从回收站中捡回被删除的表:

flashback table table_name to before drop;

flashback table table_name to before drop rename to table_newname;

29,使用 merge into table_name using ... on ... when matched then ...有条件的多行插入一个表,参加《成功之路 oracle11g 学习笔记》 261 页

30,行列互换参见 275页;

31,查询表空间大小:

select tbs 表空间名,

sum(totalM) 总共大小M,

sum(usedM) 已使用空间M,

sum(remainedM) 剩余空间M,

sum(usedM)/sum(totalM)*100 已使用百分比,

sum(remainedM)/sum(totalM)*100 剩余百分比

from (

select b.file_id id,

b.tablespace_name tbs,

b.file_name name,

b.bytes/1024/1024 totalM,

(b.bytes - sum(nvl(a.bytes,0)))/1024/1024 usedM,

sum(nvl(a.bytes,0))/1024/1024 remainedM,

sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比,

(100-(sum(nvl(a.bytes,0))/(b.bytes)*100)) 已使用百分比

from dba_free_space a, dba_data_files b

where a.file_id =b.file_id

group by b.tablespace_name, b.file_name, b.file_id, b.bytes

order by b.tablespace_name

) group by tbs;

--如果以上命令的中文在linux环境下不好使,则使用以下命令:

select tbs TABLESPACE_NAME,

sum(totalM) TOTAL_SIZE,

sum(usedM) USEED_SIZE,

sum(remainedM) FREE_SIZE,

sum(usedM)/sum(totalM)*100 USED_percent,

sum(remainedM)/sum(totalM)*100 FREE_percent

from (

select b.file_id id,

b.tablespace_name tbs,

b.file_name name,

b.bytes/1024/1024 totalM,

(b.bytes - sum(nvl(a.bytes,0)))/1024/1024 usedM,

sum(nvl(a.bytes,0))/1024/1024 remainedM

from dba_free_space a, dba_data_files b

where a.file_id =b.file_id

group by b.tablespace_name, b.file_name, b.file_id, b.bytes

order by b.tablespace_name

) group by tbs;

调整表空间:

select * from dba_free_space;

alter database datafile '/u01/oradata/voddb/users01.dbf' resize 512M ;

----查找非临时表空间中各文件使用情况:

select

b.file_name 物理文件名,

b.tablespace_name 表空间,

b.bytes/1024/1024 大小M,

(b.bytes-sum(nvl(a.bytes,0)))/1024/1024  已使用M,

substr((b.bytes-sum(nvl(a.bytes,0)))/(b.bytes)*100,1,5)  利用率

from dba_free_space a,dba_data_files b

where a.file_id=b.file_id

group by b.tablespace_name,b.file_name,b.bytes

order by b.tablespace_name;

--如果以上命令的中文在linux环境下不好使,则使用以下命令:

select b.file_name FILE_NAME, b.tablespace_name TABLESPACE_NAME,

b.bytes/1024/1024 SIZE_M,

(b.bytes-sum(nvl(a.bytes,0)))/1024/1024  USED_M,

substr((b.bytes-sum(nvl(a.bytes,0)))/(b.bytes)*100,1,5) USED_percent

from dba_free_space a,dba_data_files b

where a.file_id=b.file_id

group by b.tablespace_name,b.file_name,b.bytes

order by b.tablespace_name;

----查找临时表空间使用情况:

SELECT a.tablespace_name, a.BYTES total, a.bytes - nvl(b.bytes, 0) free,

nvl(b.bytes, 0)/a.BYTES *100 "used(%)"

FROM (SELECT   tablespace_name, SUM (bytes) bytes FROM dba_temp_files GROUP BY tablespace_name) a,

(SELECT   tablespace_name, SUM (bytes_cached) bytes FROM v$temp_extent_pool GROUP BY tablespace_name) b

WHERE a.tablespace_name = b.tablespace_name(+);

追加联机日志文件:

select *  from v$log;

alter database add logfile group 1 '/oracle/product/10.2.0/oradata/DVN/redo01.log' size 200m;

alter database add logfile group 2 '/oracle/product/10.2.0/oradata/DVN/redo02.log' size 200m;

alter database add logfile group 3 '/oracle/product/10.2.0/oradata/DVN/redo03.log' size 200m;

alter database add logfile group 4 '/oracle/product/10.2.0/oradata/DVN/redo04.log' size 200m;

alter database add logfile group 5 '/oracle/product/10.2.0/oradata/DVN/redo05.log' size 200m;

alter system switch logfile;

alter system checkpoint;

alter database drop logfile group 1;

32,数据库EXPDP备份:

某地的数据库为双机热备系统,由于数据库比较小,导出速度在1、2分钟之内能够完成,因此,我们在主机和备机上都做一下备份。

备份的脚本,以及备份的目录都在/home/oracle/orabak内。

创建备份目录:

su - oracle

$mkdir u01/orabak

$sqlplus /nolog

conn sys/password@voddb as sysdba

create directory expdp_dir as '/u01/orabak';

grant read,write on directory expdp_dir to system;

exit

//主机orabak.sh脚本:

$ more orabak.sh

#!/bin/sh

##########################################################################

ORACLE_HOME=/u01/oracle//product/11.2.0/db_1

export ORACLE_HOME

ORACLE_SID=voddb

export ORACLE_SID

export NLS_LANG=american_america.zhs16gbk

rq=voddb1_`date +%d`

#rqyes=voddb`date +%d -d "3 days ago"`

echo "++++++++++++++++++" >> /tmp/oracle.log

if [ -f "${rq}".dmp ]

then rm ${rq}.dmp ${rq}.log

fi

$ORACLE_HOME/bin/expdp system/password@voddb DIRECTORY=expdp_dir REUSE_DUMPFILES=Y DUMPFILE="${rq}".dmp SCHEMAS=VOD LOGFILE="${rq}".log

test -e ${rq}.dmp || (scp oracle@172.16.101.19:/home/oracle/orabak/${rq}.dmp oracle@172.16.101.19:/home/oracle/orabak/${rq}.log .)

sleep 5

tar -cf - /home/oracle/orabak/"${rq}".dmp /home/oracle/orabak/"${rq}".log | gzip > /home/oracle/orabak/"${rq}".tar.gz

rm /home/oracle/orabak/"${rq}".dmp /home/oracle/orabak/"${rq}".log

##########################################################################

//备机的orabak.sh脚本:

$ more orabak.sh

#!/bin/sh

ORACLE_HOME=/u01/oracle//product/11.2.0/db_1

export ORACLE_HOME

ORACLE_SID=voddb

export ORACLE_SID

export NLS_LANG=american_america.zhs16gbk

rq=voddb2_`date +%d`

if [ -f "${rq}".dmp ]

then rm ${rq}.dmp ${rq}.log

fi

$ORACLE_HOME/bin/expdp system/password@voddb DIRECTORY=expdp_dir REUSE_DUMPFILES=Y DUMPFILE="${rq}".dmp SCHEMAS=VOD LOGFILE="${rq}".log

test -e ${rq}.dmp || (scp oracle@172.16.101.18:/home/oracle/orabak/${rq}.dmp oracle@172.16.101.18:/home/oracle/orabak/${rq}.log .)

sleep 5

tar -cf - /home/oracle/orabak/"${rq}".dmp /home/oracle/orabak/"${rq}".log | gzip > /home/oracle/orabak/"${rq}".tar.gz

rm /home/oracle/orabak/"${rq}".dmp /home/oracle/orabak/"${rq}".log

这里,需要双方配置下ssh密钥可访问的权限。因为,备机在expdp导出的时候,导出的文件也是放在主机,因此,需要把导出的dmp和log文件拷回到本机后进行压缩。

//在主机和备机使用oracle用户登录,都执行一下以下命令产生密钥:

$ ssh-keygen -d

//将备机的公钥传到主机(将主机的公钥也要传到备机)

$ scp id_dsa.pub root@172.16.101.18:/home/oracle/.ssh/authorized_keys

在主机及备机中,进行授权:

# cd /home/oracle/.ssh/

# chown -R oracle:oinstall *

# chmod 600 authorized_keys

33,--在一个用户所有的表的所有字段中,查询包含某串字符串的脚本(适用于小数据量schema):

--以下例子为在VOD用户的所有表的所有 VARCHAR2 字段的列中查询包含“山西某城”的所在的表。

declare

in_date  varchar2(100):='山西某城';

in_schema  varchar2(20):='VOD';

in_data_type  varchar2(20):='VARCHAR2';

v_tablename varchar2(28);

v_column_name varchar2(28);

v_sql varchar2(2000):='';

v_size number(2):=0;

cursor cur_data is

select TABLE_NAME from all_tables WHERE owner=in_schema;

cursor col_data(p_table_name in varchar2) is select column_name from All_Tab_Columns where owner=in_schema and table_name=p_table_name

and data_type=in_data_type;

begin

open cur_data;

loop

fetch cur_data into v_tablename;

exit when cur_data%notfound;

begin

v_sql :='';

open col_data(v_tablename);

loop

fetch col_data into v_column_name;

exit when col_data%notfound;

begin

if (v_sql is not null) then

v_sql := v_sql||' or ';

end if;

v_sql := v_sql ||v_column_name ||' like ''%'||in_date||'%''';

end;

end loop;

close col_data;

if (v_sql is not null) then

v_sql := 'select count(*) c_size from '||in_schema||'.'||v_tablename||' where '||v_sql||'';

--dbms_output.put_line(v_sql);

end if;

if (length(v_sql)>0) then

execute   immediate   v_sql   into   v_size;

if (v_size >0) then

dbms_output.put_line('schema:'||in_schema||' table_name:'|| v_tablename);

end if;

end if;

end;

end loop;

close cur_data;

end;

删除超过31天的备份文件(可以根据以下命令格式改成删除超过31天的oracle日志,并加入到操作系统的crontab定时执行守护进程中):

find /opt/oracle/dataBackUp -mtime +31 -type f -name '*.*' -exec rm -f {} \;

34,oracle日志处理(这里,摘录一些网上的资料):

/u01/oracle/diag/rdbms/voddb/voddb/trace/alert_voddb.log

/u01/oracle/diag/tnslsnr/vod-db2/listener/trace/listener.log

每周自动备份alert日志文件

定期备份Oracle (http://space.itpub.net/519536/viewspace-681984) alert日志文件是值得推崇的,因为非常繁杂的信息都会写入到alert日志文件中。随着时间的推移,alert日志将会变得越来越大,这样对于检索和定位故障带来了不便。

1.alert日志的管理方法

Oracle的alert日志文件的特殊性在于,即便该文件被误删除也不会对系统产生任何影响。当有新的警告信息需要写入到alert日志时,如找不到对应的警告日志文件,警告日志文件将会被系统自动创建。

基于这个特点,我们可以通过定期将alert日志重命名的方式实现备份管理。

将过大的alert文件拆分为多个小的文件的好处很多,例如在寻求Oracle服务时,可以比较便捷的找到并提供相应的警告日志。

2.实现alert的备份管理

使用Shell脚本结合cron可以完成每周重命名的目的。

具体实现如下。

1)重命名alert日志文件的Shell脚本

ora10g@asdlabdb01 /home/oracle$ vi mv_alert_log.sh

mv /oracle/app/oracle/admin/ora10g/bdump/alert_ora10g.log /oracle/app/oracle/admin/ora10g/bdump/alert_ora10g.`date +"%Y%m%d%H%M%S"`

~

~

没错,就包含这么简单的一条重命名命令。

重命名后的样例如下:

alert_ora10g.20101214215101

2)授予该脚本执行权限

ora10g@asdlabdb01 /home/oracle$ chmod +x mv_alert_log.sh

3)结合cron每周执行一次该重命名脚本

ora10g@asdlabdb01 /home/oracle$ crontab -e

crontab: no changes made to crontab

在cron中添加一条计划任务,内容如下:

10 1 * * 6 /home/oracle/mv_alert_log.sh 1>/dev/null 2>&1

表示每周六的1:10完成一次alert日志重命名备份的工作。

3.小结

一句话:alert日志文件需要特殊关照和管理。

除了本文介绍的通过重命名方式管理alert日志文件之外,欢迎好朋友们提出更多更好的方法。

上一篇 / 下一篇  2009-06-24 16:43:37 / 个人分类:oracle2008

查看( 1457 ) / 评论( 0 )

前一阵子,朋友管理的机器linux机器listener.log文件太大,导致硬盘空间不足,也怪自己当时分区/u01太小了.

远程指导一番问题还是解决了.

想一下,实际上可以通过logrotate来定时管理listener.log文件:

方法如下:

进入 /etc/logrotate.d目录,建立oracle文件,我参照squid的文件来配置:

/u01/app/oracle/product/10.2.0/db_1/network/log/listener.log {

size=200M

rotate 5

copytruncate

compress

notifempty

missingok

}

可以根据自己需求改变size的大小,也可以改用monthly参数。里面的参数我自己也不是太了解,大家熟悉可以看man文档吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值