Oracle
 sql >> база данни >  >> RDS >> Oracle

Потоци на Oracle Пример за репликация стъпка по стъпка

Какво представлява системата за архивиране в реално време на Oracle?

Репликацията на Oracle Streams е процесът, който позволява на схемата на база данни на Oracle да се репликира в друга база данни на Oracle, която може да бъде разположена на всяко място. Всеки път, когато се случи транзакция в основната база данни DML или DDL, тя ще се изпълни незабавно към целевата база данни, за да поддържа живо архивно копие. По-долу обяснявам и предоставям скриптове за Oracle Streams стъпка по стъпка пример за репликация.

Настройка на репликация на Oracle Streams

В тази публикация описвам стъпки за създаване на репликация на база данни на Oracle чрез функцията Oracle Streams, за база данни в готовност или база данни, която може да се използва за отчитане и анализиране или за всякакви други цели. Тази функция Oracle Streams се поддържа в Oracle 11g Enterprise Edition и 10gR2 и 9iR2. Oracle Streams вече не се поддържа в 12c; сега Oracle използва Oracle Golden Gate за тази функция. По-долу описах прости стъпки за създаване на репликация към друга база данни на Oracle, за всяка стъпка предоставям SQL скрипт, който можете да копирате и запишете като стъпка 1, стъпка 2 и т.н. , след това стартирайте скриптовете един по един, за да настроите репликацията. Но преди да стартирате скриптовете, променете стойностите на вашите стойности, които са в квадратни скоби [ ] и ги заменете с внимателно, като всички стойности в квадратни скоби имат значение пълните имена, така че променете съответно.

Важно! Създайте запис в tnsname.ora както за изходна, така и за целева база данни за всяка друга връзка.

Стъпка 1 Конфигуриране на целева или вторична база данни

СВЪРЖЕТЕ [TARGET_SYS_CONNECTION] КАТО SYSDBA; ПРОМЕНИ СИСТЕМЕН НАБОР AQ_TM_PROCESSES=3 SCOPE=ДВЕТЕ;променете системния набор global_names=TRUE обхват=ДВЕТЕ;променете системния набор job_queue_processes=6 scope=BOTH;променете системния набор streamizeter=1BOTH; undo_retention=3600 обхват=ДВЕТЕ; незабавно изключване; монтиране при стартиране; отворена база данни за промяна;

Стъпка 2 Конфигуриране на източник или основна база данни

СВЪРЗВАНЕ [SOURCE_SYS_CONNECTION1] КАТО SYSDBA; ПРОМЕНИ СИСТЕМЕН НАБОР AQ_TM_PROCESSES=3 SCOPE=ДВЕТЕ;променете системния набор global_names=TRUE обхват=ДВЕТЕ;променете системния набор job_queue_processes=6 обхват=BOTH;променете системния набор streamizes=SYSTEM scope=SYSTEM_po8 SMTP_OUT_SERVER='[MAIL_SERVER] [MAIL_PORT]' SCOPE=ДВЕТЕ;--- UNDO_RETENTION=86400променете системен набор undo_retention=3600 обхват=ДВЕТЕ;--- UNDO_MANAGEMENT=АВТОМАТИЗИРАНЕ НА Системен набор LOG_ARCHIVE_DESTARIN_1 LOG_ARCHIVE_DESTARIN_1 Задайте LOG_ARCHIVE_DEST_STATE_1=разрешете Scope=Spfile; незабавно изключване; монтиране при стартиране; променете архивния регистър на базата данни; отворете базата данни; Променете базата данни Добавяне на допълнителни регистрационни данни (първичен ключ, уникален, чужд ключ) колони; Промяна на принудително регистриране на базата данни; Промяна на текущия архивен дневник на системата;

Стъпка-3 Създайте пространство за таблици за база данни източник

