利用物化视图刷数据

1、创建测试表
SQL> CREATE TABLE t_M
2 AS
3 SELECT * FROM all_objects;
Table created
2、查询测试表中记录
SQL> select count(*) from t_m;
COUNT(*)
———-
48941
3、创建中间表
SQL> create table t_m_n as
2 select * from t_m where 1=0;
Table created
4、查询中间表记录
SQL> select count(*) from t_m_n;
COUNT(*)
———-
5、创建刷新物化视图
SQL> CREATE MATERIALIZED VIEW t_m_n
on prebuilt TABLE WITH REDUCED PRECISION
REFRESH FORCE
ON DEMAND
AS
SELECT * FROM t_m;
Materialized view created
6、执行物化视图刷新
SQL> exec dbms_mview.refresh(‘T_M_N’);
PL/SQL procedure successfully completed
7、查询物化视图中记录数
SQL> select count(*) from t_m_n;
COUNT(*)
———-
48941
8、删除物化视图
SQL> DROP MATERIALIZED VIEW T_M_N;
Materialized view dropped
9、查询中间表中条数
SQL> select count(*) from t_m_n;
COUNT(*)
———-
48941
10、后续可能操作
1)t_m和t_m_n相互重命名,实现在线修移动表的位置、改表结构、降低高水位等操作,同(shrink)
2)和dblink结合,实现数据的跨版本迁移

集群服务启动与关闭(10g)

一、crs开启和关闭
关闭crs
/etc/init.d/init.crs stop
开启crs
/etc/init.d/init.crs start
二、启动和关闭所有的集群服务
关闭
./crs_stop -all
启动
./crs_start -all
三、分步操作crs服务
1、关闭集群
srvctl stop service -d -s
srvctl stop database -d
srvctl stop asm -n
srvctl stop asm -n
srvctl stop nodeapps -n
srvctl stop nodeapps -n
2、关闭集群
srvctl start nodeapps -n
srvctl start nodeapps -n
srvctl start asm -n
srvctl start asm -n
srvctl start database -d
srvctl start service -d -s
3、测试
3.1)关闭
srvctl stop service -d devdb -s XFF
srvctl stop instance -d devdb -i devdb1,devdb2 -o immediate
(srvctl stop database -d devdb -o immediate)
srvctl stop asm -n rac1
srvctl stop asm -n rac2
srvctl stop nodeapps -n rac1
srvctl stop nodeapps -n rac2
3.2)启动
srvctl start nodeapps -n rac1
srvctl start nodeapps -n rac2
srvctl start asm -n rac1
srvctl start asm -n rac2
srvctl start database -d devdb
(srvctl start instance -n devdb -i devdb1,devdb2)
srvctl start service -d devdb -s XFF

RAC维护命令

