AIX操作系统上安装Oracle数据库必不可少的几项检查工作

一直以来在UNIX/Linux like操作系统上安装Oracle数据库软件都是一门精细活,在实际安装软件前有不少操作系统参数或配置需要我们关心。我们以10g release 2为例,尽可能完整地列出所有有必要的预检查工作。

1.确认使用的AIX版本经过认证,AIX 5.2之前的版本包括5.1都没有通过Oracle 10g的认证,换而言之如果你要安装10g的话就要保证AIX的版本>=5.2,我们可以通过以下脚本进行验证:

[Read more…]

AIX平台上大型OLTP数据库的shutdown问题

客户的新系统上线已经一年有余,核心系统硬件采用IBM P595,操作系统版本AIX 5300-09,存储使用DS6000,数据库版本为10.2.0.4,没有打额外的patch set update.此套系统平时会话数量在2000-3000的水平,每秒新建会话在10个左右。

客户这套系统一直有一个问题,即每次准备关闭实例进行一些维护工作时,在多次手动执行检查点(确保脏块被写出)后,shudown immediate命令仍需要非常长的时间才完成关闭数据库动作;之前客户一直使用在shutdown之前将大部分应用服务进程杀死的方法,可以缩短 shutdown immediate命令完成的时间。

实际上服务进程在2000-3000的OLTP系统在当前已经很普及了,而在其他平台上(譬如:Linux,SUN OS)上则不会出现一个shutdown操作持续半个小时以上的情况。

通过查询My Oracle support发现一个9i上shutdown immediate费时半个小时的note:

Hdr: 3484589 9.2.0.4.0 RDBMS 9.2.0.4.0 PRODID-5 PORTID-212
Abstract: BUG:3046394  WHICH IS A REWORK OF BUG :2674297 DOES NOT  STILL FIX THE PROBLEM.
PROBLEM:
--------
Shutdown abort on AIX5L takes 7 min. and Shutdown immediate takes 30 min.
Patch for the bug 3046394( which is a rework of Bug 2674297) is applied ,but
there is no improvement in the time taken ot shutdown.
The problem is same as addressed in these two bugs but has not been fixed.

2. Pertinent configuration information
none

3. Indication of the frequency and predictability of the problem
Consistent.

4. Sequence of events leading to the problem
Shutdown abort

5. Technical impact on the customer. Include persistent after effects.
Shutdown taking a long time which is unacceptable to the  Customer.

DIAGNOSTIC ANALYSIS:
--------------------
From the alert log we see time taken for shutdown is around 7 min.
The patch 3046394 is applie,which is confirmed form the output of
Apply_3046394_02-20-2004_19-11-35.log

The shutdown abort was tried again now,it still takes the same amount of time.

The system calls made by the shutdown abort include:-
(These are a subset of the total Kill calls made)
196022:    kill(359980, 9)                    = 0
196022:    kill(359980, 9)                    = 0
196022:    kill(359980, 0)                    = 0
196022:    _nsleep(0x0FFFFFFFFFFF9D80, 0x0FFFFFFFFFFF9E50)    = 0
196022:    kill(359980, 0)                    = 0
196022:    _nsleep(0x0FFFFFFFFFFF9D80, 0x0FFFFFFFFFFF9E50)    = 0
196022:    kill(359980, 0)                    = 0
196022:    _nsleep(0x0FFFFFFFFFFF9D80, 0x0FFFFFFFFFFF9E50)    = 0
196022:    kill(359980, 0)                    = 0
196022:    _nsleep(0x0FFFFFFFFFFF9D80, 0x0FFFFFFFFFFF9E50)    = 0

WORKAROUND:
-----------
No Workaround available.

RELATED BUGS:
-------------
Bug:3046394 , Bug :2674297

另一个文档指出,shutdown abort慢的主要原因Oracle关闭进程使用的是system call kill()函数,Bug 3484589的补丁中已经将Oracle 在shutdown实例时可能的等待问题移除了。

Shutdown abort taking long time on AIX (patch 3046394 applied) [ID 274399.1]
Applies To

Oracle Server - Enterprise Edition - Version: 9.2.0.1 to 9.2.0.4
AIX5L Based Systems (64-bit)
Symptoms

Shutdown abort taking a long time to complete on AIX.
Cause
This has been filed as bug 2674297. The wait time was reduced to shorten the shutdown time. This still 
takes around 50ms for each process to be terminated. This has been re-worked in Bug 3046394 to remove the 
delay during the shutdown and compensate for it during database startup.
But we still see the delay in shutdown abort on AIX. The delay during shutdown abort persists after applying 
the above patch (3046394) due to OS level handling of the shutdown command.

Fix
There is no fix. The problem still persists at the OS level. This is because of the way the kill command is 
processed at the OS level. Bug 3484589, has clearly mentioned that all the waits from the Oracle side have 
been removed. There is no further code that can be implemented to reduce the time at shutdown.

另一个文档则指出了这种连shutdown abort都慢的情况仅出现在AIX平台上:

Hdr: 3485690 9.2.0.3 RDBMS 9.2.0.3 OSD PRODID-5 PORTID-319 3046394
Abstract: SHUTDOWN ABORT TAKES A LONG TIME ON IBM AIX
PROBLEM:
--------
Ct has up to  8000 connections on their database. When they issue a shutdown
abort, it takes 8 minutes to complete. With 175 connections, it took 2.5
minutes to shutdown abort. With no one attached it takes 14 seconds.

When I test this on our database in house, AIX took 12 seconds to shutdown.
Linux takes .2 seconds, as does Solaris, and Windows 2000.

DIAGNOSTIC ANALYSIS:
--------------------
Applied patch for bug 2674297, and shutdown abort with 5000 connections took 5
minutes.

看起来这是一个操作系统调用引起的问题,且因为是操作系统的问题,Oracle无法提供进一步彻底解决方法;

总结起来当服务进程数量较多时,在AIX平台上shutdown immediate的缓慢程度往往是用户无法接受的,我们可以采取一个折中的方案,使用shutdown abort来缩短关闭实例所用的时间:

1.  alter system checkpoint;             -- 手动做检查点三次,保证脏块写出

2.  shutdown abort;                      -- abort实例,相当于断电

3.  startup restrict ;                   -- 以限制模式开启实例,普通应用此时无法连接数据库,故不会产生额外的服务进程

4.  shutdown normal;                     -- 以普通模式关闭实例,会再次进行完全检查点,并回滚事务

其中第二步的shutdown abort,可以以杀死pmon进程的方式替代(这样其实会更快);采用以上折中方式前,请确认您的online redo log处于复用或已镜像的状态下。

AIX学习经典书籍:AIX 5L Administration

McGraw-Hill出版的经典AIX学习书籍,作者是Randal K.michael, 仅作学习研究用途。

AIX5L_administration

【转】TSM5.3安装步骤

安装步骤

2.1 安装TSM服务器

创建/usr/Tivoli/tsm 文件系统,大小1G左右

放入安装介质,smit installp

安装如下组件

tivoli.tsm.server.aix5.rte64

tivoli.tsm.server.com       

tivoli.tsm.server.webcon    

tivoli.tsm.server.aix5.rte64

tivoli.tsm.server.com     

 

2.2 安装TSM备份归档客户机

放入AIX client 安装介质,smit installp

安装如下组件

tivoli.tsm.client.api.64bit

  tivoli.tsm.client.api.jfs2

  tivoli.tsm.client.ba.jfs2.base

  tivoli.tsm.client.ba.jfs2.common

  tivoli.tsm.client.ba.jfs2.image

  tivoli.tsm.client.ba.jfs2.nas

  tivoli.tsm.client.ba.jfs2.web

 

2.3 安装ORACLE TDP

放入tivoli data protection for oracle 安装介质,smit installp

安装如下组件

 

tivoli.tsm.client.oracle.aix51.64bit

tivoli.tsm.client.oracle.tools.aix51.64bit

2.4 安装SAN Agent

放入SAN Agent 安装介质,smit installp

安装如下组件

tivoli.tsm.StorageAgent.rte

tivoli.tsm.devices.aix5.rte

三、配置步骤

3.1 配置TSM 服务端

1 修改环境变量

在TSM Server的.profile文件增加如下内容:
export DSMSERV_DIR=/usr/tivoli/tsm/server/bin
export DSMSERV_CONFIG=/usr/tivoli/tsm/server/bin/dmserv.opt
2注册license , register lic file=* number=20

审核license  audit lic

3定义库以及库路径

define library lib3582 libtype=SCSI SERial=AUTODetect  AUTOLabel=no  SHARED=yes RESETDrives=Yes

define path  tsm  lib3582 srctype=server  desttype=library device=/dev/smc0 online=yes

4定义驱动器以及驱动器路径

define drive lib3582 drv0 online=yes element=256

define drive lib3582 drv1 online=yes element=257

define path  tsm drv0 srctype=server desttype=drive library=lib3582 device=/dev/rmt0 online=yes

define path  tsm drv1 srctype=server desttype=drive library=lib3582 device=/dev/rmt1 online=yes

5定义设备类

define devclass lto2dev library=lib3582 devtype=lto

6 检入库卷

label libvolume lib3582 search=yes checkin=scratch LABELSource=Barcode

 OVERWRITE=yes VOLRange=zy9580,zy9599

7 定义TSM DB卷,并扩展

define dbvolume /usr/tivoli/tsm/server/db1.dsm  f=500

extend db 500

8 定义 TSM LOG卷,并扩展

define logvolume /usr/tivoli/tsm/server/log1.dsm  f=256

extend log 500

9 定义存储池

define stgpool P5_FS_POOL lto2dev maxscratch=0

define volume P5_FS_POOL zy9582

define volume P5_FS_POOL zy9583

define stgpool P5_ORA_POOL lto2dev maxscratch=0

define volume P5_ORA_POOL zy9595

define volume P5_ORA_POOL zy9596

define volume P5_ORA_POOL zy9597

define volume P5_ORA_POOL zy9598

define volume P5_ORA_POOL zy9599

10 定义策略域

 

define domain P5_FS_DOMAIN

define policyset P5_FS_DOMAIN P5_FS_SET

define mgmtclass  P5_FS_DOMAIN P5_FS_SET P5_FS_CLASS

define copygroup  P5_FS_DOMAIN P5_FS_SET P5_FS_CLASS standard type=backu destination=P5_FS_POOL

assign defmgmtclass P5_FS_DOMAIN  P5_FS_SET P5_FS_CLASS

activate policyset P5_FS_DOMAIN P5_FS_SET

 

define domain P5_ORA_DOMAIN

define policyset P5_ORA_DOMAIN P5_ORA_SET

define mgmtclass  P5_ORA_DOMAIN P5_ORA_SET P5_ORA_CLASS

define copygroup  P5_ORA_DOMAIN P5_ORA_SET P5_ORA_CLASS standard type=backu destination=P5_ORA_POOL VERExists=1 VERDeleted=0 RETExtra=0 RETOnly=0

assign defmgmtclass P5_ORA_DOMAIN  P5_ORA_SET P5_ORA_CLASS

activate policyset P5_ORA_DOMAIN P5_ORA_SET

11 注册客户机

register node P570_FS p570_fs domain=P5_FS_DOMAIN backdelete=yes archdelete=yes passe=0

register node P550_FS p550_fs domain= P5_FS_DOMAIN backdelete=yes archdelete=yes passe=0

 

register node P570_TDPO p570_tdpo domain=P5_ORA_DOMAIN backdelete=yes archdelete=yes passe=0

register node P550_TDPO p550_tdpo domain= P5_ORA_DOMAIN backdelete=yes archdelete=yes passe=0

12 定义管理调度

 

DEFine SCHedule bkupdb Type=Administrative  CMD=’backup db type=full devclass=lto2dev volumenames=zy9580 scratch=no’ ACTIVE=yes STARTTime=12:00:00

