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;


19,可以取消audit审计功能,将初始化参数audit_trail设置为NONE  http://blog.csdn.net/yobyin/article/details/8883441

   否则,可能会由于审计过于频繁导致数据库表空间用完后报错,甚至数据库不可用。  
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 [email protected]:/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 [email protected]:/home/oracle/orabak/${rq}.dmp [email protected]:/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 [email protected]:/home/oracle/orabak/${rq}.dmp [email protected]:/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 [email protected]:/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日志文件之外,欢迎好朋友们提出更多更好的方法。

另外一种解决方法(http://space.itpub.net/267265/viewspace-607459):
使用logrotate命令管理listener.log文件

上一篇 / 下一篇  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文档吧!

你可能感兴趣的:(ORACLE11g在CENTOS5.8下的安装)