Linux系统静默安装Oracle11gR2 RAC操作手册

本文作者:东方龙马(上海)  张祺


1 静默安装grid软件

手动检测环境配置是否准备完毕

在grid安装目录中运行脚本,检测环境是否符合grid的安装标准

[grid@NODE1 grid]$ ./runcluvfy.sh stage -pre crsinst -n node1,node2 -verbose >/tmp/grid_check.log

查看日志more /tmp/grid_check.log

Check: Package existence for "pdksh"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  BCMSDBS01     missing                   pdksh-5.2.14              failed
  BCMSDBS02     missing                   pdksh-5.2.14              failed
Result: Package existence check failed for "pdksh"
......................
.....................
Checking consistency of file "/etc/resolv.conf" across nodes
File "/etc/resolv.conf" does not exist on any node of the cluster. Skipping further checks
File "/etc/resolv.conf" is consistent across nodes

除了以上两个错误外,其他的应该都是passed

手动建立grid用户的SSH用户等效性配置 

节点1:
# su - grid
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ ssh-keygen -t rsa
enter
enter
enter
$ ssh-keygen -t dsa
enter
enter
enter
节点2:
# su - grid
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ ssh-keygen -t rsa
enter
enter
enter
$ ssh-keygen -t dsa
enter
enter
enter
节点1:
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys 
$ ssh BCMSDBS02 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
yes
BCMSDBS02的密码
$ ssh BCMSDBS02 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
BCMSDBS02的密码
$ scp ~/.ssh/authorized_keys BCMSDBS02:~/.ssh/authorized_keys
验证ssh用户等效性(在2个节点都要执行)
ssh BCMSDBS01 date
ssh BCMSDBS02 date

准备GI安装的模板响应文件

响应文件模板: 