DEFine SCHedule delvolhist Type=Administrative CMD=’DELete VOLHistory TODate=today-1 type=dbbackup’ ACTIVE=Yes STARTTime=11:50:00

 

13 启动TSM 服务器

   到/usr/tivoli/tsm/server/bin

   nohup dsmserv&

 

3.2 配置TSM 客户端

1 修改环境标量

在TSM Client的.profile文件增加如下内容:
export DSM_DIR=/opt/tivoli/tsm/client/ba/bin
export DSM_CONFIG=/opt/tivoli/tsm/client/ba/bin/dsm.opt
export DSM_LOG=/opt/tivoli/tsm/client/ba/bin

export DSMI_CONFIG=/opt/tivoli/tsm/client/api/bin64/dsm.opt

export DSMI_DIR=/opt/tivoli/tsm/client/api/bin64

export DSMI_LOG=/opt/tivoli/tsm/client/api/bin64

 

 

2修改/usr/tivoli/tsm/client/ba/bin 目录下的dsm.opt 以及dsm.sys 文件如下

dsm.opt

 

dsm.sys

 

 

3 用命令dsmc 启动命令行客户机,连接TSM 服务器看是否成功

3.3 配置ORACLE TDP

1修改tdpo.opt 如下:

 

 

2 修改/usr/tivoli/tsm/client/api/bin64 目录下的dsm.opt 以及dsm.sys 文件如下:

dsm.opt

 

dsm.sys

 

 

3 生成密码文件

tdpoconf password –tdpo_optfile=/usr/tivoli/tsm/client/oracle/bin64/tdpo.opt

4. 链接libobk.a

ln –s /usr/lib/libobk.a  $ORACLE_HOME/lib64/libobk.a

链接完后重新启动数据库

5        sbttest 测试是否TDP和ORACLE 链接成功

 $ORACLE_HOME/bin/sbttest test

6  安装Catalog 数据库

6.1为恢复目录单独创建表空间catalog_tbs,

6.2创建恢复目录用户

CREATE USER rman IDENTIFIED BY rman DEFAULT TABLESPACE catalog_tbs;

6.3 为用户rcat_user 赋予角色

GRANT connect,resource,recovery_catalog_owner TO rman;

6.4 使用RMAN 连接恢复目录

RMAN  catalog=rman/rman@rman9i

6.5 在RMAN 提示符下创建catalog

create catalog tablespace catalog_tbs;

6.5 使用RMAN 同时连接目标数据和恢复目录

set ORACLE_SID=nc31

RMAN target /  catalog=rman/rman@rman9i

6.6使用恢复目录注册数据库

RMAN>Register database;

 

7.如果sbttest 不成功 需要执行这一步

 7.1添加errorlogname  /oracle/mytdpo.log 到DSMI_DIR下的 dsm.sys文件

  7.2重新运行tdpo password 命令生成密码

7.3进入/oracle 目录确认生成了mytdpo.log 文件

7.4更改mytdpo.log  的权限,

chmod 666 /oracle/mytdpo.log

chown oracle:dba /oracle/mytdpo.log

3.4 配置SAN Agent

1 修改/usr/tivoli/tsm/StorageAgent/bin/dsmsta.opt 增加一行

  DEVCONFIG   devconfig.out

2 使用如下命令

  dsmsta setstorageserver myname=storagent mypassword=storagent myhladdress=172.16.1.12 servername=tsm serverpassword=tsm hladdress=172.16.1.21 lladdress=1500

  这条命令在devconfig.txt 文件产生如下行:

 

  这条命令在dsmsta.opt 产生如下行:

  SERVERNAME    TSM

3 在TSM server 上发出如下命令

    set servername TSM

set serverpassword tsm

set serverhladdress 172.16.1.21

set serverlladdress 1500

set crossdefine on

   设置完可以用q status  查看结果

4 在TSM server 上为san agent 定义服务器

define server storagnt serverpassword=storagnt hladdress=172.16.1.12 lladdress=1500 validateprotocol=all

 

6        在TSMserver 上定义源服务器为storagnt 的驱动器路径

define path storagnt drv0 srctype=server desttype=drive library=lib3582 device=/dev/rmt0

define path storagnt drv1 srctype=server desttype=drive library=lib3582 device=/dev/rmt1

 

7        为启用lan-free 修改客户机的dsm.sys 文件增加

   LANFREECOMMMETHOD TCPIP

   LANFREECOMMMETHOD SHAREDMEM

   LANFREETCPPORT 1500

   LANFREESHMPORT 1510

   enablelanfree      yes

 

8        启动san agent

nohup  dsmsta&

四、TSM 策略域,存储池配置列表

4.1 策略域概要配置

 

Policy Domain Name Policy Set Management Class Default (Y/N) Backup Copy Group Archive Copy Group Storage Pool
P5_FS_DOMAIN standard standard Y standard standard P5_FS_POOL
P5_ORA_DOMAIN standard standard Y standard standard P5_ORA_POOL
             

 

4.2 策略域详细配置

策略域: P5_FS_DOMAIN
备份副本组
Type BACKUP 副本组的类型是备份.
DESTINATION P5_FS_POOL 目标存储池是(请参考存储池定义表).
FREQUENCY 0 可以立即备份刚刚备份过的文件
VEREXISTS 2 在客户机文件系统上存在的文件最多保留的2个备份版本
VERDELETED 1 在客户机文件系统上不存在的文件最多保留的1个备份版本
RETEXTRA 30 当备份版本到期后30天删除.
RETONLY 60 从客户机上删除的文件保留最新的版本60天
MODE Absolute 不管上次备份的文件是否改变都进行备份
SERIALIZATION Static 备份没有正在被修改文件并仅尝试一次

 

策略域: P5_ORA_DOMAIN
备份副本组
Type BACKUP 副本组的类型是备份.
DESTINATION P5_ORA_POOL 目标存储池是(请参考存储池定义表).
FREQUENCY 0 可以立即备份刚刚备份过的文件
VEREXISTS 1 在客户机文件系统上存在的文件最多保留的2个备份版本
VERDELETED 0 在客户机文件系统上不存在的文件最多保留的1个备份版本
RETEXTRA 0 当备份版本到期后立即删除.
RETONLY 0 从客户机上删除的文件保留最新的版本60天
MODE Absolute 不管上次备份的文件是否改变都进行备份
SERIALIZATION Static 备份没有正在被修改文件并仅尝试一次

4.3节点配置

Node name

password

Policy domain

note

P550_FS p550_fs P5_FS_DOMAIN 550文件系统备份
P550_TDPO p550_tdpo P5_ORA_DOMAIN 550 Oracle备份
P570_FS p570_fs P5_FS_DOMAIN 570文件系统备份
P570_TDPO p570_tdpo P5_ORA_DOMAIN 570 Oracle备份

 

4.4存储池配置

POOL name

VOLUME

P5_FS_POOL ZY9582,ZY9583
P5_ORA_POOL ZY9595,ZY9596,ZY9597,ZY9598,ZY9599

 

 

五、Oracle 备份策略,调度和备份脚本

5.1 备份策略和调度

每周日凌晨1点增量0 备份,周4 凌晨1点增量1备份,周一,二,三,五,六凌晨1点做增量2备份 。每天每隔4个小时做一次归档日志的备份。

每天凌晨5点删除15天以前的归档,每天凌晨6点删除15天前的DB备份。

 

查看oracle 用户的调度 crontab –l

0 1 * * 0 /oracle/rmanscript/incr0.sh &

0 1 * * 4 /oracle/rmanscript/incr1.sh &

0 1 * * 1,2,3,5,6 /oracle/rmanscript/incr2.sh &

0 5 * * * /oracle/rmanscript/dele_arch.sh &

0 6 * * * /oracle/rmanscript/dele_tape.sh &

0 4,8,12,16,20 * * * /oracle/rmanscript/arch.sh &

5.2 备份脚本

5.2.1 incr0.sh 增量0备份

. /oracle/.profile

target=’target /’    

rcvcat=’catalog rman/rman@rman9i’

 

# Get the current time for constructing a fairly unique filename in /tmp:

time=`date ‘+%m%d%H’`

 

# Construct filenames using $time for uniqueness:

 

cmdfile=/oracle/rmanscript/log/incr0_$time.rcv

msglog=/oracle/rmanscript/log/incr0_$time.log

 

cat <<EOF >$cmdfile

run{

    allocate channel sbt1 type ‘SBT_TAPE’;

    resync catalog;

 

    sql ‘alter system archive log current’ ;

    

    backup

     filesperset 10

      format ‘arch_%s_%p’

     (archivelog like ‘/oradata/archivelog/%’ delete input channel sbt1);

   

    backup

      format ‘cf_%s_%p’

      (current controlfile);

 

    backup

       incremental level 0

       filesperset 10

       tag ‘incr_level_0’

       format ‘incr0_%u_%p_%c’

       database;

  

   sql ‘alter system archive log current’ ;

 

   backup

      filesperset 10

      format ‘arch_%s_%p’

     (archivelog like ‘/oradata/archivelog/%’ delete input channel sbt1)

 

    release channel sbt1;

  }

EOF

 

rman $target $rcvcat cmdfile $cmdfile msglog $msglog

 

exit

5.2.2 incr1.sh 增量1备份

. /oracle/.profile

target=’target /’    

rcvcat=’catalog rman/rman@rman9i’

 

# Get the current time for constructing a fairly unique filename in /tmp:

time=`date ‘+%m%d%H’`

 

# Construct filenames using $time for uniqueness:

 

cmdfile=/oracle/rmanscript/log/incr1_$time.rcv

msglog=/oracle/rmanscript/log/incr1_$time.log

 

cat <<EOF >$cmdfile

run{

allocate channel sbt1 type ‘SBT_TAPE’;

resync catalog;

 

    sql ‘alter system archive log current’ ;

    

    backup

     filesperset 10

      format ‘arch_%s_%p’

     (archivelog like ‘/oradata/archivelog/%’ delete input channel sbt1);

    

  backup

      format ‘cf_%s_%p’

      (current controlfile);

 

    backup

       incremental level 1

       filesperset 10

       tag ‘incr_level_1’

       format ‘incr1_%u_%p_%c’

       database;

  

   sql ‘alter system archive log current’ ;

 

   backup

      filesperset 10

      format ‘arch_%s_%p’

     (archivelog like ‘/oradata/archivelog/%’ delete input channel sbt1);

    

    release channel sbt1;

  

  }

EOF

 

rman $target $rcvcat cmdfile $cmdfile msglog $msglog

 

exit

 

5.2.3 incr2.sh 增量2备份

. /oracle/.profile

target=’target /’    

rcvcat=’catalog rman/rman@rman9i’

 

# Get the current time for constructing a fairly unique filename in /tmp:

time=`date ‘+%m%d%H’`

 

# Construct filenames using $time for uniqueness:

 

cmdfile=/oracle/rmanscript/log/incr2_$time.rcv

msglog=/oracle/rmanscript/log/incr2_$time.log

 

cat <<EOF >$cmdfile

run{

    allocate channel sbt1 type ‘SBT_TAPE’;

    resync catalog;

 

    sql ‘alter system archive log current’ ;

    

    backup

     filesperset 10

      format ‘arch_%s_%p’

     (archivelog like ‘/oradata/archivelog/%’ delete input channel sbt1);

 

    backup

      format ‘cf_%s_%p’

      (current controlfile);

 

    backup

       incremental level 2

       filesperset 10

       tag ‘incr_level_2’

       format ‘incr2_%u_%p_%c’

       database;

  

   sql ‘alter system archive log current’ ;

 

   backup

      filesperset 10

      format ‘arch_%s_%p’

     (archivelog like ‘/oradata/archivelog/%’ delete input channel sbt1)

   

 

    release channel sbt1;

   

  }

EOF

 

rman $target $rcvcat cmdfile $cmdfile msglog $msglog

 

exit

5.2.4 arch.sh 归档日志备份

. /oracle/.profile

 

target=’target /’    

