Monday, December 9, 2013

A Useful Metric Extension in EM12c for Unsupported Oracle Database Versions

Metric Extensions (ME) in EM12c are the new User Defined Metrics from EM11g. It’s an awesome extension of EM12c to monitor non-standard metrics. For example, EM12c’s Oracle Database Plugin 12.1.0.4.0 and 12.1.0.5.0 are only supported with the following versions of the database:

NewImage

I wrote a post on an Alternative Method to monitor GoldenGate from EM12c outside the GoldenGate 12.1.0.1.0 Plugin which is another good example.

What about the less-supported OS versions which fall in between? I had an unfortunate experience with a client post successful agent deployment where the console showed no explanation as to why the database targets (10.2.0.2, 10.2.0.3, 11.1.0.6 etc) remained in a “Status Pending” state. After an SR and many hours of wrestling with this issue, I was informed that the the particular releases were unsupported in EM12c due to inherent bugs within the databases’ alerting mechanism.  The realization that the EM12c OMS spending time and resources (job queue processes) on a target in a “Status Pending” state would result in a waste resources and reduced allocation to monitor critical systems was valuable information.  Even more valuable for any administrator who may first assume that a "Status Pending" target is a benign issue to address on a slow day. C’est la vie.

Moving right along, I knew there was a way to configure basic (Tablespace Usage and Database Status) monitoring for these poor databases and Metric Extensions were my solution. Please note, this solution worked only because the OS versions were supported for the agents. To summarize the illustration below, the extensions will be deployed onto the host target where the unsupported Oracle database version instances reside - along with support versions. This also means, that the new metric will at the host level because the unsupported database targets should not exist in the EM12c repository.

In this post, I’d like you show you how to setup a Tablespace Usage ME in EM12c. With a subsequent post, I will go over the Database Status check.

You might be wondering if there is more than one unsupported database version and the metric extension will be created on the host layer, then what would the data look like? Would it be one output with all databases, or different outputs for each respective database? Well, I gave that a lot of thought, and at the end of the day, what made me decide was “How will the metric be used?”. I needed alert notifications, so for that purpose a single output would suffice.

NewImage

The basic lifecycle of a Metric Extension is illustrated on its Home Page in EM12c. Quite simply put, you develop, test, and eventually deploy the extension once ready. I’ll go through all of these steps for our unsupported versions towards the end the blog.

NewImage

 

Let’s get started.

1. Before we can even begin with creating a Metric Extension, we need to design our “check”. In my case, it’s a simple query which is executed via shell script that loops through the /etc/oratab entries, and a) checks the status of the instance listed, b) if found active, then c) executes a SQL statement to collect the tablespace usage information. When I initially wrote this script, the host where I intended to run the ME only had unsupported versions of the Oracle Database running, therefore checking all instances in /etc/oratab made sense. If you have an environment where both types of databases (supported vs unsupported) reside, then perhaps a simple text file with the instances names, or make the script smarter to check for only unsupported releases (hard coded) from the oratab. I would appreciate any feedback with better suggestions!

 

 

The output for the above query would look similar to what you see below. Pay close attention to the order of the columns, this will be important later.

 

oracle on greed101 -# sh host_database_unsupported_version_tablespace.sh 
RED|AIMTRANS|2200|1001|1199|45.51
RED|AKB_DATA|3247|1179|2068|36.3
RED|AUDIT_SUPPORT_TS|50|0|50|.25
RED|DGDATA1|700|272|428|38.87
RED|DGINDEX1|30|16|14|52.71
RED|SYSTEM|800|662|138|82.81
BLUE|EUL_DATA|100|16|84|16.5
BLUE|FACT1|600|329|271|54.85
BLUE|FACT2|226960|204288|22672|90.01
BLUE|INDEX1|300|179|121|59.75
BLUE|INDEX2|131616|118199|13417|89.81
BLUE|SYSTEM|800|662|138|82.81
GREEN|STRUCTURE1|1000|334|666|33.42
GREEN|SYSTEM|800|662|138|82.81
GREEN|WORK1|1052708|1001089|51619|95.1
GREEN|AUDIT_SUPPORT_TS|500|0|500|.01
BLACK|IVIS|500|235|265|46.94
BLACK|SYSTEM|300|189|111|63.12
BLACK|DATA_FEEDER_DATA|1200|733|467|61.06
BLACK|DGADATA1|8192|2312|5880|28.23

 

1. Navigate to the Metric Extensions home page in Enterprise Manager.

NewImage

 

2. Click on Create.

NewImage

 

3. Give the new Metric a name, display name, and a description. In Target Type, I left the default as “Host”. In Collection Schedule, I left the defaults as well. Click “Next”.

NewImage 

 

4. On the next screen, in the “Command” field, enter “sh” since we’ll be uploading a shell script. For the actual script, we need to click on the “Edit” pencil icon. Here, we can enter the file name and paste the actual script from above. The “Delimiter” field is quite important, because it is how the Metric Extension framework will differentiate the data between columns. Click “OK”.

Note 1: Alternatively, you could also upload the file if already saved on your local machine.

NewImage

Note 2: You have to love the documentation provided towards the right half on this screen. The explanation is quite enough and interface is intuitive enough for you to figure out how to upload.

NewImage

 