一、节点层(olsnodes)
rac1-> olsnodes -help
Usage: olsnodes [-n] [-p] [-i] [<node> | -l] [-g] [-v]
where
-n print node number with the node name
-p print private interconnect name with the node name
-i print virtual IP name with the node name
<node> print information for the specified node
-l print information for the local node
-g turn on logging
-v run in verbose mode
rac1-> olsnodes -p -n -i
rac1    1       rac1-priv       rac1-vip
rac2    2       rac2-priv       rac2-vip
二、网络层(oifcfg)
rac1-> oifcfg -help
Name:
oifcfg – Oracle Interface Configuration Tool.
Usage:  oifcfg iflist [-p [-n]]
oifcfg setif {-node <nodename> | -global} {<if_name>/<subnet>:<if_type>}…
oifcfg getif [-node <nodename> | -global] [ -if <if_name>[/<subnet>] [-type <if_type>] ]
oifcfg delif [-node <nodename> | -global] [<if_name>[/<subnet>]]
oifcfg [-help]
<nodename> – name of the host, as known to a communications network
<if_name>  – name by which the interface is configured in the system
<subnet>   – subnet address of the interface
<if_type>  – type of the interface { cluster_interconnect | public | storage }
rac1-> oifcfg iflist -n -p
eth0  10.10.10.0  PRIVATE  255.255.255.0
eth1  192.168.1.0  PRIVATE  255.255.255.0
rac1-> oifcfg getif
eth0  10.10.10.0  global  cluster_interconnect
eth1  192.168.1.0  global  public
rac1-> oifcfg getif -node rac1
rac1-> oifcfg getif -global rac1
eth0  10.10.10.0  global  cluster_interconnect
eth1  192.168.1.0  global  public
rac1-> oifcfg getif -type public
eth1  192.168.1.0  global  public
rac1-> oifcfg setif -global tnnel_1@none/10.0.0.0:public
rac1-> oifcfg getif -type public
eth1  192.168.1.0  global  public
tnnel_1@none  10.0.0.0  global  public
rac1-> oifcfg delif -global tnnel_1@none/10.0.0.0
rac1-> oifcfg getif -type public
eth1  192.168.1.0  global  public
三、集群层
1、crsctl
rac1-> crsctl
Usage: crsctl check  crs          – checks the viability of the CRS stack
crsctl check  cssd         – checks the viability of CSS
crsctl check  crsd         – checks the viability of CRS
crsctl check  evmd         – checks the viability of EVM
crsctl set    css <parameter> <value> – sets a parameter override
crsctl get    css <parameter> – gets the value of a CSS parameter
crsctl unset  css <parameter> – sets CSS parameter to its default
crsctl query  css votedisk    – lists the voting disks used by CSS
crsctl add    css votedisk <path> – adds a new voting disk
crsctl delete css votedisk <path> – removes a voting disk
crsctl enable  crs    – enables startup for all CRS daemons
crsctl disable crs    – disables startup for all CRS daemons
crsctl start crs  – starts all CRS daemons.
crsctl stop  crs  – stops all CRS daemons. Stops CRS resources in case of cluster.
crsctl start resources  – starts CRS resources.
crsctl stop resources  – stops  CRS resources.
crsctl debug statedump evm  – dumps state info for evm objects
crsctl debug statedump crs  – dumps state info for crs objects
crsctl debug statedump css  – dumps state info for css objects
crsctl debug log css [module:level]{,module:level} …
– Turns on debugging for CSS
crsctl debug trace css – dumps CSS in-memory tracing cache
crsctl debug log crs [module:level]{,module:level} …
– Turns on debugging for CRS
crsctl debug trace crs – dumps CRS in-memory tracing cache
crsctl debug log evm [module:level]{,module:level} …
– Turns on debugging for EVM
crsctl debug trace evm – dumps EVM in-memory tracing cache
crsctl debug log res <resname:level> turns on debugging for resources
crsctl query crs softwareversion [<nodename>] – lists the version of CRS software installed
crsctl query crs activeversion – lists the CRS software operating version
crsctl lsmodules css – lists the CSS modules that can be used for debugging
crsctl lsmodules crs – lists the CRS modules that can be used for debugging
crsctl lsmodules evm – lists the EVM modules that can be used for debugging
If necesary any of these commands can be run with additional tracing by
adding a “trace” argument at the very front.
Example: crsctl trace check css
root@rac1 bin]# ./crsctl stop  crs
Stopping resources.
Successfully stopped CRS resources
Stopping CSSD.
Shutting down CSS daemon.
Shutdown request successfully issued.
[root@rac1 bin]# ./crsctl query css votedisk
0.     0    /ocfs/clusterware/votingdisk
located 1 votedisk(s).
[root@rac1 bin]# ./crsctl add    css votedisk /ocfs/clusterware/votingdisk02 -force
Now formatting voting disk: /ocfs/clusterware/votingdisk01
successful addition of votedisk /ocfs/clusterware/votingdisk02.
[root@rac2 bin]# ./crsctl add    css votedisk /ocfs/clusterware/votingdisk02 -force
Now formatting voting disk: /ocfs/clusterware/votingdisk02
successful addition of votedisk /ocfs/clusterware/votingdisk02.
[root@rac1 bin]# ./crsctl query css votedisk
0.     0    /ocfs/clusterware/votingdisk
1.     0    /ocfs/clusterware/votingdisk01
2.     0    /ocfs/clusterware/votingdisk02
2、ocrdump
rac2-> ocrdump -help
Name:
ocrdump – Dump contents of Oracle Cluster Registry to a file.
Synopsis:
ocrdump [<filename>|-stdout] [-backupfile <backupfilename>] [-keyname <keyname>] [-xml] [-noheader]
Description:
Default filename is OCRDUMPFILE. Examples are:
prompt> ocrdump
writes cluster registry contents to OCRDUMPFILE in the current directory
prompt> ocrdump MYFILE
writes cluster registry contents to MYFILE in the current directory
prompt> ocrdump -stdout -keyname SYSTEM
writes the subtree of SYSTEM in the cluster registry to stdout
prompt> ocrdump -stdout -xml
writes cluster registry contents to stdout in xml format
Notes:
The header information will be retrieved based on best effort basis.
A log file will be created in
$ORACLE_HOME/log/<hostname>/client/ocrdump_<pid>.log. Make sure
you have file creation privileges in the above directory before
running this tool.
rac2-> ocrdump /tmp/ocr.out -keyname SYSTEM.css -xml
rac2-> ocrdump /tmp/ocr_a.out  -xml
rac2-> ocrdump -stdout -keyname SYSTEM.css -xml|more
3、ocrcheck
rac2-> ocrcheck
Status of Oracle Cluster Registry is as follows :
Version                  :          2
Total space (kbytes)     :     262144
Used space (kbytes)      :       4344
Available space (kbytes) :     257800
ID                       :  582586001
Device/File Name         : /ocfs/clusterware/ocr
Device/File integrity check succeeded
Device/File not configured
Cluster registry integrity check succeeded
4、ocrconfig
rac2-> ocrconfig
Name:
ocrconfig – Configuration tool for Oracle Cluster Registry.
Synopsis:
ocrconfig [option]
option:
-export <filename> [-s online]
– Export cluster register contents to a file
-import <filename>                  – Import cluster registry contents from a file
-upgrade [<user> [<group>]]
– Upgrade cluster registry from previous version
-downgrade [-version <version string>]
– Downgrade cluster registry to the specified version
-backuploc <dirname>                – Configure periodic backup location
-showbackup                         – Show backup information
-restore <filename>                 – Restore from physical backup
-replace ocr|ocrmirror [<filename>] – Add/replace/remove a OCR device/file
-overwrite                          – Overwrite OCR configuration on disk
-repair ocr|ocrmirror <filename>    – Repair local OCR configuration
-help                               – Print out this help information
Note:
A log file will be created in
$ORACLE_HOME/log/<hostname>/client/ocrconfig_<pid>.log. Please ensure
you have file creation privileges in the above directory before
running this tool.
rac2-> ocrconfig -showbackup
rac1     2011/07/29 20:18:22     /u01/app/oracle/product/10.2.0/crs_1/cdata/crs
rac1     2011/07/29 16:18:33     /u01/app/oracle/product/10.2.0/crs_1/cdata/crs
rac1     2011/07/29 16:18:33     /u01/app/oracle/product/10.2.0/crs_1/cdata/crs
rac1     2011/07/29 16:18:33     /u01/app/oracle/product/10.2.0/crs_1/cdata/crs
[root@rac1 bin]# cd /u01/app/oracle/product/10.2.0/crs_1/cdata/crs
[root@rac1 crs]# ll
总用量 16368
-rw-r–r–  1 root root 4554752  7月 29 20:18 backup00.ocr
-rw-r–r–  1 root root 4055040  7月 29 16:18 backup01.ocr
-rw-r–r–  1 root root 4055040  7月 29 16:18 day.ocr
-rw-r–r–  1 root root 4055040  7月 29 16:18 week.ocr
rac2-> ocrconfig -export /tmp/bak_ocr -s online
PROT-20: Insufficient permission to proceed. Require privileged user
[root@rac1 bin]# ./ocrconfig -export /tmp/bak_ocr -s online
[root@rac1 bin]# ll /tmp/bak_ocr
-rw-r–r–  1 root root 98692  7月 30 00:07 /tmp/bak_ocr
四、应用层
1、crs_stat
rac2-> crs_stat -help
Usage:  crs_stat [resource_name […]] [-v] [-l] [-q] [-c cluster_member]
crs_stat [resource_name […]] -t [-v] [-q] [-c cluster_member]
crs_stat -p [resource_name […]] [-q]
crs_stat [-a] application -g
crs_stat [-a] application -r [-c cluster_member]
crs_stat -f [resource_name […]] [-q] [-c cluster_member]
crs_stat -ls [resource_name […]] [-q]
rac2-> crs_stat -t -v
Name           Type           R/RA   F/FT   Target    State     Host
———————————————————————-
ora…..XFF.cs application    0/0    0/1    ONLINE    ONLINE    rac1
ora….db1.srv application    0/0    0/0    ONLINE    ONLINE    rac1
ora.devdb.db   application    0/1    0/1    ONLINE    ONLINE    rac1
ora….b1.inst application    0/5    0/0    ONLINE    ONLINE    rac1
ora….b2.inst application    0/5    0/0    ONLINE    ONLINE    rac2
ora….SM1.asm application    0/5    0/0    ONLINE    ONLINE    rac1
ora….C1.lsnr application    0/5    0/0    ONLINE    ONLINE    rac1
ora.rac1.gsd   application    0/5    0/0    ONLINE    ONLINE    rac1
ora.rac1.ons   application    0/3    0/0    ONLINE    ONLINE    rac1
ora.rac1.vip   application    0/0    0/0    ONLINE    ONLINE    rac1
ora….SM2.asm application    0/5    0/0    ONLINE    ONLINE    rac2
ora….C2.lsnr application    0/5    0/0    ONLINE    ONLINE    rac2
ora.rac2.gsd   application    0/5    0/0    ONLINE    ONLINE    rac2
ora.rac2.ons   application    0/3    0/0    ONLINE    ONLINE    rac2
ora.rac2.vip   application    0/0    0/0    ONLINE    ONLINE    rac2
rac2-> crs_stat -p ora.devdb.db
NAME=ora.devdb.db
TYPE=application
ACTION_SCRIPT=/u01/app/oracle/product/10.2.0/crs_1/bin/racgwrap
ACTIVE_PLACEMENT=0
AUTO_START=1
CHECK_INTERVAL=600
DESCRIPTION=CRS application for the Database
FAILOVER_DELAY=0
FAILURE_INTERVAL=60
FAILURE_THRESHOLD=1
HOSTING_MEMBERS=
OPTIONAL_RESOURCES=
PLACEMENT=balanced
REQUIRED_RESOURCES=
RESTART_ATTEMPTS=1
SCRIPT_TIMEOUT=600
START_TIMEOUT=0
STOP_TIMEOUT=0
UPTIME_THRESHOLD=7d
USR_ORA_ALERT_NAME=
USR_ORA_CHECK_TIMEOUT=0
USR_ORA_CONNECT_STR=/ as sysdba
USR_ORA_DEBUG=0
USR_ORA_DISCONNECT=false
USR_ORA_FLAGS=
USR_ORA_IF=
USR_ORA_INST_NOT_SHUTDOWN=
USR_ORA_LANG=
USR_ORA_NETMASK=
USR_ORA_OPEN_MODE=
USR_ORA_OPI=false
USR_ORA_PFILE=
USR_ORA_PRECONNECT=none
USR_ORA_SRV=
USR_ORA_START_TIMEOUT=0
USR_ORA_STOP_MODE=immediate
USR_ORA_STOP_TIMEOUT=0
USR_ORA_VIP=
2、srvctl
rac2-> srvctl
用法: srvctl <command> <object> [<options>]
命令: enable|disable|start|stop|relocate|status|add|remove|modify|getenv|setenv|unsetenv|config
对象: database|instance|service|nodeapps|asm|listener
有关各个命令和对象的详细帮助, 请使用:
srvctl <command> <object> -h
rac2-> srvctl config database
devdb
rac2-> srvctl config database -d devdb
rac1 devdb1 /u01/app/oracle/product/10.2.0/db_1
rac2 devdb2 /u01/app/oracle/product/10.2.0/db_1
rac2-> srvctl config database -d devdb -a
rac1 devdb1 /u01/app/oracle/product/10.2.0/db_1
rac2 devdb2 /u01/app/oracle/product/10.2.0/db_1
DB_NAME: devdb
ORACLE_HOME: /u01/app/oracle/product/10.2.0/db_1
SPFILE: +DG1/devdb/spfiledevdb.ora
DOMAIN: null
DB_ROLE: null
START_OPTIONS: null
POLICY:  AUTOMATIC
ENABLE FLAG: DB ENABLED
rac2-> srvctl config nodeapps -n rac1
rac1 devdb1 /u01/app/oracle/product/10.2.0/db_1
rac2-> srvctl config nodeapps -h
用法: srvctl config nodeapps -n <node_name> [-a] [-g] [-o] [-s] [-l]
-n <node>           节点名
-a                  显示 TNS 条目
-g                  显示 GSD 配置
-s                  显示 ONS 守护程序配置
-l                  显示监听程序配置
-h                  打印用法
rac2-> srvctl config nodeapps -n rac2 -l
监听程序已存在。
rac2-> srvctl config nodeapps -n rac1 -a
VIP 已存在。: /rac1-vip/192.168.1.21/255.255.255.0/eth0:eth1
rac2-> srvctl config listener -n rac2
rac2 LISTENER_RAC2
rac2-> srvctl config asm -n rac1
+ASM1 /u01/app/oracle/product/10.2.0/db_1
rac2-> srvctl config service -h
用法: srvctl config service -d <name> [-s <service_name>] [-a] [-S <level>]
-d <name>           数据库的唯一名称
-s <service>        服务名
-a                  附加属性
-S <level>          EM 控制台的附加信息
-h                  打印用法
rac2-> srvctl config service -d devdb -a
XFF PREF: devdb1 AVAIL: devdb2 TAF: basic
–设置XFF service 不开机启动
ac2-> srvctl disable service -h
用法: srvctl disable service -d <name> -s “<service_name_list>” [-i <inst_name>]
-d <name>           数据库的唯一名称
-s “<serv,…>”     逗号分隔的服务名
-i <inst>           实例名
-h                  打印用法
rac2-> srvctl disable service -d devdb -s XFF -i devdb1
rac2-> srvctl config service -d devdb -a
XFF PREF: devdb1 AVAIL: devdb2 TAF: basic
在实例 devdb1 上禁用服务 XFF。
rac2-> srvctl enable service -h
用法: srvctl enable service -d <name> -s “<service_name_list>” [-i <inst_name>]
-d <name>           数据库的唯一名称
-s “<serv,…>”     逗号分隔的服务名
-i <inst>           实例名
-h                  打印用法
rac2-> srvctl enable service -d devdb -s XFF -i devdb1
rac2-> srvctl config service -d devdb -a
XFF PREF: devdb1 AVAIL: devdb2 TAF: basic
–添加xff2 service
rac2-> srvctl add service -h
用法: srvctl add service -d <name> -s <service_name> -r “<preferred_list>” [-a “<available_list>”] [-P <TAF_policy>]
-d <name>           数据库的唯一名称
-s <service>        服务名
-r “<pref_list>”    首选实例列表
-a “<avail_list>”   可用实例列表
-P <TAF_policy>     TAF 策略 (NONE, BASIC, 或 PRECONNECT)
用法: srvctl add service -d <name> -s <service_name> -u {-r “<new_pref_inst>” | -a “<new_avail_inst>”}
-d <name>           数据库的唯一名称
-s <service>        服务名
-u                  为服务配置添加一个新实例
-r <new_pref_inst>  新首选实例的名称
-a <new_avail_inst> 新可用实例的名称
-h                  打印用法
rac2-> srvctl add service -d devdb -s xff2 -r devdb2 -a devdb1  -P BASIC
rac2-> srvctl config service -d devdb -a
XFF PREF: devdb1 AVAIL: devdb2 TAF: basic
xff2 PREF: devdb2 AVAIL: devdb1 TAF: BASIC
rac2-> crs_stat -t -v
Name           Type           R/RA   F/FT   Target    State     Host
———————————————————————-
ora…..XFF.cs application    0/0    0/1    ONLINE    ONLINE    rac1
ora….db1.srv application    0/0    0/0    ONLINE    ONLINE    rac2
ora.devdb.db   application    0/1    0/1    ONLINE    ONLINE    rac1
ora….b1.inst application    0/5    0/0    ONLINE    ONLINE    rac1
ora….b2.inst application    0/5    0/0    ONLINE    ONLINE    rac2
ora….xff2.cs application    0/0    0/1    OFFLINE   OFFLINE
ora….db2.srv application    0/0    0/0    OFFLINE   OFFLINE
ora….SM1.asm application    0/5    0/0    ONLINE    ONLINE    rac1
ora….C1.lsnr application    0/5    0/0    ONLINE    ONLINE    rac1
ora.rac1.gsd   application    0/5    0/0    ONLINE    ONLINE    rac1
ora.rac1.ons   application    0/3    0/0    ONLINE    ONLINE    rac1
ora.rac1.vip   application    0/0    0/0    ONLINE    ONLINE    rac1
ora….SM2.asm application    0/5    0/0    ONLINE    ONLINE    rac2
ora….C2.lsnr application    0/5    0/0    ONLINE    ONLINE    rac2
ora.rac2.gsd   application    0/5    0/0    ONLINE    ONLINE    rac2
ora.rac2.ons   application    0/3    0/0    ONLINE    ONLINE    rac2
ora.rac2.vip   application    0/0    0/0    ONLINE    ONLINE    rac2
–设置xff2 service 开机自启动
rac2->  srvctl enable service -d devdb -s xff2 -i devdb1
rac2->  srvctl enable service -d devdb -s xff2 -i devdb2
–启动xff2 service
rac2-> srvctl start service -d devdb -s xff2 -i devdb1
rac2-> crs_stat -t
Name           Type           Target    State     Host
————————————————————
ora…..XFF.cs application    ONLINE    ONLINE    rac1
ora….db1.srv application    ONLINE    ONLINE    rac2
ora.devdb.db   application    ONLINE    ONLINE    rac1
ora….b1.inst application    ONLINE    ONLINE    rac1
ora….b2.inst application    ONLINE    ONLINE    rac2
ora….xff2.cs application    ONLINE    ONLINE    rac2
ora….db2.srv application    ONLINE    ONLINE    rac1
ora….SM1.asm application    ONLINE    ONLINE    rac1
ora….C1.lsnr application    ONLINE    ONLINE    rac1
ora.rac1.gsd   application    ONLINE    ONLINE    rac1
ora.rac1.ons   application    ONLINE    ONLINE    rac1
ora.rac1.vip   application    ONLINE    ONLINE    rac1
ora….SM2.asm application    ONLINE    ONLINE    rac2
ora….C2.lsnr application    ONLINE    ONLINE    rac2
ora.rac2.gsd   application    ONLINE    ONLINE    rac2
ora.rac2.ons   application    ONLINE    ONLINE    rac2
ora.rac2.vip   application    ONLINE    ONLINE    rac2
rac2-> srvctl status  service -d devdb -v
服务 XFF 正在实例 devdb2 上运行
服务 xff2 正在实例 devdb1 上运行
–停用xff2 service
rac2-> srvctl stop service -d devdb -s xff2 -i devdb1
rac2-> crs_stat -t
Name           Type           Target    State     Host
————————————————————
ora…..XFF.cs application    ONLINE    ONLINE    rac1
ora….db1.srv application    ONLINE    ONLINE    rac2
ora.devdb.db   application    ONLINE    ONLINE    rac1
ora….b1.inst application    ONLINE    ONLINE    rac1
ora….b2.inst application    ONLINE    ONLINE    rac2
ora….xff2.cs application    ONLINE    ONLINE    rac2
ora….db2.srv application    OFFLINE   OFFLINE
ora….SM1.asm application    ONLINE    ONLINE    rac1
ora….C1.lsnr application    ONLINE    ONLINE    rac1
ora.rac1.gsd   application    ONLINE    ONLINE    rac1
ora.rac1.ons   application    ONLINE    ONLINE    rac1
ora.rac1.vip   application    ONLINE    ONLINE    rac1
ora….SM2.asm application    ONLINE    ONLINE    rac2
ora….C2.lsnr application    ONLINE    ONLINE    rac2
ora.rac2.gsd   application    ONLINE    ONLINE    rac2
ora.rac2.ons   application    ONLINE    ONLINE    rac2
ora.rac2.vip   application    ONLINE    ONLINE    rac2
rac2-> srvctl status  service -d devdb -v
服务 XFF 正在实例 devdb2 上运行
服务 xff2 未运行。
–删除xff2 service
rac2-> srvctl remove service -h
用法: srvctl remove service -d <name> -s <service_name> [-i <inst_name>] [-f]
-d <name>           数据库的唯一名称
-s <service>        服务名
-i <inst>           实例名
-f                  强制删除
-h                  打印用法
rac2-> srvctl remove service -d devdb -s xff2
xff2 PREF: devdb2 AVAIL: devdb1
是否从数据库 devdb 中删除服务 xff2? (y/[n]) y
rac2-> crs_stat -t
Name           Type           Target    State     Host
————————————————————
ora…..XFF.cs application    ONLINE    ONLINE    rac1
ora….db1.srv application    ONLINE    ONLINE    rac2
ora.devdb.db   application    ONLINE    ONLINE    rac1
ora….b1.inst application    ONLINE    ONLINE    rac1
ora….b2.inst application    ONLINE    ONLINE    rac2
ora….SM1.asm application    ONLINE    ONLINE    rac1
ora….C1.lsnr application    ONLINE    ONLINE    rac1
ora.rac1.gsd   application    ONLINE    ONLINE    rac1
ora.rac1.ons   application    ONLINE    ONLINE    rac1
ora.rac1.vip   application    ONLINE    ONLINE    rac1
ora….SM2.asm application    ONLINE    ONLINE    rac2
ora….C2.lsnr application    ONLINE    ONLINE    rac2
ora.rac2.gsd   application    ONLINE    ONLINE    rac2
ora.rac2.ons   application    ONLINE    ONLINE    rac2
ora.rac2.vip   application    ONLINE    ONLINE    rac2
注意使用-h或者help帮助功能

