xyz's profile逍遥者寒号的小屋BlogLists Tools Help

逍遥者寒号的小屋

———— 在北风中逍遥,在凛冽中寒号。 QQ:385079552
June, 2009

搞死linux

echo 1 > /proc/sys/kernel/sysrq
echo c > /proc/sysrq-trigger
April, 2007

表级流复制基本操作(下)

添加一个新的复制表

源数据库

添加附加日志

ALTER TABLE "REP"."C" ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, FOREIGN KEY, UNIQUE INDEX) COLUMNS;

实例化准备

DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION(

table_name => 'rep.c',

supplemental_logging => 'keys');

添加捕捉规则

dbms_streams_adm.add_table_rules(

    table_name => '"REP"."C"',

    streams_type => 'CAPTURE',

    streams_name => '"TEST$CAP"',

    queue_name => '"STREAMADMIN"."TEST$CAPQ"',

    include_dml => TRUE,

    include_ddl => TRUE,

    include_tagged_lcr => TRUE,

    source_database => 'TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM',

    inclusion_rule => TRUE);

添加传送规则

dbms_streams_adm.add_table_propagation_rules(

    table_name => '"REP"."C"',

    streams_name => '',

    source_queue_name => '"STREAMADMIN"."TEST$CAPQ"',

    destination_queue_name => '"STREAMADMIN"."TEST$APPQ"@RMAN.REGRESS.RDBMS.DEV.US.ORACLE.COM',

    include_dml => TRUE,

    include_ddl => TRUE,

    include_tagged_lcr => TRUE,

    source_database => 'TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM',

    inclusion_rule => TRUE,

    and_condition => NULL,

    queue_to_queue => TRUE);

目标数据库

导入对象并实例化

使用imp数据时加入参数STREAMS_INSTANTIATION=Y(生效)

或者得到源数据库的当前scn

select dbms_flashback.get_system_change_number from dual;

 

DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN(

source_object_name => 'rep.c',

source_database_name => ' TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM ',

instantiation_scn => 1234567);                               --scn

添加应用规则

  dbms_streams_adm.add_table_rules(

    table_name => '"REP"."C"',

    streams_type => 'APPLY',

    streams_name => '',

    queue_name => '"STREAMADMIN"."TEST$APPQ"',

    include_dml => TRUE,

    include_ddl => TRUE,

    include_tagged_lcr => TRUE,

    source_database => 'TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM',

inclusion_rule => TRUE);

 

其他

 

搭建表级流复制系统代码

DECLARE

tables DBMS_UTILITY.UNCL_ARRAY;

BEGIN

tables(1) := 'rep.a';                           --要复制的表名

tables(2) := 'rep.b';                           --要复制的表名

DBMS_STREAMS_ADM.MAINTAIN_TABLES(

table_names => tables,                          --要复制的表对象集

source_directory_object => NULL,

destination_directory_object => NULL,

source_database => ' TEST ',                    --源数据库

destination_database => 'RMAN ',              --目标数据库

perform_actions => false,                       --立即执行还是生成脚本

script_name => 'configure_rep.sql',         --生成脚本的名称

script_directory_object => 'SCRIPT_DIRECTORY',  --生成脚本的目录(由create directory .. as ..创建)

bi_directional => false,                        --是否使用多源复制

include_ddl => false,                           --是否包括DDL语句

instantiation => DBMS_STREAMS_ADM.INSTANTIATION_TABLE_NETWORK);

END;

/

 

启用/禁用捕捉进程

  dbms_capture_adm.start_capture(

capture_name => '"TEST$CAP"');

 

dbms_capture_adm.stop_capture(

capture_name => '"TEST$CAP"');

 

启用/禁用传输

  dbms_aqadm.enable_propagation_schedule(

    queue_name => '"STREAMADMIN"."RMAN$CAPQ"',

    destination => 'TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM',

destination_queue => '"STREAMADMIN"."RMAN$APPQ"');

 

  dbms_aqadm.disable_propagation_schedule(

    queue_name => '"STREAMADMIN"."TEST$CAPQ"',

    destination => 'CHARGE.REGRESS.RDBMS.DEV.US.ORACLE.COM',

destination_queue => destn_q);