5.  On the next screen, we will add columns to our metric. Do you recall the columns in the script from earlier? We need to now add them in the same order, i.e. Database Name, Tablespace Name, Total Space MB, Used Space MB, Free Space MB, and Used Space Percent.

NewImage

 

5.1. The first is Database Name. A Metric Extension requires that at least one column contain unique values in the result set. For our result set, we will use the combination of Database Name, and Tablespace Name.

You must select the “Column Type” as “Key Column” and “Value Type" as “String”.

NewImage

 

5.2. Tablespace Name, as mentioned earlier, is also a Key Column.

NewImage

 

5.3. Total Space MB. Please note that I left the “Column Type” and "Value Type" as defaults.

NewImage

 

5.4. Used Space MB. Please note that I left the “Column Type” and "Value Type" as defaults.

NewImage

 

5.5. Free Space MB. Please note that I left the “Column Type” and "Value Type" as defaults.

NewImage

 

5.6. Now, for the last and most important column. Used Space Percent.

Under “Metric Category” I selected “Capacity”. This setting doesn’t have an actual impact, but for reporting purposes is useful.

Since my ultimate goal was alerting for creating this metric, I picked the “Greater Than (>)” “Comparison Operator” and added Warning/Critical thresholds.

You can actually customize the alert message from this section using the columns added. I chose the message below, but please feel free to customize it to your desire.

Once all the information is entered, please click “OK” and then “Next”.

NewImage

 

6. Use the default monitoring credential set.

NewImage

 

7. Here we actually get to test out the script a host. Follow the screen shots below to run a test. Once test successfully, click “Next”.

NewImage

 

8. Review your settings and click “Finish”.

NewImage

Succes!

NewImage

 

Remember this from earlier?

NewImage

 

We have gone through the Development phase, and are ready to save this metric extension as a Deployable Draft.

9. On the Metric Extensions home page, select the extension we created -> Actions -> Save as Deployable Draft.

NewImage

 

It’s status will now change to “Deployable Draft”

NewImage

 

10. At this point, we have two options

a) Keep the metric extension in “Deployable Draft” status, and deploy directly onto a host target, or

b) Publish it, where it can be used by other modules within the EM12c infrastructure, i.e. my personal favorite, Monitoring Templates.

The latter allows us to have a more reliable and repeatable process by using Monitoring Templates. Its your lucky day, because I will show you how to do both.

10.1. Deploying a “Deployable Draft” Metric Extension to a target.

10.1.1. From the Metric Extension Home page, select the metric -> Actions -> Deploy to Target.

NewImage

 

10.1.2. Add a target where you’d like to deploy the ME. Click “Submit” when done.

NewImage

 

10.1.2. The next screen shows any pending operations. Waits a few seconds and hit NewImage refresh on the top right.

NewImage

 

10.1.3. Back on the ME home page, we can actually see the # of targets the ME has been deployed onto.

NewImage

 

10.1.4. At this point, we can simply check on the Hosts “All Metrics” screen.

NewImage

 

10.1.5. And presto, the metric and its data are collecting!

NewImage

 

10.2. Deploying a Metric Extension to a Monitoring Template.

NewImage

 

10.2.1. We need to ensure that the ME is in a “Published” state. To do that, select it from the ME home page -> Actions -> “Publish Metric Extension”

NewImage

NewImage

 

10.2.2. Now, make your way to the Monitoring Templates home page and either create a new one, or edit an existing one. The point here is to add metrics to the template.

NewImage

 

10.2.3. On the Templates home page, click on “Create”.

NewImage

 

10.2.4. On the next screen, select “Target Type” as the copy monitoring settings from option. Pick “Servers, Storage and Network” from the category, then “Host” from the Target Type.

You would alternatively, pick an existing host as the copy monitoring settings from, either way it doesn’t matter for our purpose. The template I create will only contain one metric.

NewImage

 

10.2.5. Enter an appropriate name for the template, and a description. Then, click on the “Metric Thresholds” tab.

NewImage

 

 

10.2.6. As I mentioned earlier, my goal is to create a template with only one metric. Therefore, I need to remove all the others. Click on the “Select All” button and then “Remove Metrics from Template”.

NewImage

 

10.2.7. Click on “Add Metrics to Template”.

NewImage

 

10.2.8. Select “Metric Extensions” in the search, and the results will show the ME created earlier. Select all columns from it and click “Continue” and “OK”.

Note: Change the thresholds if they need to be different in the template.

NewImage

 

10.2.9. Next, we apply the template to a target. Select the template, and click on Apply. Add the targets you want to apply this template to and click “OK”.

NewImage

 

10.2.10. Once applied, we can proceed to the hosts’ “All Metrics” page (Step 10.1.4.). And presto!

NewImage

 

Now that we have the ME collecting data, you can create Incident Rules to catch the offending tablespaces. I won’t go into that with this post, but Kellyn Pot’vin has several awesome posts on Incident Management to address that aspect.

If you are still with me, I want urge you to let your imagination go wild with what all can be collected and monitored by leveraging EM12c’s Metric Extensions feature. Metrics from non-oracle databases, application specific information, and so on and so forth.

Cheers!

continue reading "A Useful Metric Extension in EM12c for Unsupported Oracle Database Versions"

Thursday, December 5, 2013

Adding Tables to an Existing GoldenGate Configuration with Transaction Integrity


There is always something new to learn every day. For me, today was one of those days, where I learnt a new way to add new tables to an existing Extract, Pump, and Replicat setup.
 