rcvcat=’rcvcat rman/rman@rman9i’

 

# Get the current time for constructing a fairly unique filename in /tmp:

time=`date ‘+%m%d%H’`

 

# Construct filenames using $time for uniqueness:

 

cmdfile=/oracle/rmanscript/log/arch_$time.rcv

msglog=/oracle/rmanscript/log/arch_$time.log

 

cat <<EOF >$cmdfile

run{

   allocate channel sbt1 type ‘SBT_TAPE’ ;

 

   resync catalog;

   sql ‘alter system archive log current’ ;

   backup

     filesperset 10

     format ‘arch_%s_%p’

     (archivelog like ‘/oradata/archivelog/%’ delete input channel sbt1);

 

   release channel sbt1;

 

}

EOF

 

rman $target $rcvcat cmdfile $cmdfile msglog $msglog

 

exit

5.2.5 del_arch.sh定期删除归档日志备份

# Initialize default connect string variables:

. /oracle/.profile

target=’target /’

rcvcat=’rcvcat rman/rman@rman9i’

 

time=`date ‘+%m%d%H’`

# Initialize filenames:

 

obsolete_tape=/oracle/rmanscript/log/arch_tape_$time.log   # list of obsolete tape backups

cmdfile=/oracle/rmanscript/log/delete_arch$time.cmd          # the generated RMAN commmand script

delete_log=/oracle/rmanscript/log/deleted_arch_$time.log      # execution log from generated script

 

# Get a list of obsolete tape files:

 

rman msgno $target $catalog msglog $obsolete_tape << EOF > /dev/null

list backup of archivelog until time ‘sysdate-15’;

exit;

EOF

 

# sed actions:

 

 

del_bpiece=”-e /AVAILABLE/ s/\(.* \)\(.*\)$/change backuppiece ‘\2’ delete;/”

 

#echo “allocate channel for delete type ‘sbt_tape’ ;” > $cmdfile

 

grep AVAILABLE $obsolete_tape | sed “$del_bpiece” >> $cmdfile

 

echo “release channel;” >> $cmdfile

 

#

# Execute the RMAN command file to delete the obsolete files:

#

rman msgno $target $rcvcat msglog $delete_log cmdfile $cmdfile

 

exit

      

5.2.6 del_tape.sh 定期删除数据库备份

# Initialize default connect string variables:

. /oracle/.profile

target=’target /’

rcvcat=’catalog rman/rman@rman9i’

 

time=`date ‘+%m%d%H’`

# Initialize filenames:

 

obsolete_tape=/oracle/rmanscript/log/ob_tape_$time.log   # list of obsolete tape backups

cmdfile=/oracle/rmanscript/log/delete$time.cmd          # the generated RMAN commmand script

delete_log=/oracle/rmanscript/log/deleted_$time.log      # execution log from generated script

 

# Get a list of obsolete tape files:

 

rman msgno $target $catalog msglog $obsolete_tape << EOF > /dev/null

report obsolete redundancy=1 until time ‘sysdate-15’ device type ‘sbt_tape’;

#report obsolete device type ‘sbt_tape’;

exit;

EOF

 

# sed actions:

 

 

del_bpiece=”-e /RMAN-06285/ s/\(.* \)\(.*\)$/change backuppiece ‘\2’ delete;/”

 

echo “allocate channel for delete type ‘sbt_tape’ ;” > $cmdfile

 

grep RMAN-06285 $obsolete_tape | sed “$del_bpiece” >> $cmdfile

 

echo “release channel;” >> $cmdfile

 

#

# Execute the RMAN command file to delete the obsolete files:

#

rman msgno $target $rcvcat msglog $delete_log cmdfile $cmdfile

 

exit

六 FAQ

1.      如何启动和停止TSM 服务器

方法一:

启动:进入/usr/tivoli/tsm/server/bin 目录

输入命令 dsmserv          

      停止:在dsmserv 的提示符TSM:TSM>下

输入halt 

 

方法二:

启动:进入/usr/tivoli/tsm/server/bin目录

输入命令 nohup dsmserv&

停止:ps –ef | grep dsm 查看dsmserv 的进程号

      kill 进程号

 tail –f nohup.out 查看日志

当机器重新启动时,TSM 服务器依靠

/etc/inittab 中的

自动启动

 

2 如何启动管理命令行接口

  直接在系统提示符下输入

  dsmadmc

  提示输入user id : 这里为admin

  提示输入password 这里为 admin

  然后进入TSM 管理命令行

 

  若要更改admin的password

  输入:update admin admin newpassword

 

3如何启动WEB管理接口

 打开IE ,输入http://172.16.1.21:8041/ibm/console

 用户名:iscadmin

 口令  :password

 如果打开页面无效

 进入/opt/IBM/ISC/PortalServer/bin 输入startISC.sh ISC_Portal

 

4 如何进行文件系统的备份

  直接在系统提示符下输入命令如:

  备份/usr 目录及下面的子目录dsmc sel /usr/ -subdir=yes

  单独备份/etc/host 文件      dsmc sel /etc/host

 

 

  

5 如何查看备份

  oracle连接rman

  rman target / catalog rman/rman@rman9i

5.1概述可用的备份       

RMAN>list backup summary;

 B 表示 backup

 F 表示 FULL

 A 表示 archive log

 0 1 表示 incremental backup

 

5.2按备份类型列出备份   

RMAN>list backup by file;

按照 数据文件备份,归档日志备份,控制文件备份,服务器参数文件备份  列出

 

5.3列出详细备份         

RMAN>list backup;

      

 

5.4列出表空间和数据文件备份

list backup of tablespace 和list backup of datafile 输出和list backup 相似 如:list backup of tablespace user_tbs;

 list backup of datafile 3;

 

5.5列出归档日志备份     

RMAN>list archivelog all;            简要信息

RMAN>list backup of archivelog all;  详细信息

 

5.6列出控制文件和服务器参数文件

 RMAN>list backup of controfile;

 RMAN>list backup of spfile;

 

6如何进行数据库故障恢复

如果安装配置了OEM 可以使用恢复向导进行恢复

步骤

1 startup mount

2 restore database

3 recover database

4 alter database open resetlogs

 

7 如何查看RMAN备份日志验证是否备份成功。

 rman 的备份日志放在/oracle/rmanscript/log 目录下,

根据时间以及备份级别命名

incr0_110915.log 表示11月9号15时做的增量0 备份

查看日志

如果日志结尾为

Recovery Manager complete.

表示该级别的备份成功

 

如果日志包含如下:

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

表示有错误 需要更正。

 

七 恢复

当数据库出现故障 需要进行恢复,运行脚本restore.sh

su – oracle

cd /rmanscript

./restore.sh

还原结束后,查看还原日志,看是否成功

日志位于/oracle/rmanscript/log 目录下

日志示例:

Recovery Manager: Release 9.2.0.6.0 – 64bit Production

 

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

 

connected to target database (not started)

connected to recovery catalog database

 

RMAN> startup nomount;

2> run

3> {

4> allocate channel sbt1 type ‘sbt_tape’;

5> restore controlfile;

6> alter database mount;

7> restore database;

8> recover database;

9> alter database open resetlogs;

10> release channel sbt1;

11> }

12>

Oracle instance started

 

Total System Global Area     320308816 bytes

 

Fixed Size                      742992 bytes

Variable Size                285212672 bytes

Database Buffers              33554432 bytes

Redo Buffers                    798720 bytes

 

allocated channel: sbt1

channel sbt1: sid=13 devtype=SBT_TAPE

channel sbt1: Tivoli Data Protection for Oracle: version 5.2.0.0

 

Starting restore at 10-NOV-05

 

channel sbt1: starting datafile backupset restore

channel sbt1: restoring controlfile

output filename=/oradata/oratest/control01.ctl

channel sbt1: restored backup piece 1

piece handle=oratestfull_03h3dd2p_1_1 tag=ORATEST_FULL params=NULL

channel sbt1: restore complete

replicating controlfile

input filename=/oradata/oratest/control01.ctl

output filename=/oradata/oratest/control02.ctl

output filename=/oradata/oratest/control03.ctl

Finished restore at 10-NOV-05

 

database mounted

 

Starting restore at 10-NOV-05

 

channel sbt1: starting datafile backupset restore

channel sbt1: specifying datafile(s) to restore from backup set

restoring datafile 00001 to /oradata/oratest/system01.dbf

restoring datafile 00003 to /oradata/oratest/cwmlite01.dbf

restoring datafile 00004 to /oradata/oratest/drsys01.dbf

restoring datafile 00008 to /oradata/oratest/tools01.dbf

restoring datafile 00011 to /oradata/oratest/NNC_DATA01.dbf

restoring datafile 00013 to /oradata/oratest/NNC_DATA03.dbf

restoring datafile 00015 to /oradata/oratest/NNC_INDEX02.dbf

channel sbt1: restored backup piece 1

piece handle=oratestfull_03h3dd2p_1_1 tag=ORATEST_FULL params=NULL

channel sbt1: restore complete

channel sbt1: starting datafile backupset restore

channel sbt1: specifying datafile(s) to restore from backup set

restoring datafile 00002 to /oradata/oratest/undotbs01.dbf

restoring datafile 00005 to /oradata/oratest/example01.dbf

restoring datafile 00006 to /oradata/oratest/indx01.dbf

restoring datafile 00007 to /oradata/oratest/odm01.dbf

restoring datafile 00009 to /oradata/oratest/users01.dbf

restoring datafile 00010 to /oradata/oratest/xdb01.dbf

restoring datafile 00012 to /oradata/oratest/NNC_DATA02.dbf

restoring datafile 00014 to /oradata/oratest/NNC_INDEX01.dbf

restoring datafile 00016 to /oradata/oratest/NNC_INDEX03.dbf

channel sbt1: restored backup piece 1

piece handle=oratestfull_04h3dd3s_1_1 tag=ORATEST_FULL params=NULL

channel sbt1: restore complete

Finished restore at 10-NOV-05

 

Starting recover at 10-NOV-05

 

starting media recovery

 

archive log thread 1 sequence 4 is already on disk as file /oradata/oratest/redo03.log

archive log thread 1 sequence 5 is already on disk as file /oradata/oratest/redo01.log

archive log filename=/oradata/oratest/redo03.log thread=1 sequence=4

archive log filename=/oradata/oratest/redo01.log thread=1 sequence=5

media recovery complete

Finished recover at 10-NOV-05

 

database opened

new incarnation of database registered in recovery catalog

starting full resync of recovery catalog

full resync complete

 

released channel: sbt1

 

Recovery Manager complete.

附录:还原测试

创建新库test ,导入数据从NC31

1.      还原之前先对数据库做一次备份

  . /oracle/.profile

target=’target sys/sys@test’    

rcvcat=’catalog rman/rman@rman9i’

 

# Get the current time for constructing a fairly unique filename in /tmp:

time=`date ‘+%m%d%H’`

 

# Construct filenames using $time for uniqueness:

 

cmdfile=/oracle/rmanscript/log/test_$time.rcv

msglog=/oracle/rmanscript/log/test_$time.log

 

cat <<EOF >$cmdfile

run{

    allocate channel sbt1 type ‘SBT_TAPE’;

    resync catalog;

 

    sql ‘alter system archive log current’ ;

    

    backup

     filesperset 10

      format ‘testarch_%s_%p’

     (archivelog like ‘/oradata/testarchivelog/%’ delete input channel sbt1);

 

    backup

      format ‘testcf_%s_%p’

      (current controlfile);

 

    backup

       full

       filesperset 10

       tag ‘test_full’

       format ‘testfull_%u_%p_%c’

       database;

  

   sql ‘alter system archive log current’ ;

 

   backup

      filesperset 10

      format ‘testarch_%s_%p’

     (archivelog like ‘/oradata/testarchivelog/%’ delete input channel sbt1);

 

    release channel sbt1;

  }

EOF

 

rman $target $rcvcat cmdfile $cmdfile msglog $msglog

 