表在线重定义(无主键)

1、T2表结构

SQL> desc t2
Name           Type          Nullable Default Comments
-------------- ------------- -------- ------- --------
OWNER          VARCHAR2(30)  Y
OBJECT_NAME    VARCHAR2(128) Y
SUBOBJECT_NAME VARCHAR2(30)  Y
OBJECT_ID      NUMBER        Y
DATA_OBJECT_ID NUMBER        Y
OBJECT_TYPE    VARCHAR2(19)  Y
CREATED        DATE          Y
LAST_DDL_TIME  DATE          Y
TIMESTAMP      VARCHAR2(19)  Y
STATUS         VARCHAR2(7)   Y
TEMPORARY      VARCHAR2(1)   Y
GENERATED      VARCHAR2(1)   Y
SECONDARY      VARCHAR2(1)   Y

2、创建中间表

CREATE TABLE T2_1
AS
SELECT * FROM t2 WHERE 1=0;

3、验证T2是否用于重定义(因没有主键,采用rowid实现)

EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(user, 'T2', DBMS_REDEFINITION.cons_use_rowid);

4、执行表的在线重定义

EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER, 'T2', 'T2_1','OWNER OWNER, OBJECT_NAME OBJECT_NAME, SUBOBJECT_NAME  SUBOBJECT_NAME, OBJECT_ID OBJECT_ID, DATA_OBJECT_ID DATA_OBJECT_ID, OBJECT_TYPE OBJECT_TYPE, CREATED CREATED, LAST_DDL_TIME LAST_DDL_TIME, TIMESTAMP TIMESTAMP, STATUS STATUS, TEMPORARY TEMPORARY, GENERATED GENERATED, SECONDARY SECONDARY',DBMS_REDEFINITION.cons_use_rowid);