# Do not change the following system generated value. 
#------------------------------------------------------------------------------
oracle.install.responseFileVersion=/oracle/install/rspfmt_crsinstall_response_schema_v11_2_0
ORACLE_HOSTNAME=BCMSDBS01
INVENTORY_LOCATION=/oraapp/grid/oraInventory
SELECTED_LANGUAGES=en,zh_CN,zh_TW
oracle.install.option=CRS_CONFIG
ORACLE_BASE=/oraapp/grid/gridbase
ORACLE_HOME=/oraapp/grid/gridhome
oracle.install.asm.OSDBA=asmdba
oracle.install.asm.OSOPER=asmoper
oracle.install.asm.OSASM=asmadmin
oracle.install.crs.config.gpnp.scanName=BCMSDBS-SCAN
oracle.install.crs.config.gpnp.scanPort=1521
oracle.install.crs.config.clusterName=BCMSDBS-cluster
oracle.install.crs.config.gpnp.configureGNS=false
oracle.install.crs.config.gpnp.gnsSubDomain=
oracle.install.crs.config.gpnp.gnsVIPAddress=
oracle.install.crs.config.autoConfigureClusterNodeVIP=false
oracle.install.crs.config.clusterNodes=BCMSDBS01:BCMSDBS01-vip,BCMSDBS02:BCMSDBS02-vip
oracle.install.crs.config.networkInterfaceList=bond0:200.31.43.0:1,bond1:10.0.0.0:2
oracle.install.crs.config.storageOption=ASM_STORAGE
oracle.install.crs.config.sharedFileSystemStorage.diskDriveMapping=
oracle.install.crs.config.sharedFileSystemStorage.votingDiskLocations=
oracle.install.crs.config.sharedFileSystemStorage.votingDiskRedundancy=NORMAL
oracle.install.crs.config.sharedFileSystemStorage.ocrLocations=
oracle.install.crs.config.sharedFileSystemStorage.ocrRedundancy=NORMAL
oracle.install.crs.config.useIPMI=false
oracle.install.crs.config.ipmi.bmcUsername=
oracle.install.crs.config.ipmi.bmcPassword=
oracle.install.asm.SYSASMPassword=grid
oracle.install.asm.diskGroup.name=OCRDG
oracle.install.asm.diskGroup.redundancy=NORMAL
oracle.install.asm.diskGroup.AUSize=1
oracle.install.asm.diskGroup.disks=/dev/mapper/mpathcp1,/dev/mapper/mpathdp1,/dev/mapper/mpathfp1
oracle.install.asm.diskGroup.diskDiscoveryString=/dev/mapper/*
oracle.install.asm.monitorPassword=grid
oracle.install.crs.upgrade.clusterNodes=
oracle.install.asm.upgradeASM=false
oracle.installer.autoupdates.option=SKIP_UPDATES
oracle.installer.autoupdates.downloadUpdatesLoc=
AUTOUPDATES_MYORACLESUPPORT_USERNAME=
AUTOUPDATES_MYORACLESUPPORT_PASSWORD=
PROXY_HOST=
PROXY_PORT=0
PROXY_USER=
PROXY_PWD=

模板中以下参数需要根据实际情况修改:

Scan IP 需要根据实际情况修改

oracle.install.crs.config.gpnp.scanName=NODE-SCAN
oracle.install.crs.config.clusterName= NODE-cluster

Cluster 的名称需要根据实际的情况,指定vip和网卡信息

oracle.install.crs.config.clusterNodes=node1:node1-vip,node2:node2-vip
oracle.install.crs.config.networkInterfaceList=bond0:200.31.43.0:1,bond1:10.0.0.0:2

ASM需要根据实际情况设置相对应的磁盘

oracle.install.asm.diskGroup.AUSize=1
oracle.install.asm.diskGroup.disks=/dev/mapper/mpathcp1,/dev/mapper/mpathdp1,/dev/mapper/mpathfp1
oracle.install.asm.diskGroup.diskDiscoveryString=/dev/mapper/*

密码设置:(可以设置的复杂一点,否则后续安装的时候会有警告信息)

oracle.install.asm.SYSASMPassword=grid_123
oracle.install.asm.monitorPassword=grid_123

通过模板安装GI

请使用grid用户在1号节点上执行以下命令

./runInstaller -ignorePrereq -silent -force -responseFile /home/grid/grid.rsp -showProgress
Starting Oracle Universal Installer...
 
Checking Temp space: must be greater than 120 MB.   Actual 17127 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 7951 MB    Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2015-06-12_10-56-07AM. Please wait ...
You can find the log of this install session at:
 /oraapp/grid/oraInventory/logs/installActions2015-05-22_03-48-54PM.log
The installation of Oracle Grid Infrastructure was successful.
Please check '/oraapp/grid/oraInventory/logs/silentInstall2015-05-22_03-48-54PM.log' for more details.
 
As a root user, execute the following script(s):
        1. /oraapp/grid/oraInventory/orainstRoot.sh
        2. /oraapp/grid/gridhome/root.sh
 
Execute /oraapp/grid/oraInventory/orainstRoot.sh on the following nodes:
[node1, node2]
Execute /oraapp/grid/gridhome/root.sh on the following nodes:
[node1, node2]
 
As install user, execute the following script to complete the configuration.
        1. /oraapp/grid/gridhome/cfgtoollogs/configToolAllCommands
 
        Note:
        1. This script must be run on the same system from where installer was run. 
        2. This script needs a small password properties file for configuration assistants that require passwords (refer to install guide documentation).

在输出内容的最后会先要求在两个节点中运行分别运行脚本

        1. /oraapp/grid/oraInventory/orainstRoot.sh
        2. /oraapp/grid/gridhome/root.sh

一定要先在本地节点运行完两个脚本之后,再在另外一个节点运行两个脚本。

Node1上运行脚本结果:

[root@node1 ~]# /oraapp/grid/oraInventory/orainstRoot.sh
Changing permissions of /oraapp/grid/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.
Changing groupname of /oraapp/grid/oraInventory to oinstall.
The execution of the script is complete.

[root@NODE1 ~]# /oraapp/grid/gridhome/root.sh
Check /oraapp/grid/gridhome/install/root_node1_2015-05-22_16-00-41.log for the output of root script

脚本内容不会直接输出在控制台上,可以通过日志跟踪运行结果:

[root@node1~]#tail -f /oraapp/grid/gridhome/install/root_node1_2015-05-22_16-00-41.log
Performing root user operation for Oracle 11g
The following environment variables are set as:
    ORACLE_OWNER= grid
    ORACLE_HOME=  /oraapp/grid/gridhome
Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Using configuration parameter file: /oraapp/grid/gridhome/crs/install/crsconfig_params
Creating trace directory
User ignored Prerequisites during installation
OLR initialization - successful
  root wallet
  root wallet cert
  root cert export
  peer wallet
  profile reader wallet
  pa wallet
  peer wallet keys
  pa wallet keys
  peer cert request
  pa cert request
  peer cert
  pa cert
  peer root cert TP
  profile reader root cert TP
  pa root cert TP
  peer pa cert TP
  pa peer cert TP
  profile reader pa cert TP
  profile reader peer cert TP
  peer user cert
  pa user cert
Adding Clusterware entries to upstart
CRS-2672: Attempting to start 'ora.mdnsd' on 'node1'
CRS-2676: Start of 'ora.mdnsd' on node1 succeeded
CRS-2672: Attempting to start 'ora.gpnpd' on 'node1'
CRS-2676: Start of 'ora.gpnpd' on node1 succeeded
CRS-2672: Attempting to start 'ora.cssdmonitor' on 'node1'
CRS-2672: Attempting to start 'ora.gipcd' on 'node1'
CRS-2676: Start of 'ora.cssdmonitor' on 'node1' succeeded
CRS-2676: Start of 'ora.gipcd' on 'node1' succeeded
CRS-2672: Attempting to start 'ora.cssd' on 'node1'
CRS-2672: Attempting to start 'ora.diskmon' on 'node1'
CRS-2676: Start of 'ora.diskmon' on 'node1' succeeded
CRS-2676: Start of 'ora.cssd' on 'node1' succeeded
ASM created and started successfully.
Disk Group OCRDG created successfully.
clscfg: -install mode specified
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
CRS-4256: Updating the profile
Successful addition of voting disk 77ccfaf092f24f95bf932bee81082720.
Successful addition of voting disk 79c900a0e5264f6cbfa05b7f0287ec07.
Successful addition of voting disk 8d8a3b1a18b84f6abfb6bcde5083940c.
Successfully replaced voting disk group with +OCRDG.
CRS-4256: Updating the profile
CRS-4266: Voting file(s) successfully replaced
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   77ccfaf092f24f95bf932bee81082720 (/dev/mapper/mpathcp1) [OCRDG]
 2. ONLINE   79c900a0e5264f6cbfa05b7f0287ec07 (/dev/mapper/mpathdp1) [OCRDG]
 3. ONLINE   8d8a3b1a18b84f6abfb6bcde5083940c (/dev/mapper/mpathfp1) [OCRDG]
Located 3 voting disk(s).
CRS-2672: Attempting to start 'ora.asm' on 'node1'
CRS-2676: Start of 'ora.asm' on 'node1' succeeded
CRS-2672: Attempting to start 'ora.OCRDG.dg' on 'node1'
CRS-2676: Start of 'ora.OCRDG.dg' on 'node1' succeeded
Preparing packages for installation...
cvuqdisk-1.0.9-1
Configure Oracle Grid Infrastructure for a Cluster ... Succeeded

NODE2上运行脚本结果:

[root@NODE2 ~]# /oraapp/grid/oraInventory/orainstRoot.sh
Changing permissions of /oraapp/grid/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.
Changing groupname of /oraapp/grid/oraInventory to oinstall.
The execution of the script is complete.
[root@NODE2 ~]# 
[root@NODE2 ~]# 
[root@NODE2 ~]# /oraapp/grid/gridhome/root.sh
Check /oraapp/grid/gridhome/install/root_NODE2_2015-05-22_16-31-25.log for the output of root script

同样的脚本内容不会直接输出在控制台上,可以通过日志跟踪运行结果:

[root@NODE2~]#tail -f /oraapp/grid/gridhome/install/root_NODE2_2015-05-22_16-31-25.log
Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Using configuration parameter file: /oraapp/grid/gridhome/crs/install/crsconfig_params
Creating trace directory
User ignored Prerequisites during installation
OLR initialization - successful
Adding Clusterware entries to upstart
 CRS-4402: The CSS daemon was started in exclusive mode but found an active CSS daemon on node node1, number 1, and is terminating
An active cluster was found during exclusive startup, restarting to join the cluster
 Preparing packages for installation...
cvuqdisk-1.0.9-1
Configure Oracle Grid Infrastructure for a Cluster ... succeeded

根据输出的提示:

This script needs a small password properties file for configuration assistants that require passwords (refer to install guide documentation).

需要建立一个password 文件来完成最后的配置,具体密码请根据实际情况配置

[grid@NODE1~]$ cd $ORACLE_HOME/cfgtoollogs
[grid@NODE1cfgtoollogs]$ touch cfgrsp.properties

然后填写口令内容

[grid@NODE1cfgtoollogs]$ cat cfgrsp.properties 
oracle.assistants.asm|S_ASMPASSWORD=grid_123
oracle.assistants.asm|S_ASMMONITORPASSWORD=grid_123

修改文件权限

[grid@NODE1 cfgtoollogs]$ chmod 600 cfgrsp.properties

最后执行这个脚本,完成配置

[grid@NODE1 cfgtoollogs]$ /oraapp/grid/gridhome/cfgtoollogs/configToolAllCommands RESPONSE_FILE=./cfgrsp.properties
Setting the invPtrLoc to /oraapp/grid/gridhome/oraInst.loc
perform - mode is starting for action: configure
May 25, 2015 9:21:03 AM oracle.install.driver.oui.config.GenericInternalPlugIn invoke
INFO: Executing ASMCA
May 25, 2015 9:21:03 AM oracle.install.driver.oui.config.GenericInternalPlugIn invoke
INFO: Command /oraapp/grid/gridhome/bin/asmca -silent -postConfigureASM -oui_internal  
May 25, 2015 9:21:03 AM oracle.install.driver.oui.config.GenericInternalPlugIn handleProcess
INFO: ... GenericInternalPlugIn.handleProcess() entered.
May 25, 2015 9:21:03 AM oracle.install.driver.oui.config.GenericInternalPlugIn handleProcess
INFO: ... GenericInternalPlugIn: getting configAssistantParmas.
May 25, 2015 9:21:03 AM oracle.install.driver.oui.config.GenericInternalPlugIn handleProcess
INFO: ... GenericInternalPlugIn: checking secretArguments.
May 25, 2015 9:21:03 AM oracle.install.driver.oui.config.GenericInternalPlugIn handleProcess
INFO: ... GenericInternalPlugIn: starting read loop.
May 25, 2015 9:21:08 AM oracle.install.driver.oui.config.GenericInternalPlugIn handleProcess
INFO: Read: SYS_PASSWORD_PROMPT
May 25, 2015 9:21:08 AM oracle.install.driver.oui.config.GenericInternalPlugIn handleProcess
INFO: Processing: SYS_PASSWORD_PROMPT for argument tag -sysAsmPassword
May 25, 2015 9:21:08 AM oracle.install.driver.oui.config.GenericInternalPlugIn handleProcess
INFO: Read: ASMSNMP_PASSWORD_PROMPT
May 25, 2015 9:21:08 AM oracle.install.driver.oui.config.GenericInternalPlugIn handleProcess
INFO: Processing: ASMSNMP_PASSWORD_PROMPT for argument tag -asmMonitorPassword
May 25, 2015 9:21:08 AM oracle.install.driver.oui.config.GenericInternalPlugIn handleProcess
INFO: End of argument passing to stdin
May 25, 2015 9:21:09 AM oracle.install.driver.oui.config.GenericInternalPlugIn handleProcess
INFO: Read: 
May 25, 2015 9:21:09 AM oracle.install.driver.oui.config.GenericInternalPlugIn handleProcess
INFO: Read: PostConfiguration completed successfully
May 25, 2015 9:21:09 AM oracle.install.driver.oui.config.GenericInternalPlugIn handleProcess
INFO: Read: 
 
perform - mode finished for action: configure
You can see the log file: /oraapp/grid/gridhome/cfgtoollogs/oui/configActions2015-05-25_09-20-05-AM.log

查看日志

[grid@NODE1cfgtoollogs]$more /oraapp/grid/gridhome/cfgtoollogs/oui/configActions2015-05-25_09-20-05-AM.log

检查输出日志中除了SCAN-IP的错误可以忽略以外,其他的应该都是passed

ERROR: 
PRVG-1101 : SCAN name "BCMSDBS-SCAN" failed to resolve
ERROR: 
PRVF-4657 : Name resolution setup check for "BCMSDBS-SCAN" (IP address: 200.31.43.45) failed
ERROR: 
PRVF-4664 : Found inconsistent name resolution entries for SCAN name "BCMSDBS-SCAN"

 简单检测CRS是否安装成功:

查看集群状态除了ora.gsd 以外其他都应该是出于online的状态

[root@BCMSDBS01 gridhome]# /oraapp/grid/gridhome/bin/crsctl status res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER.lsnr
               ONLINE  ONLINE       bcmsdbs01                                    
               ONLINE  ONLINE       bcmsdbs02                                    
ora.OCRDG.dg
               ONLINE  ONLINE       bcmsdbs01                                    
               ONLINE  ONLINE       bcmsdbs02                                    
ora.asm
               ONLINE  ONLINE       bcmsdbs01                Started             
               ONLINE  ONLINE       bcmsdbs02                Started             
ora.gsd
               OFFLINE OFFLINE      bcmsdbs01                                    
               OFFLINE OFFLINE      bcmsdbs02                                    
ora.net1.network
               ONLINE  ONLINE       bcmsdbs01                                    
               ONLINE  ONLINE       bcmsdbs02                                    
ora.ons
               ONLINE  ONLINE       bcmsdbs01                                    
               ONLINE  ONLINE       bcmsdbs02                                    
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       bcmsdbs01                                    
ora.bcmsdbs01.vip
      1        ONLINE  ONLINE       bcmsdbs01                                    
ora.bcmsdbs02.vip
      1        ONLINE  ONLINE       bcmsdbs02                                    
ora.cvu
      1        ONLINE  ONLINE       bcmsdbs01                                    
ora.oc4j
      1        ONLINE  ONLINE       bcmsdbs01                                    
ora.scan1.vip
      1        ONLINE  ONLINE       bcmsdbs01

检查OCR磁盘是否正常

[root@BCMSDBS01 gridhome]# /oraapp/grid/gridhome/bin/ocrcheck
Status of Oracle Cluster Registry is as follows :
         Version                  :          3
         Total space (kbytes)     :     262120
         Used space (kbytes)      :       2524
         Available space (kbytes) :     259596
         ID                       : 1618251275
         Device/File Name         :     +OCRDG
                                    Device/File integrity check succeeded
                                    Device/File not configured
                                    Device/File not configured
                                    Device/File not configured
                                    Device/File not configured
         Cluster registry integrity check succeeded
         Logical corruption check succeeded

 

Grid安装成功后,用如下命令可以确认ASM进程已经在两个节点上都已经启动了:

ps –ef | grep pmon

 2 静默安装oracle软件

手动检测环境配置是否准备完毕

在grid安装目录中运行脚本,检测环境是否符合grid的安装标准

[grid@NODE1 grid]$  ./runcluvfy.sh stage -pre dbinst -n NODE1,NODE2 -r 11gR2 -verbose > /tmp/db_check.log

查看日志more /tmp/db_check.log

Check: Package existence for "pdksh"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  BCMSDBS01     missing                   pdksh-5.2.14              failed
  BCMSDBS02     missing                   pdksh-5.2.14              failed
Result: Package existence check failed for "pdksh"
ERROR:
PRVG-1101 : SCAN name "BCMSDBS-SCAN" failed to resolve
  SCAN Name     IP Address                Status                    Comment
  ------------  ------------------------  ------------------------  ----------
  BCMSDBS-SCAN  200.31.43.45              failed                    NIS Entry
ERROR:
PRVF-4657 : Name resolution setup check for "BCMSDBS-SCAN" (IP address: 200.31.43.45) failed
ERROR:
PRVF-4664 : Found inconsistent name resolution entries for SCAN name "BCMSDBS-SCAN"
Verification of SCAN VIP and Listener setup failed

除了以上两个错误外,其他的应该都是passed

手动建立oracle用户的SSH用户等效性配置

节点1:
# su - oracle
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ ssh-keygen -t rsa
enter
enter
enter
$ ssh-keygen -t dsa
enter
enter
enter
节点2:
# su - oracle
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ ssh-keygen -t rsa
enter
enter
enter
$ ssh-keygen -t dsa
enter
enter
enter
节点1:
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys 
$ ssh BCMSDBS02 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
yes
BCMSDBS02的密码
$ ssh BCMSDBS02 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
BCMSDBS02的密码
$ scp ~/.ssh/authorized_keys BCMSDBS02:~/.ssh/authorized_keys
验证ssh用户等效性(在2个节点都要执行)
ssh BCMSDBS01 date
ssh BCMSDBS02 date

准备DB安装的模板响应文件 

#-------------------------------------------------------------------------------
# Do not change the following system generated value. 
#-------------------------------------------------------------------------------
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=BCMSDBS01
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/oraapp/grid/oraInventory
SELECTED_LANGUAGES=en,zh_CN,zh_TW
ORACLE_HOME=/oraapp/oracle/product/11.2.0/dbhome_1
ORACLE_BASE=/oraapp/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.EEOptionsSelection=false
oracle.install.db.optionalComponents=
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=oper
oracle.install.db.CLUSTER_NODES=bcmsdbs01,bcmsdbs02
oracle.install.db.isRACOneInstall=false
oracle.install.db.racOneServiceName=
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.globalDBName=CMSDB
oracle.install.db.config.starterdb.SID=CMSDB1
oracle.install.db.config.starterdb.characterSet=AL32UTF8
oracle.install.db.config.starterdb.memoryOption=false
oracle.install.db.config.starterdb.memoryLimit=
oracle.install.db.config.starterdb.installExampleSchemas=false
oracle.install.db.config.starterdb.enableSecuritySettings=false
oracle.install.db.config.starterdb.password.ALL=oracle
oracle.install.db.config.starterdb.password.SYS=
oracle.install.db.config.starterdb.password.SYSTEM=
oracle.install.db.config.starterdb.password.SYSMAN=
oracle.install.db.config.starterdb.password.DBSNMP=
oracle.install.db.config.starterdb.control=DB_CONTROL
oracle.install.db.config.starterdb.gridcontrol.gridControlServiceURL=
oracle.install.db.config.starterdb.automatedBackup.enable=false
oracle.install.db.config.starterdb.automatedBackup.osuid=
oracle.install.db.config.starterdb.automatedBackup.ospwd=
oracle.install.db.config.starterdb.storageType=
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=
oracle.install.db.config.asm.diskGroup=
oracle.install.db.config.asm.ASMSNMPPassword=grid
MYORACLESUPPORT_USERNAME=
MYORACLESUPPORT_PASSWORD=
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=true
PROXY_PORT=
PROXY_USER=
PROXY_PWD=
PROXY_REALM=
COLLECTOR_SUPPORTHUB_URL=
oracle.installer.autoupdates.option=SKIP_UPDATES
AUTOUPDATES_MYORACLESUPPORT_USERNAME=
AUTOUPDATES_MYORACLESUPPORT_PASSWORD=

以下模板参数请根据实际情况修改,其他参数请参考上面的模板

ORACLE_HOSTNAME=node1
oracle.install.db.CLUSTER_NODES=node1,node2
oracle.install.db.config.starterdb.globalDBName=testdb
oracle.install.db.config.starterdb.SID=testdb1
oracle.install.db.config.starterdb.characterSet=AL32UTF8
oracle.install.db.config.starterdb.password.ALL=oracle
oracle.install.db.config.asm.ASMSNMPPassword=grid_123
oracle.install.db.optionalComponents=oracle.rdbms.partitioning:11.2.0.3.0,oracle.oraolap:11.2.0.3.0,oracle.rdbms.dm:11.2.0.3.0,oracle.rdbms.dv:11.2.0.3.0,oracle.rdbms.lbac:11.2.0.3.0,oracle.rdbms.rat:11.2.0.3.0

 如果安装的是11.2.0.4 请根据安装介质中的默认response文件中的内容来替换oracle.install.db.optionalComponents中的内容。

另外ORACLE_HOME我们需要注意一下,我们在图形方式安装的时候只要创建ORACLE_BASE目录即可,ORACLE_HOME目录会自动创建,但静默方式不可以。

检查并创建ORACLE_HOME目录(所有节点都要执行)

[oracle@BCMSDBS01 ~]$ cd $ORACLE_HOME
-bash: cd: /oraapp/oracle/product/11.2.0/dbhome_1: No such file or directory
[oracle@BCMSDBS01 ~]$ mkdir -p /oraapp/oracle/product/11.2.0/dbhome_1

 通过模板安装数据库软件

以下命令使用oracle用户在1个节点上执行

./runInstaller -ignorePrereq -silent -force -responseFile /home/oracle/db.rsp  -showProgress
Starting Oracle Universal Installer...
Checking Temp space: must be greater than 120 MB.   Actual 17799 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 7982 MB    Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2015-05-25_02-27-53PM. Please wait ...
You can find the log of this install session at:
/oraapp/grid/oraInventory/logs/installActions2015-05-25_02-27-53PM.log 
The installation of Oracle Database 11g was successful.
Please check '/oraapp/grid/oraInventory/logs/silentInstall2015-05-25_02-27-53PM.log' for more details.
As a root user, execute the following script(s):
        1. /oraapp/oracle/product/11.2.0/dbhome_1/root.sh
Execute /oraapp/oracle/product/11.2.0/dbhome_1/root.sh on the following nodes: 
[bcmsdbs01, bcmsdbs02]
Successfully Setup Software.

节点1执行脚本

[root@NODE1 ~]# /oraapp/oracle/product/11.2.0/dbhome_1/root.sh
Check /oraapp/oracle/product/11.2.0/dbhome_1/install/root_NODE1_2015-05-25_14-41-55.log for the output of root script
[root@NODE1~]#cat /oraapp/oracle/product/11.2.0/dbhome_1/install/root_NODE1_2015-05-25_14-41-55.log 
Performing root user operation for Oracle 11g 
The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /oraapp/oracle/product/11.2.0/dbhome_1
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Finished product-specific root actions.

节点2执行脚本

[root@NODE2 ~]# /oraapp/oracle/product/11.2.0/dbhome_1/root.sh
Check /oraapp/oracle/product/11.2.0/dbhome_1/install/root_NODE2_2015-05-25_14-42-39.log for the output of root script
[root@NODE2 ~]# 
[root@NODE2 ~]# 
[root@NODE2~]#cat /oraapp/oracle/product/11.2.0/dbhome_1/install/root_NODE2_2015-05-25_14-42-39.log
Performing root user operation for Oracle 11g 
The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /oraapp/oracle/product/11.2.0/dbhome_1
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Finished product-specific root actions.

至此Oracle数据库软件安装完成

3 手动创建数据磁盘组

查看目前的ASM磁盘,以及磁盘组的信息

SQL> select name , state , type  from v$asm_diskgroup;
NAME                           STATE       TYPE
------------------------------ ----------- ------
OCRDG                          MOUNTED     NORMAL
SQL> set linesize 10000
SQL> set pagesize 5000
SQL> col name for a10
SQL> col path for a20
SQL> col failgroup for a20
SQL> select group_number , disk_number , name , path , state , header_status , mount_status , failgroup from v$asm_disk;
GROUP_NUMBER DISK_NUMBER NAME       PATH                 STATE    HEADER_STATU MOUNT_S FAILGROUP
------------ ----------- ---------- -------------------- -------- ------------ ------- --------------------
           0           1            /dev/mapper/mpathhp1 NORMAL   CANDIDATE    CLOSED
           0           2            /dev/mapper/mpathbp1 NORMAL   CANDIDATE    CLOSED
           0           3            /dev/mapper/mpathep1 NORMAL   CANDIDATE    CLOSED
           0           5            /dev/mapper/mpathgp1 NORMAL   CANDIDATE    CLOSED
           1           0 OCRDG_0000 /dev/mapper/mpathcp1 NORMAL   MEMBER       CACHED  OCRDG_0000
           1           2 OCRDG_0002 /dev/mapper/mpathfp1 NORMAL   MEMBER       CACHED  OCRDG_0002
           1           1 OCRDG_0001 /dev/mapper/mpathdp1 NORMAL   MEMBER       CACHED  OCRDG_0001

使用multipath 命令确认需要添加的磁盘的大小和名称

root@BCMSDBS01 ~]# multipath -ll | grep -1  dm- 
mpathe (360060e8005949f000000949f00003704) dm-8 HITACHI,OPEN-V
size=100G features='1 queue_if_no_path' hwhandler='0' wp=rw
--
  `- 2:0:0:4 sdm 8:192 active ready running
mpathd (360060e8005949f000000949f00003702) dm-6 HITACHI,OPEN-V
size=5.0G features='1 queue_if_no_path' hwhandler='0' wp=rw
--
  `- 2:0:0:2 sdk 8:160 active ready running
mpathc (360060e8005949f000000949f00003701) dm-16 HITACHI,OPEN-V
size=5.0G features='1 queue_if_no_path' hwhandler='0' wp=rw
--
  `- 2:0:0:1 sdj 8:144 active ready running
mpathb (360060e8005949f000000949f00003700) dm-10 HITACHI,OPEN-V
size=200G features='1 queue_if_no_path' hwhandler='0' wp=rw
--
  `- 2:0:0:0 sdi 8:128 active ready running
mpatha (36782bcb03db3cf0015e11c6c04a35300) dm-0 DELL,PERC 6/i
size=279G features='1 queue_if_no_path' hwhandler='0' wp=rw
--
  `- 0:2:0:0 sda 8:0   active ready running
mpathh (360060e8005949f000000949f00004704) dm-12 HITACHI,OPEN-V
size=100G features='1 queue_if_no_path' hwhandler='0' wp=rw
--
  `- 2:0:0:6 sdo 8:224 active ready running
mpathg (360060e8005949f000000949f00004700) dm-7 HITACHI,OPEN-V
size=200G features='1 queue_if_no_path' hwhandler='0' wp=rw
--
  `- 2:0:0:5 sdn 8:208 active ready running
mpathf (360060e8005949f000000949f00003703) dm-9 HITACHI,OPEN-V
size=5.0G features='1 queue_if_no_path' hwhandler='0' wp=rw

使用sqlplus 手动创建磁盘组(以下操作在一个节点运行)

sqlplus / as sysasm
SQL> create diskgroup DATADG external redundancy
  2  disk '/dev/mapper/mpathbp1','/dev/mapper/mpathgp1'
  3  attribute 'compatible.asm'='11.2','compatible.rdbms'='11.2',
  4  'AU_SIZE'='1M'
  5  /
Diskgroup created.
SQL> create diskgroup FLASHDG external redundancy
  2  disk '/dev/mapper/mpathep1','/dev/mapper/mpathhp1'
  3  attribute 'compatible.asm'='11.2','compatible.rdbms'='11.2',
  4  'AU_SIZE'='1M'
  5  /
Diskgroup created.
SQL> select name , state , type from v$asm_diskgroup;
NAME                           STATE       TYPE
------------------------------ ----------- ------
OCRDG                          MOUNTED     NORMAL
DATADG                         MOUNTED     EXTERN
FLASHDG                        MOUNTED     EXTERN

确认ASM磁盘组正常mount

以下操作在所有节点都要确认

[grid@BCMSDBS01 ~]$ kfod op=groups
--------------------------------------------------------------------------------
Group          Size          Free Redundancy Name           
================================================================================
   1:      15357 Mb      14431 Mb     NORMAL OCRDG          
   2:     204798 Mb     204744 Mb     EXTERN FLASHDG        
   3:     409598 Mb     409542 Mb     EXTERN DATADG 
[grid@BCMSDBS01 ~]$ crsctl status res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATADG.dg
               ONLINE  ONLINE       bcmsdbs01                                    
               ONLINE  ONLINE       bcmsdbs02                                    
ora.FLASHDG.dg
               ONLINE  ONLINE       bcmsdbs01                                    
               ONLINE  ONLINE       bcmsdbs02                                   
ora.LISTENER.lsnr
               ONLINE  ONLINE       bcmsdbs01                                    
               ONLINE  ONLINE       bcmsdbs02                                    
ora.OCRDG.dg
               ONLINE  ONLINE       bcmsdbs01                                    
               ONLINE  ONLINE       bcmsdbs02                                    
ora.asm
               ONLINE  ONLINE       bcmsdbs01                Started             
               ONLINE  ONLINE       bcmsdbs02                Started             
ora.gsd
               OFFLINE OFFLINE      bcmsdbs01                                    
               OFFLINE OFFLINE      bcmsdbs02                                    
ora.net1.network
               ONLINE  ONLINE       bcmsdbs01                                    
               ONLINE  ONLINE       bcmsdbs02                                    
ora.ons
               ONLINE  ONLINE       bcmsdbs01                                    
               ONLINE  ONLINE       bcmsdbs02                                    
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       bcmsdbs01                                    
ora.bcmsdbs01.vip
      1        ONLINE  ONLINE       bcmsdbs01                                    
ora.bcmsdbs02.vip
      1        ONLINE  ONLINE       bcmsdbs02                                    
ora.cvu
      1        ONLINE  ONLINE       bcmsdbs01                                    
ora.oc4j
      1        ONLINE  ONLINE       bcmsdbs01                                    
ora.scan1.vip
      1        ONLINE  ONLINE       bcmsdbs01

 注意:如果出现在另个一个节点是OFFLINE,或者出于dismount的状态,可以手动在第二个节点进行mount

alter diskgroup datadg mount;
alter diskgroup flashdg mount;

4 创建RAC数据库实例

准备DB 模板文件 

<DatabaseTemplate name="11gR2DB" description=" " version="11.1.0.0.0">
   <CommonAttributes>
      <option name="OMS" value="false"/>
      <option name="JSERVER" value="false"/>
      <option name="SPATIAL" value="false"/>
      <option name="IMEDIA" value="false"/>
      <option name="XDB_PROTOCOLS" value="false">
         <tablespace id="SYSAUX"/>
      </option>
      <option name="ORACLE_TEXT" value="false">
         <tablespace id="SYSAUX"/>
      </option>
      <option name="SAMPLE_SCHEMA" value="false"/>
      <option name="CWMLITE" value="false">
         <tablespace id="SYSAUX"/>
      </option>
      <option name="EM_REPOSITORY" value="false">
         <tablespace id="SYSAUX"/>
      </option>
      <option name="APEX" value="false"/>
      <option name="OWB" value="false"/>
      <option name="DV" value="false"/>
   </CommonAttributes>
   <Variables/>
   <CustomScripts Execute="false"/>
   <InitParamAttributes>
      <InitParams>
         <initParam name="db_create_file_dest" value="+DATADG"/>
         <initParam name="db_name" value=""/>
         <initParam name="db_domain" value=""/>
         <initParam name="audit_file_dest" value="{ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/adump"/>
         <initParam name="compatible" value="11.2.0.0.0"/>
         <initParam name="remote_login_passwordfile" value="exclusive"/>
         <initParam name="log_archive_dest_1" value="'LOCATION=+FLASHDG'"/>
         <initParam name="sga_target" value="4096" unit="MB"/>
         <initParam name="processes" value="300"/>
         <initParam name="diagnostic_dest" value="{ORACLE_BASE}"/>
         <initParam name="audit_trail" value="db"/>
         <initParam name="log_archive_format" value="%t_%s_%r.dbf"/>
         <initParam name="sessions" value="335"/>
         <initParam name="db_block_size" value="8" unit="KB"/>
         <initParam name="open_cursors" value="300"/>
         <initParam name="pga_aggregate_target" value="2048" unit="MB"/>
         <initParam name="undo_tablespace" value="UNDOTBS2"/>
      </InitParams>
      <MiscParams>
         <databaseType>MULTIPURPOSE</databaseType>
         <maxUserConn>20</maxUserConn>
         <percentageMemTOSGA>40</percentageMemTOSGA>
         <customSGA>true</customSGA>
         <characterSet>AL32UTF8</characterSet>
         <nationalCharacterSet>AL16UTF16</nationalCharacterSet>
         <archiveLogMode>true</archiveLogMode>
         <initParamFileName>{ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/pfile/init.ora</initParamFileName>
      </MiscParams>
      <SPfile useSPFile="true">+DATADG/{DB_UNIQUE_NAME}/spfileCMDSDB.ora</SPfile>
   </InitParamAttributes>
   <StorageAttributes>
      <ControlfileAttributes id="Controlfile">
         <maxDatafiles>1024</maxDatafiles>
         <maxLogfiles>192</maxLogfiles>
         <maxLogMembers>3</maxLogMembers>
         <maxLogHistory>1</maxLogHistory>
         <maxInstances>32</maxInstances>
         <image name="&lt;OMF_CONTROL_0>" filepath="+DATADG/{DB_UNIQUE_NAME}/"/>
         <image name="&lt;OMF_CONTROL_1>" filepath="+DATADG/{DB_UNIQUE_NAME}/"/>
      </ControlfileAttributes>
      <DatafileAttributes id="+DATADG">
         <tablespace>SYSAUX</tablespace>
         <temporary>false</temporary>
         <online>true</online>
         <status>0</status>
         <size unit="MB">600</size>
         <reuse>false</reuse>
         <autoExtend>true</autoExtend>
         <increment unit="KB">10240</increment>
         <maxSize unit="MB">-1</maxSize>
      </DatafileAttributes>
      <DatafileAttributes id="+DATADG">
         <tablespace>SYSTEM</tablespace>
         <temporary>false</temporary>
         <online>true</online>
         <status>0</status>
         <size unit="MB">700</size>
         <reuse>false</reuse>
         <autoExtend>true</autoExtend>
         <increment unit="KB">10240</increment>
         <maxSize unit="MB">-1</maxSize>
      </DatafileAttributes>
      <DatafileAttributes id="+DATADG">
         <tablespace>TEMP</tablespace>
         <temporary>false</temporary>
         <online>true</online>
         <status>0</status>
         <size unit="MB">20</size>
         <reuse>false</reuse>
         <autoExtend>true</autoExtend>
         <increment unit="KB">640</increment>
         <maxSize unit="MB">-1</maxSize>
      </DatafileAttributes>
      <DatafileAttributes id="+DATADG">
         <tablespace>UNDOTBS1</tablespace>
         <temporary>false</temporary>
         <online>true</online>
         <status>0</status>
         <size unit="MB">200</size>
         <reuse>false</reuse>
         <autoExtend>true</autoExtend>
         <increment unit="KB">5120</increment>
         <maxSize unit="MB">-1</maxSize>
      </DatafileAttributes>
      <DatafileAttributes id="+DATADG">
         <tablespace>UNDOTBS2</tablespace>
         <temporary>false</temporary>
         <online>true</online>
         <status>0</status>
         <size unit="MB">200</size>
         <reuse>false</reuse>
         <autoExtend>true</autoExtend>
         <increment unit="KB">5120</increment>
         <maxSize unit="MB">-1</maxSize>
      </DatafileAttributes>
      <DatafileAttributes id="+DATADG">
         <tablespace>USERS</tablespace>
         <temporary>false</temporary>
         <online>true</online>
         <status>0</status>
         <size unit="MB">5</size>
         <reuse>false</reuse>
         <autoExtend>true</autoExtend>
         <increment unit="KB">1280</increment>
         <maxSize unit="MB">-1</maxSize>
      </DatafileAttributes>
      <TablespaceAttributes id="SYSAUX">
         <online>true</online>
         <offlineMode>1</offlineMode>
         <readOnly>false</readOnly>
         <temporary>false</temporary>
         <defaultTemp>false</defaultTemp>
         <undo>false</undo>
         <local>true</local>
         <blockSize>-1</blockSize>
         <allocation>1</allocation>
         <uniAllocSize unit="KB">-1</uniAllocSize>
         <initSize unit="KB">64</initSize>
         <increment unit="KB">64</increment>
         <incrementPercent>50</incrementPercent>
         <minExtends>1</minExtends>
         <maxExtends>4096</maxExtends>
         <minExtendsSize unit="KB">64</minExtendsSize>
         <logging>true</logging>
         <recoverable>false</recoverable>
         <maxFreeSpace>0</maxFreeSpace>
         <autoSegmentMgmt>true</autoSegmentMgmt>
         <bigfile>false</bigfile>
         <datafilesList>
            <TablespaceDatafileAttributes id="+DATADG">
               <id>-1</id>
            </TablespaceDatafileAttributes>
         </datafilesList>
      </TablespaceAttributes>
      <TablespaceAttributes id="SYSTEM">
         <online>true</online>
         <offlineMode>1</offlineMode>
         <readOnly>false</readOnly>
         <temporary>false</temporary>
         <defaultTemp>false</defaultTemp>
         <undo>false</undo>
         <local>true</local>
         <blockSize>-1</blockSize>
         <allocation>3</allocation>
         <uniAllocSize unit="KB">-1</uniAllocSize>
         <initSize unit="KB">64</initSize>
         <increment unit="KB">64</increment>
         <incrementPercent>50</incrementPercent>
         <minExtends>1</minExtends>
         <maxExtends>-1</maxExtends>
         <minExtendsSize unit="KB">64</minExtendsSize>
         <logging>true</logging>
         <recoverable>false</recoverable>
         <maxFreeSpace>0</maxFreeSpace>
         <autoSegmentMgmt>true</autoSegmentMgmt>
         <bigfile>false</bigfile>
         <datafilesList>
            <TablespaceDatafileAttributes id="+DATADG">
               <id>-1</id>
            </TablespaceDatafileAttributes>
         </datafilesList>
      </TablespaceAttributes>
      <TablespaceAttributes id="TEMP">
         <online>true</online>
         <offlineMode>1</offlineMode>
         <readOnly>false</readOnly>
         <temporary>true</temporary>
         <defaultTemp>true</defaultTemp>
         <undo>false</undo>
         <local>true</local>
         <blockSize>-1</blockSize>
         <allocation>1</allocation>
         <uniAllocSize unit="KB">-1</uniAllocSize>
         <initSize unit="KB">64</initSize>
         <increment unit="KB">64</increment>
         <incrementPercent>0</incrementPercent>
         <minExtends>1</minExtends>
         <maxExtends>0</maxExtends>
         <minExtendsSize unit="KB">64</minExtendsSize>
         <logging>true</logging>
         <recoverable>false</recoverable>
         <maxFreeSpace>0</maxFreeSpace>
         <autoSegmentMgmt>true</autoSegmentMgmt>
         <bigfile>false</bigfile>
         <datafilesList>
            <TablespaceDatafileAttributes id="+DATADG">
               <id>-1</id>
            </TablespaceDatafileAttributes>
         </datafilesList>
      </TablespaceAttributes>
      <TablespaceAttributes id="UNDOTBS1">
         <online>true</online>
         <offlineMode>1</offlineMode>
         <readOnly>false</readOnly>
         <temporary>false</temporary>
         <defaultTemp>false</defaultTemp>
         <undo>true</undo>
         <local>true</local>
         <blockSize>-1</blockSize>
         <allocation>1</allocation>
         <uniAllocSize unit="KB">-1</uniAllocSize>
         <initSize unit="KB">512</initSize>
         <increment unit="KB">512</increment>
         <incrementPercent>50</incrementPercent>
         <minExtends>8</minExtends>
         <maxExtends>4096</maxExtends>
         <minExtendsSize unit="KB">512</minExtendsSize>
         <logging>true</logging>
         <recoverable>false</recoverable>
         <maxFreeSpace>0</maxFreeSpace>
         <autoSegmentMgmt>true</autoSegmentMgmt>
         <bigfile>false</bigfile>
         <datafilesList>
            <TablespaceDatafileAttributes id="+DATADG">
               <id>-1</id>
            </TablespaceDatafileAttributes>
         </datafilesList>
      </TablespaceAttributes>
      <TablespaceAttributes id="UNDOTBS2">
         <online>true</online>
         <offlineMode>1</offlineMode>
         <readOnly>false</readOnly>
         <temporary>false</temporary>
         <defaultTemp>false</defaultTemp>
         <undo>true</undo>
         <local>true</local>
         <blockSize>-1</blockSize>
         <allocation>1</allocation>
         <uniAllocSize unit="KB">-1</uniAllocSize>
         <initSize unit="KB">512</initSize>
         <increment unit="KB">512</increment>
         <incrementPercent>50</incrementPercent>
         <minExtends>8</minExtends>
         <maxExtends>4096</maxExtends>
         <minExtendsSize unit="KB">512</minExtendsSize>
         <logging>true</logging>
         <recoverable>false</recoverable>
         <maxFreeSpace>0</maxFreeSpace>
         <autoSegmentMgmt>true</autoSegmentMgmt>
         <bigfile>false</bigfile>
         <datafilesList>
            <TablespaceDatafileAttributes id="+DATADG">
               <id>-1</id>
            </TablespaceDatafileAttributes>
         </datafilesList>
      </TablespaceAttributes>
      <TablespaceAttributes id="USERS">
         <online>true</online>
         <offlineMode>1</offlineMode>
         <readOnly>false</readOnly>
         <temporary>false</temporary>
         <defaultTemp>false</defaultTemp>
         <undo>false</undo>
         <local>true</local>
         <blockSize>-1</blockSize>
         <allocation>1</allocation>
         <uniAllocSize unit="KB">-1</uniAllocSize>
         <initSize unit="KB">128</initSize>
         <increment unit="KB">128</increment>
         <incrementPercent>0</incrementPercent>
         <minExtends>1</minExtends>
         <maxExtends>4096</maxExtends>
         <minExtendsSize unit="KB">128</minExtendsSize>
         <logging>true</logging>
         <recoverable>false</recoverable>
         <maxFreeSpace>0</maxFreeSpace>
         <autoSegmentMgmt>true</autoSegmentMgmt>
         <bigfile>false</bigfile>
         <datafilesList>
            <TablespaceDatafileAttributes id="+DATADG">
               <id>-1</id>
            </TablespaceDatafileAttributes>
         </datafilesList>
      </TablespaceAttributes>
      <RedoLogGroupAttributes id="1">
         <reuse>false</reuse>
         <fileSize unit="KB">204800</fileSize>
         <Thread>1</Thread>
         <member ordinal="0" memberName="redo01.log" filepath="+DATADG/{DB_UNIQUE_NAME}/"/>
      </RedoLogGroupAttributes>
      <RedoLogGroupAttributes id="2">
         <reuse>false</reuse>
         <fileSize unit="KB">204800</fileSize>
         <Thread>1</Thread>
         <member ordinal="0" memberName="redo02.log" filepath="+DATADG/{DB_UNIQUE_NAME}/"/>
      </RedoLogGroupAttributes>
      <RedoLogGroupAttributes id="3">
         <reuse>false</reuse>
         <fileSize unit="KB">204800</fileSize>
         <Thread>1</Thread>
         <member ordinal="0" memberName="redo03.log" filepath="+DATADG/{DB_UNIQUE_NAME}/"/>
      </RedoLogGroupAttributes>
      <RedoLogGroupAttributes id="4">
         <reuse>false</reuse>
         <fileSize unit="KB">204800</fileSize>
         <Thread>1</Thread>
         <member ordinal="0" memberName="redo04.log" filepath="+DATADG/{DB_UNIQUE_NAME}/"/>
      </RedoLogGroupAttributes>
      <RedoLogGroupAttributes id="5">
         <reuse>false</reuse>
         <fileSize unit="KB">204800</fileSize>
         <Thread>1</Thread>
         <member ordinal="1" memberName="redo05.log" filepath="+DATADG/{DB_UNIQUE_NAME}/"/>
      </RedoLogGroupAttributes>
      <RedoLogGroupAttributes id="6">
         <reuse>false</reuse>
         <fileSize unit="KB">204800</fileSize>
         <Thread>2</Thread>
         <member ordinal="1" memberName="redo06.log" filepath="+DATADG/{DB_UNIQUE_NAME}/"/>
      </RedoLogGroupAttributes>
      <RedoLogGroupAttributes id="7">
         <reuse>false</reuse>
         <fileSize unit="KB">204800</fileSize>
         <Thread>2</Thread>
         <member ordinal="1" memberName="redo07.log" filepath="+DATADG/{DB_UNIQUE_NAME}/"/>
      </RedoLogGroupAttributes>
      <RedoLogGroupAttributes id="8">
         <reuse>false</reuse>
         <fileSize unit="KB">204800</fileSize>
         <Thread>2</Thread>
         <member ordinal="1" memberName="redo08.log" filepath="+DATADG/{DB_UNIQUE_NAME}/"/>
      </RedoLogGroupAttributes>
      <RedoLogGroupAttributes id="9">
         <reuse>false</reuse>
         <fileSize unit="KB">204800</fileSize>
         <Thread>2</Thread>
         <member ordinal="1" memberName="redo09.log" filepath="+DATADG/{DB_UNIQUE_NAME}/"/>
      </RedoLogGroupAttributes>
      <RedoLogGroupAttributes id="10">
         <reuse>false</reuse>
         <fileSize unit="KB">204800</fileSize>
         <Thread>2</Thread>
         <member ordinal="1" memberName="redo10.log" filepath="+DATADG/{DB_UNIQUE_NAME}/"/>
      </RedoLogGroupAttributes>
   </StorageAttributes>
</DatabaseTemplate>

以下是一些自定义设置的模板信息可以根据实际情况进行修改

      <InitParams>
         <initParam name="db_create_file_dest" value="+DATADG"/>
         <initParam name="db_name" value=""/>
         <initParam name="db_domain" value=""/>
         <initParam name="compatible" value="11.2.0.0.0"/>
         <initParam name="remote_login_passwordfile" value="exclusive"/>
         <initParam name="log_archive_dest_1" value="'LOCATION=+FLASHDG'"/>
         <initParam name="sga_target" value="4096" unit="MB"/>
         <initParam name="processes" value="300"/>
         <initParam name="diagnostic_dest" value="{ORACLE_BASE}"/>
         <initParam name="audit_trail" value="db"/>
         <initParam name="log_archive_format" value="%t_%s_%r.dbf"/>
         <initParam name="sessions" value="335"/>
         <initParam name="db_block_size" value="8" unit="KB"/>
         <initParam name="open_cursors" value="300"/>
         <initParam name="pga_aggregate_target" value="2048" unit="MB"/>
         <initParam name="undo_tablespace" value="UNDOTBS2"/>
      </InitParams>
      <MiscParams>
         <databaseType>MULTIPURPOSE</databaseType>
         <maxUserConn>20</maxUserConn>
         <percentageMemTOSGA>40</percentageMemTOSGA>
         <customSGA>true</customSGA>
         <characterSet>AL32UTF8</characterSet>
         <nationalCharacterSet>AL16UTF16</nationalCharacterSet>
         <archiveLogMode>true</archiveLogMode>
         <initParamFileName>{ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/pfile/init.ora</initParamFileName>
      </MiscParams>
      <SPfile useSPFile="true">+DATADG/{DB_UNIQUE_NAME}/spfiletestdb.ora</SPfile>
      <RedoLogGroupAttributes id="1">
         <reuse>false</reuse>
         <fileSize unit="KB">204800</fileSize>
         <Thread>1</Thread>
         <member ordinal="0" memberName="redo01.log" filepath="+DATADG/{DB_UNIQUE_NAME}/"/>
      </RedoLogGroupAttributes>
      <RedoLogGroupAttributes id="2">
         <reuse>false</reuse>
         <fileSize unit="KB">204800</fileSize>
         <Thread>1</Thread>
         <member ordinal="0" memberName="redo02.log" filepath="+DATADG/{DB_UNIQUE_NAME}/"/>
      </RedoLogGroupAttributes>
.......
......
      <RedoLogGroupAttributes id="10">
         <reuse>false</reuse>
         <fileSize unit="KB">204800</fileSize>
         <Thread>2</Thread>
         <member ordinal="1" memberName="redo10.log" filepath="+DATADG/{DB_UNIQUE_NAME}/"/>
      </RedoLogGroupAttributes>

对于8G的内存,一般选择SGA为3-4G,PGA为1-3G。

对于64G的内存,初始化选择SGA为25-32G,PGA为4-8G。

所有日志文件大小为200M,5个Thread为1,5个Thread为2。

 

通过模板安装数据库

请使用oracle用户在1号节点上执行以下命令:

$ORACLE_HOME/bin/dbca -silent -createDatabase -templateName /home/oracle/11gR2DB.dbt  \
-gdbName testdb -sid testdb -sysPassword oracle \
-systemPassword  oracle -storageType ASM -diskGroupName DATADG \
-datafileJarLocation $ORACLE_HOME/assistants/dbca/templates -nodelist NODE1,NODE2 \
-obfuscatedPasswords false -asmSysPassword grid
Creating and starting Oracle instance
DBCA_PROGRESS : 2%
DBCA_PROGRESS : 3%
DBCA_PROGRESS : 4%
DBCA_PROGRESS : 10%
Creating database files
DBCA_PROGRESS : 11%
DBCA_PROGRESS : 12%
DBCA_PROGRESS : 20%
Creating data dictionary views
DBCA_PROGRESS : 23%
DBCA_PROGRESS : 26%
DBCA_PROGRESS : 29%
DBCA_PROGRESS : 30%
DBCA_PROGRESS : 31%
DBCA_PROGRESS : 32%
DBCA_PROGRESS : 33%
DBCA_PROGRESS : 34%
DBCA_PROGRESS : 35%
DBCA_PROGRESS : 36%
DBCA_PROGRESS : 37%
DBCA_PROGRESS : 38%
DBCA_PROGRESS : 44%
DBCA_PROGRESS : 47%
DBCA_PROGRESS : 50%
DBCA_PROGRESS : 53%
Creating cluster database views
DBCA_PROGRESS : 55%
DBCA_PROGRESS : 73%
Completing Database Creation
DBCA_PROGRESS : 76%
DBCA_PROGRESS : 79%
DBCA_PROGRESS : 88%
DBCA_PROGRESS : 97%
DBCA_PROGRESS : 100%
Database creation complete. For details check the logfiles at:
 /oraapp/oracle/cfgtoollogs/dbca/TESTDB.
Database Information:
Global Database Name:CMDSDB
System Identifier(SID) Prefix:CMDSDB

数据库安装后的一些配置

增加online redo log(只在一个节点操作即可)

alter database add logfile member '+FLASHDG' to group 1;
alter database add logfile member '+FLASHDG' to group 2;
alter database add logfile member '+FLASHDG' to group 3;
alter database add logfile member '+FLASHDG' to group 4;
alter database add logfile member '+FLASHDG' to group 5;
alter database add logfile member '+FLASHDG' to group 6;
alter database add logfile member '+FLASHDG' to group 7;
alter database add logfile member '+FLASHDG' to group 8;
alter database add logfile member '+FLASHDG' to group 9;
alter database add logfile member '+FLASHDG' to group 10;

注:以上的命令可编辑/home/oracle/add_redo.sql并执行。

设置snapshot controfile路径为存储,否则NBU备份会报备份control file失败:(只在一个节点操作即可)

rman target /
RMAN> CONFIGURE SNAPSHOT CONTROLFILE NAME TO '+FLASHDG/CDISDB/CONTROLFILE/snapcf_TESTDB.f';
RMAN > show all; //确认修改成功

以oracle在主节点执行如下操作(不需要在备节点操作):

cd
sqlplus / as sysdba
@add_redo.sql
--确认每个组都有2个MEMBER
SQL> select group#,thread#,members from v$log; 
    GROUP#    THREAD#    MEMBERS
---------- ---------- ----------
         1          1          2
         2          1          2
         3          1          2
         4          1          2
         5          1          2
         6          2          2
         7          2          2
         8          2          2
         9          2          2
        10          2          2
SQL> set lines 200
SQL> col member for a50
--确认有10个DATADG下的redo logfile,10个FLASHDG下的redolog file
SQL> select group#,member from v$logfile

确认数据库安装配置是否正确

请在sqlplus中执行以下命令,确认数据库是否安装配置是否正确(在任意一个节点执行即可)

Select open_mode from v$database;
Show parameter sga
Show parameter pga
Select name from v$dbfile;
Select name from v$tempfile;
Select name from v$controlfile;
Select member from v$logfile;
Archive log list
[grid@NODE1 ~]$ crsctl status res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATADG.dg
               ONLINE  ONLINE       node1                                    
               ONLINE  ONLINE       node2                                    
ora.FLASHDG.dg
               ONLINE  ONLINE       node1                                    
               ONLINE  ONLINE       node2                                    
ora.LISTENER.lsnr
               ONLINE  ONLINE       node1                                    
               ONLINE  ONLINE       node2                                    
ora.OCRDG.dg
               ONLINE  ONLINE       node1                                    
               ONLINE  ONLINE       node2                                    
ora.asm
               ONLINE  ONLINE       node1                Started             
               ONLINE  ONLINE       node2                Started             
ora.gsd
               OFFLINE OFFLINE      node1                                    
               OFFLINE OFFLINE      node2                                    
ora.net1.network
               ONLINE  ONLINE       node1                                    
               ONLINE  ONLINE       node2                                    
ora.ons
               ONLINE  ONLINE       node1                                    
               ONLINE  ONLINE       node2                                    
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       node1                                    
ora.node1.vip
      1        ONLINE  ONLINE       node1                                    
ora.node2.vip
      1        ONLINE  ONLINE       node2                                    
ora.testdb.db
      1        ONLINE  ONLINE       node1                Open                
      2        ONLINE  ONLINE       node2                Open                
ora.cvu
      1        ONLINE  ONLINE       node1                                    
ora.oc4j
      1        ONLINE  ONLINE       node1                                    
ora.scan1.vip
      1        ONLINE  ONLINE       node1

正常情况下,除了ora.gsd 这个资源以外,其他的都应该是出于online状态的。

并且ora.testdb.db资源在两个节点都出于open状态。


5 数据库监听配置

使用grid用户登录

安装grid时定义了默认的监听端口1521

查看系统的监听状态:

[grid@node1 ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 10-APR-2013 14:38:08
Copyright (c) 1991, 2011, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production
Start Date                10-APR-2013 11:29:42
Uptime                    0 days 3 hr. 8 min. 26 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /oraapp/grid/gridhome/network/admin/listener.ora
Listener Log File         /oraapp/grid/gridbase/diag/tnslsnr/node1/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=200.31.43.41)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=200.31.43.43)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "testdb" has 1 instance(s).
  Instance "testdb1", status READY, has 1 handler(s) for this service...
Service "testdbXDB" has 1 instance(s).
  Instance "testdb1", status READY, has 1 handler(s) for this service...
The command completed successfully

我们看到,ORACLE自动创建了服务testdb,该服务在两个结点上分别各有一个实例。

 使用srvctl命令添加监听 

1)检查默认的network的network number 

[grid@NODE1 ~]$ srvctl config network
Network exists: 1/200.31.43.0/255.255.255.0/bond0, type static

2)使用以下命令添加监听

[grid@NODE1 ~]$ srvctl add listener -l TESTDB_LISTENER -o $ORACLE_HOME -p 1522 -k 1
命令说明:
-k 就是上面获得的network number 
-p 监听端口
-l 监听名称
-o GI HOME

3)启动监听

[grid@NODE1 ~]$ srvctl start listener -l TESTDB_LISTENER

注意:在启动监听之后会在listener.ora和endpoints_listener.ora 自动添加记录

4)确认监听是否启动

[grid@NODE1 ~]$ crsctl status res -t | grep -2 TESTDB_LISTENER
Local Resources
--------------------------------------------------------------------------------
ora.TESTDB_LISTENER.lsnr
               ONLINE  ONLINE       node1                                    
               ONLINE  ONLINE       node2

查看建立的新监听TESTDB_LISTENER,端口1522:

lsnrctl status TESTDB_LISTENER

注意:11gR2以后的的LISTENER监听配置默认受到11.2新引入的endpoints_listener.ora配置文件的管理。在使用endpoints_listener.ora的情况下,请不要使用lsnrctl 来启动和停止LISTENER,而需要使用srvctl或者crsctl工具进行管理,否则lsnrctl 将不会识别endpoints_listener.ora的配置信息,造成监听没有在必要的地址,端口上工作。

 5)绑定数据库到监听:

此时LISTENER1不会注册数据库,需要修改LOCAL_LISTENER参数。

在两个节点上修改local listener: 

[oracle@node1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Wed Apr 10 14:42:54 2013
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL> show parameter listener
NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
listener_networks     string
local_listener     string (DESCRIPTION=(ADDRESS_LIST=(AD
 DRESS=(PROTOCOL=TCP)(HOST=200.
 31.43.41)(PORT=1521))))
remote_listener      string SCANIP:1521
SQL> alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=200.31.43.43)(PORT=1522))))' scope=both sid='testdb1';
System altered.
SQL> show parameter listener
NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
listener_networks     string
local_listener     string (DESCRIPTION=(ADDRESS_LIST=(AD
 DRESS=(PROTOCOL=TCP)(HOST=200.
 31.43.43)(PORT=1522))))
remote_listener      string SCANIP:1521

在两个节点上修改tnsnames.ora如下:

# tnsnames.ora Network Configuration File: /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
# Remote Listener
TESTDB_LISTENERS =
  (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1522))
      (ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1522))
  )
 
# Local Listener
TESTDB1_LISTENERS =
  (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1522))
  )
 
TESTDB =
  (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 200.31.43.43)(PORT = 1522))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 200.31.43.44)(PORT = 1522))
      (LOAD_BALANCE = yes)
      (CONNECT_DATA =
          (SERVICE_NAME = TESTDB)
          (FAILOVER_MODE =
              (TYPE = SELECT)
              (METHOD = BASIC)
              (RETRIES = 200)
              (DELAY = 5)
          )
      )
  )
TESTDB1 =
(DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 200.31.43.43)(PORT = 1522))
    (CONNECT_DATA =
        (SERVER = DEDICATED)
        (SERVICE_NAME = TESTDB)
        (INSTANCE_NAME = TESTDB1)
    )
)
 
TESTDB2 =
  (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 200.31.43.44)(PORT = 1522))
      (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = TESTDB)
          (INSTANCE_NAME = TESTDB2)
      )
)

在主节点上修改remote listener:

[oracle@node1 admin]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Wed Apr 10 15:04:29 2013
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL> show parameter listener
NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
listener_networks     string
local_listener     string (DESCRIPTION=(ADDRESS_LIST=(AD
 DRESS=(PROTOCOL=TCP)(HOST=200.31.43.43)(PORT=1522))))
remote_listener      string SCANIP:1521
SQL> alter system set remote_listener=TESTDB_LISTENERS;
System altered.
SQL> show parameter listener
NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
listener_networks     string
local_listener     string (DESCRIPTION=(ADDRESS_LIST=(AD
 DRESS=(PROTOCOL=TCP)(HOST=200.
 31.157.218)(PORT=1522))))
remote_listener      string TESTDB_LISTENERS

这样就将数据库orcltest的监听端口换成了1522

注意!监听必须绑定到VIP的端口上,因为VIP才是真正的业务IP,是可以在集群内部漂移的IP,而物理IP一旦机器宕机就不能访问了,而SCANIP只是一个转接IP,根据load_balance的设置将访问请求转接到各个实例的VIP的端口上,所以VIP才是真正的服务IP!

 

使用grid用户查看集群正常状态:

crs_stat –t//只有gsd为OFFLINE,其他全为ONLINE,即为正常状态。
Name           Type           Target    State     Host        
------------------------------------------------------------
ora.DATADG.dg  ora....up.type ONLINE    ONLINE    node1   
ora.FLASHDG.dg ora....up.type ONLINE    ONLINE    node1   
ora....ER.lsnr ora....er.type ONLINE    ONLINE    node1   
ora....ER.lsnr ora....er.type ONLINE    ONLINE    node1   
ora....N1.lsnr ora....er.type ONLINE    ONLINE    node2   
ora.OCRDG.dg   ora....up.type ONLINE    ONLINE    node1   
ora.asm        ora.asm.type   ONLINE    ONLINE    node1   
ora.cvu        ora.cvu.type   ONLINE    ONLINE    node2   
ora.gsd        ora.gsd.type   OFFLINE   OFFLINE               
ora.testdb.db   ora....se.type ONLINE    ONLINE    node2   
ora....network ora....rk.type ONLINE    ONLINE    node1   
ora.oc4j       ora.oc4j.type  ONLINE    ONLINE    node2   
ora.ons        ora.ons.type   ONLINE    ONLINE    node1   
ora....SM2.asm application    ONLINE    ONLINE    node1   
ora....B3.lsnr application    ONLINE    ONLINE    node1   
ora....B3.lsnr application    ONLINE    ONLINE    node1   
ora....db3.gsd application    OFFLINE   OFFLINE               
ora....db3.ons application    ONLINE    ONLINE    node1   
ora....db3.vip ora....t1.type ONLINE    ONLINE    node1   
ora....SM1.asm application    ONLINE    ONLINE    node2   
ora....B4.lsnr application    ONLINE    ONLINE    node2   
ora....B4.lsnr application    ONLINE    ONLINE    node2   
ora....db4.gsd application    OFFLINE   OFFLINE               
ora....db4.ons application    ONLINE    ONLINE    node2   
ora....db4.vip ora....t1.type ONLINE    ONLINE    node2   
ora....ry.acfs ora....fs.type ONLINE    ONLINE    node1   
ora.scan1.vip  ora....ip.type ONLINE    ONLINE    node2

6 部署oswatcher

以oracle用户登录两个节点

1) 上传oswbb601.tar到/home/oracle目录

2)tar -xvf oswbb601.tar

3)编辑文件/home/oracle/oswbb/private.net:

traceroute -r -F node1-priv
traceroute -r -F node2-priv

其中 XXX-PRIV代表/etc/hosts中心跳网络的别名

4) chmod u+x /home/oracle/oswbb/private.net

5)cd /home/oracle/oswbb

6) ./startOSWbb.sh

7) su – root

8) 在/etc/rc.d/rc.local增加如下行:

# added for oracle oswatcher

su – oracle -c /home/oracle/oswbb/startOSWbb.sh

7 HugePage设置

在内存较大的数据库服务器(大于12G)上,需要设置HugePage,以提高内存页管理效率。

以root用户在/etc/security/limits.conf文件中增加如下内容(两个节点都要操作):

*  soft  memlock   60397977
*  hard  memlock 60397977

以oracle用户重新登陆,执行ulimit -l,确认输出为60397977

sqlplus / as sysdba
show parameter memory

–确认MEMORY_TARGET和MEMORY_MAX_TARGET均设置为0,代表没有使用AMM(Automatic Memory Management)

 执行hugepages_settings.sh(执行之前需要确认数据库和ASM实例均处于运行状态),得到推荐的hugepage数量。(此处假设为1496)

以root用户编辑/etc/sysctl.conf,增加如下行:

vm.nr_hugepages=1496

grep AnonHugePages /proc/meminfo 如果输出为“AnonHugePages: xxx kB”,xxx表示大于0的值,则表示内核在使用透明大页。

在RHEL6中透明大页会导致数据库异常重启。因此如果内核在使用透明大页,则需要在/etc/grub.conf的启动选项中,加入如下选项:

transparent_hugepage=never

加完以后的配置文件类似如下:

kernel /vmlinuz-2.6.32-300.25.1.el6uek.x86_64 ro root=LABLE=/ transparent_hugepage=never

重启数据库主机,并且重启数据库。

grep HugePages /proc/meminfo,确认HugePages_Total为1496
grep AnonHugePages /proc/meminfo,确认没有在使用Transparent HugePages

8 测试

1)拔掉主机1的一根业务网线,确认数据库状态正常。

2)将主机1的网线插回,等待大约2分钟,拔掉主机2的一根业务网线,确认数据库状态正常。

3) 将主机2的网线插回。拔掉一根心跳,确认数据库状态正常。

4) 拔掉另一根心跳,确认fencing后数据库资源正常

5) 将心跳线插回,拔掉一台主机的两根网线,确认一个数据库实例关闭,另外一个数据库实例资源状态正常。

 

发表在 Oracle, ORACLE基础与管理 | 留下评论

GoldenGate在Oracle数据库复制环境下aftercsn与atcsn的选取测试研究

本文作者:东方龙马(上海)  谢金融

实验说明:

熟悉Ogg实施过程的伙伴们都应了解,实施步骤中初始化的步骤尤为关键,通常可以使用rman或者exp两种方式,而开启复制进程时也有atcsn(大于或等于该scn的事务将被apply),aftercsn(大于该scn的事务将被apply)参数进行选择。

结论:当使用rman初始化时使用atcsn,使用exp初始化时使用aftercsn。
真假:真
说法:以上结论正确,但存在特例:当rman方式初始化时,如果until 的scn正好是一个事务的commit消息,则需要使用aftercsn;因为此时rman恢复包含了该事务。
真假:假

下面的实验同时验证说法的不正确以及结论的正确性。

实验环境:

数据库版本:oracle 11.2.0.4

操作系统:redhat 5.5

实验步骤:

一、 创建表xt

Create table xt (i int);
插入数据并提交
insert into xt select current_scn from v$database;
commit;

二、 使用logminer查看该事务的scn

1) 找出正在使用的日志文件

SQL> select l.group#, l.thread#, l.status, lf.member
  from v$log l, v$logfile lf
 where l.status = 'CURRENT'
   and l.group# = lf.group#;
   
    GROUP#    THREAD# STATUS       MEMBER
---------- ---------- ---------------- -----------------------------
 1    1 CURRENT       +DATADG/sprac/onlinelog/group_1.257.897514033

2) 将日志文件加入挖掘队列

SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE('+DATADG/sprac/onlinelog/group_1.257.897514033',
                                  DBMS_LOGMNR.NEW);
                                  
PL/SQL procedure successfully completed.

3) 使用联机目录数据字典

SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);

PL/SQL procedure successfully completed.

4) 查看事务的commi scn,commit scn 为17597245

SQL> select scn, start_scn, commit_scn, operation, table_name, sql_redo
  from v$logmnr_contents
 where scn between 17597237 and 17597245;
 
SCN         START_SCN COMMIT_SCN OPERATION  TABLE_NAME SQL_REDO 
---------- ------------- ----------------- ---------- ------------- --------------------------  
17597238                         START                 set transaction read write;   
17597238                         INSERT     XT         insert into "SYS"."XT"("I") values ('17597237');   
17597245   17597238 17597245     COMMIT                commit;

使用闪回查询,在17597245点可以看到该事务,在17597244点是没有该事务的

SQL> select * from xt as of scn 17597245;
 I
----------
  17597237
  
SQL> select * from xt as of scn 17597244;

no rows selected

三、 使用exp闪回导出数据,导出一行说明可以导出该事务

[oracle@sprac1 ~]$ exp system/oracle file=/tmp/xt tables=sys.xt flashback_scn=17597245
Export: Release 11.2.0.4.0 - Production on Mon Dec 7 11:30:08 2015
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Tes
Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set
About to export specified tables via Conventional Path ...
Current user changed to SYS
. . exporting table                             XT          1 rows exported
Export terminated successfully without warnings.

四、 使用rman恢复

1) 关闭数据库

SQL> shut immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

2) 使用rman打开到mount

[oracle@sprac1 ~]$ rman target /
Recovery Manager: Release 11.2.0.4.0 - Production on Mon Dec 7 11:35:35 2015
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
connected to target database (not started)
RMAN> startup mount;
Oracle instance started
database mounted
Total System Global Area     818401280 bytes
Fixed Size                     2257680 bytes
Variable Size                645926128 bytes
Database Buffers             167772160 bytes
Redo Buffers                   2445312 bytes

3) 使用已经做好的全备Restore数据库

RMAN> restore database;
Starting restore at 07-DEC-15
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=34 instance=sprac1 device type=DISK
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to +DATADG/sprac/datafile/system.259.885043239
channel ORA_DISK_1: restoring datafile 00002 to +DATADG/sprac/datafile/sysaux.260.885043267
channel ORA_DISK_1: restoring datafile 00003 to +DATADG/sprac/datafile/undotbs1.261.885043287
channel ORA_DISK_1: restoring datafile 00004 to +DATADG/sprac/datafile/undotbs2.266.887480495
channel ORA_DISK_1: restoring datafile 00005 to +DATADG/sprac/datafile/users.264.885043319
channel ORA_DISK_1: restoring datafile 00006 to +DATADG/sprac/datafile/xjruser.dbf
channel ORA_DISK_1: restoring datafile 00007 to +DATADG/sprac/datafile/ogg.473.886860363
channel ORA_DISK_1: restoring datafile 00008 to +DATADG/sprac/datafile/sh.606.892830263
channel ORA_DISK_1: reading from backup piece /disk/full_sprac1.full
channel ORA_DISK_1: piece handle=/disk/full_sprac1.full tag=TAG20151201T195635
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:02:57
Finished restore at 07-DEC-15

4) 恢复数据库until scn 17597245

RMAN> recover database until scn 17597245;
Starting recover at 07-DEC-15
using channel ORA_DISK_1
starting media recovery
...
...
...
archived log file name=/u01/app/oracle/arch/sprac/1_20_897514028.dbf thread=1 sequence=20
archived log file name=/u01/app/oracle/arch/sprac/1_21_897514028.dbf thread=1 sequence=21
archived log file name=/u01/app/oracle/arch/sprac/1_1_897773893.dbf thread=1 sequence=1
media recovery complete, elapsed time: 00:02:16
Finished recover at 07-DEC-15

5) 进入sqlplus,以read only模式打开

[oracle@sprac1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Mon Dec 7 11:43:27 2015
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL> alter database open read only;
alter database open read only
*
ERROR at line 1:
ORA-16005: database requires recovery------------此处由于控制文件scn新于数据文件,执行下面语句即可
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 17597245 generated at 12/07/2015 11:18:21 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/arch/sprac/1_3_897773893.dbf
ORA-00280: change 17597245 for thread 1 is in sequence #3
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
Media recovery cancelled.
SQL> alter database open read only;
Database altered.

6) 查看数据文件头scn

SQL> select checkpoint_change# from v$datafile_header;
CHECKPOINT_CHANGE#
------------------
  17597245
  17597245
  17597245
  17597245
  17597245
  17597245
  17597245
  17597245
8 rows selected.

7) 查看current scn,说明数据库只包含到17597244

SQL> select current_scn from v$database;
CURRENT_SCN
-----------
   17597244

8) 查看xt表的事务存不存在

SQL> select * from xt;
no rows selected

试验总结:

rman recover until scn 17597245是不包含这个scn,所以ogg复制进程需要使用atcsn 17597245;

Exp flashback_scn 17597245是包含这个scn的,所以复制进程使用aftercsn 17597245

Tips:同理 splex的reconcile操作,

 Rman 方式初始化————》reconcile scn xxx

 Exp 方式初始化—————》reconcile scn xxx+1

发表在 Oracle, ORACLE基础与管理 | 留下评论

测试io性能的工具-oracle orion介绍

Oracle orion介绍

orion,一款由Oracle公司提供,专门用于模拟数据库运行机制来测试存储的优秀IO存储测试软件,可以在不运行oracle数据库的情况下,仿真OLTP随机操作(测试IOPS)或者是OLAP连续性操作(测试吞吐量)。

从oracle 11g R2起,orion被整合进RDBMS中了,命令可以从$ORACLE_HOME/bin中找到。

IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。

Mbps (MB per Second)传输速率是指集线器的数据交换能力,也叫“带宽”,单位是Mbps(兆位/秒)。

测试命令示例

注:我的配置文件为my_disk.lun,内容如下:

[root@ora11gdb1 orion]# more my_disk.lun 
/dev/sdb1
/dev/sdc1
/dev/sdd1
/dev/sde1

1、数据库OLTP类型,假定IO类型全部是8K随机操作,压力类型,自动加压,从小到大,一直到存储压力极限 

$$ORACLE_HOME/bin/orion -run advanced -testname my_disk \
-num_disks 4 -size_small 8 -size_large 8 -type rand

2、数据库OLAP类型,吞吐量测试,假定IO全部是1M的序列性IO

$$ORACLE_HOME/bin/orion -run advanced -testname my_disk  \
-num_disks 4 -size_small 1024 -size_large 1024 -type seq

必选输入参数:(run、testname、num_disks)

run:测试运行的层次,这个选项提供simple,normal,advanced的层次。

Simple:简单的测试小的随机的IO(默认8k)以及大IO的连续的IO(默认1024K)。在这个选项中,小的随机的IO和大的连续的IO是分开测试的。这个参数对应下列的Orion调用:

$ORACLE_HOME/bin/orion -run advanced -testname my_disk \
-num_disks 4 -size_small 8 -size_large 1024 -type rand \
-simulate concat -write 0 -duration 60 -matrix basic
或
$ORACLE_HOME/bin/orion -run advanced -testname my_disk -num_disks 4

Normal:除了simple的功能外,还会产生小的随机的IO和大的连续的IO的结合。这个参数对应下列的Orion调用:

$ORACLE_HOME/bin/orion -run advanced -testname my_disk \
-num_disks 4 -size_small 8 -size_large 1024 -type rand \
-simulate concat -write 0 -duration 60 -matrix detailed
或
$ORACLE_HOME/bin/orion -run advanced -testname my_disk -num_disks 4

Advanced:用这个选项,用户需要指定可选的参数。

testname: 输入文件必须是<testname>.lun。在这里只需要输入<testname>,不需要文件的后缀名,输入了反而会报错。

num_disks: 实际测试的物理磁盘的数目。

可选的输入参数:

size_small: 小的随机工作量的IO的大小(KB)。

size_large: 大的随机的或者连续工作量的大小(KB)。

type:大的IO的工作类型(默认是rand):

    — rand:大的随机的IO。

   — seq:大的连续的IO。

write: 和读相比的写的百分比,这个参数在小的随机的和大的连续的IO工作量下适用。在大的连续的IO,每个读写流要么是读要么是写。这个参数是指只是写百分比。写的数据都是垃圾数据。 写的测试将破坏的指定的lun。

num_streamIO: 每个大的连续读写流的IO数目。只是在-type seq下使用。

simulate:大的连续的IO工作量小的数据分布。

  — contact:串联指定的luns成一个虚拟的卷。在虚拟的卷上的连续的测试从某个点到一个lun的结束点。然后再到下一个lun。

  — raid0:在指定的luns上条带化成一个虚拟的卷。条带的大小是1M(和asm的条带大小一致),可以通过参数-stripe来更改。

cache_size: 存储阵列的读写缓存大小(MB)。针对大的连续的IO工作量,Orion将在每个测试点之前warm的cache。使用缓存大小来决定缓存操作。如果没有指定,将有个默认值。如果是0的话,将没有warm缓存。

duration: 每个测试点的时间。(默认是60)

matrix: 混合工作量测试的类型

  — basic:没有混合的工作量,小的随机的IO和大的连续的IO分开测试。

  — detailed:小的随机的IO和大的连续的IO结合起来测试。

  — point: 单个测试点,S代表小的随机的IO,L代表大的随机/连续的IO。S -num_small L -num_large

  — col: 大的随机/连续的IO

  — row: 小的随机的IO

  — max:和detailed一样,只是在最大的负载下测试工作量。可以用-num_small和 -num_large参数指定。

num_small: 小的随机的IO的最大数目。

num_large: 大的随机的IO或者一个读写流的并发数目。

verbose:打印进度和状态到控制台。

结果返回:

该软件的运行只需要一个配置文件,<testname>.lun,配置了测试所需要用到的磁盘信息,而分别返回如下信息:

<testname>_iops.csv:不同压力类型的IOPS值

<testname>_mbps.csv:不同压力类型的吞吐量

<testname>_lat.csv:不同压力类型下的响应时间

<testname>_summary.txt:测试结果的汇总信息

注:如果你的数据库IO请求主要是单个块,那就关注IOPS,如果数据库IO请求主要是多个块,那就关注MBPS。

发表在 Oracle, ORACLE基础与管理 | 留下评论

TPCC-MySQL使用参考

一、 Tpcc-mysql介绍

Tpcc-mysql是percona基于tpcc衍生出来的产品,专用于mysql基准测试,其源码放在bazaar(Bazaar是一个分布式的版本控制系统,采用 GPL 许可协议,可运行于 Windows、GNU/Linux、UNIX 以及 Mac OS 系统之上。Bazaar 由 Canonical 公司(Ubuntu母公司)赞助)上,因此还需要先安装bazaar客户端。

二、编译安装

编译非常简单

cd /mysql_soft/tpcc-mysql/src
make

然后就会在 /mysql_soft/tpcc-mysql 下生成 tpcc 命令行工具 tpcc_load 、 tpcc_start

三、开始加载测试数据

初始化测试库环境

cd /mysql_soft/tpcc-mysql
mysql -uroot -ppassword -e 'create database tpcc'  
mysql -uroot -ppassword tpcc < create_table.sql
mysql -uroot -ppassword tpcc < add_fkey_idx.sql

初始化完毕后,就可以开始加载测试数据了

四、tpcc_load使用

# ./tpcc_load --help
tpcc_load [server] [DB] [user] [pass] [warehouse]
Server:服务器名
DB:数据库名
user:用户名
pass: 密码
Warehouse: 仓库的数量

注:Warehouse是代表几个仓库,仓库越大,数据量越大。耗费的时间越长,数据最好模拟你真实的数据量,或者至少大于你的buffer pool。

如下:

./tpcc_load localhost tpcc root password 20

在这里,需要注意的是 tpcc 默认会读取 /var/lib/mysql/mysql.sock 这个socket位置,因此如果你的socket不在相应路径的话,就需要做个软连接,或者通过TCP/IP的方式连接测试服务器。

注:加载测试数据时长视仓库数量而定,可能会比较久。

五、进行测试

#./tpcc_start --help
tpcc_start -h server_host -P port -d database_name -u mysql_user -p mysql_password -w warehouses -c connections -r warmup_time -l running_time -i report_interval -f report_file
介绍一下各个参数的用法
-h server_host:服务器名
-P port :端口号,默认为3306
-d database_name:数据库名
-u mysql_user :用户名
-p mysql_password :密码
-w warehouses:仓库的数量
-c connections :线程数,默认为1
-r warmup_time :热身时间,单位:s,默认为10s ,热身是为了将数据加载到内存。
-l running_time:测试时间,单位:s,默认为20s
-i report_interval:指定生成报告间隔时长
-f report_file:测试结果输出文件

现在我们来开启一个测试案例

[root@mysql-serv tpcc-mysql]# ./tpcc_start -hmysql-serv -d tpcc -utpcc -ppassword -w20 -c20 -r60 -l600
***************************************
*** ###easy### TPC-C Load Generator ***
***************************************
option h with value 'mysql-serv'
option d with value 'tpcc'
option u with value 'tpcc'
option p with value 'password'
option w with value '20'
option c with value '20'
option r with value '60'
option l with value '600'
<Parameters>
     [server]: mysql-serv
     [port]: 3306
     [DBname]: tpcc
       [user]: tpcc
       [pass]: password
  [warehouse]: 20
 [connection]: 20
     [rampup]: 60 (sec.)
    [measure]: 600 (sec.)
RAMP-UP TIME.(60 sec.)
MEASURING START.
  10, 732(1):2.810|6.593, 736(0):0.752|7.129, 73(0):0.474|0.883, 74(0):3.980|5.132, 74(0):8.365|9.973
  20, 723(0):2.825|4.055, 712(0):0.888|1.624, 71(0):0.247|0.350, 70(0):3.633|7.875, 72(0):7.817|8.062
  30, 679(0):2.766|3.760, 693(0):0.745|1.082, 69(0):0.363|0.757, 69(0):3.482|3.762, 69(0):7.932|9.848
  40, 686(1):3.218|5.785, 683(0):0.764|1.132, 69(0):0.353|0.372, 70(0):3.863|6.717, 68(0):8.790|10.432
  50, 724(1):2.890|8.127, 717(0):0.766|1.636, 72(0):0.321|0.368, 71(0):3.156|3.846, 73(0):8.129|13.869
......
 580, 683(0):2.397|3.596, 684(0):0.697|1.083, 68(0):0.271|0.319, 69(0):3.099|3.107, 69(0):7.353|8.127
 590, 671(1):2.398|6.198, 663(0):0.608|1.371, 67(0):0.462|0.489, 67(0):2.750|2.982, 66(0):6.954|7.055
 600, 661(1):2.758|5.095, 662(0):0.707|1.082, 66(0):0.295|0.443, 66(0):3.238|3.289, 66(0):7.298|7.411
STOPPING THREADS....................
<Raw Results>
  [0] sc:40389  lt:35  rt:0  fl:0 
  [1] sc:40419  lt:2  rt:0  fl:0 
  [2] sc:4043  lt:0  rt:0  fl:0 
  [3] sc:4044  lt:0  rt:0  fl:0 
  [4] sc:4042  lt:2  rt:0  fl:0 
 in 600 sec.
<Raw Results2(sum ver.)>
  [0] sc:40397  lt:35  rt:0  fl:0 
  [1] sc:40428  lt:2  rt:0  fl:0 
  [2] sc:4043  lt:0  rt:0  fl:0 
  [3] sc:4044  lt:0  rt:0  fl:0 
  [4] sc:4042  lt:2  rt:0  fl:0 
<Constraint Check> (all must be [OK])
 [transaction percentage]
        Payment: 43.47% (>=43.0%) [OK]
   Order-Status: 4.35% (>= 4.0%) [OK]
       Delivery: 4.35% (>= 4.0%) [OK]
    Stock-Level: 4.35% (>= 4.0%) [OK]
 [response time (at least 90% passed)]
      New-Order: 99.91%  [OK]
        Payment: 100.00%  [OK]
   Order-Status: 100.00%  [OK]
       Delivery: 100.00%  [OK]
    Stock-Level: 99.95%  [OK]
<TpmC>
                 4042.400 TpmC

注:TpmC是我们最为关注的值!

发表在 MySQL | 留下评论

Linux性能测试UnixBench

UnixBench是什么

UnixBench 是一款开源的测试 unix 系统基本性能的工具,是比较通用的测试VPS性能的工具.。UnixBench会执行一系列的测试,包括2D和3D图形系统的性能衡量,测试的结果不仅仅只是CPU,内存,或者磁盘为基准,还取决于硬件,操作系统版本,编译器.。测试系统各个方面一系列的性能,然后将每个测试结果和一个基准值进行比较,得到一个索引值,所有测试项目的索引值结合在一起形成一个测试分数值.

UnixBench 下载地址:

http://lamp.teddysun.com/files/

UnixBench安装运行:

1)解压目录到:/soft/UnixBench

2) 在安装配置了gcc的环境下直接运行:make

3)在/soft/UnixBench目录下运行:./Run

UnixBench测试说明:

Dhrystone 2 using register variables

此项用于测试 string handling,因为没有浮点操作,所以深受软件和硬件设计(hardware and software design)、编译和链接(compiler and linker options)、代码优化(code optimazaton)、对内存的cache(cache memory)、等待状态(wait states)、整数数据类型(integer data types)的影响。

Double-Precision Whetstone

这一项测试浮点数操作的速度和效率。这一测试包括几个模块,每个模块都包括一组用于科学计算的操作。覆盖面很广的一系列 c 函数:sin,cos,sqrt,exp,log 被用于整数和浮点数的数学运算、数组访问、条件分支(conditional branch)和程序调用。此测试同时测试了整数和浮点数算术运算。

Execl Throughput

此测试考察每秒钟可以执行的 execl 系统调用的次数。 execl 系统调用是 exec 函数族的一员。它和其他一些与之相似的命令一样是 execve() 函数的前端。

File copy

测试从一个文件向另外一个文件传输数据的速率。每次测试使用不同大小的缓冲区。这一针对文件 read、write、copy 操作的测试统计规定时间(默认是 10s)内的文件 read、write、copy 操作次数。

Pipe Throughput

管道(pipe)是进程间交流的最简单方式,这里的 Pipe throughtput 指的是一秒钟内一个进程可以向一个管道写 512 字节数据然后再读回的次数。需要注意的是,pipe throughtput 在实际编程中没有对应的真实存在。

Pipe-based Context Switching

这个测试两个进程(每秒钟)通过一个管道交换一个不断增长的整数的次数。这一点很向现实编程中的一些应用,这个测试程序首先创建一个子进程,再和这个子进程进行双向的管道传输。

Process Creation

测试每秒钟一个进程可以创建子进程然后收回子进程的次数(子进程一定立即退出)。process creation 的关注点是新进程进程控制块(process control block)的创建和内存分配,即一针见血地关注内存带宽。一般说来,这个测试被用于对操作系统进程创建这一系统调用的不同实现的比较。

System Call Overhead

测试进入和离开操作系统内核的代价,即一次系统调用的代价。它利用一个反复地调用 getpid 函数的小程序达到此目的。

Shell Scripts

测试一秒钟内一个进程可以并发地开始一个 shell 脚本的 n 个拷贝的次数,n 一般取值 1,2,4,8。(我在测试时取 1, 8)。这个脚本对一个数据文件进行一系列的变形操作(transformation)。

以下为我的测试结果:

1449071064185188.jpg

发表在 OS | 留下评论

部分常用SQL脚本

— 查找前N条性能差的sql.

set linesize 130
set pagesize 500
col sql_text format a60
 SELECT * FROM 
(
SELECT 
sql_text,BUFFER_GETS/decode(EXECUTIONS,0,1,executions) as p_buffer_gets,executions
  EXECUTIONS,cpu_time/1000000 as cpu_time,ELAPSED_TIME/1000000 as p_elapsed_time,HASH_VALUE
FROM v$sqlarea
ORDER BY BUFFER_GETS/(1+EXECUTIONS) DESC 
) 
WHERE ROWNUM<&sql_rownum ;

— 根据进程找当前运行的SQL

col username format a20
col sql_text format a60
set linesize 120
SELECT a.username,
a.sid,
a.serial#,
c.sql_text
    FROM v$session a,
v$process b,
v$sqlarea c
WHERE b.spid in (&1)
AND b.addr=a.paddr
AND a.sql_address=c.address
-- 根据会话ID找当前运行的SQL
col username format a20
col sql_text format a60
set linesize 120
SELECT a.username,
a.sid,
a.serial#,
b.spid,
c.sql_text
    FROM v$session a,
v$process b,
v$sqlarea c
WHERE a.sid in (&1)
AND b.addr=a.paddr
AND a.sql_address=c.address

— 统计归档日志:

set linesize 200
set pagesize 200
col "Total" format 99999
col THREAD# format 99
col h0 format 9999
col h1 format 9999
col h2 format 9999
col h3 format 9999
col h4 format 9999
col h5 format 9999
col h6 format 9999
col h7 format 9999
col h8 format 9999
col h9 format 9999
col h10 format 9999
col h11 format 9999
col h12 format 9999
col h13 format 9999
col h14 format 9999
col h15 format 9999
col h16 format 9999
col h17 format 9999
col h18 format 9999
col h19 format 9999
col h20 format 9999
col h21 format 9999
col h22 format 9999
col h23 format 9999
col h24 format 9999
SELECT trunc(first_time) "Date",
to_char(first_time, 'Dy') "Day",
    THREAD#,
count(1) "Total",
SUM(decode(to_char(first_time, 'hh24'),'00',1,0)) "h0",
SUM(decode(to_char(first_time, 'hh24'),'01',1,0)) "h1",
SUM(decode(to_char(first_time, 'hh24'),'02',1,0)) "h2",
SUM(decode(to_char(first_time, 'hh24'),'03',1,0)) "h3",
SUM(decode(to_char(first_time, 'hh24'),'04',1,0)) "h4",
SUM(decode(to_char(first_time, 'hh24'),'05',1,0)) "h5",
SUM(decode(to_char(first_time, 'hh24'),'06',1,0)) "h6",
SUM(decode(to_char(first_time, 'hh24'),'07',1,0)) "h7",
SUM(decode(to_char(first_time, 'hh24'),'08',1,0)) "h8",
SUM(decode(to_char(first_time, 'hh24'),'09',1,0)) "h9",
SUM(decode(to_char(first_time, 'hh24'),'10',1,0)) "h10",
SUM(decode(to_char(first_time, 'hh24'),'11',1,0)) "h11",
SUM(decode(to_char(first_time, 'hh24'),'12',1,0)) "h12",
SUM(decode(to_char(first_time, 'hh24'),'13',1,0)) "h13",
SUM(decode(to_char(first_time, 'hh24'),'14',1,0)) "h14",
SUM(decode(to_char(first_time, 'hh24'),'15',1,0)) "h15",
SUM(decode(to_char(first_time, 'hh24'),'16',1,0)) "h16",
SUM(decode(to_char(first_time, 'hh24'),'17',1,0)) "h17",
SUM(decode(to_char(first_time, 'hh24'),'18',1,0)) "h18",
SUM(decode(to_char(first_time, 'hh24'),'19',1,0)) "h19",
SUM(decode(to_char(first_time, 'hh24'),'20',1,0)) "h20",
SUM(decode(to_char(first_time, 'hh24'),'21',1,0)) "h21",
SUM(decode(to_char(first_time, 'hh24'),'22',1,0)) "h22",
SUM(decode(to_char(first_time, 'hh24'),'23',1,0)) "h23"
FROM V$log_history
group by trunc(first_time), to_char(first_time, 'Dy'),THREAD#
Order by 1;

— 空间使用情况:

set linesize 120
col "Name" format a20
col "Used (M)" format a20
col "Used %" format a20
col "Size (M)" format a20
SELECT d.status "Status", d.tablespace_name "Name", d.contents "Type", d.extent_management "Extent Management", TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),'99,999,990.90') "Size (M)", 
TO_CHAR(NVL(a.bytes - NVL(f.bytes, 0), 0)/1024/1024,'99999999.99') 
"Used (M)", TO_CHAR(NVL((a.bytes - 
NVL(f.bytes, 0)) / a.bytes * 100, 0), '990.00') "Used %" 
FROM sys.dba_tablespaces d, (select 
tablespace_name, sum(bytes) bytes from dba_data_files group by tablespace_name) a, (select 
tablespace_name, sum(bytes) bytes from dba_free_space group by tablespace_name) f 
WHERE 
d.tablespace_name = a.tablespace_name(+) AND d.tablespace_name = f.tablespace_name(+) AND NOT 
(d.extent_management like 'LOCAL' AND d.contents like 'TEMPORARY') 
UNION ALL
SELECT d.status 
"Status", d.tablespace_name "Name", d.contents "Type", d.extent_management "Extent Management", 
TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),'99,999,990.90') "Size (M)", TO_CHAR(NVL(t.bytes, 
0)/1024/1024,'99999999.99')  "Used (M)", 
TO_CHAR(NVL(t.bytes / a.bytes * 100, 0), '990.00') "Used %" 
FROM sys.dba_tablespaces d, (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) t 
WHERE 
d.tablespace_name = a.tablespace_name(+) AND d.tablespace_name = t.tablespace_name(+) AND 
d.extent_management like 'LOCAL' AND d.contents like 'TEMPORARY' order by "Name";

— 当前锁等待情况

- for rac:
set linesize 150
col sess format a30
col username format a20
select username,
decode(request, 0, 'holder:', 'waiter:') || gv$lock.sid sess,gv$lock.inst_id,
       id1,
   decode(gv$lock.type,'TX',trunc(id1/power(2,16)),null) rbs,                 
       decode(gv$lock.type,'TX',bitand(id1,to_number('ffff','xxxx'))+0,null) slot,
   id2,
       lmode,
       request,
       gv$lock.type
  from gv$lock,gv$session
 where (id1, id2, gv$lock.type) in
       (select id1, id2, type from gv$lock where request > 0)
   and gv$lock.sid=gv$session.sid and gv$lock.inst_id=gv$session.inst_id
 order by id1, request;

 –for no rac:

set linesize 150
col sess format a30
col username format a20
select username,
decode(request, 0, 'holder:', 'waiter:') || v$lock.sid sess,
       id1,
   decode(v$lock.type,'TX',trunc(id1/power(2,16)),null) rbs,                 
       decode(v$lock.type,'TX',bitand(id1,to_number('ffff','xxxx'))+0,null) slot,
   id2,
       lmode,
       request,
       v$lock.type
  from v$lock,v$session
 where (id1, id2, v$lock.type) in
       (select id1, id2, type from v$lock where request > 0)
   and v$lock.sid=v$session.sid 
 order by id1, request;

— 查看当前被锁的对象

— for no rac:

set linesize 140
col username format a15
col res format a18
col tab format a20
col owner format a15
col lmode format a15    
col request format a15
select  l.sid,s.username,
        decode(l.type,'RW','RW - Row Wait Enqueue',
                      'TM','TM - DML Enqueue', 
                      'TX','TX - Trans Enqueue',
                      'UL','UL - User',l.type||'System') res, 
        substr(t.name,1,10) tab,u.name owner, 
        l.id1,l.id2, 
        decode(l.lmode,1,'No Lock', 
                2,'Row Share', 
                3,'Row Exclusive', 
                4,'Share', 
                5,'Shr Row Excl', 
                6,'Exclusive',null) lmode, 
        decode(l.request,1,'No Lock', 
                2,'Row Share', 
                3,'Row Excl', 
                4,'Share', 
                5,'Shr Row Excl', 
                6,'Exclusive',null) request 
from v$lock l, v$session s, 
sys.user$ u,sys.obj$ t 
where l.sid = s.sid 
and s.type != 'BACKGROUND' 
and t.obj# = l.id1 
and u.user# = t.owner#;

for rac:

set linesize 160
col username format a15
col res format a18
col tab format a20
col owner format a15
col lmode format a15    
col request format a15
select  l.inst_id,l.sid,s.username,
        decode(l.type,'RW','RW - Row Wait Enqueue',
                      'TM','TM - DML Enqueue', 
                      'TX','TX - Trans Enqueue',
                      'UL','UL - User',l.type||'System') res, 
        substr(t.name,1,10) tab,u.name owner, 
        l.id1,l.id2, 
        decode(l.lmode,1,'No Lock', 
                2,'Row Share', 
                3,'Row Exclusive', 
                4,'Share', 
                5,'Shr Row Excl', 
                6,'Exclusive',null) lmode, 
        decode(l.request,1,'No Lock', 
                2,'Row Share', 
                3,'Row Excl', 
                4,'Share', 
                5,'Shr Row Excl', 
                6,'Exclusive',null) request 
from gv$lock l, gv$session s, 
sys.user$ u,sys.obj$ t 
where l.sid = s.sid 
and s.type != 'BACKGROUND' 
and s.username != 'SYS'
and t.obj# = l.id1 
and u.user# = t.owner#;

— shared pool 使用情况

set linesize 120
select '0 (<140)' BUCKET,
       KSMCHCLS,
       KSMCHIDX,
       10 * trunc(KSMCHSIZ / 10) "From",
       count(*) "Count",
       max(KSMCHSIZ) "Biggest",
       trunc(avg(KSMCHSIZ)) "AvgSize",
       trunc(sum(KSMCHSIZ)) "Total"
  from x$ksmsp
 where KSMCHSIZ < 140
   and KSMCHCLS = 'free'
 group by KSMCHCLS, KSMCHIDX, 10 * trunc(KSMCHSIZ / 10)
UNION ALL
select '1 (140-267)' BUCKET,
       KSMCHCLS,
       KSMCHIDX,
       20 * trunc(KSMCHSIZ / 20),
       count(*),
       max(KSMCHSIZ),
       trunc(avg(KSMCHSIZ)) "AvgSize",
       trunc(sum(KSMCHSIZ)) "Total"
  from x$ksmsp
 where KSMCHSIZ between 140 and 267
   and KSMCHCLS = 'free'
 group by KSMCHCLS, KSMCHIDX, 20 * trunc(KSMCHSIZ / 20)
UNION ALL
select '2 (268-523)' BUCKET,
       KSMCHCLS,
       KSMCHIDX,
       50 * trunc(KSMCHSIZ / 50),
       count(*),
       max(KSMCHSIZ),
       trunc(avg(KSMCHSIZ)) "AvgSize",
       trunc(sum(KSMCHSIZ)) "Total"
  from x$ksmsp
 where KSMCHSIZ between 268 and 523
   and KSMCHCLS = 'free'
 group by KSMCHCLS, KSMCHIDX, 50 * trunc(KSMCHSIZ / 50)
UNION ALL
select '3-5 (524-4107)' BUCKET,
       KSMCHCLS,
       KSMCHIDX,
       500 * trunc(KSMCHSIZ / 500),
       count(*),
       max(KSMCHSIZ),
       trunc(avg(KSMCHSIZ)) "AvgSize",
       trunc(sum(KSMCHSIZ)) "Total"
  from x$ksmsp
 where KSMCHSIZ between 524 and 4107
   and KSMCHCLS = 'free'
 group by KSMCHCLS, KSMCHIDX, 500 * trunc(KSMCHSIZ / 500)
UNION ALL
select '6+ (4108+)' BUCKET,
       KSMCHCLS,
       KSMCHIDX,
       1000 * trunc(KSMCHSIZ / 1000),
       count(*),
       max(KSMCHSIZ),
       trunc(avg(KSMCHSIZ)) "AvgSize",
       trunc(sum(KSMCHSIZ)) "Total"
  from x$ksmsp
 where KSMCHSIZ >= 4108
   and KSMCHCLS = 'free'
 group by KSMCHCLS, KSMCHIDX, 1000 * trunc(KSMCHSIZ / 1000);
 set linesize 120;
 SELECT KSMCHCLS CLASS,
       COUNT(KSMCHCLS) NUM,
       SUM(KSMCHSIZ) SIZ,
       To_char(((SUM(KSMCHSIZ) / COUNT(KSMCHCLS) / 1024)), '999,999.00') || 'k' "AVG SIZE"
  FROM X$KSMSP
 GROUP BY KSMCHCLS;

— 找到对外键没有创建索引的表字段

set linesize 160
column columns format a35 word_wrapped
column tablename format a30 word_wrapped
column constraint_name format a30 word_wrapped
select table_name,
       constraint_name,
       cname1 || nvl2(cname2, ',' || cname2, null) ||
       nvl2(cname3, ',' || cname3, null) ||
       nvl2(cname4, ',' || cname4, null) ||
       nvl2(cname5, ',' || cname5, null) ||
       nvl2(cname6, ',' || cname6, null) ||
       nvl2(cname7, ',' || cname7, null) ||
       nvl2(cname8, ',' || cname8, null) columns
  from (select b.table_name,
               b.constraint_name,
               max(decode(position, 1, column_name, null)) cname1,
               max(decode(position, 2, column_name, null)) cname2,
               max(decode(position, 3, column_name, null)) cname3,
               max(decode(position, 4, column_name, null)) cname4,
               max(decode(position, 5, column_name, null)) cname5,
               max(decode(position, 6, column_name, null)) cname6,
               max(decode(position, 7, column_name, null)) cname7,
               max(decode(position, 8, column_name, null)) cname8,
               count(*) col_cnt
          from (select substr(table_name, 1, 30) table_name,
                       substr(constraint_name, 1, 30) constraint_name,
                       substr(column_name, 1, 30) column_name,
                       position
                  from dba_cons_columns
                 where owner = 'OAT') a,
               dba_constraints b
         where b.owner = 'OAT'
           and a.constraint_name = b.constraint_name
           and b.constraint_type = 'R'
         group by b.table_name, b.constraint_name) cons
 where col_cnt > ALL (select count(*)
          from dba_ind_columns i
         where i.table_owner = 'OAT'
           and i.table_name = cons.table_name
           and i.column_name in (cname1,
                                 cname2,
                                 cname3,
                                 cname4,
                                 cname5,
                                 cname6,
                                 cname7,
                                 cname8)
           and i.column_position <= cons.col_cnt
         group by i.index_name);

–查询绑定变量:

select plan_table_output
  from table(dbms_xplan.display_awr('9zaarvmhhy7mw',
                                    null,
                                    null,
                                    'ADVANCED +PEEKED_BINDS'));
select plan_table_output
  from table(dbms_xplan.display_cursor('8jwra6ygq2s16',
                                       0,
                                       'ADVANCED +PEEKED_BINDS'));

–回滚段,找到有问题(如ORA-01555)的部分:

set pagesize 72
set linesize 120
column UNXPSTEALCNT heading "# Unexpired|Stolen"
column EXPSTEALCNT heading "# Expired|Reused"
column SSOLDERRCNT heading "ORA-1555|Error"
column NOSPACEERRCNT heading "Out-Of-space|Error"
column MAXQUERYLEN heading "Max Query|Length"
select inst_id,
       to_char(begin_time, 'MM/DD/YYYY HH24:MI') begin_time,
       UNXPSTEALCNT,
       EXPSTEALCNT,
       SSOLDERRCNT,
       NOSPACEERRCNT,
       MAXQUERYLEN,
       TUNED_UNDORETENTION
  from gv$undostat
 where UNXPSTEALCNT > 0
    or EXPSTEALCNT > 0
    or SSOLDERRCNT > 0
    or NOSPACEERRCNT > 0
 order by begin_time, inst_id;
发表在 Oracle, ORACLE基础与管理 | 留下评论

某客户删除/tmp目录相关文件引的数据库挂起的故障处理

本文作者:东方龙马(广州)  李侠

环境说明

OS操作系统:AIX

数据库版 本:ORACLE 11.2.0.4

故障问题描述

11月15日东方龙马技术工程师接到客户相关技术人员电话反映相关的交易系统出现有占表无法访问的问题,同时,也无法远程登录检查,数据库日志等信息。根据当时情况,基本无法判断确定具体是什么原因导致表无法访问。

东方龙马工程师到现场后经过同现场工程师沟通了解到在11月15日凌晨2点删除了 /tmp目录下临时文件。

经过分析确认这次数据库故障是删除 /tmp/.oracle目录导致故障。

故障分析

1、根据数据库报警日志确认问题:

Sun Nov 15 04:42:48 2015
WARNING: ASM communication error: op 11 state 0x50 (3113)
ERROR: slave communication error with ASM
Unable to create archive log file '+ARDATA/arch/1_15180_854962843.dbf'
ARC0:Error 19504 Creating archive log file to 
'+ARDATA/arch/1_15180_854962843.dbf'
ARCH: Archival stopped, error occurred. Will continue retrying
ORACLE Instance szps1 - Archival Error
ORA-16038: log 3 sequence# 15180 cannot be archived
ORA-19504: failed to create file ""
ORA-00312: online log 3 thread 1: 
'+DATA/szonline/onlinelog/group_3.263.854962845'
Sun Nov 15 04:42:48 2015
ARCH: Archival stopped, error occurred. Will continue retrying
ORACLE Instance szps1 - Archival Error
ORA-16014: log 3 sequence# 15180 not archived, no available destinations
ORA-00312: online log 3 thread 1: 
'+DATA/szonline/onlinelog/group_3.263.854962845'
Sun Nov 15 04:47:49 2015
WARNING: ASM communication error: op 11 state 0x50 (3113)
ERROR: slave communication error with ASM
Unable to create archive log file '+ARDATA/arch/1_15180_854962843.dbf'
ARC3: Error 19504 Creating archive log file to 
'+ARDATA/arch/1_15180_854962843.dbf'
ARCH: Archival stopped, error occurred. Will continue retrying
ORACLE Instance szps1 - Archival Error
ORA-16038: log 3 sequence# 15180 cannot be archived
ORA-19504: failed to create file ""
ORA-00312: online log 3 thread 1: 
'+DATA/szonline/onlinelog/group_3.263.854962845'
ARCH: Archival stopped, error occurred. Will continue retrying
ORACLE Instance szps1 - Archival Error
ORA-16014: log 3 sequence# 15180 not archived, no available destinations
ORA-00312: online log 3 thread 1: 
'+DATA/szonline/onlinelog/group_3.263.854962845'

从上面的信息,我们看到,从2015年11月15日凌晨4:42 开始到库被重启前一直都要报无法连接ASM实例,导致了无法写日志写归档错误 。

2. ASM 告警日志提示错误

Sun Nov 15 04:42:48 2015
ERROR: unrecoverable error ORA-29701 raised in ASM I/O path; terminating process 15204714 
Sun Nov 15 04:47:49 2015
ERROR: unrecoverable error ORA-29701 raised in ASM I/O path; terminating process 5832778 
Sun Nov 15 04:52:50 2015
ERROR: unrecoverable error ORA-29701 raised in ASM I/O path; terminating process 5701650 
Sun Nov 15 04:57:50 2015
ERROR: unrecoverable error ORA-29701 raised in ASM I/O path; terminating process 14221586 
Sun Nov 15 05:02:50 2015
ERROR: unrecoverable error ORA-29701 raised in ASM I/O path; terminating process 15204858

从上面的信息看到,ASM也从2015年11月15日开始报错,结合之前无法写日志写归档的报错,我们基本可以确认数据库不正常是由于ASM问题引发的。

3、grid 错误日志:

2015-11-15 02:00:51.685: 
[/oracle/grid/bin/oraagent.bin(4325770)]CRS-5016:Process "/oracle/grid/bin/lsnrctl" spawned by agent "/oracle/grid/bin/oraagent.bin" for action "check" failed: details at "(:CLSN00010:)" in 
"/oracle/grid/log/szdb01/agent/crsd/oraagent_grid/oraagent_grid.log"
2015-11-15 02:03:51.823: 
[/oracle/grid/bin/oraagent.bin(4325770)]CRS-5818:Aborted command 'start' for resource 'ora.LISTENER.lsnr'. Details at (:CRSAGF00113:) {0:1:8} in 
/oracle/grid/log/szdb01/agent/crsd/oraagent_grid/oraagent_grid.log.
2015-11-15 02:05:55.825: 
[/oracle/grid/bin/oraagent.bin(4325770)]CRS-5818:Aborted command 'check' for resource 'ora.LISTENER.lsnr'. Details at (:CRSAGF00113:) {0:1:8} in 
/oracle/grid/log/szdb01/agent/crsd/oraagent_grid/oraagent_grid.log.
2015-11-15 02:06:01.721: 
[/oracle/grid/bin/oraagent.bin(4325770)]CRS-5016:Process "/oracle/grid/bin/lsnrctl" spawned by agent "/oracle/grid/bin/oraagent.bin" for action "check" failed: details at "(:CLSN00010:)" in 
"/oracle/grid/log/szdb01/agent/crsd/oraagent_grid/oraagent_grid.log"
2015-11-15 02:15:37.519: 
[ctssd(5505096)]CRS-2409:The clock on host szdb01 is not synchronous with the mean cluster time. No action has been taken as the Cluster Time Synchronization Service is running in observer mode.
2015-11-15 02:27:12.538: 
[ohasd(5177356)]CRS-2765:Resource 'ora.crsd' has failed on server 'szdb01'.
2015-11-15 02:27:12.621: 
[/oracle/grid/bin/orarootagent.bin(5374128)]CRS-5822:Agent '/oracle/grid/bin/orarootagent_root' disconnected from server. Details at (:CRSAGF00117:) {0:5:41827} in 
/oracle/grid/log/szdb01/agent/crsd/orarootagent_root/orarootagent_root.log.
2015-11-15 02:27:12.648: 
[/oracle/grid/bin/oraagent.bin(4325770)]CRS-5822:Agent '/oracle/grid/bin/oraagent_grid' disconnected from server. Details at (:CRSAGF00117:) {0:1:68} in 
/oracle/grid/log/szdb01/agent/crsd/oraagent_grid/oraagent_grid.log.
2015-11-15 02:27:12.649: 
[/oracle/grid/bin/oraagent.bin(6160520)]CRS-5822:Agent '/oracle/grid/bin/oraagent_oracle' disconnected from server. Details at (:CRSAGF00117:) {0:9:52067} in 
/oracle/grid/log/szdb01/agent/crsd/oraagent_oracle/oraagent_oracle.log.
2015-11-15 02:27:14.712: 
[crsd(7012528)]CRS-0805:Cluster Ready Service aborted due to failure to communicate with Cluster Synchronization Service with error [3]. Details at (:CRSD00109:) in
 /oracle/grid/log/szdb01/crsd/crsd.log.
2015-11-15 02:27:15.718: 
[ohasd(5177356)]CRS-2765:Resource 'ora.crsd' has failed on server 'szdb01'.
2015-11-15 02:27:16.818: 
[crsd(6160522)]CRS-0805:Cluster Ready Service aborted due to failure to communicate with Cluster Synchronization Service with error [3]. Details at (:CRSD00109:) in 
/oracle/grid/log/szdb01/crsd/crsd.log.
2015-11-15 02:27:17.817: 
[ohasd(5177356)]CRS-2765:Resource 'ora.crsd' has failed on server 'szdb01'.
2015-11-15 02:27:18.920: 
[crsd(15794626)]CRS-0805:Cluster Ready Service aborted due to failure to communicate with Cluster Synchronization Service with error [3]. Details at (:CRSD00109:) in 
/oracle/grid/log/szdb01/crsd/crsd.log.
2015-11-15 02:27:19.922: 
[ohasd(5177356)]CRS-2765:Resource 'ora.crsd' has failed on server 'szdb01'.
2015-11-15 02:27:21.009: 
[crsd(6094920)]CRS-0805:Cluster Ready Service aborted due to failure to communicate with Cluster Synchronization Service with error [3]. Details at (:CRSD00109:) in
 /oracle/grid/log/szdb01/crsd/crsd.log.
2015-11-15 02:27:22.009: 
[ohasd(5177356)]CRS-2765:Resource 'ora.crsd' has failed on server 'szdb01'.
2015-11-15 02:27:23.091: 
[crsd(6160526)]CRS-0805:Cluster Ready Service aborted due to failure to communicate with Cluster Synchronization Service with error [3]. Details at (:CRSD00109:) in
 /oracle/grid/log/szdb01/crsd/crsd.log.
2015-11-15 02:27:24.099: 
[ohasd(5177356)]CRS-2765:Resource 'ora.crsd' has failed on server 'szdb01'.
2015-11-15 02:27:25.196: 
[crsd(6160528)]CRS-0805:Cluster Ready Service aborted due to failure to communicate with Cluster Synchronization Service with error [3]. Details at (:CRSD00109:) in 
/oracle/grid/log/szdb01/crsd/crsd.log.
2015-11-15 02:27:26.196: 
[ohasd(5177356)]CRS-2765:Resource 'ora.crsd' has failed on server 'szdb01'.
2015-11-15 02:27:27.288: 
[crsd(6160530)]CRS-0805:Cluster Ready Service aborted due to failure to communicate with Cluster Synchronization Service with error [3]. Details at (:CRSD00109:) in 
/oracle/grid/log/szdb01/crsd/crsd.log.
2015-11-15 02:27:28.291: 
[ohasd(5177356)]CRS-2765:Resource 'ora.crsd' has failed on server 'szdb01'.
2015-11-15 02:27:29.366: 
[crsd(12779904)]CRS-0805:Cluster Ready Service aborted due to failure to communicate with Cluster Synchronization Service with error [3]. Details at (:CRSD00109:) in 
/oracle/grid/log/szdb01/crsd/crsd.log.
2015-11-15 02:27:30.371: 
[ohasd(5177356)]CRS-2765:Resource 'ora.crsd' has failed on server 'szdb01'.
2015-11-15 02:27:31.465: 
[crsd(5832832)]CRS-0805:Cluster Ready Service aborted due to failure to communicate with Cluster Synchronization Service with error [3]. Details at (:CRSD00109:) in 
/oracle/grid/log/szdb01/crsd/crsd.log.
2015-11-15 02:27:32.466: 
[ohasd(5177356)]CRS-2765:Resource 'ora.crsd' has failed on server 'szdb01'.
2015-11-15 02:27:33.545: 
[crsd(5832834)]CRS-0805:Cluster Ready Service aborted due to failure to communicate with Cluster Synchronization Service with error [3]. Details at (:CRSD00109:) in 
/oracle/grid/log/szdb01/crsd/crsd.log.
2015-11-15 02:27:34.548: 
[ohasd(5177356)]CRS-2765:Resource 'ora.crsd' has failed on server 'szdb01'.
2015-11-15 02:27:34.548: 
[ohasd(5177356)]CRS-2771:Maximum restart attempts reached for resource 'ora.crsd'; will not restart.
2015-11-15 02:27:34.555: 
[ohasd(5177356)]CRS-2769:Unable to failover resource 'ora.crsd'.

根据GRID的报何错信息,我们基本可以推出:

1)GRID 日志记录,在11月15日凌晨2:00出现监听故障,2:27出现 CRS故障,2:00删除了 /tmp/.oracle的文件夹,GRID 马上就出现了监听器故障,后续有出现了CRS故障;

2)ORACLE数据库实例通过监听器连接ASM实例,在监听器故障之前已经建立的连接,当监听器故障时仍然可以正常使用,而数据库实例的启动归档日志进程进行归档时需要与ASM 实例建立新的连接,这个时候因为监听器已经故障了,导致数据库实例新建的连接无法连接到ASM实例,导致归档失败;

3)由于数据库实例有多个日志组,刚开始的时候只有一个日志组被写满无法归档,后来随着时间推移所有的日志组都被写满,但所有的日志组都没有完成归档,导致无日志组可用来写入 redo 条目,阻塞了应用的SQL。

4、删除 /tmp/.oracle目录导致故障的案例(该案来源于ORALCE metalink文档 ID 370605.1)

Clusterware Intermittently Hangs And Commands Fail With CRS-184 as Network Socker Files in /tmp/.oracle or /var/tmp/.oracle Gets Deleted (文档 ID 370605.1)

APPLIES TO:

Oracle Database – Enterprise Edition – Version 10.1.0.2 to 11.1.0.7 [Release 10.1 to 11.1]

Information in this document applies to any platform.

SYMPTOMS

CRS hangs intermittently

crs_stat -t  returns

CRS-0184: Cannot communicate with the CRS daemon.

node1 [crs]> crsctl check crsd

Cannot communicate with CRS

node1 [crs]> crsctl check css

Failure 1 contacting CSS daemon

ps -ef |grep d.bin will give you the pid of the process 

for example

ps -ef |grep d.bin

oracle   19703 19281  0 Apr10 ?        00:01:03 /home/oracle/oracle/product/10.2.0/crs/bin/evmd.bin

oracle   19976 19950  0 Apr10 ?        00:06:47 /home/oracle/oracle/product/10.2.0/crs/bin/ocssd.bin

root     19323     1  0 Apr10 ?        00:08:47 /home/oracle/oracle/product/10.2.0/crs/bin/crsd.bin

CAUSE

This is caused by a cron job that cleans up the /tmp directory which also removes the Oracle socket files in /tmp/.oracle

SOLUTION

Do not remove /tmp/.oracle or /var/tmp/.oracle or its files while Oracle Clusterware is up.

发表在 Oracle, ORACLE基础与管理, 客户案例 | 留下评论

关于X$表的名称汇总参考

翻了以前对x$表的名称,感觉相当不错,如下:

This is a summary list of X$ Table Definitions – Last revision was 7.3.2

The main purpose of this note is to show the naming conventions.                       

  [K]ernel Layer                                                                
    [2]-Phase Commit                                                            
      [G]lobal [T]ransaction [E]ntry                                            
        X$K2GTE  - Current 2PC tx                                               
        X$K2GTE2 - Current 2PC tx                                               
    [C]ache Layer                                                               
      [B]uffer Management                                                       
        Buffer [H]ash                                                           
          X$BH - Hash Table                                                     
        Buffer LRU Statistics                                                   
          X$KCBCBH - [C]urrent [B]uffers (buckets) - lru_statistics             
          X$KCBRBH - [R]ecent [B]uffers (buckets) - lru_extended                
        Buffer [WAIT]s                                                          
          X$KCBWAIT  - Waits by block class                                     
          X$KCBFWAIT - Waits by File                                            
        [W]orking Sets - 7.3 or higher                                          
          X$KCBWDS - Set [D]escriptors                                          
      [C]ontrol File Management                                                 
        [C]ontrol [F]ile List - 7.0.16 or higher                                
          X$KCCCF - Control File Names & status                                 
        [D]atabase [I]nformation                                                
          X$KCCDI - Database Information                                        
        Data [F]iles                                                            
          X$KCCFE - File [E]ntries ( from control file )                        
          X$KCCFN - [F]ile [N]ames                                              
        [L]og Files                                                             
          X$KCCLE - Log File [E]ntries                                          
          X$KCCLH - Log [H]istory ( archive entries )                           
        Thread Information                                                      
          X$KCCRT - [R]edo [T]hread Information                                 
      [F]ile Management                                                         
        X$KCFIO - File [IO] Statistics                                          
      [L]ock Manager Component ( LCK )                                          
        [H]ash and Bucket Tables - 7.0.15 to 7.1.1, and 7.2.0 or higher         
          X$KCLFH - File [H]ash Table                                           
          X$KCLFI - File Bucket Table                                           
        X$LE - Lock [E]lements                                                  
        X$LE_STAT - Lock Conversion [STAT]istics                                
        X$KCLFX - Lock Element [F]ree list statistics - 7.3 or higher           
        X$KCLLS - Per LCK free list statistics - 7.3 or higher                  
        X$KCLQN - [N]ame (hash) table statistics - 7.3 or higher                
      [R]edo Component                                                          
        [M]edia recovery  - kcra.h - 7.3 or higher                              
          X$KCRMF - [F]ile context                                              
          X$KCRMT - [T]hread context                                            
          X$KCRMX - Recovery Conte[X]t                                          
        [F]ile read                                                             
          X$KCRFX - File Read Conte[X]t -  7.3 or higher                        
      Reco[V]ery Component                                                      
        [F]ile [H]eaders                                                        
          X$KCVFH - All file headers                                            
          X$KCVFHMRR - Files with [M]edia [R]ecovery [R]equired                 
          X$KCVFHONL - [ONL]ine File headers                                    
      [K]ompatibility Management - 7.1.1 or higher                              
        X$KCKCE - [C]ompatibility Segment [E]ntries                             
        X$KCKTY - Compatibility [TY]pes                                         
        X$KCKFM - Compatibility [F]or[M]ats ( index into X$KCKCE )              
    [D]ata Layer                                                                
      Sequence [N]umber Component                                               
         X$KDNCE - Sequence [C]ache [E]ntries - 7.2 or lower                     
        [S]equence Enqueues - common area for enqueue objects                   
          X$KDNSSC - [C]ache Enqueue Objects - 7.2 or lower                     
          X$KDNSSF - [F]lush Enqueue Objects - 7.2 or lower                     
        X$KDNST - Cache [ST]atistics - 7.2 or lower                             
      Inde[X] Block Component                                                   
        X$KDXHS - Index [H]i[S]togram                                           
        X$KDXST - Index [ST]atistics                                            
    [G]eneric Layer                                                             
      [H]eap Manager                                                            
        X$KGHLU - State (summary) of [L]R[U] heap(s) - defined in ksmh.h        
      [I]nstantiation Manager                                                   
        [C]ursor [C]ache                                                        
          X$KGICC - Session statistics - defined in kqlf.h                      
          X$KGICS - System wide statistics - defined in kqlf.h                  
      [L]ibrary Cache Manager  ( defined and mapped from kqlf )                 
        Bind Variables                                                          
          X$KKSBV - Library Object [B]ind [V]ariables                           
        Object Cache                                                            
          X$KGLOB - All [OB]jects                                               
          X$KGLTABLE   - Filter for [TABLE]s                                    
          X$KGLBODY    - Filter for [BODY] ( packages )                         
          X$KGLTRIGGER - Filter for [TRIGGER]s                                  
          X$KGLINDEX   - Filter for [INDEX]es                                   
          X$KGLCLUSTER - Filter for [CLUSTER]s                                  
          X$KGLCURSOR  - Filter for [CURSOR]s                                   
        Cache Dependency                                                        
          X$KGLDP - Object [D]e[P]endency table                                 
          X$KGLRD - [R]ead only [D]ependency table - 7.3 or higher              
        Object Locks                                                            
          X$KGLLK - Object [L]oc[K]s                                            
        Object Names                                                            
          X$KGLNA - Object [NA]mes (sql text)                                   
          X$KGLNA1 - Object [NA]mes (sql text) with newlines - 7.2.0 or higher  
        Object Pins                                                             
          X$KGLPN - Object [P]i[N]s                                             
        Cache Statistics                                                        
          X$KGLST - Library cache [ST]atistics                                  
        Translation Table                                                       
          X$KGLTR - Address [TR]anslation                                       
        Access Table                                                            
          X$KGLXS - Object Access Table                                         
        Authorization Table - 7.1.5 or higher                                   
          X$KGLAU - Object Authorization table                                  
        Latch Cleanup - 7.0.15 or higher                                        
          X$KGLLC - [L]atch [C]leanup for Cache/Pin Latches                     
    [K]ompile Layer                                                             
      [S]hared Objects                                                          
        X$KKSAI - Cursor [A]llocation [I]nformation - 7.3.2 or higher           
    [L]oader                                                                    
      [L]ibrary                                                                 
        X$KLLCNT - [C]o[NT]rol Statistics                                       
        X$KLLTAB - [TAB]le Statistics                                           
    [M]ulti-Threaded Layer                                                      
      [C]ircuit component                                                       
        X$KMCQS - Current [Q]ueue [S]tate                                       
        X$KMCVC - [V]irtual [C]ircuit state                                     
      [M]onitor Server/dispatcher                                               
        [D]ispatcher                                                            
          X$KMMDI - [D]ispatcher [I]nfo (status)                                
           X$KMMDP - [D]ispatcher Config ( [P]rotocol info )                     
        [S]erver                                                                
          X$KMMSI - [S]erver [I]nfo ( status )                                  
        X$KMMSG - [SG]a info ( global statistics)                               
        X$KMMRD - [R]equest timing [D]istributions                              
    s[Q]l Version and Option Layer                                              
      Kernel [V]ersions                                                         
        X$VERSION - Library versions                                            
      Kernel [O]ptions - 7.1.3 or higher                                        
        X$OPTION - Server Options                                               
    [Q]uery Layer                                                               
      [D]ictionary Cache Management                                             
        X$KQDPG - [PG]a row cache cursor statistics                             
      [F]ixed Tables/views Management                                           
        X$KQFCO - Table [CO]lumn definitions                                    
        X$KQFDT - [D]erived [T]ables                                            
        X$KQFSZ - Kernel Data structure type [S]i[Z]es                          
        X$KQFTA - Fixed [TA]bles                                                
        X$KQFVI - Fixed [VI]ews                                                 
        X$KQFVT - [V]iew [T]ext definition - 7.2.0 or higher                    
      [R]ow Cache Management                                                    
        X$KQRST - Cache [ST]atistics                                            
        X$KQRPD - [P]arent Cache [D]efinition - 7.1.5 or higher                 
        X$KQRSD - [S]ubordinate Cache [D]efinition - 7.1.5 or higher            
    [S]ervice Layer                                                             
      [B]ackground Management                                                   
        [D]etached Process                                                      
          X$KSBDD - Detached Process [D]efinition (info)                        
          X$KSBDP - Detached [P]rocess Descriptor (name)                        
          X$MESSAGES - Background Message table                                 
      [I]nstance [M]anagement - 7.3 or higher                                   
        X$KSIMAT - Instance [AT]tributes                                        
        X$KSIMAV - [A]ttribute [V]alues for all instances                       
        X$KSIMSI - [S]erial and [I]nstance numbers                              
      [L]ock Management                                                         
        [E]vent Waits                                                           
          X$KSLED - Event [D]escriptors                                         
          X$KSLEI - [I]nstance wide statistics since startup                    
          X$KSLES - Current [S]ession statistics                                
        [L]atches                                                               
          X$KSLLD - Latch [D]escriptor (name)                                   
          X$KSLLT - Latch statistics [ + Child latches @ 7.3 or higher ]        
          X$KSLLW - Latch context ( [W]here ) descriptors - 7.3 or higher       
          X$KSLPO - Latch [PO]st statistics - 7.3 or higher                     
          X$KSLWSC- No[W]ait and [S]leep [C]ount stats by Context -7.3 or higher
      [M]emory Management                                                       
        [C]ontext areas                                                         
          X$KSMCX - E[X]tended statistics on usage - 7.3.1 or lower             
        Heap Areas                                                              
          X$KSMSP - SGA Hea[P]                                                  
          X$KSMPP - [P]GA Hea[P] - 7.3.2 and above                              
          X$KSMUP - [U]GA Hea[P] - 7.3.2 and above                              
          X$KSMHP - Any [H]ea[P] - 7.3.2 and above                              
          X$KSMSPR- [S]hared [P]ool [R]eserved List - 7.1.5 or higher           
        [L]east recently used shared pool chunks                                
          X$KSMLRU - LR[U] flushes from the shared pool                         
        [S]GA Objects                                                           
          X$KSMSD - Size [D]efinition for Fixed/Variable summary                
          X$KSMSS - Statistics (lengths) of SGA objects                         
        SGA [MEM]ory                                                            
           X$KSMMEM - map of the entire SGA - 7.2.0 or higher                    
          X$KSMFSV - Addresses of [F]ixed [S]GA [V]ariables - 7.2.1 or higher   
      [P]arameter Component                                                     
          X$KSPPI  - [P]arameter [I]nfo ( Names )                               
          X$KSPPCV - [C]urrent Session [V]alues - 7.3.2 or above                
          X$KSPPSV - [S]ystem [V]alues - 7.3.2 or above                         
      En[Q]ueue Management                                                      
        X$KSQDN - Global [D]atabase [N]ame                                      
        X$KSQEQ - [E]n[Q]ueue Object                                            
        X$KSQRS - Enqueue [R]e[S]ource                                          
        X$KSQST - Enqueue [S]tatistics by [T]ype                                
      [U]ser Management                                                         
        [C]ost                                                                  
          X$KSUCF - Cost [F]unction (resource limit)                            
        [L]icence                                                               
           X$KSULL - Licence [L]imits                                           
        [L]anguage Manager                                                      
          X$NLS_PARAMETERS - NLS parameters                                     
          X$KSULV - NLS [V]alid Values - 7.1.2 or higher                        
        [MY] [ST]atistics                                                       
          X$KSUMYSTA - [MY] [ST]atisics (current session)                       
        [P]rocess Info                                                          
          X$KSUPL - Process (resource) [L]imits                                 
          X$KSUPRLAT - [LAT]ch Holder                                           
          X$KSUPR - Process object                                              
        [R]esource                                                              
          X$KSURU - Resource [U]sage                                            
        [S]tatistics                                                            
          X$KSUSD - [D]escriptors (statistic names)                             
          X$KSUSGSTA - [G]lobal [ST]atistics                                    
        [SE]ssions                                                              
          X$KSUSECST - Session status for events                                
          X$KSUSESTA - Session [STA]tistics                                     
          X$KSUSECON - [CON]nection Authentication - 7.2.1 or higher            
          X$KSUSE - [SE]ssion Info                                              
          X$KSUSIO - [S]ystem [IO] statistics per session                       
        [T]imer                                                                 
          X$KSUTM - Ti[M]e in 1/100th seconds                                   
        Instance [X]                                                            
          X$KSUXSINST - [INST]ance state                                        
        [T]race management                                                      
          X$TRACE - Current traced events                                       
          X$TRACES - All possible traces                                        
          X$KSTEX - Code [EX]ecution - 7.2.1 or higher                          
      E[X]ecution Management                                                    
        Device/Node [A]ffinity - 7.3.2 and above                                
          X$KSXAFA - Current File/Node Affinity                                 
    [T]ransaction Layer                                                         
      Table [A]ccess [D]efinition                                               
        X$KTADM - D[M]L lock                                                    
      [C]ontrol Component                                                       
        X$KTCXB - Transaction O[B]ject                                          
      [S]or[T] Segments - 7.3 or higher                                         
        X$KTSTSSD - [S]ort [S]egment [D]escriptor - per tablespace statistics   
      [T]ablespace                                                              
        X$KTTVS - [V]alid [S]aveundo                                            
      [U]ndo                                                                    
        X$KTURD - Inuse [D]escriptors                                           
        X$KTUXE - Transaction [E]ntry (table) - 7.3.2 or above                  
    Performance Layer [V] - 7.0.16 or higher                                    
       [I]nformation tables                                                      
        X$KVII - [I]nitialisation Instance parameters                           
        X$KVIS - [S]izes of structure elements                                  
        X$KVIT - [T]ransitory Instance parameters                               
    Security Layer [Z]                                                          
      [D]ictionary Component                                                    
        X$KZDOS - [OS] roles                                                    
      [S]ecurity State                                                          
        X$KZSPR - Enabled [PR]ivileges                                          
        X$KZSRO - Enabled [RO]les                                               
      [R]emote Logins - 7.1.1 or higher                                         
        X$KZSRT - [R]emote Password File [T]able entries                        
    E[X]ecution Layer                                                           
      Parallel Query (Execute [F]ast) - 7.1.1 or higher                         
        [P]rocess and Queue Manager                                             
          Statistics - 7.1.3 or higher                                          
            X$KXFPYS - S[YS]tem Statistics                                      
            X$KXFPDP - [D]etached [P]rocess (slave) statistics                  
            X$KXFQSROW - Table [Q]ueue Statistics - 7.3.2 or higher             
          [C]oordinator Component                                               
            X$KXFPCST - Query [ST]atistics                                      
            X$KXFPCMS - [M]essage [S]tatistics                                  
            X$KXFPCDS - [D]equeue [S]tatistics                                  
          [S]lave Component                                                     
            X$KXFPSST - Query [ST]atistics                                      
            X$KXFPSMS - [M]essage [S]tatistics                                  
            X$KXFPCDS - [D]equeue [S]tatistics                                  
      [S]hared Cursor                                                           
        X$KXSBD - [B]ind [D]ata - 7.3.2 and above                               
        X$KXSCC - SQL [C]ursor [C]ache Data - 7.3.2 and above                   
  [N]etwork Layer - 7.0.15 or higher                                            
    Network [CO]nnections                                                       
      X$UGANCO - Current [N]etwork [CO]nnections

发表在 Oracle, ORACLE内核 | 留下评论

某客户通过调整SCN值恢复数据库紧急故障处理

本文作者:东方龙马(广州)  阮文强

服务描述
客户相关工程师以反映ORACLE数据库进行恢复的时候出现问题,问题主要是由于ORACLE 数据库CHEKPOINT TIME引起的。
东方龙马远程通过分析RMAN备份脚本、备份信息和恢复的信息以及ALERT日志等,以无法解决问题的情况下,东方龙马立即赶到现场与工程师进行沟通,确认:
1 当前的ALERT日志并没有发现任何相关的问题。
2 当前备份操作管理均正常。
3 通过常规的恢复办法均无法恢复数据库。
最后,东方龙马工程师通过非常规的办法,用BBED直接修改ORACLE数据库系统表空间文件的SCN值,重建控制文件,最终成功打开数据库。为了保证数据库的安全稳定,建议相关的工程师重建数据库,数据采用EXP和IMP的方式进行迁移。
环境说明
OS:SUN
数据库:ORACLE 8.1.7

故障分析与处理
1、 错误日志:
客户的工程师在数据无法正常恢复的情况下检查RMAN的备份日志信息,发现错误如下:

-------------------------------------------------------------------------------
执行list backup of tablespace system,最近的几条输出为:
List of Backup Sets
Key     Recid      Stamp      LV Set Stamp  Set Count  Completion Time
------- ---------- ---------- -- ---------- ---------- ----------------------
340969  34951      691898993  0  691898865  35159      11-JUL-09
 
    List of Backup Pieces
    Key     Pc# Cp# Status      Completion Time        Piece Name
    ------- --- --- ----------- ---------------------- ------------------------
    340981  1   1   AVAILABLE   11-JUL-09              bk_69189886535159.dbf
 
    List of Datafiles Included
    File Name                                  LV Type Ckp SCN    Ckp Time
    ---- ------------------------------------- -- ---- ---------- -------------
    1    /DOC_ORADATA/oradata/system01.dbf     0  Full 2031333425 27-MAY-09
 
List of Backup Sets
Key     Recid      Stamp      LV Set Stamp  Set Count  Completion Time
------- ---------- ---------- -- ---------- ---------- ----------------------
341133  34978      692001358  0  692001228  35186      12-JUL-09
 
    List of Backup Pieces
    Key     Pc# Cp# Status      Completion Time        Piece Name
    ------- --- --- ----------- ---------------------- ------------------------
    341145  1   1   AVAILABLE   12-JUL-09              bk_69200122835186.dbf
 
    List of Datafiles Included
    File Name                                  LV Type Ckp SCN    Ckp Time
    ---- ------------------------------------- -- ---- ---------- -------------
    1    /DOC_ORADATA/oradata/system01.dbf     0  Full 2031333425 27-MAY-09
 
List of Backup Sets
Key     Recid      Stamp      LV Set Stamp  Set Count  Completion Time
------- ---------- ---------- -- ---------- ---------- ----------------------
341270  35001      692070519  0  692070163  35209      13-JUL-09
 
    List of Backup Pieces
    Key     Pc# Cp# Status      Completion Time        Piece Name
    ------- --- --- ----------- ---------------------- ------------------------
    341282  1   1   AVAILABLE   13-JUL-09              bk_69207016335209.dbf
 
    List of Datafiles Included
    File Name                                  LV Type Ckp SCN    Ckp Time
    ---- ------------------------------------- -- ---- ---------- -------------
    1    /DOC_ORADATA/oradata/system01.dbf     0  Full 2031333425 27-MAY-09
------------------------------------------------------------------------------


 上面的备份是SYSTEM表空间的备份数据,备份时间为09年7月13日,可是,CHECKPOINT时间的却为09年5月27日,中间的时间差达到了40多天,这意味着,采用进行数据恢复的时候,必须使用到09年5月27日起的所有归档日志。但由于磁带库的存储空间的原因,导致了09年5月27日的归档日志无法找到,这导致了数据库由于归档文件不存在的原因而使数据库无法正常恢复。

2、 由于无法通过常规,只能通过非常规的办法进行数据的恢复,由于当前是SYSTEM表空间的数据文件出现问题,问题不在于数据库坏块,而是在数据库打开的时候提示由于SCN不一致数据库需要恢复,因此,我们决定通过BBED进行人为的修改数据库系统表空间数据文件的SCN值。
3、 配置BBED的参数文件,内容如下:

bbed.par 文件信息:
 blocksize =16384 
mode = edit
listfile=file.list
file.list 文件信息:
 1 /DOC_ORADATA/oradata/system01.dbf                   157286400
  2 /DOC_ORADATA/oradata/tools01.dbf                     20971520
  3 /DOC_ORADATA/oradata/RBS01.dbf                      524288000
  4 /DOC_ORADATA/oradata/temp01.dbf                     524288000
  5 /DOC_ORADATA/oradata/users01.dbf                     20971520
  6 /DOC_ORADATA/oradata/indx01.dbf                      20971520
  7 /DOC_ORADATA/oradata/DOC_DATA.dbf                  1572864000
  8 /DOC_ORADATA/oradata/DOC_DATA2.dbf                  524288000
  9 /DOC_ORADATA/oradata/DOC_INDEX.dbf                 2300018688
 10 /DOC_ORADATA/oradata/DOC_INDEX2.dbf                 524288000
 11 /DOC_ORADATA/oradata/DOC_DATA3.dbf                 1048576000
 12 /DOC_ORADATA/oradata/DOC_DATA4.dbf                 1048576000
 13 /DOC_ORADATA/oradata/DOC_DATA5.dbf                 1048576000
 14 /DOC_ORADATA/oradata/DOC_DATA6.dbf                 1048576000
 15 /DOC_ORADATA/oradata/doc_data7.dbf                 1536000000
 16 /DOC_ORADATA/oradata/DOC_INDEX3.dbf                 524288000
 17 /DOC_ORADATA/oradata/DOC_DATA7.dbf                 1572864000
 18 /DOC_ORADATA/oradata/DOC_DATA8.dbf                 1536000000
 19 /DOC_ORADATA/oradata/DOC_INDEX4.dbf                         0
 20 /DOC_ORADATA/oradata/DOC_index4.dbf                         0
 21 /DOC_ORADATA/oradata/doc_index4.dbf                 838860800
 22 /DOC_ORADATA/oradata/DOC_DATA9.dbf                 2097152000
 23 /DOC_ORADATA/oradata/DOC_DATE10.dbf                2097152000
 24 /DOC_ORADATA/oradata/DOC_DATE11.dbf                2097152000
 25 /DOC_ORADATA/oradata/DOC_DATA12.dbf                2097152000
 26 /DOC_ORADATA/oradata/DOC_DATE12.dbf                1073741824
 27 /DOC_ORADATA/oradata/DOC_DATA13.dbf                2097152000
 28 /digital/oradata/DOC_DATA14.dbf                    2097152000
 29 /digital/oradata/DOC_DATA15.dbf                    1073741824
 30 /digital/oradata/DOC_DATA16.dbf                    1073741824
 31 /DOC_ORADATA/oradata/RBS02.dbf                      104857600
 32 /digital/oradata/DOC_DATA17.dbf                    1073741824
 33 /digital/oradata/DOC_DATA18.dbf                    1073741824
 34 /DOC_ORADATA/oradata/DOC_INDEX5.dbf                1048576000
 35 /digital/oradata/DOC_DATA19.dbf                    1073741824

4、 通过编译,生成BBED工具,启动BBED:

bash-2.03$ bbed parfile=bbed.par
Password: 
 
BBED: Release 2.0.0.0.0 - Limited Production on Tue Jul 14 21:09:48 2009
 
(c) Copyright 2000 Oracle Corporation.  All rights reserved.
 
************* !!! For Oracle Internal Use only !!! ***************
 
BBED> 
BBED>

5、 获取SCN相关信息:
SYSTEM表空间文件的SCN信息:

BBED> show all
        FILE#           1
        BLOCK#          1
        OFFSET          0
        DBA             0x00400001 (4194305 1,1)
        FILENAME        /DOC_ORADATA/oradata/system01.dbf
        BIFILE          bifile.bbd
        LISTFILE        file.list
        BLOCKSIZE       16384
        MODE            Edit
        EDIT            Unrecoverable
        IBASE           Dec
        OBASE           Dec
        WIDTH           80
        COUNT           512
        LOGFILE         log.bbd
       SPOOL           No
BBED> p kcvfhckp
struct kcvfhckp, 36 bytes                   @140     
   struct kcvcpscn, 8 bytes                 @140     
      ub4 kscnbas                           @140      0x7913b031
      ub2 kscnwrp                           @144      0x0000
   ub4 kcvcptim                             @148      0x29019829
   ub2 kcvcpthr                             @152      0x0001
   struct kcvcprba, 12 bytes                @156     
      ub4 kcrbaseq                          @156      0x0001990c
      ub4 kcrbabno                          @160      0x0000367e
      ub2 kcrbabof                          @164      0x0010
   ub1 kcvcpetb[0]                          @168      0x02
   ub1 kcvcpetb[1]                          @169      0x00
   ub1 kcvcpetb[2]                          @170      0x00
   ub1 kcvcpetb[3]                          @171      0x00
   ub1 kcvcpetb[4]                          @172      0x00
   ub1 kcvcpetb[5]                          @173      0x00
   ub1 kcvcpetb[6]                          @174      0x00
   ub1 kcvcpetb[7]                          @175      0x00

注:系统表空间文件SCN相关值为:kscnbas=0x7913b031,kcvcptim=0x29019829

其他文件的SCN信息(在本数据库中,除SYSTEM外,所有文件的SCN值都是一样的):

BBED> set dba 2,1
        DBA             0x00800001 (8388609 2,1)
 BBED> show all;
        FILE#           2
        BLOCK#          1
        OFFSET          0
        DBA             0x00800001 (8388609 2,1)
        FILENAME        /DOC_ORADATA/oradata/tools01.dbf
        BIFILE          bifile.bbd
        LISTFILE        file.list
        BLOCKSIZE       16384
        MODE            Edit
        EDIT            Unrecoverable
        IBASE           Dec
        OBASE           Dec
        WIDTH           80
        COUNT           512
        LOGFILE         log.bbd
        SPOOL           No
 
BBED> p kcvfhckp
struct kcvfhckp, 36 bytes                   @140     
   struct kcvcpscn, 8 bytes                 @140     
      ub4 kscnbas                           @140      0x79c8a2a8
      ub2 kscnwrp                           @144      0x0000
   ub4 kcvcptim                             @148      0x2941054b
   ub2 kcvcpthr                             @152      0x0001
   struct kcvcprba, 12 bytes                @156     
      ub4 kcrbaseq                          @156      0x0001a1b1
      ub4 kcrbabno                          @160      0x00000002
      ub2 kcrbabof                          @164      0x0010
   ub1 kcvcpetb[0]                          @168      0x02
   ub1 kcvcpetb[1]                          @169      0x00
   ub1 kcvcpetb[2]                          @170      0x00
   ub1 kcvcpetb[3]                          @171      0x00
   ub1 kcvcpetb[4]                          @172      0x00
   ub1 kcvcpetb[5]                          @173      0x00
   ub1 kcvcpetb[6]                          @174      0x00
   ub1 kcvcpetb[7]                          @175      0x00

注:非系统表空间SCN相关值为:kscnbas=0x79c8a2a8,kcvcptim=0x2941054b

6、 修改系统表空间文件SCN的值,使其值和系统表空间SCN的值一致

BBED> modify /x 79c8a2a8  dba 1,1 offset 140
 File: /DOC_ORADATA/oradata/system01.dbf (1)
 Block: 1                Offsets:  140 to  155           Dba:0x00400001
------------------------------------------------------------------------
 79c8a2a8 00000344 29019829 00010000 
 
 <32 bytes per line>
 
BBED> modify /x 2941054b dba 1,1 offset 148
 File: /DOC_ORADATA/oradata/system01.dbf (1)
 Block: 1                Offsets:  148 to  163           Dba:0x00400001
------------------------------------------------------------------------
 2941054b 00010000 0001990c 0000367e 
 
 <32 bytes per line>
 
BBED> sum dba 1,1 apply
Check value for File 1, Block 1:
current = 0xd861, required = 0xd861
 
BBED> 
BBED> d /v dba 1,1 offset 140 count 16
 File: /DOC_ORADATA/oradata/system01.dbf (1)
 Block: 1       Offsets:  140 to  155  Dba:0x00400001
-------------------------------------------------------
 79c8a2a8 00000344 2941054b 00010000 l y......D)A.K....
 
 <16 bytes per line>
 
BBED> 
BBED> d /v dba 1,1 offset 148 count 16
 File: /DOC_ORADATA/oradata/system01.dbf (1)
 Block: 1       Offsets:  148 to  163  Dba:0x00400001
-------------------------------------------------------
 2941054b 00010000 0001990c 0000367e l )A.K..........6~
 
 <16 bytes per line>


7、 在SQLPLUS中,关闭数据库,并重新启动,重建控制文件,恢复数据库

bash-2.03$ sqlplus "/ as sysdba"
 
SQL*Plus: Release 8.1.7.0.0 - Production on Tue Jul 14 21:39:54 2009
 
(c) Copyright 2000 Oracle Corporation.  All rights reserved.
 
Connected to an idle instance.
 
SQL> startup nomount;
ORACLE instance started.
 
Total System Global Area 1369776288 bytes
Fixed Size                    73888 bytes
Variable Size             530751488 bytes
Database Buffers          838860800 bytes
Redo Buffers                  90112 bytes
SQL>
SQL> CREATE CONTROLFILE REUSE DATABASE "ORA" NORESETLOGS ARCHIVELOG
    MAXLOGFILES 32
    MAXLOGMEMBERS 2
    MAXDATAFILES 254
    MAXINSTANCES 8
    MAXLOGHISTORY 65535
LOGFILE
  GROUP 1 '/DOC_ORADATA/oradata/redo01.log'  SIZE 10M,
  GROUP 2 '/DOC_ORADATA/oradata/redo02.log'  SIZE 10M,
  GROUP 3 '/DOC_ORADATA/oradata/redo03.log'  SIZE 10M
DATAFILE
  '/DOC_ORADATA/oradata/system01.dbf',
  '/DOC_ORADATA/oradata/tools01.dbf',
  '/DOC_ORADATA/oradata/RBS01.dbf',
  '/DOC_ORADATA/oradata/temp01.dbf',
  '/DOC_ORADATA/oradata/users01.dbf',
  '/DOC_ORADATA/oradata/indx01.dbf',
  '/DOC_ORADATA/oradata/DOC_DATA.dbf',
  '/DOC_ORADATA/oradata/DOC_DATA2.dbf',
  '/DOC_ORADATA/oradata/DOC_INDEX.dbf',
  '/DOC_ORADATA/oradata/DOC_INDEX2.dbf',
  '/DOC_ORADATA/oradata/DOC_DATA3.dbf',
  '/DOC_ORADATA/oradata/DOC_DATA4.dbf',
  '/DOC_ORADATA/oradata/DOC_DATA5.dbf',
  '/DOC_ORADATA/oradata/DOC_DATA6.dbf',
  '/DOC_ORADATA/oradata/doc_data7.dbf',
  '/DOC_ORADATA/oradata/DOC_INDEX3.dbf',
  '/DOC_ORADATA/oradata/DOC_DATA7.dbf',
  '/DOC_ORADATA/oradata/DOC_DATA8.dbf',
  '/DOC_ORADATA/oradata/doc_index4.dbf',
  '/DOC_ORADATA/oradata/DOC_DATA9.dbf',
  '/DOC_ORADATA/oradata/DOC_DATE10.dbf',
  '/DOC_ORADATA/oradata/DOC_DATE11.dbf',
  '/DOC_ORADATA/oradata/DOC_DATA12.dbf',
  '/DOC_ORADATA/oradata/DOC_DATE12.dbf',
  '/DOC_ORADATA/oradata/DOC_DATA13.dbf',
  '/digital/oradata/DOC_DATA14.dbf',
  '/digital/oradata/DOC_DATA15.dbf',
  '/digital/oradata/DOC_DATA16.dbf',
  '/DOC_ORADATA/oradata/RBS02.dbf',
  '/digital/oradata/DOC_DATA17.dbf',
  '/digital/oradata/DOC_DATA18.dbf',
  '/DOC_ORADATA/oradata/DOC_INDEX5.dbf',
  '/digital/oradata/DOC_DATA19.dbf'
CHARACTER SET ZHS16CGB231280
;  2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   33   34   35   36   37   38   39   40   41   42   43   44   45   46  
 
Control file created.
 
SQL>
SQL> alter database recover;
 
Database altered.
 
SQL> 
SQL> 
SQL> alter database open;
 
Database altered.
 
SQL>

OK,数据库成功打开,进入一步最后的工作:即重建数据库。

8、 由于通过非常规的办法恢复数据库,我们要求数据库需要重建,保证数据库运行在一个安全、稳定可靠的状态下。
(具体工作略,主要是通过EXP以用户的方式导出所有的用户数据,然后通过IMP方式导入所有的用户数据)。

 

 

发表在 Oracle, ORACLE内核, ORACLE备份恢复, 客户案例 | 留下评论

某客户100多G表改造为分区表实施脚本

 本文作者:东方龙马(广州)  王云

客户需求

  1. 100G的普通大表改造为分区表;

  2. 操作窗口只能给到2个小时;

  3. 回退简单。

实现办法

  1. 创建表并行,插入数据并行,创建索引并行;

  2. 使用高效hint插入数据;

  3. 临时表暂时关闭logging;

  4. 索引在完成表数据插入后再创建;

  5. 主键索引的创建是通过using index方式;

  6. 回退简单,只是把改名后的原表重新改回原来名字并重建索引,可以保证在20分钟内完成回退。


改造过程
 1.检查失效对象

select OWNER,index_NAME from dba_indexes where status='UNUSABLE';
select distinct STATUS  from dba_objects where status <>'VALID';

2.重命名原表

alter table DEP_INST.TB_WORK_DATA  rename to TB_WORK_DATA_ORIG;

3.创建表

  CREATE TABLE DEP_INST.TB_WORK_DATA
   (    OPER_ID NUMBER(12,0) NOT NULL ENABLE,
        ORDER_CODE VARCHAR2(30) NOT NULL ENABLE,
        SUBS_ID NUMBER(14,0),
        SERV_ID NUMBER(12,0),
        ACTION_CODE VARCHAR2(20),
        PROD_CODE VARCHAR2(20),
        STEP_TYPE NUMBER(6,0),
        ORD_TYPE VARCHAR2(6),
        SOURCE_DATA CLOB,
        RESULT_CODE VARCHAR2(10),
        CREATE_DATE DATE,
        REMARK VARCHAR2(300),
        CON_FLAG CHAR(1),
        WM_SEND_DATE DATE,
        HDL_CDE VARCHAR2(10),
        CALLRET_CDE VARCHAR2(10),
        CALLRET_MSG VARCHAR2(300),
        AREA_CODE NUMBER(3,0) DEFAULT 0 NOT NULL ENABLE,
        SUB_OPER_ID NUMBER(10,0) DEFAULT 0 NOT NULL ENABLE,
        CUST_ID NUMBER(13,0) DEFAULT 0,
        ORDER_SOURCE VARCHAR2(10),
        ITEM_SEQID NUMBER(12,0),
        TRAN_DATE DATE,
        CALLRET_DATE DATE,
        ACC_NBR VARCHAR2(30),
        SUBS_CODE VARCHAR2(64),
        RECV_NO NUMBER(2,0),
        SOURCE_DATA2 VARCHAR2(4000),
        PRIOR_LEV NUMBER(2,0)
   ) TABLESPACE DAT_DEP_HOT  LOB (SOURCE_DATA) store as (TABLESPACE LOB_DEP_N3 )
   PARTITION BY RANGE(CREATE_DATE)(
PARTITION P_2015_05 VALUES LESS THAN (TO_DATE('2015-06-01','YYYY-MM-DD')) tablespace DAT_DEP_HOT,
PARTITION P_2015_06 VALUES LESS THAN (TO_DATE('2015-07-01','YYYY-MM-DD')) tablespace DAT_DEP_HOT,
PARTITION P_2015_07 VALUES LESS THAN (TO_DATE('2015-08-01','YYYY-MM-DD')) tablespace DAT_DEP_HOT,
PARTITION P_2015_08 VALUES LESS THAN (TO_DATE('2015-09-01','YYYY-MM-DD')) tablespace DAT_DEP_HOT,
PARTITION P_2015_09 VALUES LESS THAN (TO_DATE('2015-10-01','YYYY-MM-DD')) tablespace DAT_DEP_HOT,
PARTITION P_2015_10 VALUES LESS THAN (TO_DATE('2015-11-01','YYYY-MM-DD')) tablespace DAT_DEP_HOT,
PARTITION P_2015_11 VALUES LESS THAN (TO_DATE('2015-12-01','YYYY-MM-DD')) tablespace DAT_DEP_HOT,
PARTITION P_2015_12 VALUES LESS THAN (TO_DATE('2016-01-01','YYYY-MM-DD')) tablespace DAT_DEP_HOT,
PARTITION P_2016_01 VALUES LESS THAN (TO_DATE('2016-02-01','YYYY-MM-DD')) tablespace DAT_DEP_HOT,
PARTITION P_2016_02 VALUES LESS THAN (TO_DATE('2016-03-01','YYYY-MM-DD')) tablespace DAT_DEP_HOT,
PARTITION P_2016_03 VALUES LESS THAN (TO_DATE('2016-04-01','YYYY-MM-DD')) tablespace DAT_DEP_HOT,
PARTITION P_2016_04 VALUES LESS THAN (TO_DATE('2016-05-01','YYYY-MM-DD')) tablespace DAT_DEP_HOT,
PARTITION P_2016_05 VALUES LESS THAN (TO_DATE('2016-06-01','YYYY-MM-DD')) tablespace DAT_DEP_HOT,
PARTITION P_2016_06 VALUES LESS THAN (TO_DATE('2016-07-01','YYYY-MM-DD')) tablespace DAT_DEP_HOT,
PARTITION P_2016_07 VALUES LESS THAN (TO_DATE('2016-08-01','YYYY-MM-DD')) tablespace DAT_DEP_HOT,
PARTITION P_2016_08 VALUES LESS THAN (TO_DATE('2016-09-01','YYYY-MM-DD')) tablespace DAT_DEP_HOT,
PARTITION P_2016_09 VALUES LESS THAN (TO_DATE('2016-10-01','YYYY-MM-DD')) tablespace DAT_DEP_HOT,
PARTITION P_2016_10 VALUES LESS THAN (TO_DATE('2016-11-01','YYYY-MM-DD')) tablespace DAT_DEP_HOT,
PARTITION P_2016_11 VALUES LESS THAN (TO_DATE('2016-12-01','YYYY-MM-DD')) tablespace DAT_DEP_HOT,
PARTITION P_2016_12 VALUES LESS THAN (TO_DATE('2017-01-01','YYYY-MM-DD')) tablespace DAT_DEP_HOT,
PARTITION P_MAXVALUE VALUES LESS THAN (MAXVALUE));

 4.回迁数据:TB_WORK_DATA(客户提供回迁脚本)
 4.1 创建空表tmp_WORK_DATA

create table DEP_INST.tmp_WORK_DATA nologging as
select OPER_ID,
       ORDER_CODE,
       SUBS_ID,
       SERV_ID,
       ACTION_CODE,
       PROD_CODE,
       STEP_TYPE,
       ORD_TYPE,
       SOURCE_DATA,
       RESULT_CODE,
       CREATE_DATE,
       REMARK,
       CON_FLAG,
       WM_SEND_DATE,
       HDL_CDE,
       CALLRET_CDE,
       CALLRET_MSG,
       AREA_CODE,
       SUB_OPER_ID,
       CUST_ID,
       ORDER_SOURCE,
       ITEM_SEQID,
       TRAN_DATE,
       CALLRET_DATE,
       ACC_NBR,
       SUBS_CODE,
       RECV_NO,
       SOURCE_DATA2,
       PRIOR_LEV
  from DEP_INST.TB_WORK_DATA_ORIG
 where rownum < 1;

 4.2.让tmp_WORK_DATA有数据

insert into /*+ append nologging */
DEP_INST.tmp_WORK_DATA
  (OPER_ID,
   ORDER_CODE,
   SUBS_ID,
   SERV_ID,
   ACTION_CODE,
   PROD_CODE,
   STEP_TYPE,
   ORD_TYPE,
   SOURCE_DATA,
   RESULT_CODE,
   CREATE_DATE,
   REMARK,
   CON_FLAG,
   WM_SEND_DATE,
   HDL_CDE,
   CALLRET_CDE,
   CALLRET_MSG,
   AREA_CODE,
   SUB_OPER_ID,
   CUST_ID,
   ORDER_SOURCE,
   ITEM_SEQID,
   TRAN_DATE,
   CALLRET_DATE,
   ACC_NBR,
   SUBS_CODE,
   RECV_NO,
   SOURCE_DATA2,
   PRIOR_LEV)
