sql >> Database teknologi >  >> RDS >> Oracle

Oracle Streams trin for trin replikeringseksempel

Hvad er Oracle real-time backup system?

Oracle Streams-replikering er den proces, der gør det muligt for Oracle-databaseskemaet at replikere til en anden Oracle-database, som kan lokaliseres til ethvert sted. Når der sker en transaktion i den primære database DML eller DDL, udføres den straks til måldatabasen for at vedligeholde en live sikkerhedskopi. Nedenfor forklarer og leverer jeg scripts til Oracle Streams trin for trin replikeringseksempel.

Oracle Streams-replikeringsopsætning

I dette indlæg beskriver jeg trin til at oprette en Oracle-databasereplikering gennem Oracle Streams-funktion, til standby-database eller database, som kan bruges til rapportering og analyseformål eller andre formål. Denne Oracle Streams-funktion understøttes i Oracle 11g Enterprise Edition og 10gR2 og 9iR2. Oracle Streams understøttes ikke længere i 12c; nu bruger Oracle Oracle Golden Gate til denne funktion. Jeg beskrev nedenfor enkle trin til at oprette en replikering til en anden Oracle-database, for hvert trin leverer jeg SQL-script, som du kan kopiere og gemme som trin-1, trin-2 og så videre , kør derefter scripts en efter en for at opsætte replikeringen. Men før du kører scripts, skal du ændre værdierne til dine værdier, som er i firkantede parenteser [ ] og erstatte dem med forsigtigt, alle værdier i firkantede parenteser betyder fulde navne, så skift derfor.

Vigtig! Opret en post i tnsname.ora for både kilde- og måldatabaser for hver anden forbindelse.

Trin 1 Konfiguration af mål eller sekundær database

TILSLUT [TARGET_SYS_CONNECTION] SOM SYSDBA;ALTER SYSTEM SET AQ_TM_PROCESSES=3 SCOPE=BOTH;ændre systemsæt global_names=TRUE scope=BOTH;ændre systemsæt job_queue_processes=6 scope=BOTH;ændre systemsæt streams_BOTH_Malter system=0pool_size=1; undo_retention=3600 scope=BEGGE; øjeblikkelig lukning; opstartsmontering; ændre database åben;

Trin 2 Konfiguration af kilde eller primær database

CONNECT [SOURCE_SYS_CONNECTION1] AS SYSDBA;ALTER SYSTEM SET AQ_TM_PROCESSES=3 SCOPE=BOTH;ændre systemsæt global_names=TRUE scope=BOTH;ændre systemsæt job_queue_processes=6 scope=BOTH;ændre systemsæt streams_pool_size=BOTHM_SÆT scope=BOTHM_SÆT; SMTP_OUT_SERVER='[MAIL_SERVER] [MAIL_PORT]' SCOPE=BOTH;--- UNDO_RETENTION=86400alter system set undo_retention=3600 scope=BOTH;--- UNDO_MANAGEMENT=AUTOAlter System Set LOG_ARCHIVE_DESTINCHIVE;System=Scope_DESTINCHIVE ='LOG_ARCHIVE_DESTINCHIVE; Indstil LOG_ARCHIVE_DEST_STATE_1=aktiver Scope=Sp-fil; øjeblikkelig lukning; opstartsmontering; ændre databasearkivlog; ændre database åben; Ændre database Tilføj supplerende logdata (Primærnøgle, Unik, Fremmednøgle) Kolonner; Ændring af databasetvingslogning; Ændring af systemarkivlog Aktuel;

Trin-3 Opret tabelplads til kildedatabase

tilslut [source_sys_connection1] som sysdba;opret tablespace [logminer_ts_name]datafil '[logminer_datafile]'size 100mreuse autoextend på maxsize unlimited;udfør dbms_logmnr_d.set_tablespace('[logminer_streame_datafil]0; autoextend på maxsize ubegrænset;

Trin-4 Opret Oracle Streams-administratorbruger til kildedatabase

tilslut [source_sys_connection1] som sysdba;

oprette bruger [source_stream_admin]  identificeret af [source_stream_psw]  standard tablespace [stream_ts_name]  midlertidig tablespace temp; -- 9 roller for [source_stream_admin] tildel ressource til [source_stream_admin]; giv datapump_imp_full_database til [source_stream_admin]; giv imp_full_database til [source_stream_admin]; giv datapump_exp_full_database til [source_stream_admin]; giv exp_full_database til [source_stream_admin]; giv dba til [source_stream_admin]; give forbindelse til [source_stream_admin]; tildel aq_administrator_role til [source_stream_admin]; tildel select_catalog_role til [source_stream_admin]; ændre bruger [source_stream_admin] standard rolleressource, imp_full_database, exp_full_database, dba, connect, aq_administrator_role, select_catalog_role; -- 15 systemprivilegier for [source_stream_admin]  beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_adm.alter_any_rule_set,  grantee      => '[source_stream_admin_]op.> 'dequeue_any',  grantee      => '[source_stream_admin]',  admin_option => true);end;/  beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_adm.ule_y_stream = grant_option = grant_option,  grant_option,  grant_option] true);end;/  beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_adm.create_rule_obj,  grantee      => '[source_stream_admin]',  grant_option => grant_admin [tablespace til at give] [tablespace til at give); giv begrænset session til [source_stream_admin]; Beginsys.dbms_rule_adm.grant_system_privilege (privilegium => sys.dbms_rule_adm.execute_any_rule_set, støttemodtager> '[source_stream_admin]',  grant_option => true);end;/  giv oprettelsessession til [source_stream_admin]; beginsys.dbms_aqadm.grant_system_privilege (  privilege    => 'enqueue_any',  grantee      => '[source_stream_admin]',  admin_option => true);end;/  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      => '_]'option_stream_ adm. .grant_system_privilege(  privilege    => sys.dbms_rule_adm.create_evaluation_context_obj,  grantee      => '[source_stream_admin]',  grant_option => true);end;/  beginsys.dbms_t_system_privilege ',  admin_option => true);end;/  beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_adm.create_rule_set_obj,  grantee      => '[source_stream_t_admin]',  grant> true_admin]', />/

Trin-5 Oprettelse af streams-administrator for måldatabasen

tilslut [target_sys_connection] som sysdba;