свържете [source_sys_connection1] като sysdba;създайте пространство за таблици [logminer_ts_name]файл с данни '[logminer_datafile]'размер 100mreuse autoextend on maxsize unlimited;изпълнете dbms_logmnr_d.set_tablespace('[logminer_ts_name]);ta streamizetafile_name [logminer_ts_name]); автоматично удължаване на maxsize неограничено;

Стъпка 4 Създайте администраторски потребител на Oracle Streams за изходна база данни

свържете [source_sys_connection1] като sysdba;

създаване на потребител [source_stream_admin]  идентифициран от [source_stream_psw]  пространство за таблица по подразбиране [stream_ts_name]  временно временно пространство за таблица; -- 9 роли за [source_stream_admin]  предоставят ресурс на [source_stream_admin]; предоставяне на datapump_imp_full_database на [source_stream_admin]; предоставяне на imp_full_database на [source_stream_admin]; предоставяне на datapump_exp_full_database на [source_stream_admin]; предоставяне на exp_full_database на [source_stream_admin]; предоставяне на dba на [source_stream_admin]; предоставяне на свързване към [source_stream_admin]; дайте aq_administrator_role на [source_stream_admin]; предоставяне на избрана_каталожна_роля на [source_stream_admin]; alter user [source_stream_admin] ресурс по подразбиране на ролята, imp_full_database, exp_full_database, dba, connect, aq_administrator_role, select_catalog_role; -- 15 системни привилегии за [source_stream_admin]  beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_adm.alter_any_rule_set,  grantee      => '[source'dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_adm.alter_any_rule_set,  grantee      => '[source_stream_admin])> 'dequeue_any',  грантополучател      => '[source_stream_admin]',  admin_option => true);end;/  beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_admin]', admin_option => true);end;/  beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_any_adm. true);end;/  beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_adm.create_rule_obj,  грантополучател      => '[source_stream_admin]',  grant_option => adgrant_option => grant_stream table [unsource_end]; край; предоставяне на ограничена сесия на [source_stream_admin]; begitsys.dbms_rule_adm.grant_system_privilege (privilege => sys.dbms_rule_adm.execute_any_rule_set, grantee => '[source_stream_admin]', grant_option => true);> '[source_stream_admin]',  grant_option => true);end;/  предоставяне на създаване на сесия на [source_stream_admin]; beginsys.dbms_aqadm.grant_system_privilege (privilege => 'enqueue_any', grantee => '[source_stream_admin]', admin_option => true); край;/beginsys.dbms_rule_adm.grant_system_privilege [source_stream_admin]',  grant_option => true);end;/  beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_adm.create_any_rule,  grantee      => ad '[endtion_stream_ru]); .grant_system_privilege (privilege => sys.dbms_rule_adm.create_evaluation_context_obj, grantee => '[source_stream_admin]', grant_option => true); end;/beginsys.dbms_aqadm.grant_system_privilege ',  admin_option => true);end;/  beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_adm.create_rule_set_obj,  грантополучател      => true => '[source_stream_admin;]op =>, grant_admin; />/

Стъпка 5 Създаване на администратор на потоци за целевата база данни

свържете [target_sys_connection] като sysdba;