select /*+ parallel(a,16) */ OPER_ID,
       ORDER_CODE,
       SUBS_ID,
       SERV_ID,
       ACTION_CODE,
       PROD_CODE,
       STEP_TYPE,
       ORD_TYPE,
       '',
       RESULT_CODE,
       CREATE_DATE,
       REMARK,
       CON_FLAG,
       WM_SEND_DATE,
       HDL_CDE,
       CALLRET_CDE,
       CALLRET_MSG,
       AREA_CODE,
       SUB_OPER_ID,
       CUST_ID,
       ORDER_SOURCE,
       ITEM_SEQID,
       TRAN_DATE,
       CALLRET_DATE,
       ACC_NBR,
       SUBS_CODE,
       RECV_NO,
       '',
       PRIOR_LEV
  from DEP_INST.TB_WORK_DATA_ORIG a
 where exists (select /*+ parallel(b,16) */*
          from DEP_INST.tmp_ORDER_QUE b
         where SRC_OPER_ID = a.OPER_ID);

4.3.创建tmp_WORK_DATA_2空表

create table DEP_INST.tmp_WORK_DATA_2 nologging as
select OPER_ID,
       ORDER_CODE,
       SUBS_ID,
       SERV_ID,
       ACTION_CODE,
       PROD_CODE,
       STEP_TYPE,
       ORD_TYPE,
       SOURCE_DATA,
       RESULT_CODE,
       CREATE_DATE,
       REMARK,
       CON_FLAG,
       WM_SEND_DATE,
       HDL_CDE,
       CALLRET_CDE,
       CALLRET_MSG,
       AREA_CODE,
       SUB_OPER_ID,
       CUST_ID,
       ORDER_SOURCE,
       ITEM_SEQID,
       TRAN_DATE,
       CALLRET_DATE,
       ACC_NBR,
       SUBS_CODE,
       RECV_NO,
       SOURCE_DATA2,
       PRIOR_LEV
  from DEP_INST.TB_WORK_DATA_ORIG
 where rownum < 1;