--- køres som sys-bruger hos targetcreate-brugeren [target_stream_admin]  identificeret af [target_stream_psw]; -- 9 roller for strmadmin tildel ressource til [target_stream_admin]; giv datapump_imp_full_database til [target_stream_admin]; giv imp_full_database til [target_stream_admin]; giv datapump_exp_full_database til [target_stream_admin]; giv exp_full_database til [target_stream_admin]; giv dba til [target_stream_admin]; give forbindelse til [target_stream_admin]; tildel aq_administrator_rolle til [target_stream_admin]; tildel select_catalog_role til [target_stream_admin]; ændre bruger [target_stream_admin] standard rolleressource, imp_full_database, exp_full_database, dba, connect, aq_administrator_role, select_catalog_role; -- 15 systemprivilegier til [target_stream_admin]  beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_adm.alter_any_rule_set,  grantee      => '[target_stream_admin] begynd_stream_admin_, qms begynd privilege_adm.> 'dequeue_any',  grantee      => '[target_stream_admin]',  admin_option => true);end;/  beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_adm. alter_an ad adm. alter_an ad adm. true);end;/  beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_adm.create_rule_obj,  grantee      => '[target_stream_admin]',  grant_option = grant_option = tablespace unlimited [tablespace unlimited];end/tar; giv begrænset session til [target_stream_admin]; Beginsys.dbms_rule_adm.grant_system_privilege (privilegium => sys.dbms_rule_adm.execute_any_rule_set, støttemodtager> '[target_stream_admin]',  grant_option => true);end;/  giv oprettelsessession til [target_stream_admin]; beginsys.dbms_aqadm.grant_system_privilege (  privilege    => 'enqueue_any',  grantee      => '[target_stream_admin]',  admin_option => true);end;/  beginsys.dbms_rule_adm.grant_system_privilege.bms_rule_adm.grant_system_privilege.b [target_stream_admin]',  grant_option => true);end;/  beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_adm.create_any_rule,  grantee      => '[target_min. .grant_system_privilege(  privilege    => sys.dbms_rule_adm.create_evaluation_context_obj,  grantee      => '[target_stream_admin]',  grant_option => true);end;/  beginsys.dbms_grane_aqadm.  ',  admin_option => true);end;/  beginsys.dbms_rule_adm.grant_system_privilege(  privilege    => sys.dbms_rule_adm.create_rule_set_obj,  grantee      => '[target_stream> true_admin]', 

Trin-6 Oprettelse af databaselink til kildedatabase

tilslut [source_stream_connection]

--- link til måldatabase...opret databaselink [source_dblink] opret forbindelse til [target_stream_admin] identificeret af [target_stream_psw] ved hjælp af '[target_connect_string]';

Trin-7 Oprettelse af databaselink til måldatabase

tilslut [target_stream_connection]

opret databaselink [target_dblink] opret forbindelse til [source_stream_admin] identificeret af [source_stream_psw] ved hjælp af '[source_connect_string]';

Trin-8 Oprettelse af Datapumb-katalog på måldatabase

tilslut [target_stream_connection]

opret eller erstat mappe[target_datapump_dir] som'[target_dir_location]';

Trin-9 Oprettelse af optagelsesproces i kildedatabasen

slå ekko fra; ---accept strm_pwd_src prompt 'indtast adgangskode til streams admin "strmadmin" ved kilden :' hide ---accept strm_pwd_dest prompt 'indtast adgangskode for streams admin "strmadmin" på destination :' hideconnect   [source_stream_connection]; erklær markøren vinet er fra dba_rulesets hvor ejer ='[source_stream_admin]';begynd for i in vin loop begin  dbms_rule_adm.drop_rule_set(    rule_set_name => '[source_stream_admin].'||i.ruleset_name,    delete_rules  => true); undtagelse    når andre derefter nuller; ende; end loop;end;/begin  dbms_streams_adm.set_up_queue(    queue_table => '"streams_capture_qt"',    queue_name  => '"streams_capture_q"',    queue_user  => '"[kilden_stream_admin."_propnavn => '"[source_schema]"',   streams_name           => '"streams_propagation1"',    source_queue_name      => '"strmadmin"."streams_capture_q"',   destination_queue_name => '"@strmadmin_kilde", qb" link] => true,    include_ddl            => true,    source_database        => '[kildedatabase]',    inclusion_rule           => true);end;/commit;begin  dbms_streams_adm.add_name   dbms_streams_adm.add_name    dbms_streams_adm.add_name    dbms_streams_adm.add_name ',    streams_name       => '"streams_capture"',    queue_name         => '"[source_stream_admin]"."streams_capture_q"',   inkluder_dml        => true,   inkluderer_dml ,   inkluderer _dl ,  inkluderer, inkluderer, inkluderer n_rule     => true);end;/-- gentag ovenstående 2 trin for hvert schemacommit;declare cursor vin is    select table_namefrom dba_streams_unsupportedwhere owner ='[source_schema]';beginfor c in vin loop dbms_streams_adm.add_table_source_rules]> 'table_source_ .'||c.table_name, streams_type => 'capture', streams_name => 'streams_capture', queue_name => '[source_stream_admin].streams_capture_q', include_dml => true, include_ddl => false, inclusion_rule =_> false, inclusion_rule =_>> '[kildedatabase]' );end loop;commit;end;/

Trin-10 Oprettelse af ansøgningsprocessen i måldatabasen

tilslut [target_stream_connection]

start  dbms_streams_adm.set_up_queue(    queue_table => '"streams_apply_qt"',    queue_name  => '"streams_apply_q"',    queue_user  => '"[target_stream_admin]"'_end; kildenavn skema begin d_ad; ]"',    streams_type       => 'anvend',    streams_name       => '"streams_apply"',    queue_name         => '"[target_stream_admin]"."streams_apply_q"',   inkluder l_d _ ,  inkluder d _ ,  inkluder r _ _ inclusion_rule     => true);end;/commit;begin  dbms_apply_adm.set_parameter(   apply_name  => 'streams_apply',    parameter   => 'disable_on_error',   værdi       => 'n'_);end;/_app name name streams_apply',    parameter   => 'allow_duplicate_rows',    value       => 'y');end;/

Trin-11 Instantiering af måldatabase

tilslut [target_stream_connection]

sæt serverout on;execute dbms_output.enable(50000);declare  handle1 number; ind nummer; procent_udført tal; job_state varchar2(30); le ku$_logentry; js ku$_jobstatus; jd ku$_jobdesc; sts ku$_status;begin  start  eksekver øjeblikkeligt 'slip bruger '||'[source_schema]'||' kaskade'; undtagelse   når andre derefter     null; ende; 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 (''[kildeskema]'')'); --'in (''cdsl11'',''kra'')' for flere dbms_datapump.set_parameter(handle1, 'include_metadata', 1); dbms_datapump.start_job(handle1); procent_færdig :=0; job_state :='udefineret'; 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)_stat; js :=sts.job_status; if js.percent_done !=percent_done  then     dbms_output.put_line('*** job percent done =' || to_char(js.percent_done)); procent_færdig :=js.percent_færdig; Afslut Hvis; if(bitand(sts.mask, dbms_datapump.ku$_status_wip) !=0)  så    le :=sts.wip; else     if(bitand(sts.mask,dbms_datapump.ku$_status_job_error) !=0)     så       le :=sts.error; andet       le :=null; Afslut Hvis; Afslut Hvis; hvis le ikke er null  så    ind :=le.first; mens ind ikke er null loop      dbms_output.put_line(le(ind).logtext); ind :=le.næste(ind); endeløkke; Afslut Hvis; endeløkke; dbms_output.put_line('job er fuldført'); dbms_output.put_line('final job state =' || job_state); dbms_datapump.detach (håndtag1); slut;/connect [source_stream_connection] Opret eller udskift trigger ddltrigger efter oprettelse på databasedeclare n nummer; start hvis ora_dict_obj_type ='tabel' og ora_dict_obj_owner ='[source_schema]' derefter begynder at vælge 1 til n fra dba_sream ejer ='[kildeskema]' og tabelnavn =ora_dict_obj_name; Hvis n =1, så dbms_streams_adm.add_table_rules (tabel_name => '[source_schema].' || ora_dict_obj_name, streams_type => 'capture', streams_name => 'streams_capture', kø_name => 'source_stream_admin Sandt, inkluderer_ddl => falsk, inklusion_rule => falsk, source_database => '[source_database]'); Afslut Hvis; undtagelse         når andre         så            null; ende; ende hvis;slut;/

Trin-12 Start af ansøgningsprocessen i arget-databasen

tilslut [target_stream_connection]

sæt serverout på;-- få instansieringsnummer erklære iscn-nummer; beginiscn :=dbms_flashback.get_system_change_number();dbms_apply_adm.set_schema_instantiation_scn(    source_schema_name   => '"[source_schema]"',source_database_name => '[kildedatabase]',instantiation _database]',instantiation_database]',instantiation_database]',instantiation _scn; start scn; e;beginselect decode(status, 'enabled', 1, 0) into v_started fra dba_apply hvor application_name ='streams_apply'; if (v_started =0) then  dbms_apply_adm.start_apply(apply_name => '"streams_apply"'); ende hvis;slut;/