--- стартирайте като потребител на sys в потребителя targetcreate [target_stream_admin] , идентифициран от [target_stream_psw]; -- 9 роли за strmadmin  предоставят ресурс на [target_stream_admin]; предоставяне на datapump_imp_full_database на [target_stream_admin]; предоставяне на imp_full_database на [target_stream_admin]; предоставяне на datapump_exp_full_database на [target_stream_admin]; предоставяне на exp_full_database на [target_stream_admin]; предоставяне на dba на [target_stream_admin]; предоставяне на свързване към [target_stream_admin]; дайте aq_administrator_role на [target_stream_admin]; предоставяне на избрана_каталожна_роля на [target_stream_admin]; alter user [target_stream_admin] ресурс за роля по подразбиране, imp_full_database, exp_full_database, dba, connect, aq_administrator_role, select_catalog_role; -- 15 системни привилегии за [target_stream_admin]  beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_adm.alter_any_rule_set,  grantee =     => '[target_stream_rule_set,  grantee =     => '[target_stream_privile];      => '[target_stream_privile.];     => '[target_stream_privilege];      => '[target]d'_stream_ ); > 'dequeue_any',  грантополучател      => '[target_stream_admin]',  admin_option => true);end;/  beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_privilege    => sys.dbms_rule_, => sys.dbms_rule_, adgrant min target. true);end;/  beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_adm.create_rule_obj,  грантополучател      => '[target_stream_admin]',  grant_option/;  grant_option => stream_admin; предоставяне на ограничена сесия на [target_stream_admin]; begitsys.dbms_rule_adm.grant_system_privilege (privilege => sys.dbms_rule_adm.execute_any_rule_set, grantee => '[target_stream_admin]', grant_option => true);> '[target_stream_admin]',  grant_option => true);end;/  предоставяне на създаване на сесия на [target_stream_admin]; beginsys.dbms_aqadm.grant_system_privilege (privilege => 'enqueue_any', grantee => '[target_stream_admin]', admin_option => true); край;/beginsys.dbms_rule_adm.grant_system_privilege [target_stream_admin]',  grant_option => true);end;/  beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_adm.create_any_rule,  grantee =       => beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_adm.create_any_rule,  grantee =     => beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_adm.create_any_rule,  grantee =     => begins true]    => 'admin. .grant_system_privilege (privilege => sys.dbms_rule_adm.create_evaluation_context_obj, grantee => '[target_stream_admin]', grant_option => true); end;/beginsys.dbms_aqadm.grant_system_privilege ',  admin_option => true);end;/  beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_adm.create_rule_set_obj,  грантополучател      => '[target'_stream_admin_);

Стъпка 6 Създаване на връзка към база данни за изходна база данни

свържете [source_stream_connection]

--- връзка за целева база данни...създайте връзка към база данни [source_dblink] свържете се с [target_stream_admin], идентифицирана от [target_stream_psw], използвайки '[target_connect_string]';

Стъпка 7 Създаване на връзка към база данни за целева база данни

свържете [target_stream_connection]

създаване на връзка към базата данни [target_dblink] свържете се с [source_stream_admin], идентифициран от [source_stream_psw], използвайки '[source_connect_string]';

Стъпка-8 Създаване на директория Datapumb в целевата база данни

свържете [target_stream_connection]

създайте или заменете директория[target_datapump_dir] като '[target_dir_location]';

Стъпка-9 Създаване на процес на Capture в изходната база данни

изключване на ехото; ---accept strm_pwd_src prompt 'въведете парола за потоци admin "strmadmin" at source :' hide ---accept strm_pwd_dest prompt 'въведете парола за потоци admin "strmadmin" at destination :' hideconnect   [source_stream is reconnection_select declavin_reconnection]; от dba_rulesets, където owner ='[source_stream_admin]';започнете за i във vin цикъл започнете  dbms_rule_adm.drop_rule_set(    rule_set_name => '[source_stream_admin].'||i.ruleset_name,   =>_rules);   =>_rules); изключение   , когато други след това нулеви; край; end loop;end;/begin  dbms_streams_adm.set_up_queue(    queue_table => '"streams_capture_qt"',    queue_name  => '"streams_capture_q"',    queue_user_q"',    queue_user  "],    queue_user  "]; => '"[source_schema]"',   streams_name           => '"streams_propagation1"',    source_queue_name      => '"strmadmin"."streams_capture_q"',    destination_capture_q"',    destination_queue_q"',    destination_queue_q"',    destination_queue_q"',    destination_queue_q"',    destination_queue_q"',    destination_queue_q",    destination_queue_q"',    destination_queue_q"',    destination_queue_q"',    destination_queue_q"',   stream_queue_name] => Вярно, include_ddl => true, source_database => '[source_database]', inclusion_rule => true); end;/compat; begin dbms_streams_adm.add_schema_rules (schema_name => '"[source_schema]"', streams_type => 'qupure ', Streams_name =>' "streams_capture" ', queue_name =>' "[source_stream_admin]". n_rule     => true);end;/-- повторете по-горе 2 стъпки за всяка schemacommit; декларирайте курсора vin е    изберете table_name от dba_streams_unsupportedwhere owner ='[source_schema]';започнете c във vin цикъл dbms_streams_adm.add_schema =schema_table_ .'||c.table_name, streams_type => 'capture', streams_name => 'streams_capture', queue_name => '[source_stream_admin].streams_capture_q', include_dml => true, include_ddl => false, include_base, inclusion_ru> '[source_database]' );end loop;commit;end;/

Стъпка 10 Създаване на процес Apply в целевата база данни

свържете [target_stream_connection]

Започнете dbms_streams_adm.set_up_queue (queue_table => '"Streams_Apply_qt"', queue_name => '"Streams_Apply_q"', queue_user => '"[target_stream_admin]"'); завършвайте;/begin dbms_streams_adm.add_schema_rules; ] "', Streams_type =>' прилага ', streams_name =>'" Streams_Apply "', queue_name =>'" [target_stream_admin] ". inclusion_rule     => true);end;/commit;begin  dbms_apply_adm.set_parameter(    apply_name  => 'streams_apply',    параметър   => 'disable_on_error',    стойност       => 'n');ad m_apply 'n'); streams_apply',    параметър   => 'allow_duplicate_rows',    стойност       => 'y');end;/

Стъпка 11 Инстанциране на целева база данни

свържете [target_stream_connection]

задаване на изход на сървъра на; изпълняване на dbms_output.enable(50000); деклариране  номер handle1; инд. номер; процент_готово число; работа_състояние varchar2(30); le ku$_logentry; js ku$_jobstatus; jd ku$_jobdesc; sts ku$_status;begin  begin  изпълни незабавно 'drop user '||'[source_schema]'||' каскада'; изключение   когато други тогава     null; край; handle1 :=dbms_datapump.open('import','schema', '[target_dblink]'); dbms_datapump.add_file(handle1, 'streamimport_1349243553109.log', '[target_datapump_dir]', '',  dbms_datapump.ku$_file_type_log_file); dbms_datapump.metadata_filter(handle1, 'schema_expr', 'in (''[source_schema]'')'); --'in (''cdsl11'',''kra'')' за множество  dbms_datapump.set_parameter(handle1, 'include_metadata', 1); dbms_datapump.start_job(handle1); процент_готово :=0; job_state :='недефиниран'; while (job_state !='completed') и (job_state !='stopped') loop  dbms_datapump.get_status(handle1, dbms_datapump.ku$_status_job_error + dbms_datapump.ku$_status_job_status +1,ku$_status_job_status, dbms_status_job_status; js :=sts.job_status; ако js.percent_done !=percent_done  then     dbms_output.put_line('*** процент свършена работа =' || to_char(js.percent_done)); процент_готово :=js.percent_done; край ако; 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)     тогава       le :=sts.error; else       le :=null; край ако; край ако; ако le не е null  тогава    ind :=le.first; докато ind не е нулев цикъл      dbms_output.put_line(le(ind).logtext); ind :=le.next(ind); краен контур; край ако; краен контур; dbms_output.put_line('работата е завършена'); dbms_output.put_line('крайно състояние на заданието =' || job_state); dbms_datapump.detach (handle1); end;/connect [source_stream_connection] Създаване или заменете Trigger ddltrigger след създаване на басечен номер n номер; започнете, ако ora_dict_obj_type ='таблица' и ora_dict_obj_owner ='[source_schema]' тогава започнете да изберете 1 в n от DBA_Stream собственик ='[source_schema]' и table_name =ora_dict_obj_name; Ако n =1 тогава dbms_streams_adm.add_table_rules (table_name => '[source_schema].' || ora_dict_obj_name, streams_type => 'capture', streams_name => 'streams_capture', queue_name => [source_stream_admin]. Вярно, include_ddl => false, inclusion_rule => false, source_database => '[source_database]'); край ако; изключение         когато други         тогава            null; край; край ако;край;/