4.4.让tmp_WORK_DATA_2有数据

insert into /*+ append nologging */
DEP_INST.tmp_WORK_DATA_2
  (OPER_ID,
   ORDER_CODE,
   SUBS_ID,
   SERV_ID,
   ACTION_CODE,
   PROD_CODE,
   STEP_TYPE,
   ORD_TYPE,
   SOURCE_DATA,
   RESULT_CODE,
   CREATE_DATE,
   REMARK,
   CON_FLAG,
   WM_SEND_DATE,
   HDL_CDE,
   CALLRET_CDE,
   CALLRET_MSG,
   AREA_CODE,
   SUB_OPER_ID,
   CUST_ID,
   ORDER_SOURCE,
   ITEM_SEQID,
   TRAN_DATE,
   CALLRET_DATE,
   ACC_NBR,
   SUBS_CODE,
   RECV_NO,
   SOURCE_DATA2,
   PRIOR_LEV)
select /*+ parallel(a,16) */
 OPER_ID,
 ORDER_CODE,
 SUBS_ID,
 SERV_ID,
 ACTION_CODE,
 PROD_CODE,
 STEP_TYPE,
 ORD_TYPE,
 '',
 RESULT_CODE,
 CREATE_DATE,
 REMARK,
 CON_FLAG,
 WM_SEND_DATE,
 HDL_CDE,
 CALLRET_CDE,
 CALLRET_MSG,
 AREA_CODE,
 SUB_OPER_ID,
 CUST_ID,
 ORDER_SOURCE,
 ITEM_SEQID,
 TRAN_DATE,
 CALLRET_DATE,
 ACC_NBR,
 SUBS_CODE,
 RECV_NO,
 '',
 PRIOR_LEV
  from DEP_INST.TB_WORK_DATA_ORIG a
 where (step_type, ord_type) in ((8970, 'WO0988'),
                                 (8961, 'WO0988'),
                                 (8973, 'WO0988'),
                                 (8972, 'WO0988'));

