操作失误绝对不可以再次发生!20080818
自我介绍
切换风格
订阅我的Blog
博客日历
文章归档...
最新发表...
博客统计...
网站链接...
资源
===========================================================
逻辑数据库的管理
===========================================================

逻辑数据库的管理

一:逻辑数据库的角色切换

1,把数据库切换到逻辑备数据库的角色

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO LOGICAL STANDBY;

2 停止远程的归档操作

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER SCOPE=BOTH;

3 把其中的一个备库切换到主库的角色.

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

4 ,打开远程归档操作

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=BOTH;

5 ,在新的备库上创建到主数据库的连接

  1. 创建连接

SQL> EXECUTE DBMS_LOGSTDBY.GUARD_BYPASS_ON;

SQL> CREATE DATABASE LINK location1

2> CONNECT TO user-name IDENTIFIED BY password USING 'location1';

SQL> EXECUTE DBMS_LOGSTDBY.GUARD_BYPASS_OFF;

  1. 测试数据库连接.

SQL> SELECT * FROM DBA_LOGSTDBY_PARAMETERS@location1;

6 打开SQL应用在新的备库上.

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY NEW PRIMARY location1;

7 ,主库上做日杂归档操作,并测试角色切换成功

SQL> ALTER SYSTEM ARCHIVE LOG START;

SQL> ALTER SYSTEM SWITCH LOGFILE;

二:逻辑数据库的故障启动

如果DATA GUARD 的主数据库不能够启动 那么有必要把备库启动起来,暂时或者永久代替主库!

SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;

SQL> ALTER DATABASE ACTIVATE LOGICAL STANDBY DATABASE;

然后做数据库的恢复或者其他响应的操作

或者是角色转换如上!

三:归档日志手工注册

如果DATA GUARD 的主数据库的归档日志由于不确定不可以预测的原因使的归档日志不能够传到备库上!那么就需要手工添加注册到备库上!

  1. 确定丢失的归档日志

SQL> COLUMN FILE_NAME FORMAT a55;

SQL> SELECT THREAD#, SEQUENCE#, FILE_NAME FROM DBA_LOGSTDBY_LOG L

2> WHERE NEXT_CHANGE# NOT IN

