{"id":2154,"date":"2011-04-15T10:26:59","date_gmt":"2011-04-15T15:26:59","guid":{"rendered":"http:\/\/jianmingli.com\/wp\/?p=2154"},"modified":"2011-04-15T12:36:09","modified_gmt":"2011-04-15T17:36:09","slug":"goldengate-tutorial-standard-reporting-configuration","status":"publish","type":"post","link":"https:\/\/jianmingli.com\/wp\/?p=2154","title":{"rendered":"GoldenGate Tutorial: Standard Reporting Configuration"},"content":{"rendered":"<span id=\"Overview\"><h2>Overview<\/h2><\/span>\n<span id=\"When_to_Use\"><h3>When to Use<\/h3><\/span>\n<p>* Transaction load is consistent<br \/>\n* Transaction load is moderate and spread evenly among objects to be replicated<br \/>\n* <em>NO <\/em>tables that are<br \/>\n&#8211; subject to long running transactions<br \/>\n&#8211; large number of columns that change<br \/>\n&#8211; columns for which GoldenGate must fetch from the database (e.g. LOBs)<\/p>\n<span id=\"Setup_Overview\"><h3>Setup Overview<\/h3><\/span>\n<p>* Source DB -> Extract Process -> Network -> RMTTrail -> Replicat Process -> Target DB<br \/>\n* Both source and target databases are: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0<br \/>\n* Source DB resides on a Windows XP box<br \/>\n* Target DB resides on a Solaris 10 box<br \/>\n* GoldenGate version: Version 10.4.0.19 Build 002<\/p>\n<span id=\"Prepare_Databases\"><h2>Prepare Databases<\/h2><\/span>\n<p>* See <a href=\"?p=1553\">this post<\/a> on how to setup databases for GoldenGate replications.<\/p>\n<span id=\"Setup_Source_Box\"><h2>Setup Source Box<\/h2><\/span>\n<span id=\"Prepare_Test_User_and_Table\"><h3>Prepare Test User and Table<\/h3><\/span>\n<p>* Create test user in source db from dba account:<\/p>\n<pre lang=\"sql\">\r\n-- Create src user\r\nCREATE USER GG_SRC IDENTIFIED BY password;\r\n\r\ngrant connect,resource to GG_SRC;\r\ngrant select any dictionary, select any table to GG_SRC;\r\ngrant create table to GG_SRC;\r\ngrant flashback any table to GG_SRC;\r\n<\/pre>\n<p>* Login as GG_SRC user and create test table<\/p>\n<pre lang=\"sql\">\r\n-- Create src table\r\nCREATE TABLE GG_SRC.GG_TEST\r\n(\r\nID VARCHAR2(20) NOT NULL,\r\nNAME VARCHAR2(20)\r\n, CONSTRAINT GG_TEST_PK PRIMARY KEY\r\n(\r\nID\r\n)\r\nENABLE\r\n);\r\n<\/pre>\n<p>* Enable trandata for gg_test table:<br \/>\nFrom GGSCI:<\/p>\n<pre lang=\"txt\">\r\n-- Login source schema\r\nDBLOGIN USERID GG_SRC, PASSWORD password\r\n-- Enable trandata for gg_test\r\nADD TRANDATA gg_src.gg_test\r\n<\/pre>\n<span id=\"Generate_Source_Table_Definition_File\"><h3>Generate Source Table Definition File<\/h3><\/span>\n<p>* No need for source table definition if source and target tables are identical. Use ASSUMETARGETDEFS in replica parameter file instead.<br \/>\n* Create a parameter file named gg_test.prm in dirprm directory or invoke edit params gg_test command from GGSCI:<\/p>\n<pre lang=\"txt\">\r\n-- Specify definition file name\r\nDEFSFILE C:\\goldengate\\dirdef\\gg_test.def\r\nUSERID gg_src, PASSWORD password\r\nTABLE gg_src.*;\r\n<\/pre>\n<p>* Generate definition file <\/p>\n<pre lang=\"txt\">\r\n-- Run dos command from GoldenGate installation directory\r\ndefgen paramfile dirprm\/gg_test.prm\r\n-- gg_test.def generated in dirdef directory\r\n<\/pre>\n<p>* Copy generated definition file to target box.<\/p>\n<span id=\"Setup_Extract\"><h3>Setup Extract<\/h3><\/span>\n<p>* Add an extract group named e_stdrpt and assign it a remote trail. Note that remote trail refers to target machine&#8217;s path.<\/p>\n<pre lang=\"txt\">\r\nADD EXTRACT e_stdrpt, TRANLOG, BEGIN now\r\nADD RMTTRAIL \/opt\/oracle\/goldengate\/dirdat\/stdrpt\/tx, EXTRACT e_stdrpt, MEGABYTES 20\r\n<\/pre>\n<p>* Create or edit extract parameter file for e_stdrpt: dirprm\/e_stdrpt.prm<\/p>\n<pre lang=\"txt\">\r\n-- Identify the Extract group:\r\nEXTRACT e_stdrpt\r\n\r\n-- Specify database login information as needed for the database:\r\nSETENV (ORACLE_HOME = C:\/prog\/oracle\/product\/10.2.0\/db_1)\r\nSETENV (ORACLE_SID = orcl)\r\n\r\nUSERID GG_SRC, PASSWORD password\r\n\r\n-- Specify the name or IP address of the target system:\r\nRMTHOST calrissian, MGRPORT 7809\r\n\r\n-- Specify the remote trail on the target system:\r\nRMTTRAIL \/opt\/oracle\/goldengate\/dirdat\/stdrpt\/tx\r\n\r\n-- Specify tables to be captured:\r\nTABLE GG_SRC.GG_TEST;\r\n<\/pre>\n<p>* Create directory \/opt\/oracle\/goldengate\/dirdat\/stdrpt on target box<br \/>\n* Start e_stdrpt from GGSCI:<\/p>\n<pre lang=\"txt\">\r\nstart extract e_stdrpt\r\n<\/pre>\n<p>* Check that remote trail files are created in the target box.<\/p>\n<pre lang=\"bash\">\r\nbash-3.2$ ls -ltr \/opt\/oracle\/goldengate\/dirdat\/stdrpt\/\r\ntotal 10\r\n-rw-rw-rw-   1 oracle   dba         2487 Apr 14 19:56 tx000000\r\n<\/pre>\n<span id=\"Setup_Remote_Box\"><h2>Setup Remote Box<\/h2><\/span>\n<span id=\"Setup_Target_Database\"><h3>Setup Target Database<\/h3><\/span>\n<p>* Create test user in target db from a DBA account:<\/p>\n<pre lang=\"sql\">\r\n-- Create target user\r\nCREATE USER GG_TGT IDENTIFIED BY \"password\";\r\n \r\nGRANT connect,resource TO GG_TGT;\r\nGRANT SELECT any dictionary, SELECT any TABLE TO GG_TGT;\r\nGRANT CREATE TABLE TO GG_TGT;\r\nGRANT flashback any TABLE TO GG_TGT;\r\n<\/pre>\n<p>* Login as GG_TGT user and create test table to receive replication:<\/p>\n<pre lang=\"sql\">\r\n-- Create target table\r\nCREATE TABLE GG_TGT.GG_TEST\r\n(\r\nID VARCHAR2(20) NOT NULL,\r\nNAME VARCHAR2(20)\r\n, CONSTRAINT GG_TEST_PK PRIMARY KEY\r\n(\r\nID\r\n)\r\nENABLE\r\n);\r\n<\/pre>\n<span id=\"Setup_Remote_GoldenGate_Instance\"><h3>Setup Remote GoldenGate Instance<\/h3><\/span>\n<p>* Add PURGEOLDEXTRACTS to dirprm\/mgr.prm file<\/p>\n<pre lang=\"txt\">\r\nPORT 7809\r\n\r\nPURGEOLDEXTRACTS \/opt\/oracle\/goldengate\/dirdat\/stdrpt\/tx\r\n<\/pre>\n<span id=\"Setup_Replicat_Checkpoint_Table\"><h3>Setup Replicat Checkpoint Table<\/h3><\/span>\n<p>* Create a Replicat checkpoint table if not already done so:<br \/>\n* Add to GLOBALS file in the GoldenGate root directory<\/p>\n<pre lang=\"txt\">\r\nCHECKPOINTTABLE GG_TGT.GG_CHKPT\r\n<\/pre>\n<p>* Point ORACLE_SID env variable to correct instance:<\/p>\n<pre lang=\"bash\">\r\nexport ORACLE_SID=ggdb\r\n<\/pre>\n<p>* From GGSCI run:<\/p>\n<pre lang=\"txt\">\r\nDBLOGIN USERID GG_TGT, PASSWORD password\r\n\r\nADD CHECKPOINTTABLE\r\n<\/pre>\n<p>* Output from GGSCI<\/p>\n<pre lang=\"txt\">\r\nGGSCI () 1> DBLOGIN USERID GG_TGT, PASSWORD password\r\nSuccessfully logged into database.\r\n\r\nGGSCI () 2> ADD CHECKPOINTTABLE\r\n\r\nNo checkpoint table specified, using GLOBALS specification (GG_TGT.GG_CHKPT)...\r\n\r\nSuccessfully created checkpoint table GG_TGT.GG_CHKPT.\r\n<\/pre>\n<span id=\"Setup_Replica\"><h3>Setup Replica<\/h3><\/span>\n<p>* Add a Replicat group named r_stdprt and point to trail file as defined in e_stdrpot parameter file:<\/p>\n<pre lang=\"txt\">\r\nADD REPLICAT r_stdrpt, EXTTRAIL \/opt\/oracle\/goldengate\/dirdat\/stdrpt\/tx, BEGIN now\r\n<\/pre>\n<p>* Edit r_stdrpt parameter file<\/p>\n<pre lang=\"txt\">\r\n-- Identify the Replicat group:\r\nREPLICAT r_stdrpt\r\n\r\n-- State whether or not source and target definitions are identical:\r\n-- Use ASSUMETARGETDEFS if source and target tables are identical\r\n-- ASSUMETARGETDEFS \r\n\r\n-- Use SOURCEDEFS otherwise.Definition file was copied from source box\r\nSOURCEDEFS \/opt\/oracle\/goldengate\/dirdef\/gg_test.def \r\n\r\n-- Specify database login information as needed for the database:\r\nSETENV (ORACLE_HOME = \/opt\/oracle\/product\/10.2)\r\nSETENV (ORACLE_SID = ggdb)\r\n\r\nUSERID GG_TGT, PASSWORD password\r\n\r\n-- Specify error handling rules:\r\n-- REPERROR (DEFAULT, ABEND)\r\n-- REPERROR (-1, IGNORE)\r\n\r\n-- Specify discard file for troubleshooting\r\ndiscardfile .\/dirrpt\/stdrpt.dsc, append, megabytes 20\r\n\r\n-- Specify tables to be replicated\r\nMAP GG_SRC.GG_TEST, TARGET GG_TGT.GG_TEST;\r\n<\/pre>\n<p>* Start r_stdrpt from GGSCI command interface:<\/p>\n<pre lang=\"txt\">\r\nstart replicat r_stdrpt\r\n<\/pre>\n<span id=\"Test\"><h2>Test<\/h2><\/span>\n<span id=\"Insert_Data_to_Source_Table\"><h3>Insert Data to Source Table<\/h3><\/span>\n<pre lang=\"sql\">\r\ninsert into GG_SRC.gg_test values ('1','One');\r\ncommit;\r\nselect * from gg_test;\r\nID                   NAME\r\n--------------- --------------------\r\n1                    One\r\n<\/pre>\n<span id=\"Check_Data_in_Target_Table\"><h3>Check Data in Target Table<\/h3><\/span>\n<pre lang=\"sql\">\r\nselect * from GG_TGT.gg_test;\r\n-- You should see\r\nID                   NAME\r\n--------------- --------------------\r\n1                    One\r\n<\/pre>\n<span id=\"References\"><h2>References<\/h2><\/span>\n<p>* gg_wux_admin_v104.pdf page 39.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Overview When to Use * Transaction load is consistent * Transaction load is moderate and spread evenly among objects to be replicated * NO tables that are &#8211; subject to long running transactions &#8211; large number of columns that change &hellip; <a href=\"https:\/\/jianmingli.com\/wp\/?p=2154\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[88],"tags":[],"class_list":["post-2154","post","type-post","status-publish","format-standard","hentry","category-goldengate"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8cRUO-yK","_links":{"self":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2154","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2154"}],"version-history":[{"count":12,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2154\/revisions"}],"predecessor-version":[{"id":2177,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2154\/revisions\/2177"}],"wp:attachment":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2154"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2154"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2154"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}