启用/禁用应用进程

  dbms_apply_adm.start_apply(

apply_name => apply_nm_dqt);

 

  dbms_apply_adm.stop_apply(

apply_name => apply_nm_dqt);

 

加入负规则集

(不传送本机应用标签的LCR

  dbms_streams_adm.add_table_propagation_rules(

    table_name => '"REP"."A"',

    streams_name => '',

    source_queue_name => '"STREAMADMIN"."TEST$CAPQ"',

    destination_queue_name => '"STREAMADMIN"."TEST$APPQ"@RMAN.REGRESS.RDBMS.DEV.US.ORACLE.COM',

    include_dml => TRUE,

    include_ddl => FALSE,

    include_tagged_lcr => TRUE,

    source_database => 'TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM',

   inclusion_rule => FALSE,

   and_condition =>  ':lcr.get_tag() = HEXTORAW ("00") ',       --00为本机应用进程的标签

    queue_to_queue => true);

 

加入update冲突解决

DECLARE

cols DBMS_UTILITY.NAME_ARRAY;

BEGIN

cols(1) := 'c1';                          --列名

cols(2) := 'c2';                               --列名

DBMS_APPLY_ADM.SET_UPDATE_CONFLICT_HANDLER(

object_name => 'hr.jobs',                      --表名

method_name => 'OVERWRITE',                    --overwrite,discard,maximum,minmum,null

resolution_column => 'job_title',              --

column_list => cols);                          --列集合

END;

/

自定义冲突解决

BEGIN

DBMS_APPLY_ADM.SET_DML_HANDLER(

object_name => 'hr.locations',                          --表名

object_type => 'TABLE',                                 --

operation_name => 'UPDATE',                             --升级冲突

error_handler => false,                                

user_procedure => 'strmadmin.history_dml',              --自定义存储过程 Null取消

apply_database_link => NULL,

apply_name => NULL);

END;

/

自定义存储过程

CREATE OR REPLACE PROCEDURE history_dml(in_any IN ANYDATA)

IS

lcr SYS.LCR$_ROW_RECORD;

rc PLS_INTEGER;

BEGIN

-- Access the LCR

rc := in_any.GETOBJECT(lcr);

-- Insert information about the LCR into the history_row_lcrs table

INSERT INTO strmadmin.history_row_lcrs VALUES

(SYSDATE, lcr.GET_SOURCE_DATABASE_NAME(), lcr.GET_COMMAND_TYPE(),

lcr.GET_OBJECT_OWNER(), lcr.GET_OBJECT_NAME(), lcr.GET_TAG(),

lcr.GET_TRANSACTION_ID(), lcr.GET_SCN(), lcr.GET_COMMIT_SCN,

lcr.GET_VALUES('old'), lcr.GET_VALUES('new', 'n'));

-- Apply row LCR

lcr.EXECUTE(true);

END;/

表级流复制基本操作(上)

创建单源流复制数据库

源数据库

创建流复制管理员

CREATE USER STREAMADMIN

    IDENTIFIED BY STREAMADMIN DEFAULT TABLESPACE USERS"

    TEMPORARY TABLESPACE "TEMP"

    ACCOUNT UNLOCK;

GRANT CONNENT TO STREAMADMIN ;

GRANT DBA TO STREAMADMIN ;

 

创建数据库链接

CREATE  DATABASE LINK "DEST"           --数据库链接名,必须在netca中配置过

    CONNECT TO "STREAMADMIN"        --目的数据库时复制管理员

    IDENTIFIED BY "STREAMADMIN"         --目的数据库时复制管理员密码

    USING 'DEST' ;                            --目的数据库名,必须在netca中配置过

 

创建捕捉队列

  dbms_streams_adm.set_up_queue(

    queue_table => '"STREAMADMIN"."TEST$CAPQT"',

    storage_clause => NULL,

    queue_name => '"STREAMADMIN"."TEST$CAPQ"',

    queue_user => '');

 

对要复制的表实例化准备

对所有要复制的表执行

DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION(

table_name => 'rep.a'

supplemental_logging => 'keys');               --默认值为key,如果不指定,将采在所有相约束上启用附加日志

添加附加日志

ALTER TABLE "REP"."C" ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, FOREIGN KEY, UNIQUE INDEX) COLUMNS;