说明:
1)采用单引号列出T2与T2_1表列的对应关系
2)列与列之间采用单引号分割,单引号后面要有空格
5、同步数据(可选)

exec dbms_redefinition.sync_interim_table(user, 'T2', 'T2_1');

6、执行结束在线定义过程

EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE(user, 'T2', 'T2_1');

7、删除中间表

drop table t2_1 purge;

8、处理T2表(删除隐藏列)

SQL> select col#,name,type# from SYS.COL$ WHERE OBJ#=(select object_id from dba_objects where object_name='T2');
      COL# NAME                                TYPE#
---------- ------------------------------ ----------
         1 OWNER                                   1
         2 OBJECT_NAME                             1
         3 SUBOBJECT_NAME                          1
         4 OBJECT_ID                               2
         5 DATA_OBJECT_ID                          2
         6 OBJECT_TYPE                             1
         7 CREATED                                12
         8 LAST_DDL_TIME                          12
         9 TIMESTAMP                               1
        10 STATUS                                  1
        11 TEMPORARY                               1
        12 GENERATED                               1
        13 SECONDARY                               1
         0 SYS_C00014_11081015:39:40$              1
--发现一个多余隐藏列SYS_C00014_11081015:39:40$,我们需要删除
SQL>  alter table t2 set unused ("SYS_C00014_11081015:39:40$");
Table altered
SQL>  alter table t2 drop unused columns;
Table altered

