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.