Trin-13 Start af kildefangstproces

tilslut [source_stream_connection]

sæt serverout på;declare   v_started number;beginselect decode(status, 'enabled', 1, 0) into v_started fra dba_capture hvor capture_name ='streams_capture'; if (v_started =0) så  dbms_capture_adm.start_capture(capture_name => '"streams_capture"'); end if;end;/begindbms_output.put_line('*** progress message ===> startede opsamlingsprocessen streams_capture ved kildedatabasen estock og appliceringsprocessen streams_apply på destinationsdatabasen med succes. ***');end;/Your opsætningen er nu fuldført, for at kontrollere, at din steams-opsætning fungerer korrekt eller ikke bruge følgende kommandoer ved at logge på med streams-administratorlegitimationsoplysninger, du har oprettet til kildedatabasen.

Vælg * Fra V$STREAMS_CAPTURE;

Vælg * Fra DBA_CAPTURE;Vælg * Fra DBA_PROPAGATION;Vælg * Fra DBA_CAPTURE_PREPARED_TABLES;Og til måldatabasen skal du bruge følgende forespørgsler ved at logge på med streams brugeroplysninger på måldatabasen.

Vælg * Fra DBA_APPLY;

Vælg * Fra DBA_APPLY_CONFLICT_COLUMNS;Vælg * Fra DBA_APPLY_EXECUTE;Vælg * Fra DBA_APPLY_ERROR;Vælg * Fra DBA_APPLY_PROGRESS;Vælg * Fra DBA_APPLY_INSTANTIATED_OBJECTS;Vælg * Fra V$STREAMS_ følgende script:

tilslut [target_stream_connection]

sæt serverout på;declare   v_started number;beginselect decode(status, 'enabled', 1, 0) into v_started fra dba_apply hvor application_name ='streams_apply'; if (v_started =1) then  dbms_apply_adm.stop_apply(apply_name => '"streams_apply"'); end if;end;/I tilfælde af at du ønsker at stoppe kildedatabaseopsamlingsprocessen, brug følgende proces:

tilslut [source_stream_connection]

sæt serverout på;declare   v_started number;beginselect decode(status, 'enabled', 1, 0) into v_started fra dba_capture hvor capture_name ='streams_capture'; if (v_started =0) så  dbms_capture_adm.start_capture(capture_name => '"streams_capture"'); end if;end;/begindbms_output.put_line('*** fremskridtsmeddelelse ===> startede opsamlingsprocessen streams_capture ved kildedatabasen estock og appliceringsprocessen streams_apply på destinationsdatabasen med succes. ***');end;/

Hvis du ikke er i stand til at ændre disse scripts, kan du købe dette værktøj, baseret på vb.net, tjek dette link Oracle Replication Software.

  1. Bliv tændt af Apache Spark – Del 2

  2. Overvågning af sidelevetid i SQL Server

  3. Oracle DBA Mentor

  4. Smukke blokke af kedelplade