exit

 

2.备份之前先验证数据

   sqlplus sys/sys@test as sysdba

 SQL> select count(*) from test.OM_JOB;

 

  COUNT(*)

———-

1759

3.模拟数据库故障

shutdown  immediate; 关闭数据库

重命名所有数据文件和控制文件

 

 

4.运行还原脚本

#before restore ,you must shutdown db

target=’target sys/sys@test’

rcvcat=’catalog rman/rman@rman9i’

time=`date ‘+%m%d%H’`

cmdfile=/oracle/rmanscript/log/restore_$time.rcv

msglog=/oracle/rmanscript/log/restore_$time.log

cat <<EOF >$cmdfile

startup nomount;

run

{

allocate channel sbt1 type ‘sbt_tape’;

restore controlfile;

alter database mount;

restore database;

recover database;

alter database open resetlogs;

release channel sbt1;

}

EOF

rman $target $rcvcat cmdfile $cmdfile msglog $msglog

exit

5. 还原结束验证数据

sqlplus sys/sys@test as sysdba

 SQL> select count(*) from test.OM_JOB;

 

  COUNT(*)

———-

1759

 

AIX操作系统启动详细介绍

RS/6000的引导检测过程与机型有一定关系,这里介绍大多数机型共同的启动过程,可以选择不同的系统运行模式:可以从磁带或CD-ROM引导系统进入到维护模式(单用户模式);也可以从硬盘引导系统进入到维护模式(单用户模式)或正常模式(多用户模式);还可以进入到系统管理维护(System Management Services,简写SMS),在其中可以修改系统引导设备列表。

系统的启动分为硬件初始化阶段和AIX核心初始化阶段,硬件初始化阶段称为ROS IPL(Read Only Storage Initial Program Load),基于MCA(Micro Channel Architecture ,即微通道结构)的经典RS/6000和PCI的RS/6000在硬件初始化阶段存在很大的差别,进行硬件初始化时,机器前面板的LCD或LED上显示着数字代码,这些数字表示初始化系统的进度,当系统初始化出现故障时,用户可以根据这个代码来确定错误的原因。当机器硬件检测完成之后,它就会从引导设备上加载软件,正常情况下会从硬盘引导BOS,完成AIX核心初始化后,启动系统的初始化进程/etc/init,而init依据文件/etc/inittab的内容启动其他系统进程。

要关闭AIX操作系统,必须执行关机命令,关机命令会终止系统中正在执行的进程,甚至使机器自动下电。停止机器运行的命令有shutdown,halt和reboot等,一般情况下使用shutdown命令式比较安全的。

系统引导概述

系统引导过程依赖于所使用的硬件平台。最初的硬件引导阶段,MCA机器和PCI机器存在着很大的差别,这些差别使得硬件引导的方法有所不同。系统引导的模式分为Normal(正常)模式和Service(维护)模式,因而,也存在两种不同的引导设备列表,即正常模式引导列表和维护模式引导列表。由于MCA系统和PCI系统的差别,选择这两种引导模式及其列表的方法也不同。

完成硬件引导之后,就进入软件引导阶段。在软件引导阶段,MCA机器和PCI机器的操作系统引导过程完全一样。无论是硬件问题,还是软件问题都能终止系统的引导,引导问题是比较常见的问题,熟悉系统的引导过程对解决引导问题是至关重要的。

一般的引导过程

ssf

一般的引导过程,如图所示。

在机器加电启动时,首先检查机器的硬件,确定主要的硬件是否能够正常工作。对于经典的RS/6000机器(MCA结构的系统),这个阶段分为两个独立的阶段:内置设备自检(Build-In Self Test 简写BIST)和加电自检(Power-On Self 简写为POST)。对于PCI机器,由单独的加电自检(POST)完成硬件检查。

经过硬件检查阶段后,系统尝试加在引导逻辑卷(Boot Logical Volume,简称为BLV),并在内存中形成RAM文件系统,同时把控制权交给BLV。

由于在内存中没有加载任何LVM设备驱动程序,因此系统必须在不使用LVM的情况下查找正确的BLV位置。正确的BLV地址信息(包括偏移量和长度)保存在引导磁盘的第一个扇区(512字节的块)上,这个扇区称为引导记录(Boot Record)。

引导逻辑卷(BLV),也称为引导镜像,它包括下面几个部分:

l  软件ROS(Soft Ros) 软件只读存储器(Read Only Storage ,简写为ROS)只适用于PCI的机器上,在PCI的机器上,软件ROS执行一些系统初始化工作。PCI机器的ROS不提供软件ROS,而是由AIX提供软件ROS。

l  AIX内核 AIX内核总是从BLV加载。/unix(软连接到/usr/lib/boot/unix_mp或unix_up)是一份内核的副本。这个版本被用于构建hd4文件系统。在系统引导的时候,从hd4文件系统读取内核镜像。

l  Rc.boot rc.boot是一个Shell命令文件,它是配置系统的脚本。在系统引导期间,init进程要执行它三次。

l  简化的ODM 简化的ODM只提供最基本的设备配置信息。

l  引导命令 在引导过程中要执行一些命令,例如cfgmgr和bootinfo等。

当加载BLV之后,由于rootvg没有被激活,并不可用,引导所需的信息都包含在用于在内存中创建 RAM文件系统的BLV中。之后,init进程被加载运行,并由init进程开始配置基本设备,这是第一引导阶段(init 在执行rc.boot时带着一个参数1)。

下一步被称为第二引导阶段,主要目的是激活rootvg。这是最常出现问题的阶段,例如一个文件系统或jfslog被破坏。接着控制权交给rootvg中的init进程,然后释放RAM文件系统。

最后,init进程(从磁盘加载的进程,而不是BLV中的init进程)带参数3执行rc.boot脚本配置剩余的设备从/etc/inittab启动其他进程。

硬件检测过程(BIST和POST)

前面已提到,在硬件引导过程中,MAC体系结构的经典RS/6000和当今流行的PCI体系结构RS/6000存在着比较大的差异。下面介绍这些差异。

  1. 经典RS/6000的引导过程