3> (SELECT FIRST_CHANGE# FROM DBA_LOGSTDBY_LOG WHERE L.THREAD# = THREAD#)

4> ORDER BY THREAD#,SEQUENCE#;

THREAD# SEQUENCE# FILE_NAME

-- ---------- -----------------------------------------------

1 6 /disk1/oracle/dbs/log-1292880008_6.arc

1 10 /disk1/oracle/dbs/log-1292880008_10.arc

  1. 拷贝丢失的归档日志到备库上.

拷贝文件

  1. 注册不完整的归档日志

SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE

2> '/disk1/oracle/dbs/log-1292880008_7.arc';

Database altered.

SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE

2> '/disk1/oracle/dbs/log-1292880008_11.arc';

Database altered.

四:常用的查询语句

1, 查询数据库的角色

Select database_role from v$database;

2, 确定重做日志是否应用到备库上

Select applied_scn,newest_scn from dba_logstdby_progress;

3, 确认重做数据的注册

SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME, DICT_BEGIN, DICT_END FROM DBA_LOGSTDBY_LOG ORDER BY SEQUENCE#;

4, 确认重做数据的应用

             SELECT NAME, VALUE FROM V$LOGSTDBY_STATS WHERE NAME = 'coordinator state';
      5,     data guard 访问模式
select guard_status from v$database;

五:归档日志的管理

           data guard的具体的实际应用中,有大量的归档日志的产生,对他们也要进行合理的管理!

六:其他管理

1在逻辑备库上运行DDL语句
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
Database altered.
SQL> EXECUTE DBMS_LOGSTDBY.GUARD_BYPASS_ON;
PL/SQL procedure successfully completed.
SQL> ALTER TABLE SCOTT.EMP ADD CONSTRAINT EMPID UNIQUE (EMPNO);
Table altered.
SQL> EXECUTE DBMS_LOGSTDBY.GUARD_BYPASS_OFF;
PL/SQL procedure successfully completed.
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;
Database altered.
2:在逻辑数据库上添加数据文件
在主数据库上执行数据文件的添加或者修改的操作时候,如果备库上根本没有响应的路径或者没有符合的空间剩余,备库上的执行操作就会失败
SQL> select event,status_code,status from dba_logstdby_events;
SQL> EXECUTE DBMS_LOGSTDBY.GUARD_BYPASS_ON;
SQL> ALTER TABLESPACE t_table ADD DATAFILE 'dbs/t_db.f' SIZE 60M;
Tablespace altered.
SQL> EXECUTE DBMS_LOGSTDBY.GUARD_BYPASS_off;
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;
Database altered.

imlihj2007 发表于:2008.08.27 16:19 ::分类: ( oracle ) ::阅读:(16次) :: 评论 (0) :: 引用 (0)
===========================================================
Logical Standby Database的配置步骤.
===========================================================

Logical Standby Database的配置步骤.

一:首先要确认主数据库处于归档模式

Archive log list

如果是没有归档的话要做如下操作

Shutdown immediate

Startup mount

Alter database archivelog;

Alter system archive log start

Archive log list

Alter database open

后:将主数据库置为FORCE LOGGING模式.在主数据库创建之后做如下操作:

ALTER DATABASE FORCE LOGGING;

确认主数据库是归档的并定义好本地归档.如下:

SQL >ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=e:oracleoradataorclarchive MANDATORY' SCOPE=BOTH;(路径根据实际的生产环境来确定)

确认LOG_PARALLELISM初始化参数值

Logical Standby Database要求此参数的值为1,是个缺省值.如果查出来的参数值为1则不需要做修改,如果不是1值则要用ALTER SYSTEM SET命令做修改.具体操作如下:

SQL>SHOW PARAMETER LOG_PARALLELISM ------查看参数的当前值

SQL>ALTER SYSTEM SET LOG_PARALLELISM=1 SCOPE=BOTH;

修改完以后要关闭数据库并重新启动此参数才有效.

SQL>SHUTDOWN IMMEDIATE

SQL>STARTUP

三:确认支持的数据类型和表(略):

四:确认主数据库可以补足日志(Supplemental Logging)

SQL> SELECT SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE;

SUP SUP

--- ---

NO NO (NO值表示此时主数据库是不支持补足日志的)

使主数据库可以补足日志

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;(这条语句将有关由主数据修改的行唯一信息可以通过日志传到备用数据库中并做Log Apply)

SQL>ALTER SYSTEM ARCHIVE LOG CURRENT;

确认一下主数据库此时支持补足日志

SQL> SELECT SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE;

SUP SUP

--- ---

YES YES (YES值表示此时主数据库是支持补足日志的)

SUPPLEMENTAL_LOG_DATA_PK:支持补足日志,其信息是primary key

SUPPLEMENTAL_LOG_DATA_UI:支持补足日志,其信息是unique index

五:在主数据库创建一个交替的表空间.

并用DBMS_LOGMNR_D.SET_TABLESPACE将某些表放到这个表空间中.因为在逻辑备用数据库中有一些表是属于SYSSYSTEM用户的,而这些是放在表空间的.这些表可能在一段时间后记录猛增.为了使SYSTEM表空间不会被用满而导致数据库DOWN,建立这个交替的表空间来存放这些表.

SQL>CREATE TABLESPACE logmnrts DATAFILE '/disk1/oracle/dbs/logmnrts.dbf'

SIZE 25M AUTOEXTEND ON MAXSIZE 2048M

SEGMENT SPACE MANAGEMENT AUTO;(根据实际的生产环境具体修改)

SQL>EXECUTE DBMS_LOGMNR_D.SET_TABLESPACE('logmnrts');

(上面一步EXECUTE DBMS_LOGMNR_D.SET_TABLESPACE('logmnrts');可以在以后的维护中再做相应的维护)

六:创建逻辑备用数据库

确认主数据库的数据文件和日志文件(冷备数据库

在主数据库中通过查询V$DATAFILE获得数据文件的位置

SQL> select name from v$datafile;

关闭数据库:SQL>SHUTDOWN IMMEDIATE

将前面得到的数据文件拷贝到一个临时的位置 F:ORACLE

启动数据库到MOUNT状态下:SQL>STARTUP MOUNT

为逻辑备用数据库创建一个备份的控制文件:

ALTER DATABASE BACKUP CONTROLFILE TO

f:oraclebkcontrol.ora';

七: 将主数据库放在restricted session模式下

ALTER SYSTEM ENABLE RESTRICTED SESSION;

建立Logminer字典(Logical Standby Database在分解REDO LOGSQL语句时需要Logminer工具,而这个工具在使用之前需要建立Logminer字典):

SQL> ALTER DATABASE OPEN;

SQL> EXECUTE DBMS_LOGSTDBY.BUILD;

取消主数据库的restricted session模式使用户可以执行DMLDDL语句:

SQL> ALTER SYSTEM DISABLE RESTRICTED SESSION;

八:查看最近的归档日志(在后面的逻辑备用数据库的创建过程中需要用到)

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;(对当前日志做归档)

SQL> SELECT NAME FROM V$ARCHIVED_LOG

WHERE (SEQUENCE#=(SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG

WHERE DICTIONARY_BEGIN = 'YES' AND STANDBY_DEST= 'NO'));

NAME

-----------------------------------------------------------------

E:ORACLEORADATAORCLARCHIVE1_19.DBF

九:为备用数据库创建准备初始化参数:

SQL> CREATE PFILE='f:oracleinitstdby.ora' FROM SPFILE;

在备用数据库服务器修改初始化参数(刚拷贝过来的初始化参数文件)修改后的值大概如下:

在备用数据库一端创建一个新的实例.如下操作:

oradim –new –sid standby –startmode auto

在主数据配置qlnet.ora文件.配置完之后分别如下:

SQLNET.EXPIRE_TIME=2

db_name='bak'

log_archive_dest_1='LOCATION=E:oracleoradatabakarch MANDATORY'

standby_archive_dest='E:oracleoradatabakarch1'

log_archive_start=TRUE

lock_name_space=bak

这些的地方都是主要的地方!

在主数据库和备用数据库用lsnrctl startlsnrctl stop启动和关闭监听器.然后在主数据库用tnsping standby和在备用数据库用tnsping orcl试看两个库是否是通的.

用初始化参数文件启动数据库到MOUNT状态下.

SQL> STARTUP MOUNT PFILE= f:oracleadminstandbypfileinitstdby.ora;

十:在备用数据库打开DATA GUARD

SQL> ALTER DATABASE GUARD ALL;

SQL> ALTER DATABASE OPEN RESETLOGS;ALTER DATABASE OPEN

十一:使用DBNEWID(nid)工具来重设数据库名.

要先关闭数据库并把数据库启动为MOUNT状态:

SQL> SHUTDOWN IMMEDIATE;

SQL> STARTUP MOUNT PFILE= f:oracleinitstdby.ora;

DBNEWID工具,操作如下(这个是在命令行下操作):

nid TARGET=SYS/oracled@orcl DBNAME=standby

然后再关闭数据库:SQL>SHUTDOWN IMMEDIATE

改变初始化参数: db_name=standby

启动数据库为MOUNT状态:SQL>STARTUP MOUNT;

为备用数据库创建SERVER PARAMETER FILE:

SQL>CREATE SPFILE FROM PFILE= f:oracleinitstdby.ora;

关闭数据库然后用SPFILE重启动数据库:

SQL>SHUTDOWN IMMEDIATE

SQL>STARTUP MOUNT

SQL>ALTER DATABASE OPEN RESETLOGS;

十二:给备用数据库创建一个新的临时文件(属于临时表空间)

先查看备用库中是否有临时文件,如果没有就直接创建,如果有要删除重新创建.(因为从主库的冷备份拷贝过来的临时文件在备用库中是不能用的.所以得重建)相应操作如下:

SQL> SELECT * FROM V$TEMPFILE;-------查看是否有临时文件

no rows selected

SQL> ALTER DATABASE TEMPFILE 'tempfilename' DROP;------删除重建前的临时文件

SQL> SELECT TABLESPACE_NAME FROM DBA_TABLESPACES WHERE

2> CONTENTS ='TEMPORARY';--------查看临时文件所属的临时表空间名

TABLESPACE_NAME

--------------------------------

TEMP

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE

2> 'f:oraclestandbytemp01.dbf'

3> SIZE 40M REUSE;--------给这个临时表空间重建一个临时文件

十三:注册归档日志和启动SQL Apply Services

SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE

2> ' e:oracleoradataorclarc0004.001';------将最近的归档日志注册到Logical Standby Database.这里的e:oracleoradatastdarch ARCH1069826922_21.DBF是在前面得到的.

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY INITIAL;-----启动redo logs apply,用执行SQL语句的方式来apply redo logs.就是SQL Apply Services.到于INITIAL是第一次启动SQL Apply Services时要写的.后面的可以直接用如下操作

SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;----停止

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;----启动

十四:在主数据库配置远程归档.

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_3='SERVICE=payroll3' SCOPE=BOTH;

--------配置远程归档目录

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_3=ENABLE SCOPE=BOTH;

--------配置这个归档目录的状态为可用

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;----对当前日志进行归档,启动远程归档.

十五:测试!

查日志是否已经被注册到Logical Standby Database.连接到备用数据库并查询DBA_LOGSTDBY_LOG视图.

SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YY HH24:MI:SS';

Session altered.

SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME, DICT_BEGIN, DICT_END

FROM DBA_LOGSTDBY_LOG ORDER BY SEQUENCE#;

SEQUENCE# FIRST_TIME NEXT_TIME DIC DIC

---------- ------------------- ------------------- --- ---

22 23-11-04 14:00:17 23-11-04 14:26:58 NO NO

1 rows selected.

连接到主数据库并归档部分日志.

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

System altered.

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

System altered.

再查询一下DBA_LOGSTDBY_LOG视图.

SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YY HH24:MI:SS';

Session altered.

SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME, DICT_BEGIN, DICT_END

2 FROM DBA_LOGSTDBY_LOG ORDER BY SEQUENCE#;

SEQUENCE# FIRST_TIME NEXT_TIME DIC DIC

---------- ------------------- ------------------- --- ---

22 23-11-04 14:00:17 23-11-04 14:26:58 NO NO

23 23-11-04 14:26:58 23-11-04 14:33:33 NO NO

2 rows selected.

(可以看到多出来一个新的归档日志)

检查日志中的数据是否Apply到逻辑备用数据库中

在逻辑备用数据库中查询DBA_LOGSTDBY_STATS视图来检查日志中的数据是否正被正确地Appled.

SQL> COLUMN NAME FORMAT A30

SQL> COLUMN VALUE FORMAT A30

SQL> SELECT NAME, VALUE FROM V$LOGSTDBY_STATS WHERE NAME = 'coordinator state';

NAME VALUE

------------------------------ ------------------------------

coordinator state INITIALIZING

在上面的输出中,coordinator进程正在初始化,这表明Log Apply Service正准备Apply SQL.但是日志中的数据还没有开始被Applied到逻辑备用数据库中.

V$LOGSTDBY看当前的SQL Apply活动状态.连接到逻辑备用数据库中,查询V$LOGSTDBY视图.

SQL> COLUMN STATUS FORMAT A50

SQL> COLUMN TYPE FORMAT A12

SQL> SELECT TYPE, HIGH_SCN, STATUS FROM V$LOGSTDBY;

TYPE HIGH_SCN STATUS

------------ ---------- --------------------------------------------------

COORDINATOR ORA-16115: loading Log Miner dictionary data

READER ORA-16127: stalled waiting for additional transact

ions to be applied

imlihj2007 发表于:2008.08.26 16:42 ::分类: ( oracle ) ::阅读:(18次) :: 评论 (0) :: 引用 (0)

===========================================================
Oracle 高级复制配置步骤详细说明
===========================================================

首先,数据库要具备高级复制功能(用system身份登录数据库,查看v$option视图,如果其中Advanced replicationTRUE,则支持高级复制功能;否则不支持)

.数据库基本情况

数据库A 版本oracle 10.2.0.3 数据库名sid:shenzhen

数据库B 版本oracle 10.2.0.3 数据库名sid:beijing

主体定义站点:A shenzhen主体站点:B shenzhen:主体定义站点指配置复制工作的站点

本例涉及的用户. 复制管理员:repadmin 应用用户:cqm本例复制的对象:reptest 数据表 本例的先决条件:你需要设置好相应的参数,job_queue_processes需要大于0,global_name=true,并且建立相应的db link.

alter system set global_names=true scope=both;

.在两个数据库上分别创建应用用户CQM

CREATE USER CQM IDENTIFIED BY CQM DEFAULT TABLESPACE users TEMPORARY TABLESPACE TEMP;

GRANT DBA TO CQM;

.在两个数据库上分别创建复制管事员用户REPADMIN

--创建repadmin用户管理复制环境

CREATE USER REPADMIN IDENTIFIED BY REPADMIN;

ALTER USER REPADMIN DEFAULT TABLESPACE USERS;

ALTER USER REPADMIN TEMPORARY TABLESPACE TEMP;

GRANT connect, resource TO REPADMIN;

--授予repadmin用户权限可以管理当前站点中任何主体组

EXECUTE dbms_repcat_admin.grant_admin_any_schema('REPADMIN');

--授予repadmin用户权限可以为任何表创建snapshot logs

GRANT comment any table TO REPADMIN;

GRANT lock any table TO REPADMIN;

--指定repadmin用户为propagator,并授予执行任何procedure的权限

EXECUTE dbms_defer_sys.register_propagator('REPADMIN');

GRANT execute any procedure TO REPADMIN;

.更改两个数据库的全局名称

alter database rename global_name to beijing.TEST.COM.CN;

alter database rename global_name to shenzhen.TEST.COM.CN;

.在两个数据库上建立数据库链接

create public database link beijing.TEST.COM.CN connect to REPADMIN identified by REPADMIN using 'beijing';

create public database link shenzhen.TEST.COM.CN connect to REPADMIN identified by REPADMIN using 'shenzhen';

.在两个数据库的应用用户CQM下创建表

在数据库shenzhen上用户CQM下:注意,要进行复制的表必须有主键

CREATE TABLE TEST(ID NUMBER(10),TIMESTAMP DATE DEFAULT sysdate);
ALTER TABLE TEST ADD(CONSTRAINT TEST_PK PRIMARY KEY(ID));

在数据库beijing上用户CQM下:

CREATE TABLE TEST(ID NUMBER(10),TIMESTAMP DATE DEFAULT sysdate);
ALTER TABLE TEST ADD(CONSTRAINT TEST_PK PRIMARY KEY(ID));

.在主体定义站点开始操作(数据库A:shenzhen)

REPADMIN登录数据库shenzhen

创建复制组:

execute dbms_repcat.create_master_repgroup('rep_hh'); [多余的]
execute dbms_repcat.create_master_repgroup('repg');

在复制组里加入复制对象:

execute dbms_repcat.create_master_repobject(sname=>'cqm',oname=>'test',type=>'table',use_existing_object=>true,gname=>'repg',copy_rows=>false);

对复制对象产生复制支持:

execute dbms_repcat.generate_replication_support('cqm','test','table');

execute dbms_repcat.drop_master_repobject ('scott','dept','table');[取消同步]

添加主体复制节点:

execute dbms_repcat.add_master_database(gname=>'repg',master=>'beijing.test.com.cn',use_existing_objects=>true,copy_rows=>false, propagation_mode => 'asynchronous');

  **********************************************   参数说明:   gname 主复制组名   master 加入主复制节点的另一个数据库   use_existing_object true表示用主复制节点已经存在的数据库对象   copy_rows false表示第一次开始复制时不用和主复制节点保持一致   propagation_mode 同步地执行 synchronous(上边配置异步复制)  ***********************************************

在主体定义站点启动复制:

execute dbms_repcat.resume_master_activity('repg',true);

execute dbms_repcat.resume_master_activity('repg',false);

execute dbms_repcat.suspend_master_activity('repg')[停止复制]

.至此配置完成

附:

使用异步复制要运行以下的过程!

exec dbms_defer_sys.schedule_push (destination => 'beijing.test.com.cn',interval => 'sysdate + 1/1440',next_date => sysdate);

exec dbms_defer_sys.schedule_purge (next_date => sysdate,interval => 'sysdate + 1/1440',delay_seconds => 0,rollback_segment => '');

***********************************************

exec dbms_defer_sys.schedule_push (destination => 'shenzhen.test.com.cn',interval => 'sysdate + 1/1440',next_date => sysdate);

exec dbms_defer_sys.schedule_purge (next_date => sysdate,interval => 'sysdate + 1/1440',delay_seconds => 0,rollback_segment => '');

这种配置方式对网络的影响比较小!管理也比较简单


1)
模拟小数据量测试:OK
2)
模拟大数据量测试:OK
CREATE OR REPLACE procedure insert_into_test
as
i number;
m NUMBER;
n NUMBER;
BEGIN
n:=0;
FOR i IN 1..10000 LOOP
m:=i;
INSERT INTO test(id)VALUES (m);
n:=n+1;
IF n=1000 THEN
COMMIT;
n:=0;
END IF;
END LOOP;
COMMIT;
END;

