Какво представлява системата за архивиране в реално време на 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.
-
Функция LEAST() в Oracle
-
Ако изявление в рамките на клауза Къде
-
Как да разбера дали база данни на Oracle е настроена за автоматично завършване?
-
Коригиране на грешка ORA-65096 при създаване на автоматизирани тестове в Django с помощта на Oracle
-
Текстът на Oracle се екранира с къдрави скоби и заместващи знаци