下图是经典RS/6000的启动流程图。经典RS/6000机型(MCA结构的系统)在启动时,当系统加电启动后,就先进行到内置谁被自检(Build_In Self Test简写为BIST),这些测试位于EPROM芯片中。BIST只检测主板上一些最基本的系统组件,如处理器,内存和系统背板(System Planar)等,在这个测试阶段,在前面板的LED上根据硬件设备的状态显示100到195之间的代码。

经典RS/6000启动流程

经典RS/6000启动流程

当BIST阶段完成后,然后再进行加电自检(Power-On Self Test简写为POST)阶段。POST将检查一些其他系统设备和I/O设备。POST完成之后,就开始查找一个可以引导系统的设备(即引导逻辑卷,BLV),然后把引导程序和内核程序从引导设备调入到内存。所有需要加载阴道镜像的硬件都会被检测到,在这个阶段,LED的代码是200到2E7,硬件问题和软件问题都可能中断系统的启动。当所有硬件通过检测之后,接着就是软件系统的启动。

在MCA系统中,加载BLV时就检查引导设备列表,引导设备列表由切换钥匙的位置来确定。

  1. PCI的RS/6000的引导过程

当PCI的RS/6000引导时,与MCA的RS/6000存在很大的差别,前面已提到的差别是基于PCI的RS/6000机型,而没有BIST阶段,只有POST阶段,实际上时将BIST和POST合为一个阶段。另一个差别是PCI的RS/6000没有钥匙切换(切换启动模式的钥匙,MCA机器的前面板上这个钥匙),现代的PCI机器上用一种逻辑钥匙模式切换,即通过按某些功能键来处理这个启动模式的切换。

当PCI系统进行POST时,就检测基本的硬件设备,如处理器,内存,系统背板(System Planar)和I/O设备等。当POST结束时,如果从使用图形控制台启动系统,则在屏幕上依次显示内存,键盘,网络,SCSI适配器和扬声器等5个图标;如果从使用字符控制台启动系统,则在屏幕上依次显示Memory,keyboard,Network,SCSI和Speaker等5个文字单词,表示在POST阶段对这几个硬件部分分别进行了检测。系统检测完成后,就要加载操作系统的引导程序,寻找引导逻辑卷(BLV),即可引导的镜像程序,然后将可引导的镜像程序调入内存。当屏幕上显示”Starting Software…”字样时,表示现在正在启动软件系统,也就是启动AIX系统,到这里整个硬件的引导将完成,接着就是软件系统的启动。

基于PCI的RS/6000启动流程

基于PCI的RS/6000启动流程

早期的PCI机器,例如7020-40P和7248-43P,在引导系统硬件时没有LED显示,因此无法通过LED码来解决引导中的问题。幸运的是,现代的PCI机器已改变了这种情况,但是不同的机型在系统启动阶段产生的错误代码也不相同。因此,要精确地判断错误代码的含义只能参考随机器所带的维护指南或手册,或者通过IBM的网站查找相应机型的引导错误代码的含义。

系统的引导模式

大体上讲,AIX操作系统的启动模式有两种,分别是Normal(正常)模式和Service(维护)模式,有时候将Normal(正常)模式成为多用户模式,将Service(维护)模式成为单用户模式。

  1. 经典RS/6000系统的引导模式

经典的RS/6000(MCA系统)前面板上有一个钥匙状态,它有三个位置,3个状态分别是:

l  Normal(正常)

l  Secure(安全)

l  Service(维护)

钥匙只有处在Normal位置,才能从硬盘中引导AIX操作系统到多用户;当钥匙处于Secure时,系统不会启动,这是系统的安全状态,这样可以锁定系统,不允许任何人来启动系统;而在Service位置,这是系统的维护状态,系统会从磁带,CD-ROM和硬盘等设备,比如如果安装操作系统一定要从磁带或CD-ROM引导,则钥匙必须处于Service模式。

将钥匙处于Normal模式,从硬盘引导BOS,用户程序和系统程序能够正常地运行,而且所有可以登录的终端都被激活,所有的文件系统也可以被访问,网络正常启动并且能够通信,系统处于多用户方式下(即运行级别是2).如果要正常模式引导系统,就将MCA机器的钥匙状态扳到Normal位置,系统就寻找正常模式的而引导设备列表(Boot List),根据该列表上探测出一个可以引导的设备,即找到一个包含引导逻辑卷的设备。

当钥匙处于Service位置时,从磁带或CD-ROM引导BOS,用户程序一般不能运行,只能从系统控制台可以登录,能够执行的命令不多,网络没有启动,所以也无法通信。如果要以维护模式引导系统,就将MCA机器的钥匙状态扳倒Service位置,系统就寻找维护模式的引导设备列表,根据该列表来探测出一个包含引导逻辑卷的设备。

更改引导列表中设备的顺序,可以在AIX命令行下用bootlist命令修改,也可以在diag菜单中修改。

  1. PCI的RS/6000系统的引导模式

基于PCI的RS/6000没有钥匙状态,只有两种引导模式,分别是Normal(正常)模式和Service(维护)模式。多用户模式一般从内置硬盘启动系统,单用户模式可以从磁带,CD-ROM或者硬盘启动。正常模式(多用户模式)引导AIX系统时,是哟有的用户程序和系统进程能够正常运行,而且所有激活的终端可以注册登录,所有的文件也能被访问,网络正常启动并且能够通信,系统处于多用户方式下。

以维护模式引导系统时,就会进入到系统诊断状态,用户可以查看和更改系统的设备和配置,可以进行系统的诊断及维护工作。系统管理员一般进入到这种执行系统维护和管理任务,此时的系统中只有一个root用户,因此被称为单用户模式。PCI系统的维护模式分为两种情况,一种是独立诊断模式(从磁带或CD-ROM引导到维护模式),另一种是在线诊断模式(从硬盘引导到维护模式),这两种模式在今后会提到。

沪ICP备14014813号-2

沪公网安备 31010802001379号