添加复制对象的四个步骤!

execute dbms_repcat.suspend_master_activity('repg')

execute dbms_repcat.create_master_repobject(sname=>'cqm',oname=>'test1',type=>'table',use_existing_object=>true,gname=>'repg',copy_rows=>false);

execute dbms_repcat.generate_replication_support('cqm','test1','table');

execute dbms_repcat.resume_master_activity('repg',false)

execute dbms_repcat.resume_master_activity('repg',true)

附:

做完的时候开始插入数据有问题

SQL> insert into test(id) values(1);

insert into test(id) values(1)

*

ERROR at line 1:

ORA-04067: not executed, stored procedure "CQM.TEST$RP" does not exist

ORA-01085: preceding errors in deferred rpc to "CQM.TEST$RP.REP_INSERT"

ORA-02063: preceding 2 lines from BEIJING

后来就可以拉

1, 创建前数据要统一

2, 运行execute dbms_repcat.suspend_master_activity('repg')后源数据库的表不可以再进行数据的插入!

3, Job 可以停到 并不影响数据的复制(表怀疑与搞笑)

4, 现在是同样的操作系统同样的数据库版本

5, 以上是在同一操作系统下测试AIX5207

6, 高级复制如果目的站点有问题或者网络有问题!源站点的数据操作将会出错!