表在线重定义(有主键)

Oracle 10g RAC相关进程

Oracle Clusterware进程
OCSSD
该进程是Clusterware最关键进程,如果出现异常,会导致系统重启,该进程提供的服务为CSS(Cluster Synchronization Service)服务。CSS服务是通过多种心跳机制来实现实时监控集群的健康状态,提供脑裂保护等基础集群服务功能。CSS服务有两种心跳机制:一种是通过私有网络的Network Heartbeat,另一种是通过Voting Disk的Disk Heartbeat
CRSD
CRSD是实现“高可用(HA)”的主要进程,它所提供的服务叫做CRS(Cluster Ready Service)服务。该进程对Oracle Clusterware中的资源进行监控,并在这些资源运行异常时进行干预,包括关闭、重启进程或者转移服务。
EVMD
该进程负责发布CRS产生的各种事件(Event)
RACGIMON
该进程负责检查数据库的健康状态,负责Service的启动、停止、故障转移(Failover)。这个进程会建立到数据库的持久连接,定期检查SGA中的特定信息,该信息由PMON进程定时更新
OPROCD
该进程也叫做Process Monitor Daemon。如果在非Linux平台上,并且没有使用第三方的集群软件,会看到这个进程。实现“IO隔离”功能,在Liunx平台上,是利用hangcheck-timer模块来实现“IO隔离”功能
Oracle Instance进程
LMSn
负责数据块在实例间的传递,对应的服务叫作GCS(Global Cache Service),这个进程的数量是通过参数GCS_SERVER_PROCESSES控制,缺省值是2个,取值范围为0至9
LMD
负责在多个实例间协调数据库的访问顺序,保证数据的一致性访问,对应的服务是GES(Global Enqueue Service)
LCK
负责Non-Cache Fusion资源的同步访问,每个实例只有一个LCK进程
LMON
各个实例的LMON进程进行定期通信,以检查集群中各节点的健康状态,当某个节点出现故障时,负责集群重构、GRD恢复等操作,它提供的服务叫作 Cluster Group Services(CGS)
DIAG
监控实例的健康状态,并在实例运行出现错误时收集诊断数据记录到Alert.log日志中
GSD
负责从客户端工具接收命令,为用户提供管理接口