创建传送进程及传输规则

对所有的表执行

  dbms_streams_adm.add_table_propagation_rules(                                  --加入传送规则(自动创建传送进程)

    table_name => '"REP"."A"',                                                 --传送表rep.A

    streams_name => '',                                                        --

    source_queue_name => '"STREAMADMIN"."TEST$CAPQ"',                          --捕捉队列(源)

    destination_queue_name=>"STREAMADMIN"."TEST$APPQ"@DEST',                   --应用队列(目的)

    include_dml => TRUE,                                                       --捕捉dml

    include_ddl => TRUE,                                                       --捕捉dml

    include_tagged_lcr => TRUE,                                                --传输带标签的LCR????

    source_database => 'SOURCE.REGRESS.RDBMS.DEV.US.ORACLE.COM',               --源数据库

    inclusion_rule => TRUE,                                                    --加入正规则集

    and_condition => NULL,                                                     --

    queue_to_queue => TURE);                                                   --10.2 以后为TURE

新目标数据库

创建流复制管理员

CREATE USER STREAMADMIN

    IDENTIFIED BY STREAMADMIN DEFAULT TABLESPACE USERS"

    TEMPORARY TABLESPACE "TEMP"

    ACCOUNT UNLOCK;

GRANT CONNENT TO STREAMADMIN ;

GRANT DBA TO STREAMADMIN ;

创建应用队列

  dbms_streams_adm.set_up_queue(

    queue_table => '"STREAMADMIN"."TEST$APPQT"',        --队列表??

    storage_clause => NULL,                             --

    queue_name => '"STREAMADMIN"."TEST$APPQ"',          --队列名

    queue_user => '');                                  --

 

创建应用进程及应用规则

  dbms_streams_adm.add_table_rules(                                  --创建应用规则(自动创建应用进程)

    table_name => '"REP"."A"',                                        --要应用的表

    streams_type => 'APPLY',                                          --类型

    streams_name => '',                                               --

    queue_name => '"STREAMADMIN"."TEST$APPQ"',                        --应用队列名

    include_dml => TRUE,                                              --包括dml

    include_ddl => TRUE                                            --包括ddl

    include_tagged_lcr => TRUE,                                       --标签不为空也行

    source_database => 'TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM',        --源数据库

    inclusion_rule => TRUE);                                          --加入正规则集

从源数据库导入数据并实例化scn

使用imp数据时加入参数STREAMS_INSTANTIATION=Y

或者得到源数据库的当前scn

select dbms_flashback.get_system_change_number from dual;

 

DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN(

source_object_name => 'rep.a',

source_database_name => ' TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM ',

instantiation_scn => 1234567);                               --scn

设置标签 (多个应用时,结构复杂时需要)

  dbms_apply_adm.alter_apply(

    apply_name => apply_nm_dqt,     --应用名称,在dba_apply_progress中查看

apply_tag => hextoraw(00));     --00为本机应用标签

 

添加一个新的目标节点

源数据库

加入数据库链接

CREATE  DATABASE LINK "DEST"           --数据库链接名,必须在netca中配置过

    CONNECT TO "STREAMADMIN"        --目的数据库时复制管理员

    IDENTIFIED BY "STREAMADMIN"         --目的数据库时复制管理员密码

    USING 'DEST' ;                            --目的数据库名,必须在netca中配置过

对要复制的表实例化准备

对所有要复制的表执行

DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION(

table_name => 'rep.a'

supplemental_logging => 'keys');               --默认值为key,如果不指定,将采在所有相约束上启用附加日志

创建传送进程及传输规则

对所有的表执行

  dbms_streams_adm.add_table_propagation_rules(                                  --加入传送规则(自动创建传送进程)

    table_name => '"REP"."A"',                                                 --传送表rep.A

    streams_name => '',                                                        --

    source_queue_name => '"STREAMADMIN"."TEST$CAPQ"',                           --捕捉队列(源)

    destination_queue_name=>"STREAMADMIN"."TEST$APPQ"@DEST',                   --应用队列(目的)

    include_dml => TRUE,                                                       --捕捉dml

    include_ddl => TRUE,                                                       --捕捉dml

    include_tagged_lcr => TRUE,                                                --传输带标签的LCR????

    source_database => 'SOURCE.REGRESS.RDBMS.DEV.US.ORACLE.COM',               --源数据库

    inclusion_rule => TRUE,                                                    --

    and_condition => NULL,                                                      --

    queue_to_queue => TURE);                                                   --10.2 以后为TURE