4.5.让tmp_WORK_DATA_2再次插入数据

insert into /*+ append nologging */
DEP_INST.tmp_WORK_DATA_2
  (OPER_ID,
   ORDER_CODE,
   SUBS_ID,
   SERV_ID,
   ACTION_CODE,
   PROD_CODE,
   STEP_TYPE,
   ORD_TYPE,
   SOURCE_DATA,
   RESULT_CODE,
   CREATE_DATE,
   REMARK,
   CON_FLAG,
   WM_SEND_DATE,
   HDL_CDE,
   CALLRET_CDE,
   CALLRET_MSG,
   AREA_CODE,
   SUB_OPER_ID,
   CUST_ID,
   ORDER_SOURCE,
   ITEM_SEQID,
   TRAN_DATE,
   CALLRET_DATE,
   ACC_NBR,
   SUBS_CODE,
   RECV_NO,
   SOURCE_DATA2,
   PRIOR_LEV)
select /*+ parallel(a,16) */ OPER_ID,
       ORDER_CODE,
       SUBS_ID,
       SERV_ID,
       ACTION_CODE,
       PROD_CODE,
       STEP_TYPE,
       ORD_TYPE,
       '',
       RESULT_CODE,
       CREATE_DATE,
       REMARK,
       CON_FLAG,
       WM_SEND_DATE,
       HDL_CDE,
       CALLRET_CDE,
       CALLRET_MSG,
       AREA_CODE,
       SUB_OPER_ID,
       CUST_ID,
       ORDER_SOURCE,
       ITEM_SEQID,
       TRAN_DATE,
       CALLRET_DATE,
       ACC_NBR,
       SUBS_CODE,
       RECV_NO,
       '',
       PRIOR_LEV
  from DEP_INST.tmp_WORK_DATA a
 where not exists
 (select /*+ parallel(b,16) */ * from DEP_INST.tmp_WORK_DATA_2 b where OPER_ID = a.OPER_ID);