7, 如果数据不同步的情况下,对源站点的数据操作会产生ORA-01403: no data found的问题!

8, 以上是数据的传输方式为同步的,如果修改成异步的传输方式上边的问题将不会出现的!

9, 不可以使用truncate table 清理数据

常用问题解答:

Q如何计算延迟事务将占用多少的资源?
A
Deferred Transactions
Oracle forwards data replication information by propagating (that is, sending and executing) the RPCs that are generated by the internal triggers described previously. These RPCs are stored in the deferred transaction queue. In addition to containing the execution command for the internal procedure at the destination site, each RPC also contains the data to be replicated to the target site. Oracle uses distributed transaction protocols to protect global database integrity automatically and ensure data survivability.
Deferred Transaction Queue
This queue stores the transactions (for example, DML) that are bound for another destination in the master group. Oracle stores RPCs produced by the internal triggers in the deferred transaction queue of a site for later propagation. Oracle also records information about initiating transactions so that all RPCs from a transaction can be propagated and applied remotely as a transaction. Oracle's replication facility implements the deferred transaction queue using Oracle's advanced queuing mechanism.
上面是Oracle联机文档中对于延迟事务和延迟事务队列的描述。开始的时候一直以为延迟事务应该是存在Oracle的一个内存结构中,所以总是担心如果复制环境中的网络长时间出现问题,那么会不会导致延迟事务队列占用大量的内存而使数据库的其它操作变慢,或者说超出了延迟事务可以使用的内存大小而产生错误。因为上面提到延迟事务队列使用的是Oracle的高级队列(Advanced Queue)算法,所以又查找了高级队列的文档,发现多处提到Table这个词,所以忽然明白所谓延迟事务的队列应该是存储在磁盘上的某些表中,这样陡然就解决了心中很多疑问,首先事务多只是占用硬盘空间,其次要想计算事务占用的资源可以通过表的