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

Blog


    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间)
     
     
    January, 2006

    oracle的撤销表空间文件丢失

    1.  
     1.使用start mount启动,执行

    2.alter database datafile '\home\oracle\oradata\sid\undotbs.dbf' offline drop;
    通常使用alter database open就可以把数据库启动了,如果不行的话,执行以下步骤

    3.     create file=’\home\oracle\new.ora’ from spfile

    4.     在new.ora中加入隐藏参数
    _corrupted_rollback_segments = (_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)


    5.     使用startup restrict pfile='\home\oracle\new.ora';启动数据库
    6.     可以使用以下sql查看回滚段:
    select segment_name,tablespace_name,status from dba_rollback_segs;
    删除那些回滚段
    drop rollback segment _SYSSMU1$;
    。。
    。。
    。。

    drop rollback segment _SYSSMU10$;
     

     7.     新建一个回滚表空间
    CREATE UNDO  TABLESPACE  UNDOTBS  DATAFILE    '/home/oracle/oradata/sid/undotbs.dbf'  SIZE  100M  REUSE  AUTOEXTEND  ON  NEXT    5120K  MAXSIZE  UNLIMITED;

    8.     重新制定回滚段表空间
    ALTER  SYSTEM  SET undo_tablespace=UNDOTBS scope=both;

    9.     现在把那个坏掉的回滚段删掉重启oracle,万事大吉了

     

    January, 2006

    sybase复制

     常用配置
    1. 复制分区partition越大越好,大小应该为数据流量的6倍,一般可以设为2G.
    2. 最大线程数应该大于连接数(数据库和复制服务器)乘以2加3。
    3. 复制内存内存加大。
    五. 注意事项
    1. ASE要建立专门用于复制的sa用户,而且账号密码要和复制服务器的一模一样。
    2. _RSSD_prim账号缺少sa权限,导致RSM不能访问复制服务器的配置。
    3. RSM客户端置需要配置ID_SERVER及它的数据库地址。

    常用操作
    1.迁移复制服务器
    a)      将相关数据库(RSSD数据库及复制数据库)的复制代理断开 sp_stop_rep_agent db_name(ASE) 或是 suspend log transfer from {data_server.database|all}
    b)      quiesce队列 admin quiesce_force_rsi; 使用admin quiesce_check检查
    c) 删除正在使用的复制分区 drop partition partition_name;
    d) 停掉相关的复制服务器(或是挂起路由) suspend route to replication_server;
    e) 迁移复制数据库以及RSSD数据库,服务器名称要和以前的一致,重新建立复制服务器的ASE用户,修改连接配置文件。
    f) 对RSSD数据库以及复制数据库的第二截断点归零
    use db_name
    go
    sp_stop_rep_agent db_name
    go
    dbcc settrunc(‘ltm’,’ignore’)
    go
    use RSSD_db_name
    go
    rs_zeroltm data_server,database
    go
    use db_name
    go
    dbcc settrunc(‘ltm’,’valid’)
    go
     
    g) 增加复制分区
    add partition partition_name on ‘device_name’ with size size;
    h) 重建队列
    Rebuild queues
    go
    Igore loss from data_server.database [to data_server.database|replication_server]
    go
    i) 恢复复制代理
    sp_start_rep_agent db_name;(ASE)
    2.建立默认错误处理类。

    1.察看运行状态 admin health; admin who; admin who_is_down; admin who_is_up; admin who,sqm; admin who ,sqt;
    2. 察看复制服务器配置 rs_config(ASE); rs_helpdb(ASE); rs_helperror(ASE); rs_helpdb(ASE); rs_helppub(ASE); rs_helppubsub(ASE); rs_helpsub(ASE); rs_helprep(ASE); rs_helprepdb(ASE); re_helpreptable(ASE); rs_helproute(ASE); admin disk_space(ASE);
    3. 恢复运行 resume connection to data_server.database [skip transaction|executetransaction] (恢复DSI进程); sp_configure ‘enable rep agent threads’,1(ASE); sp_config_rep_agent ‘enable’(ASE); sp_start_rep_agent db_name(ASE);
    4. 挂起运行 sp_configure ‘enable rep agent threads’,0(ASE); sp_config_rep_agent ‘disable’(ASE); sp_stop_rep_agent db_name(ASE);
    5 用户权限 create user user_name set password{ passwd|null}; grant sa to user_name; drop user user_name;

    故障处理
    1.队列阻塞。
    如果DSI线程DOWN掉的话,连续执行resume connection to data_server.database skip transactoin跳过阻塞事务,直至DSI线成能够正常工作。
    否则,监测队列是否正常。使用admin who,sqt;察看info 列此数值形如xxxxxxx:y,xxxxxxx即为此队列号,如果是负数,则说明此队列事务有问题,需要破置队列。y=1,代表是处队列,y=2,代表是入队列。(???不确定???)
    使用admin who,sqm;察看First Seg.block Last Seg.block 以及Next read,三个列的数值打效应为fast

    Oracle复制

    操作系统AS2.1,数据库 Oracle 9.2。使用企业管理器进行操作。

    建立两个数据库Ora_a,Ora_b。由Ora_a.中的用户AOra_b中复制数据。

     

    1.Ora_a:使用system用户登录。

    设置主体站点Ora_a,设置站点时,可以加入方案A。系统将创建repadmin用户。

     

    2.Ora_a:使用repadmin用户登录。

    创建主体组MGP,将需要复制的表加入到主体组中。(不能和已注册实体化组中已存在的组重名,否则创建会出错。怎么删掉啊?)

    3.Ora_b,使用system用户登录。

    创建实体化视图站点Ora_b。系统将在本地创建用户A,MVADMIN,它们的数据库链接以及一个共有数据库链接。

    4.  Ora_b,使用mvadmin用户

    新建实体化视图组,选用已调度中上一步建立的数据库链接,加入主体组MGP以及主体组中的要复制的对象A,创建一个刷新组FLUSHGROUP

    中间会出一个”selcet 1 into…”之类的错误,不用理会。

    5.  OK,插个数据试一下吧。如果不行看看刷新组。

    January, 2006

    Oracle DataGuard

    Oracle DataGuard的简明安装:

    1.     安装oracle服务器A使之运行为归档模式,指定不适用nologging并关闭。

    Alter system set log_archive_start=TRUE SCOPE=SPFILE;

    shutdown immediate;

    alter database archivelog;

    alter database forcelogging;

    alter database open;

    shutdown immediate;

     

    2.     将所有安装文件,数据文件复制到服务器B

    3.     Oracle服务器B上创建备份控制文件

    4.      start mount

    Alter database create standby controlfle as

    ‘/home/oracle/oradata/sid/sidstandby01.ctl;

    Alter database create standby controlfle as

    ‘/home/oracle/oradata/sid/sidstandby02.ctl;

    Alter database create standby controlfle as

    ‘/home/oracle/oradata/sid/sidstandby02.ctl;

    5.     修改Bspfile

    create pfile as spfile;

    将控制文件修改为备份控制文件:

    alter system set crontrolfile=” /home/oracle/oradata/sid/sidstandby01.ctl,

    /home/oracle/oradata/sid/sidstandby01.ctl, /home/oracle/oradata/sid/sidstandby01.ctl” scope=file;

    指定热备的归档日志的位置(此目录要存在)

    alter system set standby_archive_dest=”/home/oracle/oradata/sid/standbyarchive” scope=file;

    指定主,备服务器的服务名(A,B两服务器tnsnames.ora文件中都要配置对方服务名)

    alter system set fal_server=’A’ scope=file;

    alter system set fal_client=’B’ scope=file;

    自动管理备份归档

    alter system set standby_file_managerment=”auto” scope=file;

     

    6.     修改Aspfile

    alter system set log_archive_dest_2='SERVICE=B MANDATORY REOPEN=60'; scope=file;

    7.     关闭A,B重新启动:

    A:startup

    B:  alter database mount standby database;

    alter database recover managed standby database disconnect from session;

    改变备份模式

    最大性能:

    主库

    alter system set log_archive_dest_2='SERVICE=bl21 MANDATORY REOPEN=60' scope=both;

    alter database set standby database to maximize  performance;

     

    最大可用性:

    主库

    alter system set log_archive_dest_2='service=bl21  LGWR SYNC AFFIRM ' scope= both ;

    alter database mount exclusive;

    alter database set standby database to maximize availability;

     

    最大保护:

    此模式不支持逻辑备份,并且需要standby redo logfile

    主库

    alter system set log_archive_dest_2='SERVICE=bl21 LGWR SYNC AFFIRM' scope=both;

    alter database mount exclusive;

    alter database set standby to maximize protection;

     

    从库设置备用日志文件

    alter database add standby logfile '/home/oracle/oradata/ORCL/stredo01.log' size 100m;

     

    切换

    switch over

    将主备服务器的pfile文件重新配置:

    log_archive_dest_2

    STANDBY_ARCHIVE_DEST

    fal_server

    fal_client

    standby_file_management

    主服务器上运行:

    ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;

    主服务器按standby方式启动切换至备机

    原备机运行

    ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;

    关闭后按主机方式启动切换至主机

    Fail over

    ???参见switch over将备机切换为主机,主机重新安装为备机??

    其他操作

    切换日志

    alter system switch logfile;

    只读方式打开备机B

    alter database recover managed standby database cancel;

    alter database open read only;

    使用alter database recover managed standby database disconnect from session;可以恢复备用方式

    关闭备机B

    alter database recover managed standby database cancel;

    shutdown immediate;

    查看

    查看备份模式

    select DATABASE_ROLE,PROTECTION_MODE,PROTECTION_LEVEL from v$database;

     

     

    归档至备份机的日志:

    SELECT SEQUENCE#, to_char(FIRST_TIME,'YYYY-mm-dd hh24:mi:ss') ,to_char

    (NEXT_TIME,'hh24:mi:ss') FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

    SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

     

    参数详解

    log_archive_dest_2

    location/service 指定一个本地磁盘目录或远程服务,此参数必须放在最前面

    location: 对每个DataGuard配置,必须指定一个磁盘目录用来放归档日志,如:  location=’/home/oracle/oradata/sid/archive’

    service: 指定一个OracleNet服务,service=’SvrName’

     

    sync/async

    sync 如果是物理备份,则需要创建standby redo logs,逻辑备份不使用standby redo logs,最大保护,最大可用性使用该参数.低性能,高保护.使用lgwr ,sync,affirm

    async: 如果是物理备份,则需要创建standby redo logs,中性能,中保护.使用lgwr,async,noaffirm

    lgwr/arch:

    指定是lgwr还是archiver将在线日志写入远端

    lgwr: 实时传输在线日志,如果失败,自动转为arch

    arch:      默认值.使用arch传输日志,不需要standby redo logs.高性能,低保护.归档操作时传输?

    mandatory/optional

    online redo logsd的策略

    mandatory:本地使用mandatory ,强制

    optional:远端默认选项,可重写online redo logs

    affirm/noaffirm 确认归档日志是否成功写入磁盘

    affirm:同步写入磁盘,会影响主机性能

    noaffirm: 异步写入磁盘,

     

    delay/nodelay

    delay: 默认值,没有延迟

    ondelay: 默认30,延迟发送至备机,主机的错误不会立即应用于备机

     

    depend/nodepend 是否取决于其他目的机的成功

    reopen/noreopen

    reopen: 默认值,300,尝试lgwrarch

    noreopen:目标节点失败,则一直保持目标不可用

    September, 2005

    oracle常用脚本

    回滚表空间过大处理
     
    查看目前撤销表空间
    select segment_name,tablespace_name,status from dba_rollback_segs;
    创建撤销表空间
    CREATE UNDO  TABLESPACE  UNDOTBS  DATAFILE    '/home/oracle/oradata/sid/undotbs.dbf'  SIZE  20M 
    REUSE  AUTOEXTEND  ON  NEXT    5120K  MAXSIZE  UNLIMITED;
    ALTER SYSTEM SET undo_tablespace = UNDOTBS
     SCOPE=SPFILE;
    shutdown
    startup
    删除原撤销表空间
    drop tablespace undotbs1;
    删除操作原撤销表空间系统文件
    改变目前表空间大小
    ALTER DATABASE DATAFILE '/home/oracle/oradata/charge/undotbs.dbf' RESIZE 1000M

     

    在表空间中移动数据

    移动普通表
    select table_name,tablespace_name from user_tables;
    alter table tb_name move tablespace tbs_name;

    select 'alter table ',table_name,' move tablespace tbs_name;' from user_tables
    where table_name not in (select table_name from user_indexes where index_type='LOB');

    重建普通表的索引

    select index_name,tablespace_name from user_indexes;
    select index_name,table_name from user_indexes;
    alter index id_name rebuild tablespace tb_tim;

    select 'alter index ',index_name,'rebuild tablespace tb_mame' from user_indexes where table_name not in (select table_name from user_indexes where index_type='LOB');

     

    移动带lob字段的表
    select table_name,column_name from user_lobs;
    alter table tb_name move tablespace tbs_name lob(cl_name) store as (tablespace tbs_name);

    alter index id_name rebuild

    select 'alter table ',table_name,' move tablespace tbs_name lob(',column_name,')store as (tablespace tbs_name);' from user_lobs; 

    重建带lob字段表的普通索引

    select 'alter index ',index_name,'rebuild tablespace tb_mame;' from user_indexes
    where index_type='NORMAL' and table_name in
    (select table_name from user_indexes where index_type='LOB');

     

     

    September, 2005

    oracle的撤销表空间文件丢失

     

    1.     使用start mount启动,执行:

    2.     alter database datafile '\home\oracle\oradata\sid\undotbs.dbf' offline drop;

    通常使用alter database open就可以把数据库启动了,如果不行的话,执行以下步骤

    3.     create file=’\home\oracle\new.ora’ from spfile

     

    4.     在new.ora中加入隐藏参数

    _corrupted_rollback_segments = (_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)

     

    5.     使用startup restrict pfile='\home\oracle\new.ora';启动数据库

     

    6.     可以使用以下sql查看回滚段:

    select segment_name,tablespace_name,status from dba_rollback_segs;

    删除那些回滚段

    drop rollback segment _SYSSMU1$;

    。。

    drop rollback segment _SYSSMU10$;

     

    7.     新建一个回滚表空间

    CREATE UNDO  TABLESPACE  UNDOTBS  DATAFILE    '/home/oracle/oradata/sid/undotbs.dbf'  SIZE  100M  REUSE  AUTOEXTEND  ON  NEXT    5120K  MAXSIZE  UNLIMITED;

     

    8.     重新制定回滚段表空间

    ALTER  SYSTEM  SET undo_tablespace=UNDOTBS scope=both;

     现在把那个坏掉的回滚段删掉重启oracle,万事大吉了