4.6.让 tmp_WORK_DATA_2 有数据

insert into /*+ append nologging */
DEP_INST.tmp_WORK_DATA_2
  (OPER_ID,
   ORDER_CODE,
   SUBS_ID,
   SERV_ID,
   ACTION_CODE,
   PROD_CODE,
   STEP_TYPE,
   ORD_TYPE,
   SOURCE_DATA,
   RESULT_CODE,
   CREATE_DATE,
   REMARK,
   CON_FLAG,
   WM_SEND_DATE,
   HDL_CDE,
   CALLRET_CDE,
   CALLRET_MSG,
   AREA_CODE,
   SUB_OPER_ID,
   CUST_ID,
   ORDER_SOURCE,
   ITEM_SEQID,
   TRAN_DATE,
   CALLRET_DATE,
   ACC_NBR,
   SUBS_CODE,
   RECV_NO,
   SOURCE_DATA2,
   PRIOR_LEV)
select /*+ parallel(a,16) */OPER_ID,
       ORDER_CODE,
       SUBS_ID,
       SERV_ID,
       ACTION_CODE,
       PROD_CODE,
       STEP_TYPE,
       ORD_TYPE,
       '',
       RESULT_CODE,
       CREATE_DATE,
       REMARK,
       CON_FLAG,
       WM_SEND_DATE,
       HDL_CDE,
       CALLRET_CDE,
       CALLRET_MSG,
       AREA_CODE,
       SUB_OPER_ID,
       CUST_ID,
       ORDER_SOURCE,
       ITEM_SEQID,
       TRAN_DATE,
       CALLRET_DATE,
       ACC_NBR,
       SUBS_CODE,
       RECV_NO,
       '',
       PRIOR_LEV
  from DEP_INST.TB_WORK_DATA_ORIG a
 where result_code = '999'
   and not exists
 (select/*+ parallel(b,16) */ * from DEP_INST.tmp_WORK_DATA_2 b where OPER_ID = a.OPER_ID);

