akyou56 发表于 2018-9-14 09:45:58

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>  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)
  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=1024M0 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设置为NONEhttp://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 文件
  # Thethis 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>  --3,登录服务器,将客户机公钥文件改成认证文件:
  ssh 192.168.50.100
  cd /root/.ssh

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

  cat>  --更改属性:
  chmod 600 authorized_keys
  28,表回收站
  删除的表会放到表回收站中。一旦表空间吃紧,Oracle会自动清空回收站中的对象。
  下面,进行手工清空回收站及从回收站中取回删除的表:
  1)查看回收站:
  show recyclebin或:
  select * from recyclebin;
  2)清空回收站中的表:
  purge table
  3)清空所有的表:
  purge recyclebin;
  4)彻底删除表(不把该表扔到回收站)
  droptable 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>  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>  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>  (b.bytes-sum(nvl(a.bytes,0)))/1024/1024USED_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'>
  alter database add logfile group 2 '/oracle/product/10.2.0/oradata/DVN/redo02.log'>
  alter database add logfile group 3 '/oracle/product/10.2.0/oradata/DVN/redo03.log'>
  alter database add logfile group 4 '/oracle/product/10.2.0/oradata/DVN/redo04.log'>
  alter database add logfile group 5 '/oracle/product/10.2.0/oradata/DVN/redo05.log'>  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>  在主机及备机中,进行授权:
  # cd /home/oracle/.ssh/
  # chown -R oracle:oinstall *
  # chmod 600 authorized_keys
  33,--在一个用户所有的表的所有字段中,查询包含某串字符串的脚本(适用于小数据量schema):
  --以下例子为在VOD用户的所有表的所有 VARCHAR2 字段的列中查询包含“山西某城”的所在的表。
  declare
  in_datevarchar2(100):='山西某城';
  in_schemavarchar2(20):='VOD';
  in_data_typevarchar2(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文档吧!

页: [1]
查看完整版本: ORACLE11g在CENTOS5.8下的安装