路走对了,就不怕远

1、一天很短,开心了就笑,不开心了就过会儿再笑。
2、真正的朋友从不追究你的过错,也从不嫉妒你的成功。
3、爱情就像是冰激凌,吃掉美味的奶油,就露出了它最真实的面目。
4、我宁愿爱上一个我不能拥有的人,也不想拥有一个我无法爱上的人。
5、品格不由你占有的东西决定,而是由你匮乏的东西塑造的。
6、痛过,才知道如何保护自己; 哭过,才知道心痛是什么感觉, 傻过,才知道适时的坚持与放弃, 爱过,才知道自己其实很脆弱。 其实,生活并不需要这么些无谓的执著,没有什么就真的不能割舍。
7、命,乃失败者的借口;运,乃成功者的谦辞。
8、一个人头脑聪明本领大,当然是好事,脑瓜子笨一点能力差一点也没有关系,只要有必胜的信念,只要有决不放弃的原则,照样能成为一个优秀的人物。
9、派大星:“嗨,海绵宝宝,我们去抓水母吧。”海绵宝宝:“对不起,今天不行,我要上学。”派大星:“如果你去上学的话,我今天该干点什么?”海绵宝宝:“我不知道,一般我不在家的时候,你都干些什么啊?”派大星:“等你回来。”
10、想把别人推进地狱的人,多半自己也住在地狱里。
11、也许我们很难知道,离成功究竟还有多远,但是我们十分清楚,自己到底还能撑多久。我们不一定能等到成功到来的那一刻,但可以肯定的是,我们可以坚持到自己的最后一刻。
12、你拨动了我的心弦,却不曾为我驻足,当我以为你还在的时候,你已没有踪影,当你回头找寻我的时候,我已开始寻找自己的天空。亲爱的,我把最美好的年华留给了你,我,于你无愧。亲爱的,我的青春有限,承担不起一生一世的等待。亲爱的,让我骄傲一次,这次,是我不要你了。
13、安妮宝贝《彼岸花》:任何一件事情,只要心甘情愿,总是能够变得简单。
14、《刺猬的优雅》:某些事情必须结束,某些事情必须开始。我只是渴望一件事情:那就是希望别人能让我平静地度过此生,不要对我太苛刻,此外,我能每天花点时间,能够尽情满足自己的饥渴,足矣。
15、《飘》:我从来不是那样的人,不能耐心地拾起一片碎片,把它们凑合在一起,然后对自己说这个修补好了的东西跟新的完全一样。一样东西破碎了就是破碎了,我宁愿记住它最好时的模样,而不想把它修补好,然后终生看着那些碎了的地方。
16、魏剑美:做人做事最好的状态就是:不刻意。不刻意自我表现,也不刻意淡泊名利;不刻意迎合,也不刻意狂狷;不刻意追逐流行,也不刻意卓尔不群。如是,则不心累,不纠结,不失望。
17、路金波:莫要晒甜蜜,莫要秀幸福。因为物理学常识告诉我们,晒容易流失水分,而冷藏是保鲜的最佳方式。
18、韩寒:鹅卵石为什么被人捏在手里玩?就是因为它没有棱角。 
19、宋丹丹:原本只想要一个拥抱,不小心多了一个吻,然后你发现需要一张床,一套房,一个证……离婚的时候才想起:你原本只想要一个拥抱。
20、路走对了,就不怕远!

