User Tools

Site Tools


replicat10g

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
replicat10g [2016/10/21 09:12] – created z0hpvkreplicat10g [2025/03/08 22:24] (current) – external edit 127.0.0.1
Line 2: Line 2:
  
 ==== MailOnline Schema ==== ==== MailOnline Schema ====
-<code>EXTRACT EXTMOL01+<code>REPLICAT REPMOL01
 SETENV (NLS_LANG="ENGLISH_UNITED KINGDOM.WE8ISO8859P1") SETENV (NLS_LANG="ENGLISH_UNITED KINGDOM.WE8ISO8859P1")
-USERID ggate@andracaa, PASSWORD password +USERID ggate@molbb, PASSWORD password 
-TRANLOGOPTIONS DBLOGREADER +ASSUMETARGETDEFS 
-TRANLOGOPTIONS BUFSIZE 4096000 +DBOPTIONS SUPPRESSTRIGGERS 
-TRANLOGOPTIONS DBLOGREADERBUFSIZE 4096000 +DISCARDFILE ./dirrpt/discREPMOL.dsc, APPEND, MEGABYTES 100
-TRANLOGOPTIONS EXCLUDEUSER GGATE +
-DISCARDFILE ./dirrpt/discEXTMOL.txt, APPEND, MEGABYTES 100+
 DISCARDROLLOVER ON MONDAY DISCARDROLLOVER ON MONDAY
-WARNLONGTRANS 30m, CHECKINTERVAL 5m+DDL INCLUDE ALL 
 +DDLOPTIONS REPORT 
 +DDLERROR 955 DISCARD 
 +DDLERROR 1031 DISCARD 
 +DDLERROR 24344 DISCARD
 REPORTCOUNT EVERY 10 MINUTES, RATE REPORTCOUNT EVERY 10 MINUTES, RATE
 REPORTROLLOVER AT 00:00 ON MONDAY REPORTROLLOVER AT 00:00 ON MONDAY
-EXTTRAIL ./dirdat/source/ml+INCLUDE ./dirprm/macros/exceptions.inc
  
-NODYNAMICRESOLUTION+-- Exceptions logging removed from USER_TRANSFER_ITEMS 
 +-- This is due to a Cascade Delete foreign key which was filling  
 +-- EXCEPTIONS table up with "ORA-01403: no data found" messages 
 +MAP MAILONLINE.USER_TRANSFER_ITEM, TARGET MAILONLINE.USER_TRANSFER_ITEM, 
 +      COMPARECOLS (ON DELETE KEY), 
 +   RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, DISCARD)), 
 +   RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, DISCARD));
  
-TABLE MAILONLINE.PARSED_ARTICLES+MAP MAILONLINE.ARTICLES, TARGET MAILONLINE.ARTICLES
-      GETBEFORECOLS (ON UPDATE ALLEXCLUDING (ARTICLE_TEXT));+       COMPARECOLS (ON UPDATE ALLEXCLUDING (ARTICLE_TEXT)), 
 +    RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, USEMAX (MODIFIED_DATE))), 
 +    RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, OVERWRITE)); 
 +MAP MAILONLINE.ARTICLES, TARGET GGATE.EXCEPTIONS, 
 +    EXCEPTIONSONLY, INSERTALLRECORDS, COLMAP (#exceptioncols());
  
-TABLE MAILONLINE.ARTICLES+MAP MAILONLINE.PARSED_ARTICLES, TARGET MAILONLINE.PARSED_ARTICLES
-      GETBEFORECOLS (ON UPDATE ALLEXCLUDING (ARTICLE_TEXT));+      COMPARECOLS (ON UPDATE ALLEXCLUDING (ARTICLE_TEXT)), 
 +   RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, USEMAX (MODIFIED_DATE))), 
 +   RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, OVERWRITE)); 
 +MAP MAILONLINE.PARSED_ARTICLES, TARGET GGATE.EXCEPTIONS, 
 +   EXCEPTIONSONLY, INSERTALLRECORDS, COLMAP (#exceptioncols());
  
-TABLE MAILONLINE.MODULES+MAP MAILONLINE.CMS_SCRATCHPAD, TARGET MAILONLINE.CMS_SCRATCHPAD
-      GETBEFORECOLS (ON UPDATE ALLEXCLUDING (TEXT));+       COMPARECOLS (ON DELETE ALL), 
 +    RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, DISCARD)), 
 +    RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, DISCARD)); 
 +MAP MAILONLINE.CMS_SCRATCHPAD, TARGET GGATE.EXCEPTIONS, 
 +    EXCEPTIONSONLY, INSERTALLRECORDS, COLMAP (#exceptioncols());
  
-TABLE MAILONLINE.LINK_LIST_GROUP+MAP MAILONLINE.MODULES, TARGET MAILONLINE.MODULES
-      GETBEFORECOLS (ON UPDATE ALL);+       COMPARECOLS (ON UPDATE KEYINCLUDING (MODIFIED_DATE)), 
 +    RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, USEMAX (MODIFIED_DATE))), 
 +    RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, OVERWRITE)); 
 +MAP MAILONLINE.MODULES, TARGET GGATE.EXCEPTIONS, 
 +    EXCEPTIONSONLY, INSERTALLRECORDS, COLMAP (#exceptioncols());
  
-TABLE MAILONLINE.CMS_SCRATCHPAD+MAP MAILONLINE.VM_VIDEO, TARGET MAILONLINE.VM_VIDEO
-      GETBEFORECOLS (ON UPDATE ALLON DELETE ALL);+    COMPARECOLS (ON UPDATE KEYINCLUDING (MODIFIED_DATE)), 
 +    RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, USEMAX (MODIFIED_DATE))), 
 +    RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, OVERWRITE)); 
 +MAP MAILONLINE.VM_VIDEO, TARGET GGATE.EXCEPTIONS, 
 +    EXCEPTIONSONLY, INSERTALLRECORDS, COLMAP (#exceptioncols());
  
-TABLE MAILONLINE.VM_VIDEO+MAP MAILONLINE.QRTZ_SCHEDULER_STATE, TARGET MAILONLINE.QRTZ_SCHEDULER_STATE
-      GETBEFORECOLS (ON UPDATE ALL);+      COMPARECOLS (ON UPDATE ALL, ON DELETE ALL), 
 +    RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, OVERWRITE)), 
 +    RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, OVERWRITE)), 
 +    RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, DISCARD)), 
 +    RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, DISCARD)), 
 +    REPERROR (1, IGNORE); 
 +MAP MAILONLINE.QRTZ_SCHEDULER_STATE, TARGET GGATE.EXCEPTIONS, 
 +    EXCEPTIONSONLY, INSERTALLRECORDS, COLMAP (#exceptioncols());
  
-TABLE MAILONLINE.ASSET_PUBLISHER_LAST_RUN, KEYCOLS(ITEM_TYPE), +MAP MAILONLINE.ASSET_PUBLISHER_LAST_RUN, TARGET MAILONLINE.ASSET_PUBLISHER_LAST_RUN, 
-      GETBEFORECOLS (ON UPDATE ALL);+       KEYCOLS(ITEM_TYPE), 
 +    RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, USEMAX (LAST_RUN_DATE))); 
 +MAP MAILONLINE.ASSET_PUBLISHER_LAST_RUN, TARGET GGATE.EXCEPTIONS, 
 +    EXCEPTIONSONLY, INSERTALLRECORDS, COLMAP (#exceptioncols());
  
-TABLE MAILONLINE.QRTZ_TRIGGER_LISTENERS, GETBEFORECOLS (ON DELETE KEY);+MAP MAILONLINE.QRTZ_TRIGGER_LISTENERS, TARGET MAILONLINE.QRTZ_TRIGGER_LISTENERS, 
 +       COMPARECOLS (ON DELETE KEY), 
 +    RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, DISCARD)), 
 +    RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, DISCARD)); 
 +MAP MAILONLINE.QRTZ_TRIGGER_LISTENERS, TARGET GGATE.EXCEPTIONS, 
 +    EXCEPTIONSONLY, INSERTALLRECORDS, COLMAP (#exceptioncols());
  
-TABLE MAILONLINE.QRTZ_FIRED_TRIGGERS, GETBEFORECOLS (ON DELETE KEY);+MAP MAILONLINE.QRTZ_FIRED_TRIGGERS, TARGET MAILONLINE.QRTZ_FIRED_TRIGGERS, 
 +       COMPARECOLS (ON DELETE KEY), 
 +    RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, DISCARD)), 
 +    RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, DISCARD)); 
 +MAP MAILONLINE.QRTZ_FIRED_TRIGGERS, TARGET GGATE.EXCEPTIONS, 
 +    EXCEPTIONSONLY, INSERTALLRECORDS, COLMAP (#exceptioncols());
  
-TABLE MAILONLINE.QRTZ_SCHEDULER_STATE,  +MAP MAILONLINE.ARTICLES_VERSIONS, TARGET MAILONLINE.ARTICLES_VERSIONS
-      GETBEFORECOLS (ON UPDATE ALLON DELETE ALL);+       COMPARECOLS (ON UPDATE ALLEXCLUDING (ARTICLE_TEXTARTICLE_PARSED_TEXT)), 
 +    RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, USEMAX (MODIFIED_DATE))), 
 +    RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, OVERWRITE)); 
 +MAP MAILONLINE.ARTICLES_VERSIONS, TARGET GGATE.EXCEPTIONS, 
 +    EXCEPTIONSONLY, INSERTALLRECORDS, COLMAP (#exceptioncols());
  
-TABLE MAILONLINE.ARTICLES_VERSIONS, +MAPEXCLUDE MAILONLINE.MV_LATEST_ARTICLE_AUTHOR; 
-      GETBEFORECOLS (ON UPDATE ALLEXCLUDING (ARTICLE_TEXT, ARTICLE_PARSED_TEXT));+MAPEXCLUDE MAILONLINE.SYS_IMPORT_FULL_*;
  
-TABLE MAILONLINE.USER_TRANSFER_ITEMGETBEFORECOLS (ON DELETE KEY); +MAP MAILONLINE.*TARGET MAILONLINE.*;
- +
-TABLE MAILONLINE.RELATED_ARTICLES, +
-      GETBEFORECOLS (ON UPDATE ALL); +
- +
-DYNAMICRESOLUTION +
-IGNOREUPDATEBEFORES +
- +
-DDL INCLUDE ALL, EXCLUDE OBJTYPE 'USER' +
-DDLOPTIONS REPORT, IGNOREREPLICATES, GETAPPLOPS +
- +
-TABLEEXCLUDE MAILONLINE.MV_LATEST_ARTICLE_AUTHOR; +
-TABLE MAILONLINE.*;+
 </code> </code>
  
 ==== Reader Comments Schema ==== ==== Reader Comments Schema ====
-<code>EXTRACT EXTRDC01+<code>REPLICAT REPRDC01
 SETENV (NLS_LANG="ENGLISH_UNITED KINGDOM.WE8ISO8859P1") SETENV (NLS_LANG="ENGLISH_UNITED KINGDOM.WE8ISO8859P1")
-USERID ggate@andracaa, PASSWORD password +USERID ggate@molbb, PASSWORD password 
-TRANLOGOPTIONS DBLOGREADER +DBOPTIONS SUPPRESSTRIGGERS 
-TRANLOGOPTIONS BUFSIZE 4096000 +ASSUMETARGETDEFS 
-TRANLOGOPTIONS DBLOGREADERBUFSIZE 4096000 +DISCARDFILE ./dirrpt/discREPRDC.dsc, APPEND, MEGABYTES 100
-TRANLOGOPTIONS EXCLUDEUSER GGATE +
-DISCARDFILE ./dirrpt/discEXTRDC.txt, APPEND, MEGABYTES 100+
 DISCARDROLLOVER ON MONDAY DISCARDROLLOVER ON MONDAY
-WARNLONGTRANS 30m, CHECKINTERVAL 5m 
 REPORTCOUNT EVERY 10 MINUTES, RATE REPORTCOUNT EVERY 10 MINUTES, RATE
 REPORTROLLOVER AT 00:00 ON MONDAY REPORTROLLOVER AT 00:00 ON MONDAY
-EXTTRAIL ./dirdat/source/rc+INCLUDE ./dirprm/macros/exceptions.inc
  
-NODYNAMICRESOLUTION +MAP RDRCOMMENTS.RC_COMMENT, TARGET RDRCOMMENTS.RC_COMMENT, 
-TABLE RDRCOMMENTS.RC_COMMENT GETBEFORECOLS (ON UPDATE ALL, ON DELETE KEY); +    COMPARECOLS (ON UPDATE KEYINCLUDING (LAST_UPDATED, VOTE_COUNT, VOTE_RATING), ON DELETE KEY), 
-TABLE RDRCOMMENTS.RC_USER    GETBEFORECOLS (ON UPDATE ALL); +    RESOLVECONFLICT (UPDATEROWEXISTS, (delta_res_method, USEDELTA, COLS (VOTE_COUNT, VOTE_RATING)), (DEFAULT, USEMAX (LAST_UPDATED))), 
-TABLE RDRCOMMENTS.RC_ASSET   GETBEFORECOLS (ON UPDATE ALL);+    RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, OVERWRITE)), 
 +    RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, DISCARD)), 
 +    RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, IGNORE)); 
 +MAP RDRCOMMENTS.RC_COMMENT, TARGET GGATE.EXCEPTIONS, 
 +    EXCEPTIONSONLY, INSERTALLRECORDS, COLMAP (#exceptioncols());
  
-DYNAMICRESOLUTION+MAP RDRCOMMENTS.RC_USER, TARGET RDRCOMMENTS.RC_USER, 
 +    COMPARECOLS (ON UPDATE KEYINCLUDING (LAST_UPDATED, VOTE_COUNT, VOTE_RATING)), 
 +    RESOLVECONFLICT (UPDATEROWEXISTS, (delta_res_method, USEDELTA, COLS (VOTE_COUNT, VOTE_RATING)), (DEFAULT, USEMAX (LAST_UPDATED))), 
 +    RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, OVERWRITE)); 
 +MAP RDRCOMMENTS.RC_USER, TARGET GGATE.EXCEPTIONS, 
 +    EXCEPTIONSONLY, INSERTALLRECORDS, COLMAP (#exceptioncols());
  
-TABLE RDRCOMMENTS.*;</code>+MAP RDRCOMMENTS.RC_ASSET, TARGET RDRCOMMENTS.RC_ASSET, 
 +    COMPARECOLS (ON UPDATE KEYINCLUDING (LAST_UPDATED, COMMENT_COUNT)), 
 +    RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, USEMAX (LAST_UPDATED))), 
 +    RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, OVERWRITE)); 
 +MAP RDRCOMMENTS.RC_ASSET, TARGET GGATE.EXCEPTIONS, 
 +    EXCEPTIONSONLY, INSERTALLRECORDS, COLMAP (#exceptioncols()); 
 + 
 +MAP RDRCOMMENTS.*, TARGET RDRCOMMENTS.*; 
 +</code>
  
 ==== Registration Schema ==== ==== Registration Schema ====
-<code>EXTRACT EXTREG01+<code>REPLICAT REPREG01
 SETENV (NLS_LANG="ENGLISH_UNITED KINGDOM.WE8ISO8859P1") SETENV (NLS_LANG="ENGLISH_UNITED KINGDOM.WE8ISO8859P1")
-USERID ggate@andracaa, PASSWORD password +USERID ggate@molbb, PASSWORD password 
-TRANLOGOPTIONS DBLOGREADER +DBOPTIONS SUPPRESSTRIGGERS 
-TRANLOGOPTIONS BUFSIZE 4096000 +ASSUMETARGETDEFS 
-TRANLOGOPTIONS DBLOGREADERBUFSIZE 4096000 +DISCARDFILE ./dirrpt/discREPREG.dsc, APPEND, MEGABYTES 100
-TRANLOGOPTIONS EXCLUDEUSER GGATE +
-DISCARDFILE ./dirrpt/discEXTREG.txt, APPEND, MEGABYTES 100+
 DISCARDROLLOVER ON MONDAY DISCARDROLLOVER ON MONDAY
-WARNLONGTRANS 30m, CHECKINTERVAL 5m 
 REPORTCOUNT EVERY 10 MINUTES, RATE REPORTCOUNT EVERY 10 MINUTES, RATE
 REPORTROLLOVER AT 00:00 ON MONDAY REPORTROLLOVER AT 00:00 ON MONDAY
-EXTTRAIL ./dirdat/source/rg+INCLUDE ./dirprm/macros/exceptions.inc
  
-NODYNAMICRESOLUTION+MAP REGISTRATION.REGISTERED_USER, TARGET REGISTRATION.REGISTERED_USER, 
 +    COMPARECOLS (ON UPDATE KEYINCLUDING (UPDATED_DATE), ON DELETE KEY), 
 +    RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, USEMAX (UPDATED_DATE), DISCARD)), 
 +    RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, OVERWRITE)), 
 +    RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, DISCARD)); 
 +MAP REGISTRATION.REGISTERED_USER, TARGET GGATE.EXCEPTIONS, 
 +    EXCEPTIONSONLY, INSERTALLRECORDS, COLMAP (#exceptioncols());
  
-TABLE REGISTRATION.REGISTERED_USER GETBEFORECOLS (ON UPDATE ALLON DELETE KEY); +MAP REGISTRATION.*TARGET REGISTRATION.*;
- +
-DYNAMICRESOLUTION +
-TABLE REGISTRATION.*;+
 </code> </code>
  
 ==== Other Schemas ==== ==== Other Schemas ====
 Check the list of schemas below to ensure that there have been no new schemas created recently. Check the list of schemas below to ensure that there have been no new schemas created recently.
-<code>EXTRACT EXTOTH01+<code>REPLICAT REPOTH01
 SETENV (NLS_LANG="ENGLISH_UNITED KINGDOM.WE8ISO8859P1") SETENV (NLS_LANG="ENGLISH_UNITED KINGDOM.WE8ISO8859P1")
-USERID ggate@andracaa, PASSWORD password +USERID ggate@molbb, PASSWORD password 
-TRANLOGOPTIONS DBLOGREADER +ASSUMETARGETDEFS 
-TRANLOGOPTIONS BUFSIZE 4096000 +DBOPTIONS SUPPRESSTRIGGERS 
-TRANLOGOPTIONS DBLOGREADERBUFSIZE 4096000 +DISCARDFILE ./dirrpt/discREPOTH.dscAPPEND, MEGABYTES 100 
-TRANLOGOPTIONS EXCLUDEUSER GGATE +DISCARDROLLOVER ON MONDAY
-WARNLONGTRANS 30mCHECKINTERVAL 5m+
 REPORTCOUNT EVERY 10 MINUTES, RATE REPORTCOUNT EVERY 10 MINUTES, RATE
 REPORTROLLOVER AT 00:00 ON MONDAY REPORTROLLOVER AT 00:00 ON MONDAY
-DISCARDFILE ./dirrpt/discEXTOTH.txt, APPEND, MEGABYTES 100 
-DISCARDROLLOVER ON MONDAY 
-EXTTRAIL ./dirdat/source/ot 
  
-NODYNAMICRESOLUTION +MAP FBIAGENT.ARTICLE, TARGET FBIAGENT.ARTICLE, 
-TABLE FBIAGENT.ARTICLE, GETBEFORECOLS (ON UPDATE ALL);+    COMPARECOLS (ON UPDATE ALL), 
 +    RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, OVERWRITE));
  
-DYNAMICRESOLUTION +MAP ANALYTICS.*, TARGET ANALYTICS.*; 
-TABLE ANALYTICS.*; +MAP ANDCOMMUNITIES.*, TARGET ANDCOMMUNITIES.*; 
-TABLE ANDCOMMUNITIES.*; +MAP APTECO.*, TARGET APTECO.*; 
-TABLE APTECO.*; +MAP BOARDSMIG.*, TARGET BOARDSMIG.*; 
-TABLE BOARDSMIG.*; +MAP CLEARSPACE.*, TARGET CLEARSPACE.*; 
-TABLE CLEARSPACE.*; +MAP CSMIG.*, TARGET CSMIG.*; 
-TABLE CSMIG.*; +MAP EAGLEEYE.*, TARGET EAGLEEYE.*; 
-TABLE EAGLEEYE.*; +MAP FBIAGENT.*, TARGET FBIAGENT.*; 
-TABLE FBIAGENT.*; +MAP GATEKEEPER.*, TARGET GATEKEEPER.*; 
-TABLE GATEKEEPER.*; +MAP GATEKEEPERADMIN.*, TARGET GATEKEEPERADMIN.*; 
-TABLE GATEKEEPERADMIN.*; +MAP GKREAD.*, TARGET GKREAD.*; 
-TABLE GKREAD.*; +MAP JIVETILREAD.*, TARGET JIVETILREAD.*; 
-TABLE JIVETILREAD.*; +MAP JOBMANAGER.*, TARGET JOBMANAGER.*; 
-TABLE JOBMANAGER.*; +MAP LEGAL.*, TARGET LEGAL.*; 
-TABLE LEGAL.*; +MAP MAILREAD.*, TARGET MAILREAD.*; 
-TABLE MAILREAD.*; +MAP MOFEEDS.*, TARGET MOFEEDS.*; 
-TABLE MOFEEDS.*; +MAP MOLAPP.*, TARGET MOLAPP.*; 
-TABLE MOLAPP.*; +MAP MOLEM.*, TARGET MOLEM.*; 
-TABLE MOLEM.*; +MAP MOLSUPP.*, TARGET MOLSUPP.*; 
-TABLE MOLSUPP.*; +MAP MOUSER.*, TARGET MOUSER.*; 
-TABLE MOUSER.*; +MAP RCREAD.*, TARGET RCREAD.*; 
-TABLE RCREAD.*; +MAP RCUSER.*, TARGET RCUSER.*; 
-TABLE RCUSER.*; +MAP REGREAD.*, TARGET REGREAD.*; 
-TABLE REGREAD.*; +MAP SCHOOL.*, TARGET SCHOOL.*; 
-TABLE SCHOOL.*; +MAP TILDUMMY.*, TARGET TILDUMMY.*; 
-TABLE TILDUMMY.*; +MAP TIMBOARDS.*, TARGET TIMBOARDS.*; 
-TABLE TIMBOARDS.*; +MAP TIMDEBATE.*, TARGET TIMDEBATE.*; 
-TABLE TIMDEBATE.*; +MAP TRAVELMAIL.*, TARGET TRAVELMAIL.*; 
-TABLE TRAVELMAIL.*;</code>+</code>
replicat10g.1477041166.txt.gz · Last modified: 2025/03/08 22:23 (external edit)