| xyz's profile逍遥者寒号的小屋BlogLists | Help |
|
|
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. 2.alter database datafile '\home\oracle\oradata\sid\undotbs.dbf' offline drop; 3. create file=’\home\oracle\new.ora’ from spfile 4. 在new.ora中加入隐藏参数
drop rollback segment _SYSSMU10$; 7. 新建一个回滚表空间 8. 重新制定回滚段表空间 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.中的用户A向Ora_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 DataGuardOracle 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. 修改B的spfile 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. 修改A的spfile 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秒,尝试lgwr或arch 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 'alter table ',table_name,' move tablespace tbs_name;' from user_tables 重建普通表的索引 select index_name,tablespace_name from user_indexes; 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字段的表 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
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,万事大吉了 |
|
|