The value (30) of MAXTRANS parameter ignored

1、现象
Mon Aug 8 08:16:07 2011
The value (30) of MAXTRANS parameter ignored.
kupprdp: master process DM00 started with pid=91, OS id=21125
to execute – SYS.KUPM$MCP.MAIN(‘SYS_EXPORT_TABLE_01’, ‘YDZJ’, ‘KUPC$C_1_20110808081609’, ‘KUPC$S_1_20110808081609’, 0);
kupprdp: worker process DW01 started with worker id=1, pid=57, OS id=21127
to execute – SYS.KUPW$WORKER.MAIN(‘SYS_EXPORT_TABLE_01’, ‘YDZJ’);
kupprdp: worker process DW02 started with worker id=2, pid=95, OS id=21502
to execute – SYS.KUPW$WORKER.MAIN(‘SYS_EXPORT_TABLE_01’, ‘YDZJ’);
2、原因
这个时间段正在使用expdp进行数据库导出,当然从错误描述也可以看出和导出操作有关,不过当时导出是成功,没有报任何错误。 在metalink查询 ,发现这是Version: 10.1.0.2 to 11.1.0.7 (任何平台) 的一个bug,Bug号为:6347775
这是由于在创建备份主表时使用了如下语句:
CREATE TABLE table_name (columns_list) INITRANS 10 MAXTRANS 30
而Maxtrans参数在10gR1时已经废弃,所以在告警日志中就提示:
The value (30) of MAXTRANS parameter ignored. , 此bug没有什么影响,所以可以忽略。
3、重现
SQL> create table xff(xifenfei varchar2(100)) initrans 10 maxtrans 20;
Table created.
查看alert日志
Mon Aug 8 16:11:28 2011
The value (20) of MAXTRANS parameter ignored.

利用DNSPod域名解析实现blog高可用

因为blog的服务器不太稳定,经常有异常断网或者关机现象发生,今天采用了利用一些基本资源,使用了高可用,整体思路采用DNSPod域名解析提供的免费检测服务器状态,如果主服务器发生宕机,自动切换到备机功能(监控功能)实现高可用。
1、配置备用服务器和主服务器一致,使用相同的域名均可以访问(修改电脑的hosts文件测试)
在本次配置中,主要是固定url的功能
1.1)apache中启用该模块mod_rewrite
1.2).htaccess文件中内容

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

1.3)启用FollowSymLinks功能
“Options Indexes FollowSymLinks
… …
AllowOverride None”
改为
“Options Indexes FollowSymLinks
… …
AllowOverride All”
2、配置DNSPod监控功能,添加备机ip到域名解析中
3、既然思路是当一台服务器发生故障时,域名解析自动切换到备用服务器,那么问题就是主服务器和备服务器的数据要一致,因为是网站,涉及的数据一致主要就是数据库内容一致,网站上传编辑附件一致即可
3.1)mysql数据库同步(因为这个是个人blog,对数据的实时性,一致要求不是异常的高,所以采用crontab实现同步,如果要求高,可以采用mysql 主主复制实现)

#!/bin/bash
#目标数据库
target_db=*******
target_user=*******
target_pwd=*******
target_host=*******
#源数据库
source_db=*******
source_user=*******
source_pwd=*******
source_host=*******
#其他配置
dumptime=$(date +%y%m%d%H%M)
dumpfile=/home/chengfei/backup/mysql/${dumptime}.sql
logfile=/home/chengfei/backup/log/syc_mysql.log
#开始操作
echo "开始数据库同步……`date`……">>${logfile}
#导出数据库
 /usr/bin/mysqldump -u${source_user} -p${source_pwd} -h${source_host} ${source_db} >${dumpfile} 2>> ${logfile}
#导入数据库
mysql -u${target_user} -p${target_pwd} -h${target_host}<<XFF>> ${logfile}
drop database ${target_db};
create database ${target_db};
use ${target_db};
source ${dumpfile}
exit
XFF
#操作结束
echo "数据库同步结束……`date`……">>${logfile}
echo ''>>${logfile}
--crontab
00 2,12,14,16,18,20,22,24 * * * /home/chengfei/backup/script/sysc_mysql.sh

3.2)因为我这个blog上传编辑图片类的内容非常少,暂时没有考虑网站文件同步功能,以后可以考虑实现。目前初步方案是采用scp或者ftp结合crontab功能实现定时同步

V$LOCK视图相关知识

1V$LOCK视图结构

列名 类型 字段说明
ADDR RAW(4 | 8) Address of lock state object
KADDR RAW(4|8) Address of lock
SID NUMBER 会话的sid,可以和v$session 关联
TYPE VARCHAR2(2) 区分该锁保护对象的类型(表4)
TM – DML enqueue
TX – Transaction enqueue
UL – User supplied
–我们主要关注TX和TM两种类型的锁
–UL锁用户自己定义的,一般很少会定义,基本不用关注
–其它均为系统锁,会很快自动释放,不用关注
ID1
ID2
NUMBER ID1,ID2的取值含义根据type的取值而有所不同
对于TM
ID1表示被锁定表的object_id 可以和dba_objects视图关联取得具体表信息,ID2 值为0
对于TX
ID1以十进制数值表示该事务所占用的回滚段号和事务槽slot number号,其组形式:
0xRRRRSSSS,RRRR=RBS/UNDO NUMBER,SSSS=SLOT NUMBER
ID2 以十进制数值表示环绕wrap的次数,即事务槽被重用的次数
LMODE NUMBER
  • 0 – none
  • 1 – null (NULL)
  • 2 – row-S (SS)
  • 3 – row-X (SX)
  • 4 – share (S)
  • 5 – S/Row-X (SSX)
  • 6 – exclusive (X)
  • 具体见表3