4.7.修改 tmp_WORK_DATA_2

update DEP_INST.tmp_WORK_DATA_2 set CREATE_DATE=sysdate;

4.8.完成commit

commit;

4.9.回迁数据

insert into /*+ append nologging */
DEP_INST.TB_WORK_DATA
  (OPER_ID,
   ORDER_CODE,
   SUBS_ID,
   SERV_ID,
   ACTION_CODE,
   PROD_CODE,
   STEP_TYPE,
   ORD_TYPE,
   SOURCE_DATA,
   RESULT_CODE,
   CREATE_DATE,
   REMARK,
   CON_FLAG,
   WM_SEND_DATE,
   HDL_CDE,
   CALLRET_CDE,
   CALLRET_MSG,
   AREA_CODE,
   SUB_OPER_ID,
   CUST_ID,
   ORDER_SOURCE,
   ITEM_SEQID,
   TRAN_DATE,
   CALLRET_DATE,
   ACC_NBR,
   SUBS_CODE,
   RECV_NO,
   SOURCE_DATA2,
   PRIOR_LEV)
select /*+ parallel(a,16) */OPER_ID,
       ORDER_CODE,
       SUBS_ID,
       SERV_ID,
       ACTION_CODE,
       PROD_CODE,
       STEP_TYPE,
       ORD_TYPE,
       SOURCE_DATA,
       RESULT_CODE,
       CREATE_DATE,
       REMARK,
       CON_FLAG,
       WM_SEND_DATE,
       HDL_CDE,
       CALLRET_CDE,
       CALLRET_MSG,
       AREA_CODE,
       SUB_OPER_ID,
       CUST_ID,
       ORDER_SOURCE,
       ITEM_SEQID,
       TRAN_DATE,
       CALLRET_DATE,
       ACC_NBR,
       SUBS_CODE,
       RECV_NO,
       SOURCE_DATA2,
       PRIOR_LEV
  from DEP_INST.tmp_WORK_DATA_2 a;