新目标数据库

创建流复制管理员

CREATE USER STREAMADMIN

    IDENTIFIED BY STREAMADMIN DEFAULT TABLESPACE USERS"

    TEMPORARY TABLESPACE "TEMP"

    ACCOUNT UNLOCK;

GRANT CONNENT TO STREAMADMIN ;

GRANT DBA TO STREAMADMIN ;

创建应用队列

  dbms_streams_adm.set_up_queue(

    queue_table => '"STREAMADMIN"."TEST$APPQT"',        --队列表??

    storage_clause => NULL,                             --

    queue_name => '"STREAMADMIN"."TEST$APPQ"',          --队列名

    queue_user => '');                                  --

 

创建应用进程及应用规则

  dbms_streams_adm.add_table_rules(                            --创建应用规则(自动创建应用进程)

    table_name => '"REP"."A"',                                  --要应用的表

    streams_type => 'APPLY',                                    --类型

    streams_name => '',                                         --

    queue_name => '"STREAMADMIN"."TEST$APPQ"',                  --应用队列名

    include_dml => TRUE,                                        --包括dml

    include_ddl => TRUE                                   --包括ddl

    include_tagged_lcr => TRUE,                                 --标签不为空也行

    source_database => 'TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM', --源数据库

    inclusion_rule => TRUE);                                    --创建并应用正规则集??

从源数据库导入数据并实例化scn

使用imp数据时加入参数STREAMS_INSTANTIATION=Y

或者得到源数据库的当前scn

select dbms_flashback.get_system_change_number from dual;

 

DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN(

source_object_name => 'rep.a',

source_database_name => ' TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM ',

instantiation_scn => 1234567);                               --scn

其他:

 设置标签 多个应用时,结构复杂时需要

  dbms_apply_adm.alter_apply(

    apply_name => apply_nm_dqt, --??

apply_tag => hextoraw(00));

 

 

March, 2007

Oracle优化监控

数据缓冲区命中率:
(通常>90%,否则请调整sga_target或db_cache_size)
select 100 - ( pr - x) / (cg + dg - x)*100 "db_buffer hit radio(%)" from
(select value pr from v$sysstat where name ='physical reads'),
(select sum(value) x from v$sysstat where name ='physical reads direct' or name ='physical reads direct (lob)'),
(select value cg from v$sysstat where name ='consistent gets'),
(select value dg from v$sysstat where name = 'db block gets')
/

共享池的命中率:
(通常>95%,甚至99%,否则请调整sga_target或share_pool_size)
select sum(pinhits-reloads)/sum(pins)*100 "Share pool hit radio(%)" from v$librarycache
/

数据字典命中率:
select (1 - (sum(getmisses) / sum(gets))) * 100 "Data Dictionary Hit Ratio(%)"
  from v$rowcache;