REQUEST NUMBER 同LMODE
–大于0时,表示当前会话被阻塞,其它会话占有改锁的模式
CTIME NUMBER
  • 已持有或者等待锁的时间
BLOCK NUMBER
  • 是否阻塞其他会话锁申请 1:阻塞 0:不阻塞


2、其它相关视图说明

视图名 描述 主要字段说明
v$session 查询会话的信息和锁的信息。 sid,serial#:表示会话信息。
program:表示会话的应用程序信息。
row_wait_obj#:表示等待的对象,和dba_objects中的object_id相对应。
lockwait :该会话等待的锁的地址,与v$lock的kaddr对应.
v$session_wait 查询等待的会话信息。 sid:表示持有锁的会话信息。
Seconds_in_wait:表示等待持续的时间信息
Event:表示会话等待的事件,锁等于enqueue
dba_locks 对v$lock的格式化视图。 Session_id:和v$lock中的Sid对应。
Lock_type:和v$lock中的type对应。
Lock_ID1: 和v$lock中的ID1对应。
Mode_held,mode_requested:和v$lock中的lmode,request相对应。
v$locked_object 只包含DML的锁信息,包括回滚段和会话信息。 Xidusn,xidslot,xidsqn:表示回滚段信息。和v$transaction相关联。
Object_id:表示被锁对象标识。
Session_id:表示持有锁的会话信息。
Locked_mode:表示会话等待的锁模式的信息,和v$lock中的lmode一致。

表3

锁模式 锁描述 解释 SQL操作
0 none
1 NULL Select
2 SS(Row-S) 行级共享锁,其他对象只能查询这些数据行 Select for update
Lock for update
Lock row share
3 SX(Row-X) 行级排它锁,在提交前不允许做DML操作 Insert/update/Delete
Lock row share
4 S(Share) 共享锁 Create index
Lock share
5 SSX(S/Row-X) 共享行级排它锁 Lock share row exclusive
6 X(Exclusive) 排它锁 Alter table
Drop able
Drop index
Truncate table
Lock exclusive

表4

System Type Description System Type Description
BL Buffer hash table instance NA..NZ Library cache pin instance (A..Z = namespace)
CF Control file schema global enqueue PF Password File
CI Cross-instance function invocation instance PI, PS Parallel operation
CU Cursor bind PR Process startup
DF datafile instance QA..QZ Row cache instance (A..Z = cache)
DL Direct loader parallel index create RT Redo thread global enqueue
DM Mount/startup db primary/secondary instance SC System change number instance
DR Distributed recovery process SM SMON
DX Distributed transaction entry SN Sequence number instance
FS File set SQ Sequence number enqueue
HW Space management operations on a specific segment SS Sort segment
IN Instance number ST Space transaction enqueue
IR Instance recovery serialization global enqueue SV Sequence number value
IS Instance state TA Generic enqueue
IV Library cache invalidation instance TS Temporary segment enqueue (ID2=0)
JQ Job queue TS New block allocation enqueue (ID2=1)
KK Thread kick TT Temporary table enqueue
LA .. LP Library cache lock instance lock (A..P = namespace) UN User name
MM Mount definition global enqueue US Undo segment DDL
MR Media recovery WL Being-written redo log instance

Total insert collisions (ogg)

1、错误现象
Replicating from ECP.TAB_UUM_PACKAGE to RWGL.TAB_UUM_USER:
*** Total statistics since 2011-08-05 10:34:10 ***

Total inserts                               20.00
Total updates                                0.00
Total deletes                                0.00
Total discards                               0.00
Total operations                            20.00
Total insert collisions                     20.00

2、错误原因
RWGL.TAB_UUM_USER表上有insert触发器,导致失败。因为触发器使得插入操作为插入和触发器中的操作绑定为了一个整体,现在因为触发器失败,导致插入失败,而且还会丢失该条插入记录,需要查找出该条记录比较困难。
3、解决方案
采用自治事件结合异常捕获
自治事件使得触发器和插入操作相互分离,异常捕获记录触发器失败的原因,插入到日志表中,通过该表,可以查询查失败的记录,然后人工干预,触发器实例:

create or replace trigger ogg_t
  before insert on t_1
  for each row
declare
   tid NUMBER;
   err VARCHAR2(100);
   PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  SELECT t.id2 INTO tid FROM t_2 t WHERE NAME=:new.Name;
  INSERT INTO t_3 VALUES(tid,:new.name);
  COMMIT;
EXCEPTION
       WHEN TOO_MANY_ROWS THEN
         INSERT INTO t_error VALUES(:new.id,'TOO_MANY_ROWS');
         COMMIT;
        WHEN NO_DATA_FOUND THEN
           INSERT INTO t_error VALUES(:new.id,'NO_DATA_FOUND');
           COMMIT;
         WHEN OTHERS THEN
           err:=SUBSTR(SQLERRM(SQLCODE),1,100);
           INSERT INTO t_error VALUES(:new.id,err);
           COMMIT;
end ogg_t;

1)PRAGMA AUTONOMOUS_TRANSACTION;
自治事务,就是说触发器不管是成功,还是失败,数据库同步程序都能够同步成功数据到目标端
2)COMMIT;
因为采用了自治事件,所以begin end中的操作是独立与数据库中数据,需要单独提交
3)EXCEPTION
添加异常处理
4)INSERT INTO t_error VALUES(:new.id,’TOO_MANY_ROWS’);(类此语句,注意commit)
建立一张错误日志表(根据具体情况决定),如果触发器失败,把错误记录到该表中,以后出现问题查找很方便(要求:通过该表能够查询到那条语句的触发器执行失败。失败原因,失败时间,额外列(用于确定对应记录))