...
Code Block | ||||
---|---|---|---|---|
| ||||
select * from REPOE.CARD_DETAILS where card_type='REPOE_TEST'; CARD_ID CUSTOMER_ID CARD_TYPE CARD_NUMBER EXPIRY_DATE I SECURITY_CODE ---------- ----------- ------------------------------ ----------- ------------------ - ------------- 750005 1287 REPOE_TEST 9102450385 22-JAN-15 Y 1000 |
Prepare sample schema to replicate
With NODDL option
With DDL option
Creation of duplicate rows (potential conflict):
Create duplicate using 1 row DML
insert into repl_dba_tablespaces (select * from repl_dba_tablespaces where tablespace_name='TEMP');
update repl_dba_tablespaces set tablespace_name='TEMP2' where tablespace_name='TEMP';
List conflict
Show, how the problematic query transformed
Create duplicate using more rows DML
How many conflicts were created (1 conflict for 1 row) = >large transactions are separated into single rows
Resolve conflict
DML operation with trigger / constraint DML - show cascade constraint problem
SwingBench can now be started to produce a transaction load and simulate an order-entry system to test the replication.
Note |
---|
Start a new terminal session on the source server, as oracle. |
- In the $HOME/replicate directory, execute the run_swingbench.bash script to start the charbench utility which is the character based version of SwingBench.
No Format |
---|
[oracle@source ~]$ cd $HOME/replicate
[oracle@source replicate]$ ./run_swingbench.bash |
The command that will be executed by the script is a very simple one... you can do this on the command line instead of running the script.
#/bin/bash
# -cs <connect_string>
# -u <schema_user>
# -p <schema_user_password>
# -uc <simulated_user_count>
# -min <min_transaction_think_time_in_milliseconds>
# -max <max_transaction_think_time_in_milliseconds>
# -rt <runtime_hh:mi>
# -a run automatically
# -v display run statistics
/u01/app/oracle/swingbench/bin/charbench -cs //source/XE -u repoe -p repoe -uc 10 -min 5 -max 200 -rt 0:10 -a -v
The output will be similar to the following and will run for 10 minutes. A total number of 10 users will be simulated.
No Format |
---|
Author : Dominic Giles
Version : 2.5.0.932
Results will be written to results.xml.
Time Users TPM TPS
8:39:02 PM 0 0 0
8:39:03 PM 0 0 0
8:39:04 PM 0 0 0
8:39:05 PM 2 0 0
8:39:06 PM 10 10 10
8:39:07 PM 10 23 13
<<output continues>> |
Tip |
---|
If you want to stop SwingBench before the 10 minutes is up, just hit Ctrl C in the terminal window where it's running to interrupt it. While the SwingBench is running - keep an eye on your dbvisit console (The dbvisit console should still be running. if not restart the dbvisit console on the source server - cd $HOME/dbvrep_XE and ./start-console.sh ) |
Note |
---|
It is easy to change the parameters of swingbench to change the load and the time that it runs. The parameters are:
All command line options are listed here |
3. Optional. Swingbench is highly configurable. The load on the system can be easily increased. In this example, the number of users is set to 40 and the min and max delay is shortened. As a result the TPS peaks at over 400 transactions per second.
Note |
---|
Your laptop has to be powerful enough to handle this load and a large number of archived redo logs will be generated that may fill up the disk space. |
No Format |
---|
/u01/app/oracle/swingbench/bin/charbench -cs //source/XE -u repoe -p repoe -uc 40 -min 5 -max 15 -rt 0:10 -a -v
Author : Dominic Giles
Version : 2.5.0.932
Results will be written to results.xml.
Time Users TPM TPS
20:53:05 [0/40] 0 0
20:53:06 [0/40] 0 0
20:53:07 [0/40] 0 0
20:53:08 [0/40] 0 0
20:53:10 [31/40] 0 0
20:53:13 [40/40] 440 440
20:53:14 [40/40] 478 38
20:53:18 [40/40] 913 435
20:53:19 [40/40] 967 54
20:53:22 [40/40] 1410 443
20:53:23 [40/40] 1446 36
20:53:25 [40/40] 1745 299
20:53:26 [40/40] 1885 140 |
Right, that should have given the replication something to do. Lets return to the Replication Console and see what's happening.In order to simulate conflict in replication, we have to create at least one row, that is precise clone of another row. This cannot be created on table, that has primary key defined. In RepAttack prepared testing environment, there are just two tables, that do not have primare keys defined:
REPOE.LOGON and REPOE.ORDERENTRY_METADATA. We will use the REPOE.LOGON table for duplicate creation. Run following insert on source database to create duplicity:
Code Block | ||||
---|---|---|---|---|
| ||||
REPOE@TTORCL_SRC> insert into repoe.logon select * from repoe.logon where logon_id=1000000;
1 row created.
REPOE@TTORCL_SRC> commit;
Commit complete.
|
Wait until the row gets replicated and confirm it also with dbvrep console.
Check, that the duplicated row also exists in the target database.
Code Block | ||||
---|---|---|---|---|
| ||||
REPOE@TTORCL_trg> select * from repoe.logon where logon_id =1000000 order by customer_id;
LOGON_ID CUSTOMER_ID LOGON_DATE
---------- ----------- ------------------
1000000 496840 31-MAR-06
1000000 496840 31-MAR-06 |
Create conflict
Using the duplicate row we prepared in previous chapter, we can now simulate conflict in replication.
On source run following update
Code Block | ||||
---|---|---|---|---|
| ||||
REPOE@TTORCL_SRC> update repoe.logon set logon_id=logon_id*100 where logon_id =1000000;
2 rows updated.
REPOE@TTORCL_SRC> commit;
Commit complete. |
Check in the console, that we have really created the conflict
Code Block | ||
---|---|---|
| ||
REPOE.LOGON: 33% Mine:3/3 Unrecov:0/0 Applied:1/1 Conflicts:1/1
Last:23/01/2015 04:05:29/RETRY:Command affected 2 row(s). |
update repl_dba_tablespaces set tablespace_name='TEMP2' where tablespace_name='TEMP';
List conflict
Show, how the problematic query transformed
Create duplicate using more rows DML
How many conflicts were created (1 conflict for 1 row) = >large transactions are separated into single rows
Resolve conflict
DML operation with trigger / constraint DML - show cascade constraint problem
Prepare sample schema to replicate
With NODDL option
With DDL option