4.10.完成commit

commit;

4.11.删除tmp_WORK_DATA

drop table DEP_INST.tmp_WORK_DATA purge;
drop table DEP_INST.tmp_WORK_DATA_2 purge;

4.12.检查回迁后的数据

SYS@spsdep1
 SQL> select count(*) from DEP_INST.TB_WORK_DATA;
 
  COUNT(*)
----------
    205972


5.重命名原表索引 

ALTER TABLE DEP_INST.TB_WORK_DATA_ORIG RENAME CONSTRAINT PK_WORK_DATA TO PK_WORK_DATA_ORIG;
alter index DEP_INST.IX_WORK_DATA_2 rename to IX_WORK_DATA_2_ORIG;
alter index DEP_INST.IX_WORK_DATA_8 rename to IX_WORK_DATA_8_ORIG;
alter index DEP_INST.PK_WORK_DATA rename to PK_WORK_DATA_ORIG;
alter index DEP_INST.IX_WORK_DATA_6 rename to IX_WORK_DATA_6_ORIG;
alter index DEP_INST.IX_WORK_DATA_4 rename to IX_WORK_DATA_4_ORIG;
alter index DEP_INST.IX_WORK_DATA_1 rename to IX_WORK_DATA_1_ORIG;
alter index DEP_INST.IX_WORK_DATA_3 rename to IX_WORK_DATA_3_ORIG;
alter index DEP_INST.IX_WORK_DATA_5 rename to IX_WORK_DATA_5_ORIG;
alter index DEP_INST.IX_WORK_DATA_7 rename to IX_WORK_DATA_7_ORIG;
alter index DEP_INST.IX_WORK_DATA_9 rename to IX_WORK_DATA_9_ORIG;

6.创建索引

create index DEP_INST.IX_WORK_DATA_2 on DEP_INST.TB_WORK_DATA(RESULT_CODE ) parallel 24 TABLESPACE IDX_DEP_N3_HOT local;
alter index DEP_INST.IX_WORK_DATA_2 noparallel;
create index DEP_INST.IX_WORK_DATA_8 on DEP_INST.TB_WORK_DATA(SERV_ID ) parallel 24 TABLESPACE IDX_DEP_N3_HOT local;
alter index DEP_INST.IX_WORK_DATA_8 noparallel;
create index DEP_INST.IX_WORK_DATA_6 on DEP_INST.TB_WORK_DATA(SUBS_ID ) parallel 24 TABLESPACE IDX_DEP_N3_HOT local;
alter index DEP_INST.IX_WORK_DATA_6 noparallel;
create index DEP_INST.IX_WORK_DATA_4 on DEP_INST.TB_WORK_DATA(ACTION_CODE ) parallel 24 TABLESPACE IDX_DEP_N3_HOT local;
alter index DEP_INST.IX_WORK_DATA_4 noparallel;
create index DEP_INST.IX_WORK_DATA_1 on DEP_INST.TB_WORK_DATA(ORDER_CODE ) parallel 24 TABLESPACE IDX_DEP_N3_HOT local;
alter index DEP_INST.IX_WORK_DATA_1 noparallel;
create index DEP_INST.IX_WORK_DATA_3 on DEP_INST.TB_WORK_DATA(STEP_TYPE,ORD_TYPE ) parallel 24 TABLESPACE IDX_DEP_N3_HOT local;
alter index DEP_INST.IX_WORK_DATA_3 noparallel;
create index DEP_INST.IX_WORK_DATA_5 on DEP_INST.TB_WORK_DATA(CALLRET_CDE ) parallel 24 TABLESPACE IDX_DEP_N3_HOT local;
alter index DEP_INST.IX_WORK_DATA_5 noparallel;
create index DEP_INST.IX_WORK_DATA_7 on DEP_INST.TB_WORK_DATA(CREATE_DATE ) parallel 24 TABLESPACE IDX_DEP_N3_HOT local;
alter index DEP_INST.IX_WORK_DATA_7 noparallel;
create index DEP_INST.IX_WORK_DATA_9 on DEP_INST.TB_WORK_DATA(SUBS_CODE ) parallel 24 TABLESPACE IDX_DEP_N3_HOT local;
alter index DEP_INST.IX_WORK_DATA_9 noparallel;
create index DEP_INST.IX_WORK_DATA_10 on DEP_INST.TB_WORK_DATA(OPER_ID ) parallel 24 TABLESPACE IDX_DEP_N3_HOT local;
alter index DEP_INST.IX_WORK_DATA_10 noparallel;
create UNIQUE index DEP_INST.PK_WORK_DATA on DEP_INST.TB_WORK_DATA(OPER_ID,CREATE_DATE ) parallel 24 TABLESPACE IDX_DEP_N3_HOT local;
alter index DEP_INST.PK_WORK_DATA noparallel;
alter table DEP_INST.TB_WORK_DATA add constraint PK_WORK_DATA primary key(OPER_ID,CREATE_DATE ) using index DEP_INST.PK_WORK_DATA;

7.重新授权

grant DELETE on DEP_INST.TB_WORK_DATA to DEP_INST;
grant DELETE on DEP_INST.TB_WORK_DATA to CONF_ZSG;

8.编译同义词

create or replace synonym WENH.TB_WORK_DATA for INST.TB_WORK_DATA;

9.重新收集统计

exec DBMS_STATS.GATHER_TABLE_STATS(
   ownname=>'DEP_INST',
   tabname=>'TB_WORK_DATA',
   ESTIMATE_PERCENT=>DBMS_STATS.AUTO_SAMPLE_SIZE,
   method_opt=>'for all columns size auto',
   cascade=>true,
   degree=>16);
grant SELECT on DEP_INST.TB_WORK_DATA to system ;
revoke SELECT on  DEP_INST.TB_WORK_DATA    FROM  system ;

10.对比失效对象

select OWNER,index_NAME from dba_indexes where status='UNUSABLE';
select distinct STATUS  from dba_objects where status <>'VALID';
发表在 Oracle, ORACLE基础与管理, 客户案例 | 留下评论