{"id":36322,"date":"2024-12-19T11:18:31","date_gmt":"2024-12-19T10:18:31","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=36322"},"modified":"2025-02-13T09:22:09","modified_gmt":"2025-02-13T08:22:09","slug":"oracle-database-replay-for-a-rac-environment","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/oracle-database-replay-for-a-rac-environment\/","title":{"rendered":"Oracle Database Replay for a RAC environment"},"content":{"rendered":"<p>The database Capture\/Replay feature of the Real Application Testing (RAT) suite enables you to capture the workload from a production database and replay it on a test or development environment. This allows for realistic testing of database changes, such as upgrades, patches, or hardware migrations.<\/p>\n<p>In this blog, we&#8217;ll explore how to accomplish this when both your production and test databases are configured in a two-node RAC environment.<\/p>\n<h3>Restrictions :<\/h3>\n<p>You should be aware that some workload operations are not supported, such as flashback queries and distributed transactions.<\/p>\n<p>In most cases, Database Replay refrains from capturing these operations, or does not replay them. However you should refer to the oracle documentation bellow for the full list of non-supported operations and related considerations :<\/p>\n<p><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/19\/ratug\/capturing-a-database-workload.html#GUID-4A1995F1-78F9-4080-8DFC-1E3EBCB3F4B8\" target=\"_blank\" rel=\"noopener\">Oracle Database Documentation<\/a><\/p>\n<h3>The Workload Capture<\/h3>\n<p>The capture procedure on a RAC database is the same as for a single instance database, you just need to run it on one of the instances, without adding an instance filter :<\/p>\n<p>The path you use to store the raw workload files must be defined as a database directory, and must be empty.<\/p>\n<div>\n<div id=\"highlighter_527055\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">SQL&gt; <\/code><code class=\"sql keyword\">CREATE<\/code> <code class=\"sql plain\">DIRECTORY capture_dir <\/code><code class=\"sql keyword\">AS<\/code> <code class=\"sql string\">'\/u90\/db_capture\/'<\/code><code class=\"sql plain\">;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>It is recommended, but NOT mandatory, to restart your database before the capture, so that all current processes are finished, and the capture would catch absolutely all the changes from the timestamp of its start.<\/p>\n<p>Let&#8217;s take for instance a 4 hours workload capture (14400 seconds) :<\/p>\n<div>\n<div id=\"highlighter_402135\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql keyword\">BEGIN<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql spaces\">\u00a0\u00a0<\/code><code class=\"sql plain\">DBMS_WORKLOAD_CAPTURE.start_capture (<\/code><code class=\"sql keyword\">name<\/code>\u00a0\u00a0\u00a0\u00a0 <code class=\"sql plain\">=&gt; <\/code><code class=\"sql string\">'capture_4h'<\/code><code class=\"sql plain\">, <\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">dir\u00a0\u00a0\u00a0\u00a0\u00a0 =&gt; <\/code><code class=\"sql string\">'CAPTURE_DIR'<\/code><code class=\"sql plain\">,<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">duration =&gt; 14400);<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql keyword\">END<\/code><code class=\"sql plain\">;<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"sql plain\">\/<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>This package will capture the workload on both RAC instances for 4 hours and will automatically stop. If you need to stop it earlier, you can do it manually using:<\/p>\n<div>\n<div id=\"highlighter_103958\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">SQL&gt;\u00a0 <\/code><code class=\"sql keyword\">exec<\/code> <code class=\"sql plain\">DBMS_WORKLOAD_CAPTURE.finish_capture;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>The capture process does not significantly impact performance (it adds about 3-5% CPU overhead). However, it may require substantial storage space. A common reason to stop the capture prematurely is running out of space in the designated directory.<\/p>\n<p>Oracle Support Note Doc ID 1920275.1 provides a method to estimate the space required. For a detailed explanation, please refer to the note:<\/p>\n<p><a href=\"https:\/\/support.oracle.com\/knowledge\/Oracle%20Database%20Products\/1920275_1.html\" target=\"_blank\" rel=\"noopener\">Doc ID 1920275.1<\/a><\/p>\n<p>The general formula for the space needed provided by this note is:<\/p>\n<div>\n<div id=\"highlighter_404758\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\u00a0<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">2 * Bytes received via SQL*Net <\/code><code class=\"sql keyword\">from<\/code> <code class=\"sql plain\">client (<\/code><code class=\"sql keyword\">as<\/code> <code class=\"sql plain\">seen <\/code><code class=\"sql color1\">in<\/code> <code class=\"sql plain\">AWR <\/code><code class=\"sql color1\">or<\/code> <code class=\"sql plain\">StatsPack).<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Alternatively, you can perform a short capture, such as for 10 minutes, and extrapolate the estimate based on the size captured during that period.<\/p>\n<p>At the end of the capture, you should generate an html summary, and export related AWR data, for that, you&#8217;ll need the ID of you capture :<\/p>\n<div>\n<div id=\"highlighter_190497\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql keyword\">SELECT<\/code> <code class=\"sql plain\">id, <\/code><code class=\"sql keyword\">name<\/code> <code class=\"sql keyword\">FROM<\/code> <code class=\"sql plain\">dba_workload_captures;<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql plain\">SQL&gt;<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">ID <\/code><code class=\"sql keyword\">NAME<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql comments\">---------- ------------------------------<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">11 capture_4h<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">2 test_capture_1<\/code><\/div>\n<div class=\"line number7 index6 alt2\">\u00a0<\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"sql plain\">SQL&gt;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>So the capture id in my case is : 11<\/p>\n<p>&#8211; Generating The html report (It is generated in the directory of the capture) :<\/p>\n<div>\n<div id=\"highlighter_729335\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">SQL&gt; <\/code><code class=\"sql keyword\">DECLARE<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql spaces\">\u00a0\u00a0<\/code><code class=\"sql plain\">l_report\u00a0 CLOB;<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql keyword\">BEGIN<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql spaces\">\u00a0\u00a0<\/code><code class=\"sql plain\">l_report := DBMS_WORKLOAD_CAPTURE.report(capture_id =&gt; 11,<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">format\u00a0\u00a0\u00a0\u00a0 =&gt; DBMS_WORKLOAD_CAPTURE.TYPE_HTML);<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"sql keyword\">END<\/code><code class=\"sql plain\">;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>&#8211; Exporting the AWR data (It generates a datapump dump file contaiting all awr data of the period of the capture) :<\/p>\n<div>\n<div id=\"highlighter_70474\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">SQL&gt; <\/code><code class=\"sql keyword\">exec<\/code> <code class=\"sql plain\">DBMS_WORKLOAD_CAPTURE.export_awr (capture_id =&gt; 11);<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>The Replay<\/h3>\n<p>To prepare the replay you need two things :<\/p>\n<p>&#8211; To copy all the files from the directory of the capture to the test system (As it is two nodes RAC it should be on a shared location).<\/p>\n<p>&#8211; Prepare a test database : The html report of the capture contains the SCN of the start, it&#8217;s best practice for instance to duplicate your database up to that specific SCN, in the test environment, before applying the changes you want to evaluate (for instance an upgrade, or parameters changes).<\/p>\n<p>Once your test database is ready, and the captured files are available on a shared location :<\/p>\n<p>&#8211; We create the directory of the replay :<\/p>\n<div>\n<div id=\"highlighter_450972\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">SQL&gt; <\/code><code class=\"sql keyword\">CREATE<\/code> <code class=\"sql color1\">OR<\/code> <code class=\"sql color2\">REPLACE<\/code> <code class=\"sql plain\">DIRECTORY replay_dir <\/code><code class=\"sql keyword\">AS<\/code> <code class=\"sql string\">'\/u90\/replay\/'<\/code><code class=\"sql plain\">;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>The captured raw files must be processed by the database, before the capture could be replayed, this step could take some time depending of the size of the workload raw files :<\/p>\n<div>\n<div id=\"highlighter_56392\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">SQL&gt; <\/code><code class=\"sql keyword\">exec<\/code> <code class=\"sql plain\">DBMS_WORKLOAD_REPLAY.process_capture(<\/code><code class=\"sql string\">'REPLAY_DIR'<\/code><code class=\"sql plain\">);<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Then we initiate the replay (just an initiation, the replay is not yet started) :<\/p>\n<div>\n<div id=\"highlighter_208571\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">SQL&gt; <\/code><code class=\"sql keyword\">exec<\/code> <code class=\"sql plain\">DBMS_WORKLOAD_REPLAY.initialize_replay(replay_name =&gt; <\/code><code class=\"sql string\">'replay_capture_4h'<\/code><code class=\"sql plain\">, replay_dir\u00a0 =&gt; <\/code><code class=\"sql string\">'REPLAY_DIR'<\/code><code class=\"sql plain\">);<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>This step generated an entry in the DBA_WORKLOAD_REPLAYS view, we must retrieve the associated id :<\/p>\n<div>\n<div id=\"highlighter_557435\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">SQL&gt; <\/code><code class=\"sql keyword\">select<\/code> <code class=\"sql plain\">id,status <\/code><code class=\"sql keyword\">from<\/code> <code class=\"sql plain\">dba_workload_replays;<\/code><\/div>\n<div class=\"line number2 index1 alt1\">\u00a0<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">ID STATUS<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql comments\">---------- ----------------------------------------<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">1 COMPLETED<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">11 COMPLETED<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">21 INITIALIZED<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>So, here, the ID of the replay is 21.<\/p>\n<p>Next step is to remap the workload connections. To be able to apply the replay on both instances, we must use a TNS entry to a scan host and scan service :<\/p>\n<div>\n<div id=\"highlighter_251963\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">SQL&gt; <\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql keyword\">set<\/code> <code class=\"sql plain\">linesize 250<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql keyword\">set<\/code> <code class=\"sql plain\">pages 9999<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql plain\">spool remap_connections.sql<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql keyword\">select<\/code> <code class=\"sql string\">'exec dbms_workload_replay.remap_connection ( connection_id =&gt; '<\/code><code class=\"sql plain\">||conn_id||<\/code><code class=\"sql string\">', replay_connection =&gt; '<\/code><code class=\"sql string\">'(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=a_scan_host)(PORT=your_port))(CONNECT_DATA=(SERVICE_NAME=a_scan_service)))'<\/code><code class=\"sql string\">');'<\/code> <code class=\"sql keyword\">from<\/code> <code class=\"sql plain\">dba_workload_connection_map <\/code><code class=\"sql keyword\">where<\/code> <code class=\"sql plain\">replay_id=21;<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"sql plain\">spool <\/code><code class=\"sql keyword\">off<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Then we clean and execute the script :<\/p>\n<div>\n<div id=\"highlighter_703164\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">sqlplus \/ <\/code><code class=\"sql keyword\">as<\/code> <code class=\"sql plain\">sysdba<br \/><\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql plain\">SQL&gt; <\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql plain\">@remap_connections.sql<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql plain\">\u2026\u2026\u2026\u2026\u2026\u2026\u2026<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql plain\">PL\/SQL <\/code><code class=\"sql keyword\">procedure<\/code> <code class=\"sql plain\">successfully completed.<\/code><\/div>\n<div class=\"line number6 index5 alt1\">\u00a0<\/div>\n<div class=\"line number7 index6 alt2\">\u00a0<\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"sql plain\">PL\/SQL <\/code><code class=\"sql keyword\">procedure<\/code> <code class=\"sql plain\">successfully completed.<\/code><\/div>\n<div class=\"line number9 index8 alt2\">\u00a0<\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"sql plain\">SQL&gt;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Next we prepare the replay :<\/p>\n<div>\n<div id=\"highlighter_324749\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">SQL&gt; <\/code><code class=\"sql keyword\">exec<\/code> <code class=\"sql plain\">DBMS_WORKLOAD_REPLAY.prepare_replay (synchronization =&gt; <\/code><code class=\"sql keyword\">TRUE<\/code><code class=\"sql plain\">);<\/code><\/div>\n<div class=\"line number2 index1 alt1\">\u00a0<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql plain\">PL\/SQL <\/code><code class=\"sql keyword\">procedure<\/code> <code class=\"sql plain\">successfully completed.<\/code><\/div>\n<div class=\"line number4 index3 alt1\">\u00a0<\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql plain\">SQL&gt;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>synchronization =&gt; TRUE : ensures that the replay sessions are synchronized, maintaining the order and dependency between transactions as they occurred during the workload capture.<\/p>\n<p>Checking the status of the replay :<\/p>\n<div>\n<div id=\"highlighter_655805\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">SQL&gt; <\/code><code class=\"sql keyword\">select<\/code> <code class=\"sql plain\">id,status <\/code><code class=\"sql keyword\">from<\/code> <code class=\"sql plain\">dba_workload_replays;<\/code><\/div>\n<div class=\"line number2 index1 alt1\">\u00a0<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">ID STATUS<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql comments\">---------- ----------------------------------------<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">1 COMPLETED<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">11 COMPLETED<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"sql spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"sql plain\">21 <\/code><code class=\"sql keyword\">PREPARE<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Next we need to calibrate the replay clients, we use the wrc program in calibrate mode. wrc is The Workload Replay Client tool, used to replay database workload captured by Oracle Database.<\/p>\n<p>The calibration mode purpose is to ensures that the workload replay environment has enough replay clients to handle the workload in the capture. After calibration, the wrc tool will output the minimum number of replay clients required.<\/p>\n<div>\n<div id=\"highlighter_193982\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<div class=\"line number23 index22 alt2\">23<\/div>\n<div class=\"line number24 index23 alt1\">24<\/div>\n<div class=\"line number25 index24 alt2\">25<\/div>\n<div class=\"line number26 index25 alt1\">26<\/div>\n<div class=\"line number27 index26 alt2\">27<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">[oracle@LinuxHost~]$ wrc mode=calibrate replaydir=\/u90\/replay<\/code><\/div>\n<div>\u00a0<\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql plain\">Workload Replay Client: Release 19.23.0.0.0 - Production <\/code><code class=\"sql keyword\">on<\/code> <code class=\"sql plain\">Wed <\/code><code class=\"sql keyword\">Dec<\/code> <code class=\"sql plain\">11 10:58:06 2024<\/code><\/div>\n<div class=\"line number3 index2 alt2\">\u00a0<\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql plain\">Copyright (c) 1982, 2019, Oracle <\/code><code class=\"sql color1\">and<\/code><code class=\"sql plain\">\/<\/code><code class=\"sql color1\">or<\/code> <code class=\"sql plain\">its affiliates.\u00a0 <\/code><code class=\"sql color1\">All<\/code> <code class=\"sql plain\">rights reserved.<\/code><\/div>\n<div class=\"line number5 index4 alt2\">\u00a0<\/div>\n<div class=\"line number6 index5 alt1\">\u00a0<\/div>\n<div class=\"line number7 index6 alt2\">\u00a0<\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"sql plain\">Workload Report<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"sql comments\">-----------------------<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"sql plain\">Recommendation:<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"sql plain\">Consider using <\/code><code class=\"sql keyword\">at<\/code> <code class=\"sql plain\">least 52 clients divided among 14 CPU(s)<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"sql plain\">You will need <\/code><code class=\"sql keyword\">at<\/code> <code class=\"sql plain\">least 152 MB <\/code><code class=\"sql keyword\">of<\/code> <code class=\"sql plain\">memory per client process.<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"sql plain\">If your machine(s) cannot match that number, consider using more clients.<\/code><\/div>\n<div class=\"line number14 index13 alt1\">\u00a0<\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"sql plain\">Workload Characteristics:<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"sql plain\">- <\/code><code class=\"sql keyword\">max<\/code> <code class=\"sql plain\">concurrency: 3984 sessions<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"sql plain\">- total number <\/code><code class=\"sql keyword\">of<\/code> <code class=\"sql plain\">sessions: 56136<\/code><\/div>\n<div class=\"line number18 index17 alt1\">\u00a0<\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"sql plain\">Assumptions:<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"sql plain\">- 100 concurrent sessions per client process<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"sql plain\">- 4 client processes per CPU<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"sql plain\">- 256 KB <\/code><code class=\"sql keyword\">of<\/code> <code class=\"sql plain\">memory cache per concurrent session<\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"sql plain\">- think <\/code><code class=\"sql keyword\">time<\/code> <code class=\"sql plain\">scale = 100<\/code><\/div>\n<div class=\"line number24 index23 alt1\"><code class=\"sql plain\">- <\/code><code class=\"sql keyword\">connect<\/code> <code class=\"sql keyword\">time<\/code> <code class=\"sql plain\">scale = 100<\/code><\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"sql plain\">- synchronization = <\/code><code class=\"sql keyword\">TRUE<\/code><\/div>\n<div class=\"line number26 index25 alt1\">\u00a0<\/div>\n<div class=\"line number27 index26 alt2\"><code class=\"sql plain\">[oracle@LinuxHost ~]$<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Based on this calibration, and after checking the cpu and memory available, I will use 56 clients (56 x 152 MB = 8.5G of minimal memory needed for the clients : Ok for me).<\/p>\n<p>And this means using 28 clients per node, as I want to balance the overhead on the two nodes.<\/p>\n<p>The command to start a single client is :<\/p>\n<div>\n<div id=\"highlighter_274525\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">[oracle@LinuxHost]$ wrc system\/<\/code><code class=\"sql keyword\">password<\/code><code class=\"sql plain\">@test mode=replay replaydir=\/u90\/replay<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>But I prepared a script to start 28 clients at once in background mode, for instance in the first node :<\/p>\n<div>\n<div id=\"highlighter_64721\" class=\"syntaxhighlighter  sh\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\u00a0<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sh plain\">[oracle@LinuxHost]$ <\/code><code class=\"sh functions\">cat<\/code> <code class=\"sh plain\">replay_node1.sh<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sh preprocessor bold\">#!\/bin\/bash<\/code><\/div>\n<div class=\"line number3 index2 alt2\">\u00a0<\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sh functions\">export<\/code> <code class=\"sh plain\">ORACLE_HOME=<\/code><code class=\"sh plain\">\/u01\/app\/oracle\/product\/19<\/code><code class=\"sh plain\">.0.0.0<\/code><code class=\"sh plain\">\/dbhome_1<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sh functions\">export<\/code> <code class=\"sh plain\">PATH=<\/code><code class=\"sh plain\">\/home\/oracle\/<\/code><code class=\"sh plain\">.<\/code><code class=\"sh functions\">local<\/code><code class=\"sh plain\">\/bin<\/code><code class=\"sh plain\">:<\/code><code class=\"sh plain\">\/home\/oracle\/bin<\/code><code class=\"sh plain\">:<\/code><code class=\"sh plain\">\/usr\/local\/bin<\/code><code class=\"sh plain\">:<\/code><code class=\"sh plain\">\/usr\/bin<\/code><code class=\"sh plain\">:<\/code><code class=\"sh plain\">\/usr\/local\/sbin<\/code><code class=\"sh plain\">:<\/code><code class=\"sh plain\">\/usr\/sbin<\/code><code class=\"sh plain\">:<\/code><code class=\"sh plain\">\/u01\/app\/oracle\/product\/19<\/code><code class=\"sh plain\">.0.0.0<\/code><code class=\"sh plain\">\/dbhome_1\/bin<\/code><\/div>\n<div class=\"line number6 index5 alt1\">\u00a0<\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"sh comments\"># Configuration<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"sh plain\">USER=<\/code><code class=\"sh string\">\"system\"<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"sh plain\">PASSWORD=<\/code><code class=\"sh string\">\"Oracle$\"<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"sh plain\">DB_CONNECT=<\/code><code class=\"sh string\">\"Instance1\"<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"sh plain\">MODE=<\/code><code class=\"sh string\">\"replay\"<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"sh plain\">REPLAY_DIR=<\/code><code class=\"sh string\">\"\/u90\/replay\"<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"sh plain\">LOG_DIR=<\/code><code class=\"sh string\">\".\/wrc_logs\"<\/code>\u00a0 <code class=\"sh comments\"># Directory to store log files<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"sh plain\">NUM_CLIENTS=28\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/code><code class=\"sh comments\"># Number of clients to start<\/code><\/div>\n<div class=\"line number15 index14 alt2\">\u00a0<\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"sh comments\"># Ensure the log directory exists<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"sh functions\">mkdir<\/code> <code class=\"sh plain\">-p $LOG_DIR<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"sh plain\"><br \/># Start WRC clients in a loop<br \/>for ((i=1; i&lt;=NUM_CLIENTS; i++))<br \/>do<br \/>nohup wrc ${USER}\/${PASSWORD}@${DB_CONNECT} mode=${MODE} replaydir=${REPLAY_DIR} &gt; ${LOG_DIR}\/wrc_client_$i.log 2&gt;&amp;1 &amp;<br \/>echo \"Started WRC client $i, log: ${LOG_DIR}\/wrc_client_$i.log\"<br \/>done<\/code><\/div>\n<div>\u00a0<\/div>\n<\/div>\n<div>\n<div class=\"line number1 index0 alt2\"><code class=\"sh functions\">echo<\/code> <code class=\"sh string\">\"All $NUM_CLIENTS clients started. Logs are in $LOG_DIR.\"<\/code><\/div>\n<div class=\"line number2 index1 alt1\">\u00a0<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sh plain\">[oracle@LinuxHost]<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<pre> <\/pre>\n<p>starting the clients on the first node :<\/p>\n<div>\n<div id=\"highlighter_399521\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<div class=\"line number23 index22 alt2\">23<\/div>\n<div class=\"line number24 index23 alt1\">24<\/div>\n<div class=\"line number25 index24 alt2\">25<\/div>\n<div class=\"line number26 index25 alt1\">26<\/div>\n<div class=\"line number27 index26 alt2\">27<\/div>\n<div class=\"line number28 index27 alt1\">28<\/div>\n<div class=\"line number29 index28 alt2\">29<\/div>\n<div class=\"line number30 index29 alt1\">30<\/div>\n<div class=\"line number31 index30 alt2\">31<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">[oracle@LinuxHost]$ .\/replay_node1.sh<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql plain\">Started WRC client 1, log: .\/wrc_logs\/wrc_client_1.log<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql plain\">Started WRC client 2, log: .\/wrc_logs\/wrc_client_2.log<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql plain\">Started WRC client 3, log: .\/wrc_logs\/wrc_client_3.log<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql plain\">Started WRC client 4, log: .\/wrc_logs\/wrc_client_4.log<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"sql plain\">Started WRC client 5, log: .\/wrc_logs\/wrc_client_5.log<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"sql plain\">Started WRC client 6, log: .\/wrc_logs\/wrc_client_6.log<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"sql plain\">Started WRC client 7, log: .\/wrc_logs\/wrc_client_7.log<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"sql plain\">Started WRC client 8, log: .\/wrc_logs\/wrc_client_8.log<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"sql plain\">Started WRC client 9, log: .\/wrc_logs\/wrc_client_9.log<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"sql plain\">Started WRC client 10, log: .\/wrc_logs\/wrc_client_10.log<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"sql plain\">Started WRC client 11, log: .\/wrc_logs\/wrc_client_11.log<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"sql plain\">Started WRC client 12, log: .\/wrc_logs\/wrc_client_12.log<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"sql plain\">Started WRC client 13, log: .\/wrc_logs\/wrc_client_13.log<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"sql plain\">Started WRC client 14, log: .\/wrc_logs\/wrc_client_14.log<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"sql plain\">Started WRC client 15, log: .\/wrc_logs\/wrc_client_15.log<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"sql plain\">Started WRC client 16, log: .\/wrc_logs\/wrc_client_16.log<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"sql plain\">Started WRC client 17, log: .\/wrc_logs\/wrc_client_17.log<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"sql plain\">Started WRC client 18, log: .\/wrc_logs\/wrc_client_18.log<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"sql plain\">Started WRC client 19, log: .\/wrc_logs\/wrc_client_19.log<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"sql plain\">Started WRC client 20, log: .\/wrc_logs\/wrc_client_20.log<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"sql plain\">Started WRC client 21, log: .\/wrc_logs\/wrc_client_21.log<\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"sql plain\">Started WRC client 22, log: .\/wrc_logs\/wrc_client_22.log<\/code><\/div>\n<div class=\"line number24 index23 alt1\"><code class=\"sql plain\">Started WRC client 23, log: .\/wrc_logs\/wrc_client_23.log<\/code><\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"sql plain\">Started WRC client 24, log: .\/wrc_logs\/wrc_client_24.log<\/code><\/div>\n<div class=\"line number26 index25 alt1\"><code class=\"sql plain\">Started WRC client 25, log: .\/wrc_logs\/wrc_client_25.log<\/code><\/div>\n<div class=\"line number27 index26 alt2\"><code class=\"sql plain\">Started WRC client 26, log: .\/wrc_logs\/wrc_client_26.log<\/code><\/div>\n<div class=\"line number28 index27 alt1\"><code class=\"sql plain\">Started WRC client 27, log: .\/wrc_logs\/wrc_client_27.log<\/code><\/div>\n<div class=\"line number29 index28 alt2\"><code class=\"sql plain\">Started WRC client 28, log: .\/wrc_logs\/wrc_client_28.log<\/code><\/div>\n<div class=\"line number30 index29 alt1\"><code class=\"sql color1\">All<\/code> <code class=\"sql plain\">28 clients started. Logs are <\/code><code class=\"sql color1\">in<\/code> <code class=\"sql plain\">.\/wrc_logs.<\/code><\/div>\n<div class=\"line number31 index30 alt2\"><code class=\"sql plain\">[oracle@LinuxHost]$<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>We do the same thing on the second node, we just need to change the DB_CONNECT variable in the script.<\/p>\n<p>Finally, we can start the replay :<\/p>\n<div>\n<div id=\"highlighter_674623\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql keyword\">BEGIN<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql spaces\">\u00a0\u00a0<\/code><code class=\"sql plain\">DBMS_WORKLOAD_REPLAY.start_replay;<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql keyword\">END<\/code><code class=\"sql plain\">;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql plain\">\/<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n<p>The replay is finally started, it can be monitored by :<br><br>&#8211; Querying the views : dba_workload_replays and v$workload_replay_thread.<br>&#8211; Checking the clients log files.<br><\/p>\n\n\n\n<p>Hope it helps !<br><br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The database Capture\/Replay feature of the Real Application Testing (RAT) suite enables you to capture the workload from a production database and replay it on a test or development environment. This allows for realistic testing of database changes, such as upgrades, patches, or hardware migrations. In this blog, we&#8217;ll explore how to accomplish this when [&hellip;]<\/p>\n","protected":false},"author":136,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[59],"tags":[],"type_dbi":[],"class_list":["post-36322","post","type-post","status-publish","format-standard","hentry","category-oracle"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Oracle Database Replay for a RAC environment - dbi Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/oracle-database-replay-for-a-rac-environment\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Oracle Database Replay for a RAC environment\" \/>\n<meta property=\"og:description\" content=\"The database Capture\/Replay feature of the Real Application Testing (RAT) suite enables you to capture the workload from a production database and replay it on a test or development environment. This allows for realistic testing of database changes, such as upgrades, patches, or hardware migrations. In this blog, we&#8217;ll explore how to accomplish this when [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/oracle-database-replay-for-a-rac-environment\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-12-19T10:18:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-13T08:22:09+00:00\" \/>\n<meta name=\"author\" content=\"Abdessamed El Ahmar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Abdessamed El Ahmar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-replay-for-a-rac-environment\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-replay-for-a-rac-environment\\\/\"},\"author\":{\"name\":\"Abdessamed El Ahmar\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/c7be6ff9bc9dd6391b89fd662430836d\"},\"headline\":\"Oracle Database Replay for a RAC environment\",\"datePublished\":\"2024-12-19T10:18:31+00:00\",\"dateModified\":\"2025-02-13T08:22:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-replay-for-a-rac-environment\\\/\"},\"wordCount\":895,\"commentCount\":0,\"articleSection\":[\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-replay-for-a-rac-environment\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-replay-for-a-rac-environment\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-replay-for-a-rac-environment\\\/\",\"name\":\"Oracle Database Replay for a RAC environment - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"datePublished\":\"2024-12-19T10:18:31+00:00\",\"dateModified\":\"2025-02-13T08:22:09+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/c7be6ff9bc9dd6391b89fd662430836d\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-replay-for-a-rac-environment\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-replay-for-a-rac-environment\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-replay-for-a-rac-environment\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Oracle Database Replay for a RAC environment\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/c7be6ff9bc9dd6391b89fd662430836d\",\"name\":\"Abdessamed El Ahmar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b1d8401c12bf025455088d30d11d0652bb7e78107524deda83c07540c685b26b?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b1d8401c12bf025455088d30d11d0652bb7e78107524deda83c07540c685b26b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b1d8401c12bf025455088d30d11d0652bb7e78107524deda83c07540c685b26b?s=96&d=mm&r=g\",\"caption\":\"Abdessamed El Ahmar\"},\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/abdessamedelahmar\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Oracle Database Replay for a RAC environment - dbi Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/oracle-database-replay-for-a-rac-environment\/","og_locale":"en_US","og_type":"article","og_title":"Oracle Database Replay for a RAC environment","og_description":"The database Capture\/Replay feature of the Real Application Testing (RAT) suite enables you to capture the workload from a production database and replay it on a test or development environment. This allows for realistic testing of database changes, such as upgrades, patches, or hardware migrations. In this blog, we&#8217;ll explore how to accomplish this when [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/oracle-database-replay-for-a-rac-environment\/","og_site_name":"dbi Blog","article_published_time":"2024-12-19T10:18:31+00:00","article_modified_time":"2025-02-13T08:22:09+00:00","author":"Abdessamed El Ahmar","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Abdessamed El Ahmar","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-database-replay-for-a-rac-environment\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-database-replay-for-a-rac-environment\/"},"author":{"name":"Abdessamed El Ahmar","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/c7be6ff9bc9dd6391b89fd662430836d"},"headline":"Oracle Database Replay for a RAC environment","datePublished":"2024-12-19T10:18:31+00:00","dateModified":"2025-02-13T08:22:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-database-replay-for-a-rac-environment\/"},"wordCount":895,"commentCount":0,"articleSection":["Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/oracle-database-replay-for-a-rac-environment\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-database-replay-for-a-rac-environment\/","url":"https:\/\/www.dbi-services.com\/blog\/oracle-database-replay-for-a-rac-environment\/","name":"Oracle Database Replay for a RAC environment - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2024-12-19T10:18:31+00:00","dateModified":"2025-02-13T08:22:09+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/c7be6ff9bc9dd6391b89fd662430836d"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-database-replay-for-a-rac-environment\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/oracle-database-replay-for-a-rac-environment\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-database-replay-for-a-rac-environment\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Oracle Database Replay for a RAC environment"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/c7be6ff9bc9dd6391b89fd662430836d","name":"Abdessamed El Ahmar","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/b1d8401c12bf025455088d30d11d0652bb7e78107524deda83c07540c685b26b?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/b1d8401c12bf025455088d30d11d0652bb7e78107524deda83c07540c685b26b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b1d8401c12bf025455088d30d11d0652bb7e78107524deda83c07540c685b26b?s=96&d=mm&r=g","caption":"Abdessamed El Ahmar"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/abdessamedelahmar\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/36322","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/136"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=36322"}],"version-history":[{"count":21,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/36322\/revisions"}],"predecessor-version":[{"id":36407,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/36322\/revisions\/36407"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=36322"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=36322"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=36322"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=36322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}