/
排序区:
(disk与memory的比不能过高,否则调整sort_area_size
select name,value from v$sysstat where name like '%sort%'
/
log_buffer:
(通常redo entries/redo buffer allocation retries > 100否则调整log_buffer):
select name,value from v$sysstat
 where name in('redo entries','redo buffer allocation retries')
/
September, 2006

Rac10G点滴

添加节点:
 1.使用$ORA_CRS_HOME/oui/bin/addNode.sh添加CRS
 2.使用DBCA的实例管理添加数据库
修改vip及vip的机器名:
 1.停掉所有节点数据库,ASM.
 2.停掉所有节点应用(srvctl stop nodeapps -n <node_name >)
 3.srvctl remove nodeapps -n <node_name > [-f]
 4.删除侦听配置(netca)
 5.修改/etc/hosts
 6.使用vipca配置
 7.创建侦听(netca)
仅修改vip:
 1.停掉所有节点数据库,ASM.
 2.停掉所有节点应用(srvctl stop nodeapps -n <node_name >)
 2.停掉所有节点crs(/etc/init.d/init.crs stop)
 3.修改所有节点操作系统ip,/etc/hosts文件
 4.起动所有节点crs(/etc/init.d/init.crs start)
 5.停掉所有节点应用(srvctl stop nodeapps -n <node_name >)
 6.修改所有节点vip(srvctl modify nodeapps -A 192.168.55.21/255.255.255.0/eth0)
 7.启动所有节点应用(srvctl start nodeapps -n ora1)
 8.启动所有节点数据库,ASM
racgvip
 修改内外网连接
crsctl crs_stat crs_start,crs_stop
 控制查看crs状态
srvctl
打开跟踪:export SRVM_TRACE=true
查看配置:srvctl config <object> ...
 
解决节点应用不能启动脚本:
srvctl stop nodeapps -n `hostname`
for app in `crs_stat|grep NAME|awk -F= '{print $2}'`
do
 if [ `crs_stat $app -t|grep \`hostname\` |awk '{print $4}'`""="UNKNOWN" ]
 then
  crs_stop $app
 fi
done
crs_start -all
crs_stat -t|grep `hostname`
 
创建配置HTTP版EM :
emca -config dbcontrol db -repos create
 
解决HTTP版EM中文乱码:
cd $ORACLE_HOME/jre/1.4.2/lib/
mv font.properties font.properties.bak
cp font.properties.zh_CN.Redhat font.properties
rm  $ORACLE_HOME/oc4j/j2ee/oc4j_applications/applications/em/em/cabo/images/cache/zhs/*.gif
emctl stop  dbconsole
emctl start dbconsole
 
HTTP版EM使用英文:
IE->工具->Internet选项->常规->语言 加入英文
February, 2006

Oracle点滴

ora-00607错误:对象与撤销表空间(或回滚段)要恢复的内容不对照时产生.重建撤销表空间(回滚段)或对象即可。

配置Oracle Rac的TAF时,如果服务端侦听使用的是机器名,则需要在客户端hosts文件中加入两个机器名的配置

February, 2006

OCFS详解

OCFS目前不支持2.6内核,即不能再AS4上使用
(OCFS2已经发布)
当由 Oracle 使用时,OCFS 的原始性能类似于执行原始输入/输出的性能。代码本身几乎相同。
1.安装rpm包
ocfs-support-1.0.10-1.i386.rpm
ocfs-2.4.9-e-1.0.13-1.i686.rpm
ocfs-tools-1.0.10-1.i386.rpm
ocfs-2.4.9-e-smp-1.0.13-1.i686.rpm(smp核)
2.分区
3.将分区格式化ocfs格式
 图形界面下执行ocfstool
 或执行 mkfs.ocfs -F -b 128 -L /var/opt/oracle/oradata/orcl -m /var/opt/oracle/oradata/orcl \-u `id -u oracle` -g `id -g oracle` -p 0775 /dev/sda8

ocfs_uid_gen ocfs load_ocfs

4.创建加载点
5.加载
 使用ocfstools
 或mount -t ocfs /dev/sda9 /ocfs
 
ocfs load_ocfs
OCFS 只支持以下文件类型:
Oracle 数据库文件
联机重做日志文件
归档重做日志文件
控制文件
服务器参数文件 (SPFILE)
Oracle 集群注册表 (OCR) 文件
CRS 表决磁盘。 (仲裁盘)

ocfs.conf的编写:
更换网卡时
ocfs.conf内容如下:
        node_name = ora1
        ip_address = 192.168.65.21
        ip_port = 7000
        comm_voting = 1
然后运行 ocfs_uid_gen -c
生成guid

fsck.ocfs 检查ocfs设备
load_ocfs 载入ocfs模块
mkfs.ocfs 格式化ocfs分区
ocfs_uid_gen生成gid(在ocfs.conf中)
resizeofs 重新调整ocfs分区大小
tuneocfs 修改ocfs节点 -l 查看 -N 删除(OCFS分区保存有节点IP??第一次mount后写入??)
ocfstool ocfs图形工具
ocfsextfinder ?
debugocfs ?
 
 
cp、dd 和类似的程序 — 选择一个选项,o_direct=yes,这使得该工具在打开文件时也使用 o_direct,加上此参数时,将不允许频繁访问此文件
dd o_direct=yes if=/ocfs/foo of=/backup/foo.bak bs=1M (bs在512K至1M间)