Стъпка-12 Стартиране на процеса на прилагане в базата данни arget

свържете [target_stream_connection]

задаване на сървъра на;-- получаване на инстанционен номерdeclare iscn номер; beginiScn:=dbms_flashback.get_system_change_number (); dbms_apply_adm.set_schema_instantiation_scn (source_schema_name => '"[source_schema]"', source_database_name => '[source_database]', insantiation_scn => iscn, recursive =true;;beginselect decode(status, 'enabled', 1, 0) в v_started от dba_apply, където apply_name ='streams_apply'; if (v_started =0) then  dbms_apply_adm.start_apply(apply_name => '"streams_apply"'); край ако;край;/

Стъпка 13 Стартиране на процеса на заснемане на източник

свържете [source_stream_connection]

задаване на сървъра на; деклариране   v_started номер;започнете избор на декодиране (status, 'enabled', 1, 0) в v_started от dba_capture, където capture_name ='streams_capture'; if (v_started =0) then  dbms_capture_adm.start_capture(capture_name => '"streams_capture"'); end if;end;/begindbms_output.put_line('*** съобщение за напредъка ===> стартира процеса на улавяне streams_capture в базата данни източник estock и процеса на прилагане streams_apply в базата данни местоназначение успешно. ***');end;/Вашият настройката вече е завършена, за да проверите дали вашата настройка на steams работи правилно или да не използвате следните команди, като влезете с идентификационни данни за администратор на потоци, които сте създали за изходната база данни.

Изберете * От V$STREAMS_CAPTURE;

Изберете * От DBA_CAPTURE;Изберете * От DBA_PROPAGATION;Изберете * От DBA_CAPTURE_PREPARED_TABLES;И за целева база данни използвайте следните заявки, като влезете с потребителски идентификационни данни на потоци в целевата база данни.

Изберете * От DBA_APPLY;

Изберете * От DBA_APPLY_CONFLICT_COLUMNS;Изберете * От DBA_APPLY_EXECUTE;Изберете * От DBA_APPLY_ERROR;Изберете * От DBA_APPLY_PROGRESS;Изберете * От DBA_APPLY_INSTANTIATED_OBJECTS;Изберете * От V$STREAMATION_ROM приложете целта на V$STREAMATION_в случай, ако искате да използвате PROCEI; следния скрипт:

свържете [target_stream_connection]

задайте serverout на; декларирайте   v_started номер;започнете да избирате декодиране(status, 'enabled', 1, 0) в v_started от dba_apply, където apply_name ='streams_apply'; if (v_started =1) then  dbms_apply_adm.stop_apply(apply_name => '"streams_apply"'); end if;end;/В случай, че искате да спрете процеса на заснемане на базата данни източник, използвайте следния процес:

свържете [source_stream_connection]

задайте serverout на; декларирайте   v_started номер;започнете да избирате декодиране(status, 'enabled', 1, 0) в v_started от dba_capture, където capture_name ='streams_capture'; if (v_started =0) then  dbms_capture_adm.start_capture(capture_name => '"streams_capture"'); end if;end;/begindbms_output.put_line('*** съобщение за напредъка ===> стартира процеса на заснемане streams_capture в базата данни източник estock и процеса на прилагане streams_apply в базата данни местоназначение успешно. ***');end;/

Ако не можете да модифицирате тези скриптове, тогава можете да закупите тази помощна програма, базирана на vb.net, проверете тази връзка Oracle Replication Software.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция LEAST() в Oracle

  2. Ако изявление в рамките на клауза Къде

  3. Как да разбера дали база данни на Oracle е настроена за автоматично завършване?

  4. Коригиране на грешка ORA-65096 при създаване на автоматизирани тестове в Django с помощта на Oracle

  5. Текстът на Oracle се екранира с къдрави скоби и заместващи знаци