The current configuration consists of a single Extract and Replicat running OGG 11.2.1.0.13 on OEL 6.4 64bit. Both databases are on the same host.
 
 
From the source database, we capture DDL for all tables from the DAY and NIGHT schema and replicate them to the RIVER and WATER schemas on the target respectively.
 
 
If you noticed, I’m not using a Pump. The two databases reside on the same server, therefore there’s no need for one.
 
Onward!
 
The goal here is to add two more tables STONE and GREYSTREET to the Extract and Pump while GoldenGate is replicating data.
 
 
1.     Log into the source database via GGSCI
[oracle@blue ggate]$ ggsci

Oracle GoldenGate Command Interpreter for Oracle
Version 11.2.1.0.13 17435036 OGGCORE_11.2.1.0.0OGGBP_PLATFORMS_131002.1206_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Oct  3 2013 02:39:46

Copyright (C) 1995, 2013, Oracle and/or its affiliates. All rights reserved.



GGSCI (blue.color) 2> dblogin userid ggate, password ggate
Successfully logged into database.
 
2.     Add trandata for the new table(s).
GGSCI (blue.color) 3> add trandata song.stone

2013-12-05 15:17:07  WARNING OGG-00869  No unique key is defined for table 'STONE'. All viable columns will be used to represent the key, but may not guarantee uniqueness.  KEYCOLS may be used to define the key.

Logging of supplemental redo data enabled for table SONG.STONE.

GGSCI (blue.color) 4> add trandata song.greystreet

2013-12-05 15:17:15  WARNING OGG-00869  No unique key is defined for table 'GREYSTREET'. All viable columns will be used to represent the key, but may not guarantee uniqueness.  KEYCOLS may be used to define the key.

Logging of supplemental redo data enabled for table SONG.GREYSTREET.
 
3.     Add the two tables in the Extract Parameter file
GGSCI (blue.color) 5> edit params e_gg
...
TABLE song.stone;
TABLE song.greystreet;
...
 
4.     Restart the Extract e_gg
GGSCI (blue.color) 2> stop e_gg

Sending STOP request to EXTRACT E_GG ...
Request processed.


GGSCI (blue.color) 3> start e_gg

Sending START request to MANAGER ...
EXTRACT E_GG starting
 
5.     At this point, capture the Current SCN from the database. Do not lose this number, we need it later!
[oracle@blue ggate]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 5 15:28:31 2013

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1113396

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
 
6.     Take a Data Pump export of the two tables. Please note the use of FLASHBACK_SCN.
[oracle@blue ggate]$ expdp system/oracle directory=data_pump_dir dumpfile=additional_tables.dmp flashback_scn=1113396 tables=song.stone,song.greystreet

Export: Release 11.2.0.3.0 - Production on Thu Dec 5 15:32:04 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."SYS_EXPORT_TABLE_01":  system/******** directory=data_pump_dir dumpfile=additional_tables.dmp flashback_scn=1113396 tables=song.stone,song.greystreet
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 128 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
. . exported "SONG"."GREYSTREET"                         5.882 KB     100 rows
. . exported "SONG"."STONE"                              5.679 KB     100 rows
Master table "SYSTEM"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_TABLE_01 is:
  /u01/app/oracle/admin/sky/dpdump/additional_tables.dmp
Job "SYSTEM"."SYS_EXPORT_TABLE_01" successfully completed at 15:32:14
 
7.     Run the import on the Target database.
[oracle@blue ggate]$ impdp system/oracle directory=data_pump_dir dumpfile=additional_tables.dmp remap_schema=song:river

Import: Release 11.2.0.3.0 - Production on Thu Dec 5 15:45:29 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "SYSTEM"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_FULL_01":  system/******** directory=data_pump_dir dumpfile=additional_tables.dmp remap_schema=song:river
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "RIVER"."GREYSTREET"                        5.882 KB     100 rows
. . imported "RIVER"."STONE"                             5.679 KB     100 rows
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Job "SYSTEM"."SYS_IMPORT_FULL_01" successfully completed at 15:45:31
 
8.     Here’s the important step, you need to edit the replicat’s parameter file and include the following string in the map statement.
GGSCI (blue.color) 2> edit params r_gg
...
MAP song.stone, TARGET river.stone , FILTER ( @GETENV("TRANSACTION", "CSN") > 1113396);
MAP song.greystreet, TARGET river.greystreet, FILTER ( @GETENV("TRANSACTION", "CSN") > 1113396);
...
 
9.     Recycle the replicat.
GGSCI (blue.color) 4>  stop r_gg

Sending STOP request to REPLICAT R_GG ...
start Request processed.


GGSCI (blue.color) 5> start r_gg

Sending START request to MANAGER ...
REPLICAT R_GG starting

GGSCI (blue.color) 6> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                          
EXTRACT     RUNNING     E_GG        00:00:00      00:00:09   
REPLICAT    RUNNING     R_GG        00:00:00      00:00:03 
 
10.Check the counts on both systems.
 
10.1. On the Source
SQL> select name from v$database;

NAME
---------
SKY

SQL> select count(1) from song.stone;

  COUNT(1)
----------
       100
 
10.2. On the Target
SQL> select name from v$database;

NAME
---------
WATER

SQL> select count(1) from river.stone;

  COUNT(1)
----------
       100
 
10.3. Insert data on the source.
SQL> INSERT INTO song.stone
SELECT dbms_random.string('A', 2) RNDMSTR
  FROM all_objects
 WHERE ROWNUM;

100 rows created.

SQL> commit;

Commit complete.

SQL> select count(1) from song.stone;

  COUNT(1)
----------
       200
 
10.4. Check the counts on the target table.
SQL> select count(1) from river.stone;

  COUNT(1)
----------
       200
 
10.5.  Check lag on the replicat.
GGSCI (blue.color) 1> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                          
EXTRACT     RUNNING     E_GG        00:00:00      00:00:02   
REPLICAT    RUNNING     R_GG        00:00:00      00:00:08   
 
11.     Once the table is caught up, remove the FILTER parameters from the replicat.
GGSCI (blue.color) 2> edit params r_gg
...
MAP song.stone, TARGET river.stone;
MAP song.greystreet, TARGET river.greystreet;
...
 
12.     Restart the replicat and we’re done!
GGSCI (blue.color) 4>  stop r_gg

Sending STOP request to REPLICAT R_GG ...
start Request processed.


GGSCI (blue.color) 5> start r_gg

Sending START request to MANAGER ...
REPLICAT R_GG starting

GGSCI (blue.color) 6> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                          
EXTRACT     RUNNING     E_GG        00:00:00      00:00:06   
REPLICAT    RUNNING     R_GG        00:00:00      00:00:02  
 
According to the MOS note I’ve found to accomplish this task, this only works when DDL Replication is enabled. I’ve yet to try the steps without the former enabled, and on databases other than Oracle.
 
MOS Note: OGG How to Resync Tables / Schemas on Different SCN s in a Single Replicat (Doc ID 1339317.1)

Update Dec 15, 2013: I had shared this note with an Engineer @ Oracle who actually converted this into a MOS Note! I'm excited!!

How to add tables to an Existing GoldenGate Configuration with Transaction Integrity? (Doc ID 1607591.1)
continue reading "Adding Tables to an Existing GoldenGate Configuration with Transaction Integrity"

GoldenGate 12.1.2.0 Install/Upgrade on OEL 6.4 x86-64

It was about time that I started working with the new release. I’ve had to upgrade my current 11g install, and since I’m on a documentation high these days, I put something together to help anyone else who wants to go through the install.

My current install is OGG 11.2.1.0.13 on Linux 64bit running against an 11.2.0.3 databases.

Vamanos!

Installation

1. Make a copy of your existing GoldenGate install folder after stopping all processes.
[oracle@blue gg12c]$ ls -lhtr
total 578M
-rwxrwx--- 1 root vboxsf 326M Dec  5 15:03 121200_fbo_ggs_Linux_x64_shiphome.zip
-rwxrwx--- 1 root vboxsf 253M Dec  5 18:13 ggate.1121013.tgz
[oracle@blue gg12c]$ unzip 121200_fbo_ggs_Linux_x64_shiphome.zip 
[oracle@blue gg12c]$ ls -lhtr
total 579M
drwxrwx--- 1 root vboxsf  102 Sep 25 05:59 fbo_ggs_Linux_x64_shiphome
-rwxrwx--- 1 root vboxsf 276K Oct  6 18:04 OGG_WinUnix_Rel_Notes_12.1.2.0.0.pdf
-rwxrwx--- 1 root vboxsf  92K Oct  6 18:04 Oracle-GoldenGate-12.1.2.0-README.doc
-rwxrwx--- 1 root vboxsf 141K Oct  6 18:04 OGG_WinUnix_Rel_Notes_12.1.2.0.0.doc
-rwxrwx--- 1 root vboxsf  23K Oct  6 18:04 Oracle-GoldenGate-12.1.2.0-README.txt
-rwxrwx--- 1 root vboxsf 326M Dec  5 15:03 121200_fbo_ggs_Linux_x64_shiphome.zip
-rwxrwx--- 1 root vboxsf 253M Dec  5 18:13 ggate.1121013.tgz
[oracle@blue gg12c]$ cd fbo_ggs_Linux_x64_shiphome/
[oracle@blue fbo_ggs_Linux_x64_shiphome]$ ls -lhtr
total 0
drwxrwx--- 1 root vboxsf 204 Sep 25 05:59 Disk1
[oracle@blue fbo_ggs_Linux_x64_shiphome]$ cd Disk1/
[oracle@blue Disk1]$ ls -lhtr
total 4.0K
drwxrwx--- 1 root vboxsf 374 Sep 25 05:59 install
drwxrwx--- 1 root vboxsf 714 Sep 25 05:59 stage
-rwxrwx--- 1 root vboxsf 918 Sep 25 05:59 runInstaller
drwxrwx--- 1 root vboxsf 102 Sep 25 05:59 response
2. Invoke the installer, and lets get started!
[oracle@blue Disk1]$ ./runInstaller 
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 120 MB.   Actual 74181 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 8015 MB    Passed
Checking monitor: must be configured to display at least 256 colors.    Actual 16777216    Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2013-12-05_06-14-19PM. Please wait ...
To start, I’ll only install the GoldenGate with DB11g since thats the only instance I have installed on this server at the moment.

NewImage
3. Pick your installation directories. I’ve entered the same location for the software install as my existing GG11g directory to perform an upgrade.

NewImage

4. Click “yes” on this prompt. I think I know what I am doing!

NewImage
5. Review changes and click “Install”.

NewImage
6. Progress is good! If you are prompted whether the directory is not empty, simply select “yes” and proceed.

NewImage
7. Awesome!

NewImage

Upgrade

8. Review the installation, and validate the binaries startup successfully.
[oracle@blue]$ pwd
/u01/app/ggate
[oracle@blue ggate]$ ./ggsci

Oracle GoldenGate Command Interpreter for Oracle
Version 12.1.2.0.0 17185003 OGGCORE_12.1.2.0.0_PLATFORMS_130924.1316_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Sep 25 2013 00:31:13
Operating system character set identified as UTF-8.

Copyright (C) 1995, 2013, Oracle and/or its affiliates. All rights reserved.

GGSCI (blue.color) 1> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                           
EXTRACT     STOPPED     E_GG        00:00:00      00:37:10    
REPLICAT    STOPPED     R_GG        00:00:00      00:37:10        
9. Upgrade the Checkpointtable. This needs to be done on both source and target databases!
GGSCI (blue.color) 2> dblogin userid ggate, password ggate
Successfully logged into database.

GGSCI (blue.color) 5> upgrade checkpointtable

No checkpoint table specified. Using GLOBALS specification (ggate.checkpoint)...

Successfully upgraded checkpoint table ggate.checkpoint.
10. Start the Extract
GGSCI (blue.color) 2> start e_gg

Sending START request to MANAGER ...
EXTRACT E_GG starting

GGSCI (blue.color) 3> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                           
EXTRACT     ABENDED     E_GG        00:00:00      00:38:40    
REPLICAT    STOPPED     R_GG        00:00:00      00:38:40 
11. Interesting, did I miss something? What does the report file say?
2013-12-05 21:40:13  ERROR   OGG-01416  File ./dirdat/lt000005, with format RELEASE 11.2, does not match current format specification of RELEASE 12.1. Modify the parameter file to specify format RELEASE 11.2 or issue ETROLLOVER prior to restart.
12. Ok, my mistake :)

Modify the parameter file to specify format RELEASE 11.2 or issue ETROLLOVER prior to restart.

12.1. Option #1: Let’s make the correct parameter change and try again. Add the following to the EXTTRAIL ./dirdat/lt in the extracts parameter file.
EXTTRAIL ./dirdat/lt, FORMAT RELEASE 11.2
12.2. Option #2: Start a new trail sequence by issuing a roll-over command.
GGSCI> alter extract e_gg etrollover
12.2.1. Starting it again!
GGSCI (blue.color) 6> start e_gg

Sending START request to MANAGER ...
EXTRACT E_GG starting

GGSCI (blue.color) 7> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                           
EXTRACT     RUNNING     E_GG        00:00:00      00:00:04    
REPLICAT    STOPPED     R_GG        00:00:00      00:54:46    
12.3. Great, now we can make the same change to the replicat’s parameter file and start it.
GGSCI (blue.color) 13> start r_gg

Sending START request to MANAGER ...
REPLICAT R_GG starting

GGSCI (blue.color) 14> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                           
EXTRACT     RUNNING     E_GG        00:00:00      00:00:04    
REPLICAT    RUNNING     R_GG        00:00:00      00:00:01    
13. Excellent!! Now we are done with the installation of 12c and upgrade of 11g to 12c!
Hopefully this has been educational for you. I hope to dive further into some of the new features in 12c.

Cheers!


continue reading "GoldenGate 12.1.2.0 Install/Upgrade on OEL 6.4 x86-64"

GoldenGate Veridata 11.2.1 Agent Installation

With my previous post, I completed the Server component install and moving ahead I’d like to proceed with the agent installs. The Veridata server communicates with the hosts (that are running on each target and source servers) via the Veridata Agents. There are basically two types of agents; Java based and the C-Agent. The latter is designed for NonStop SQL/MP and Enscribe databases running on the NonStop platform.

Components:
NewImage

For this example, I will install the Java based agent.

Installation

1. Create the Tablespace, User, and Grant Privileges.

SQL> create tablespace ggate_data datafile '/u003/oradata/gvddvs01/ggate_ata.dbf' size 500m autoextend on;

Tablespace created.

SQL> create role veridata_role;

Role created.

SQL> grant create session to veridata_role;

Grant succeeded.

SQL> grant create table to veridata_role;

Grant succeeded.

SQL> grant create view to veridata_role;

Grant succeeded.

SQL> grant create procedure to veridata_Role;

SQL> grant create synonym to veridata_role;

Grant succeeded.
SQL> create user ggate identified by ggate default tablespace ggate_data;

User created.

SQL> grant veridata_role to ggate;

Grant succeeded.

SQL> grant unlimited tablespace to veridata_role;

Grant succeeded.

2. Create directories

greed101:(oracle) [green] $ echo $ORACLE_HOME
/u001/app/oracle/product/11.2.0
greed101:(oracle) [green] $ mkdir /u001/app/oracle/product/veridata_agent
greed101:(oracle) [green] $ mv V35569-01.zip /u001/app/oracle/product/veridata_agent
greed101:(oracle) [green] $ cd /u001/app/oracle/product/veridata_agent/

3. Unzip Binaries

greed101:(oracle) [green] $ ls -ltr
total 15664
-rw-rw-r--    1 oracle   dba         8018466 Oct 30 16:04 V35569-01.zip
drwxr-xr-x    6 oracle   dba             256 Nov  7 11:16 ../
drwxr-xr-x    2 oracle   dba             256 Nov  7 11:16 ./
greed101:(oracle) [green] $ unzip V35569-01.zip
Archive:  V35569-01.zip
   creating: agent/
   creating: agent/classes/
   creating: agent/drivers/
   creating: agent/lib/
   creating: agent/licenses/
  inflating: agent/JavaAgent.jar
  inflating: agent/agent.bat
  inflating: agent/agent.properties.sample
  inflating: agent/classes/log4j.properties
  inflating: agent/drivers/gvdb2.jar
  inflating: agent/drivers/gvsybase.jar
  inflating: agent/drivers/ojdbc6.jar
  inflating: agent/drivers/sqljdbc.jar
  inflating: agent/lib/commons-dbcp-1.2.2.jar
  inflating: agent/lib/commons-pool-1.3.jar
  inflating: agent/lib/log4j-1.2.12.jar
  inflating: agent/lib/ucp.jar
  inflating: agent/licenses/Apache-LICENSE-2.0.txt
  inflating: agent/licenses/notices.txt
  inflating: agent/agent.sh
  inflating: ogg-veridata-readme-11.2.1.0.0.doc
  inflating: ogg-veridata-readme-11.2.1.0.0.txt
  inflating: ogg_veridata_relnotes_11.2.1.0.0.doc
  inflating: ogg_veridata_relnotes_11.2.1.0.0.pdf
greed101:(oracle) [green] $ ls -ltr
total 16416
drwxr-xr-x    6 oracle   dba            4096 Nov  8 2012  agent/
-rw-r--r--    1 oracle   dba          220968 Dec  4 2012  ogg_veridata_relnotes_11.2.1.0.0.pdf
-rw-r--r--    1 oracle   dba           97280 Dec  4 2012  ogg_veridata_relnotes_11.2.1.0.0.doc
-rw-r--r--    1 oracle   dba           39424 Dec  4 2012  ogg-veridata-readme-11.2.1.0.0.doc
-rw-r--r--    1 oracle   dba           14661 Dec  4 2012  ogg-veridata-readme-11.2.1.0.0.txt
-rw-rw-r--    1 oracle   dba         8018466 Oct 30 16:04 V35569-01.zip
drwxr-xr-x    6 oracle   dba             256 Nov  7 11:16 ../
drwxr-xr-x    3 oracle   dba            4096 Nov  7 11:17 ./

4. Create a copy of the agent.properties.sample file as agent.properties and edit the files highlighted.

# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
# The server.port property is the port where the Veridata agent listens
# for connection requests.
server.port=8500

# The database.url specifies the JDBC connection URL for the database.
# Samples for all supported databases are shown below.
database.url=jdbc:oracle:thin:@greed101:1521:green

# DB2 z/OS sample database connection URL
#database.url=jdbc:veridata:db2://localhost:447;LocationName=DB2

# DB2 LUW sample database connection URL
#database.url=jdbc:veridata:db2://localhost:50000;DatabaseName=sample

# Oracle sample database connection URL
#database.url=jdbc:oracle:thin:@localhost:1521:orcl

# Uncomment the following line to change the timeout for idle connections
# in the Oracle connection pool.  The value is in seconds.  The default
# value in the Veridata Agent is 600 seconds.
#oracle.connection.cache.InactivityTimeout=600

# Uncomment the following line to change the time between checks for
# timeout outs in the Oracle connection pool. The value is is seconds.
# The default value in the Veridata agent is 300 seconds.
#oracle.connection.cache.PropertyCheckInterval=300

# Oracle OCI bequeath database connection URL
# The OCI libraries must available and the JDBC
# driver must match the OCI libraries.
#database.url=jdbc:oracle:oci:@

# SQL Server  database connection URL
#database.url=jdbc:sqlserver://localhost:1433

# Teradata  database connection URL
#database.url=jdbc:teradata://localhost/DBS_PORT=1025,CHARSET=UTF8

# Sybase database connection URL
#database.url=jdbc:veridata:sybase://localhost:5000;ApplicationName=VeriAgent;MaxPooledStatements=20

# The server.driversLocation property is the directory
# containing the JDBC driver jar file(s).
# The path is relative to the Veridata agent
# installation directory.
server.driversLocation = drivers

# The server.jdbcDriver property specifies the list of
# JDBC driver jar files.  Sample lists for the
# supported databases are shown below.
#server.jdbcDriver=<server.jdbcDriver>

#For DB2 uncomment the following line:
#server.jdbcDriver=gvdb2.jar

# For Oracle uncomment the following line:
server.jdbcDriver=ojdbc6.jar

# For SQL Server uncomment the following line:
#server.jdbcDriver=sqljdbc.jar

# For Teradata uncomment the following line:
#server.jdbcDriver=terajdbc4.jar tdgssconfig.jar

#For Sybase uncomment the following line:
#server.jdbcDriver=gvsybase.jar

# The database.transaction.isolation property controls the
# transaction isolation level used during initial compare.
# The default value for Sybase, DB2, SQL Server and Teradata is
# READ_UNCOMMITTED.  The only value supported for Oracle
# is READ_COMMITTED.  SQL Server versions 2005 above also support
# the value SNAPSHOT which requires that ALLOW_SNAPSHOT_ISOLATION is
# enabled in the database.
#
# Confirm out of sync always uses the READ_COMMITTED
# transaction isolation level.
#database.transaction.isolation=READ_UNCOMMITTED

5. Set the JRE_HOME or JAVA_HOME parameter, and start the agent.

greed101:(oracle) [green] $ ./agent.sh start

6. Check the agent run log

greed101:(oracle) [green] $ ./agent.sh run
[VERIAGT-BOOT] INFO Looking for home directory.
[VERIAGT-BOOT] INFO Found bootstrap class in file:/u001/app/oracle/product/veridata/agent/JavaAgent.jar!/com/goldengate/veridata/agent/Bootstrap.class.
[VERIAGT-BOOT] INFO Home directory: /u001/app/oracle/product/veridata/agent
[VERIAGT-BOOT] INFO Preparing classpath.
[VERIAGT-BOOT] INFO Searching library directory /u001/app/oracle/product/veridata/agent/lib.
[VERIAGT-BOOT] INFO Driver location: /u001/app/oracle/product/veridata/agent/drivers
[VERIAGT-BOOT] INFO Drivers to load: ojdbc6.jar
[VERIAGT-BOOT] INFO Classpath:
[VERIAGT-BOOT] INFO     /u001/app/oracle/product/veridata/agent/JavaAgent.jar
[VERIAGT-BOOT] INFO     /u001/app/oracle/product/veridata/agent/lib/commons-dbcp-1.2.2.jar
[VERIAGT-BOOT] INFO     /u001/app/oracle/product/veridata/agent/lib/commons-pool-1.3.jar
[VERIAGT-BOOT] INFO     /u001/app/oracle/product/veridata/agent/lib/log4j-1.2.12.jar
[VERIAGT-BOOT] INFO     /u001/app/oracle/product/veridata/agent/lib/ucp.jar
[VERIAGT-BOOT] INFO     /u001/app/oracle/product/veridata/agent/classes
[VERIAGT-BOOT] INFO     /u001/app/oracle/product/veridata/agent/drivers/ojdbc6.jar
[VERIAGT-BOOT] INFO Initializing.
[VERIAGT-BOOT] INFO Invoking startup method: public static void com.goldengate.veridata.agent.VeridataAgent.main(java.lang.String[])
Setting up agent log
Agent log redirected to /u001/app/oracle/product/veridata/agent/veridata-agent.log

7. Check the log for messages

greed101:(oracle) [green] $ cat /u001/app/oracle/product/veridata/agent/veridata-agent.log
INFO:2013-11-07 11:31:35,727 (main) - Veridata Agent Version 11.2.1.0  OGGVDT_11.2.1.0.0_PLATFORMS_121108.1625 built on Thu, 8 Nov 2012 21:21:26 -0800  [VeriAgentVersion:logVersion, line 33]
WARN:2013-11-07 11:31:35,734 (main) - The specified transaction isolation level, 'READ_UNCOMMITTED', is not support for Oracle databases [Context:init, line 222]
INFO:2013-11-07 11:31:35,881 (main) - Veridata Agent starting on greed101 port 16000 [VeridataAgent:serve, line 141]
INFO:2013-11-07 11:31:40,913 (main) - Veridata Agent Version 11.2.1.0  OGGVDT_11.2.1.0.0_PLATFORMS_121108.1625 built on Thu, 8 Nov 2012 21:21:26 -0800  [VeriAgentVersion:logVersion, line 33]
WARN:2013-11-07 11:31:40,921 (main) - The specified transaction isolation level, 'READ_UNCOMMITTED', is not support for Oracle databases [Context:init, line 222]
ERROR:2013-11-07 11:31:40,950 (main) - Veridata Agent shutting down on port 16000 due to error: Address already in use [VeridataAgent:serve, line 169]
INFO:2013-11-07 11:31:40,951 (main) - Veridata Agent stopped on port -1 [VeridataAgent:serve, line 175]
INFO:2013-11-07 11:33:23,132 (main) - Veridata Agent Version 11.2.1.0  OGGVDT_11.2.1.0.0_PLATFORMS_121108.1625 built on Thu, 8 Nov 2012 21:21:26 -0800  [VeriAgentVersion:logVersion, line 33]
INFO:2013-11-07 11:33:23,176 (main) - Veridata Agent starting on greed101 port 8500 [VeridataAgent:serve, line 141]
continue reading "GoldenGate Veridata 11.2.1 Agent Installation"

Tuesday, November 26, 2013

GoldenGate Veridata 11.2.1 Server Installation

Today, I’d like to share my experience with a tool that I’ve used infrequently with GoldenGate.

Veridata is Oracle’s answer to Data Validation for environments where a replication technology is utilized. In other words, the tool is agnostic (but partial) to a set Database vendors. You can install it on a variety of platforms, and a few database types.

Components:
NewImage

Installation

1. Download and unzip the media from eDelivery.

[oracle@as-sandbox-n1 installs]$ cd veridata/
[oracle@as-sandbox-n1 veridata]$ ls -lhtr
total 147M
-rwxr-xr-x 1 oracle oinstall 145M Nov  8  2012 GoldenGate_Veridata_redhatAS40_x64.sh
-rw-r--r-- 1 oracle oinstall 216K Dec  4  2012 ogg_veridata_relnotes_11.2.1.0.0.pdf
-rw-r--r-- 1 oracle oinstall  95K Dec  4  2012 ogg_veridata_relnotes_11.2.1.0.0.doc
-rw-r--r-- 1 oracle oinstall  39K Dec  4  2012 ogg-veridata-readme-11.2.1.0.0.doc
-rw-r--r-- 1 oracle oinstall  15K Dec  4  2012 ogg-veridata-readme-11.2.1.0.0.txt
-rw-r--r-- 1 oracle oinstall 1.3M Oct 24 14:26 veridata-install.log

2. Invoke the bash script to start the installer.

[oracle@as-sandbox-n1 veridata]$ ./GoldenGate_Veridata_redhatAS40_x64.sh 
Unpacking JRE ...
Starting Installer ...

3. Click “Next”.

NewImage

4. Pick your installation directory and click “Next”.

NewImage

5. On the ports section, click “Next”.

NewImage

6. Leave the defaults and click “Next”.

NewImage

7. Enter at the account username and password. This will be used to install the tables in the repository database.

NewImage

8. Of course we will chose “Oracle” :)

NewImage

9. Confirm the Oracle Home (Veridata Home) location.

NewImage

10. Select and Instance and click Continue. This article assumes that the Veridata installation is on the same server as its intended repository.

NewImage

11. I will let the installer create a new user for me.

NewImage

12. Enter the DBA

NewImage

13. On the next screen, enter the oracle database user where the Veridata objects will be installed.

NewImage

14. Enter the default, and temp tablespace for the above user.

NewImage

15.  Check the box if you want it to start Veridata after the installation.

NewImage

16. Review the settings and click “Next”.

NewImage

17. Progress is always good.

NewImage

18. Awesome! All done.

NewImage

At this point, we can log into the Veridata Server successfully!

NewImage

In subsequent posts, I will discuss the other aspects such as the Veridata Agent install, Configuration, etc.

Cheers!
continue reading "GoldenGate Veridata 11.2.1 Server Installation"

Friday, November 22, 2013

Patch and Provision with EM12c: #4 Software Library - Create a Component From Oracle Home Clone

To continue with the previous series, I want to illustrate another useful feature with the Patching & Provisioning functionality within EM12c. Using the provisioning functionality, one can create software components which contain compressed installation binaries. This feature is not limited to only Oracle software, but to illustrate an example, I’d like to show you how to clone an Oracle Database Home to create a software library component.

1. Navigate to the “Software Library” home from the Enterprise Menu.

NewImage

2. On the “Software Library” home page, you will see several folders. The ones with a “Lock” icon are not editable, so we will focus on, either creating a new one, or use an existing one.

NewImage

3. To keep the set up consistent, I’d like to use the “Component” folder since that is precisely what we are creating. Expand the tree structure, to show the folders underneath.

NewImage

4. Click on “Actions”->”Create Entity”->”Component"

NewImage

5. Select “Oracle Database Software Clone” from the list, and click “Continue”.

NewImage

6. Enter an appropriate name and attributes for the component. Click “Next”.

NewImage


7. On the Configuration screen, select the appropriate “Create Component from” location. In my case, it was a Reference Oracle Home. Then, search for the Reference Oracle Home. In addition, pick the correct credential set. Click “Next”.

NewImage

8. On the last page, click “Save and Upload”. If you happen to click on “Save” only, then the binaries will not be uploaded. I’ll talk about that in a separate thread later.

NewImage

9. Easy enough. On the next screen, you’ll see the option to view the job that gets submitted.

NewImage

10. If you didn’t click on the “Job Details” page, and wanted to view the status, don’t worry. Go to the “Jobs Activity” page, and find the appropriate job name.

NewImage

11. Click on the Job Name to view its details.

NewImage

12. And just wait for the job to complete.

NewImage
13. Now, back to the Software Library page, we can see that the component is now ready!

NewImage

Summary:

In short, once a software component is created, one can use it for provisioning with the profiles and deployment procedures. For example, in one of my earlier posts on Provisioning a Database, step 4.4 has a screenshot of the software component used with the deployment. That is where the one we just created can be used instead.

I hope you found this moderately helpful :)

Cheers!
continue reading "Patch and Provision with EM12c: #4 Software Library - Create a Component From Oracle Home Clone"

Friday, November 1, 2013

11gR1 to 11gR2 RAC - An Upgrade Experience on Solaris

I’ve recently gone through an experience (see title), that I thought would be a good one to share.

As of late, I’ve started documenting the life out of any project/task, and this is one of in the long line of many.

Basically, the goal here was to upgrade an existing 11gR1 RAC configuration to 11gR2 RAC. To supplement the pretty picture, the following tasks were involved:

NewImage
  • Upgrade 11gR1 CRS+ASM to 11gR2 Grid Infrastructure
  • Upgrade 11gR1 RDBMS to 11gR2 RDBMS
  • Upgrade 11gR2 Instances to 11gR2
I’ve uploaded the document to the Oracle RAC SIG, if you’re interested please follow this link to download it. The document includes the steps for the upgrade, any encountered issues with fixes, plus additional tidbits I felt would be useful.

Thanks to my friend Osama Mustafa (@osamaoracle) for reviewing it!! I would cherish any comments, or feedback from my readers with their experiences.

Cheers
continue reading "11gR1 to 11gR2 RAC - An Upgrade Experience on Solaris"