免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1770 | 回复: 0
打印 上一主题 下一主题

oracle stream Step by Step [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-05 10:54 |只看该作者 |倒序浏览
环境设置:
set echo on;
ACCEPT dba_pwd_src PROMPT 'Enter Password of user "sys" to create Streams Admin at Source : '   
ACCEPT strm_pwd_src PROMPT 'Enter Password of Streams Admin "STRMADMIN" to be created at Source : '   
ACCEPT dba_pwd_dest PROMPT 'Enter Password of user "sys" to create Streams Admin at Destination : '   
ACCEPT strm_pwd_dest PROMPT 'Enter Password of Streams Admin "STRMADMIN" to be created at Destination : '  
connect "SYS"/&dba_pwd_src as SYSDBA;
alter user "STRMADMIN" identified by &strm_pwd_src;
grant DBA, IMP_FULL_DATABASE, EXP_FULL_DATABASE to  "STRMADMIN";
BEGIN
  DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(
    grantee => '"STRMADMIN"',
    grant_privileges => true);
END;
/
COMMIT;

connect  "STRMADMIN"/&strm_pwd_src;
CREATE DATABASE LINK RECOVER.GYIC.COM connect to  "STRMADMIN" identified by "STRMADMIN" using '  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 9.8.0.201)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = gydb.recover)
    )
  )';
  
  
BEGIN
  DBMS_STREAMS_ADM.SET_UP_QUEUE(
    queue_table => '"STREAMS_CAPTURE1_QT"',
    queue_name  => '"STREAMS_CAPTURE1_Q"',
    queue_user  => '"STRMADMIN"');
END;
/
COMMIT;

BEGIN
  DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
    schema_name        => '"GYIC"',
    streams_type       => 'capture',
    streams_name       => '"STREAMS_CAPTURE1"',
    queue_name         => '"STRMADMIN"."STREAMS_CAPTURE1_Q"',
    include_dml        => true,
    include_ddl        => false,
    include_tagged_lcr => false,
    inclusion_rule     => true);
END;
/

BEGIN
  DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES(
   schema_name            => '"GYIC"',
   streams_name           => '"STREAMS_PROPAGATION1"',
    source_queue_name      => '"STRMADMIN"."STREAMS_CAPTURE1_Q"',
    destination_queue_name => '"STRMADMIN"."STREAMS_APPLY1_Q"@RECOVER.GYIC.COM',
    include_dml            => true,
    include_ddl            => false,
    source_database        => 'GYDB.GYIC.COM',
    inclusion_rule         => true );
END;
/
COMMIT;

connect   "SYS"/&dba_pwd_dest@"(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=9.8.0.201)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=GYDB.RECOVER)(SERVER=DEDICATED)))" as SYSDBA;

alter user  "STRMADMIN" identified by &strm_pwd_dest;
grant DBA, IMP_FULL_DATABASE, EXP_FULL_DATABASE to "STRMADMIN";

BEGIN
  DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(
    grantee => '"STRMADMIN"',
    grant_privileges => true);
END;
/
COMMIT;

connect "STRMADMIN"/&strm_pwd_dest@"(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=9.8.0.201)(PORT=1521)))(CONNECT_DATA=(SID=RECOVER)(SERVER=DEDICATED)))";

CREATE DATABASE LINK GYDB.GYIC.COM connect to "STRMADMIN" identified by &strm_pwd_src using '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ed-olraclin50d)(PORT=1521)))(CONNECT_DATA=(SID=GYDB)(server=DEDICATED)))';
BEGIN
  DBMS_STREAMS_ADM.SET_UP_QUEUE(
    queue_table => '"STREAMS_APPLY1_QT"',
    queue_name  => '"STREAMS_APPLY1_Q"',
    queue_user  => '"STRMADMIN"');
END;
/
BEGIN
  DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
    schema_name        => '"GYIC"',
    streams_type       => 'apply',
    streams_name       => '"STREAMS_APPLY1"',
    queue_name         => '"STRMADMIN"."STREAMS_APPLY1_Q"',
    include_dml        => true,
    include_ddl        => false,
    include_tagged_lcr => false,
    inclusion_rule     => true);
END;
/

导入数据:

ACCEPT strm_pwd_src PROMPT 'Enter Password of Streams Admin "STRMADMIN" at Source : ' HIDE  
ACCEPT strm_pwd_dest PROMPT 'Enter Password of Streams Admin "STRMADMIN" at Destination : ' HIDE  
connect "STRMADMIN"/&strm_pwd_dest@"(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=9.8.0.201)(PORT=1521)))(CONNECT_DATA=(SID=RECOVER)(SERVER=DEDICATED)))";
set serverout on;
DECLARE
  handle1 number;
  ind number;
  percent_done number;
  job_state VARCHAR2(30);
  le ku$_LogEntry;
  js ku$_JobStatus;
  jd ku$_JobDesc;
  sts ku$_Status;
BEGIN   
  handle1 := DBMS_DATAPUMP.OPEN('IMPORT','SCHEMA', 'GYDB.GYIC.COM');
  DBMS_DATAPUMP.ADD_9.8.0.201(handle1, 'StreamImport_1240813852603.log', 'DATA_PUMP_DIR', '',  DBMS_DATAPUMP.KU$_9.8.0.201_TYPE_LOG_9.8.0.201);
  DBMS_DATAPUMP.SET_PARAMETER(handle1, 'FLASHBACK_SCN', 117319133);
   DBMS_DATAPUMP.METADATA_FILTER(handle1, 'SCHEMA_EXPR', 'IN (''GYIC'')');
  DBMS_DATAPUMP.SET_PARAMETER(handle1, 'INCLUDE_METADATA', 1);
  DBMS_DATAPUMP.START_JOB(handle1);  
  percent_done :=0;
  job_state := 'UNDEFINED';
  while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop
  dbms_datapump.get_status(handle1, dbms_datapump.ku$_status_job_error + dbms_datapump.ku$_status_job_status + dbms_datapump.ku$_status_wip,-1,job_state,sts);
  js := sts.job_status;
  if js.percent_done != percent_done
  then
     dbms_output.put_line('*** Job percent done = ' || to_char(js.percent_done));
     percent_done := js.percent_done;
  end if;
  if(bitand(sts.mask, dbms_datapump.ku$_status_wip) != 0)
  then
    le := sts.wip;
  else
     if(bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0)
     then
       le := sts.error;
     else
       le := null;
     end if;
  end if;
  if le is not null
  then
    ind := le.FIRST;
    while ind is not null loop
      dbms_output.put_line(le(ind).LogText);
      ind := le.NEXT(ind);
    end loop;
  end if;
  end loop;
  dbms_output.put_line('Job has completed');
  dbms_output.put_line('Final job state = ' || job_state);
  dbms_datapump.detach(handle1);
END;   
/、

启动服务:
ACCEPT strm_pwd_src PROMPT 'Enter Password of Streams Admin "STRMADMIN" at Source : ' HIDE  
ACCEPT strm_pwd_dest PROMPT 'Enter Password of Streams Admin "STRMADMIN" at Destination : ' HIDE  
connect "STRMADMIN"/&strm_pwd_dest@"(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=9.8.0.201)(PORT=1521)))(CONNECT_DATA=(SID=RECOVER)(SERVER=DEDICATED)))";
set serverout on;
BEGIN
DBMS_APPLY_ADM.SET_SCHEMA_INSTANTIATION_SCN(
    source_schema_name   => '"GYIC"',
   source_database_name => 'GYDB.GYIC.COM',
   instantiation_scn    => 117319133,
   recursive            => true);
END;
/
DECLARE
   v_started number;
BEGIN
SELECT DECODE(status, 'ENABLED', 1, 0) INTO v_started
FROM DBA_APPLY where apply_name = 'STREAMS_APPLY1';
if (v_started = 0) then
  DBMS_APPLY_ADM.START_APPLY(apply_name => '"STREAMS_APPLY1"');
end if;
END;
/
connect "STRMADMIN"/&strm_pwd_src;

set serverout on;
DECLARE
   v_started number;
BEGIN
SELECT DECODE(status, 'ENABLED', 1, 0) INTO v_started
FROM DBA_CAPTURE where CAPTURE_NAME = 'STREAMS_CAPTURE1';
if (v_started = 0) then
  DBMS_CAPTURE_ADM.START_CAPTURE(capture_name => '"STREAMS_CAPTURE1"');
end if;
END;
/
BEGIN
DBMS_OUTPUT.PUT_LINE('*** Progress Message ===> Started the capture process STREAMS_CAPTURE1 at source database GYDB and the apply process STREAMS_APPLY1 at the destination database successfully. ***');
END;
/
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP