Monday, June 22, 2020

Goldengate 19c micro-service Installation on linux


Goldengate Installation on Linux



Goldengate Software version: 19c
Database version: 12c

Download Goldengate software  
check certification matrix before install

unzip Goldengate software 

We have to create a folder as below for installation

create directory
--------------------
mkdir ogg
mkdir ogg123_ma    ///OGG Home
mkdir ogg123_sm   /////Service Manager Home
mkdir ogg123_deploy  ////Deploymwent home


prepare a database for golden gate 

Enable supplemental logging
-------------------------------

SQL> alter database add supplemental log data;

Database altered.

Enable Force Logging
----------------------

SQL> alter database force logging;

Database altered.

Enable Goldengate replication
-------------------------------

SQL> show parameter enable_gol

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
enable_goldengate_replication        boolean     FALSE
SQL>
SQL> alter system set enable_goldengate_replication=TRUE scope=both;

System altered.

Enable Archivelog
-----------------------

SQL> startup mount
ORACLE instance started.

Total System Global Area 1442840576 bytes
Fixed Size                  8620752 bytes
Variable Size             486540592 bytes
Database Buffers          939524096 bytes
Redo Buffers                8155136 bytes
Database mounted.
SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

SQL>  select SUPPLEMENTAL_LOG_DATA_MIN,FORCE_LOGGING,log_mode ,cdb from v$database;

SUPPLEME FORCE_LOGGING                           LOG_MODE     CDB
-------- --------------------------------------- ------------ ---
YES      YES                                     ARCHIVELOG   NO

SQL>


Create Goldengate user and assign privilege
------------------------------------------------

create user ggadmin identified by ggadmin ;

exec dbms_goldengate_auth.grant_admin_privilege('ggadmin');
exec dbms_streams_auth.grant_admin_privilege('ggadmin');
grant insert on system.logmnr_restart_ckpt$ to ggadmin;
grant update on streams$_capture_process to ggadmin;
grant become user to ggadmin;
grant create session,connect,resource,alter system  to ggadmin;
grant select any table to ggadmin;
grant connect, resource to ggadmin;
grant select any dictionary, select any table to ggadmin;
grant create table to ggadmin;
grant flashback any table to ggadmin;
grant execute on dbms_flashback to ggadmin;
grant execute on utl_file to ggadmin;
grant create any table to ggadmin;
grant insert any table to ggadmin;
grant update any table to ggadmin;
grant delete any table to ggadmin;
grant drop any table to ggadmin;
grant alter any table to ggadmin;
grant alter system to ggadmin;
grant lock any table to ggadmin;
grant select any transaction to ggadmin;
alter user ggadmin quota unlimited on users;
alter user ggadmin quota unlimited on users;
exec dbms_goldengate_auth.grant_admin_privilege('ggadmin','*', grant_optional_privileges=>'*');
grant select on "_dba_apply_progress" to ggadmin;
grant select any dictionary to ggadmin;



Do entry in /etc/hosts file

192.168.43.53         ggnode1.localdomain ggnode1
192.168.43.239 ggnode2.localdomain ggnode2











Wednesday, June 17, 2020

How to extend Linux file system after increasing my EBS volume on my EC2 instance



How to extend Linux file system after increasing my EBS volume on my EC2 instance


[root@anurag ~]#
[root@anurag ~]#
[root@anurag ~]# lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  10G  0 disk
├─xvda1 202:1    0   1M  0 part
└─xvda2 202:2    0  10G  0 part /
xvdb    202:16   0  20G  0 disk /u01/oracle
xvdc    202:32   0  20G  0 disk /u01/oradata
xvdd    202:48   0   8G  0 disk /u01/FRA
[root@anurag ~]#
[root@anurag ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G   17M  1.9G   1% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/xvda2       10G  4.3G  5.7G  44% /
/dev/xvdc       7.9G  5.8G  1.7G  78% /u01/oradata
/dev/xvdd       7.9G  1.5G  6.0G  20% /u01/FRA
/dev/xvdb       7.9G  7.4G     0 100% /u01/oracle
tmpfs           378M     0  378M   0% /run/user/1002
tmpfs           378M     0  378M   0% /run/user/1000
[root@anurag ~]#
[root@anurag ~]#
[root@anurag ~]# resize2fs /dev/xvdb
resize2fs 1.45.4 (23-Sep-2019)
Filesystem at /dev/xvdb is mounted on /u01/oracle; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 3
The filesystem on /dev/xvdb is now 5242880 (4k) blocks long.

[root@anurag ~]#
[root@anurag ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G   17M  1.9G   1% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/xvda2       10G  4.3G  5.7G  44% /
/dev/xvdc       7.9G  5.8G  1.7G  78% /u01/oradata
/dev/xvdd       7.9G  1.5G  6.0G  20% /u01/FRA
/dev/xvdb        20G  7.5G   12G  40% /u01/oracle
tmpfs           378M     0  378M   0% /run/user/1002
tmpfs           378M     0  378M   0% /run/user/1000
[root@anurag ~]#
[root@anurag ~]# resize2fs /dev/xvdc
resize2fs 1.45.4 (23-Sep-2019)
Filesystem at /dev/xvdc is mounted on /u01/oradata; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 3
The filesystem on /dev/xvdc is now 5242880 (4k) blocks long.

[root@anurag ~]#
[root@anurag ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G   17M  1.9G   1% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/xvda2       10G  4.3G  5.7G  44% /
/dev/xvdc        20G  5.8G   14G  31% /u01/oradata
/dev/xvdd       7.9G  1.5G  6.0G  20% /u01/FRA
/dev/xvdb        20G  7.5G   12G  40% /u01/oracle
tmpfs           378M     0  378M   0% /run/user/1002
tmpfs           378M     0  378M   0% /run/user/1000
[root@anurag ~]#
[root@anurag ~]#

Wednesday, June 10, 2020

How to check DML operations oracle


check dml operations oracle



SQL> exec dbms_stats.gather_table_stats(ownname=>'TEST',tabname=>'TEST_1')

PL/SQL procedure successfully completed.

SQL> exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;

SQL>
SQL>
SQL> select table_name,inserts,updates,deletes,truncated,timestamp from sys.dba_tab_modifications where table_owner='TEST' and table_name= 'TEST_1'
  2  ;

no rows selected

SQL>
SQL> insert  into test.test_1 select * from dba_objects;

73824 rows created.

SQL> /

73824 rows created.

SQL> commit;

Commit complete.

SQL> select table_name,inserts,updates,deletes,truncated,timestamp from sys.dba_tab_modifications where table_owner='TEST' and table_name= 'TEST_1';

TABLE_NAME                        INSERTS    UPDATES    DELETES TRU TIMESTAMP
------------------------------ ---------- ---------- ---------- --- ---------
TEST_1                             147648          0          0 NO

SQL>

Query to list Unindexed Foreign Keys



Query to get Unindexed Foreign Keys 


undefine schema_owner
set pagesize 5000
set linesize 350
column status format a10
column table_name format a30
column fk_name format a30
column fk_columns format a30
column index_name format a30
column index_columns format a30


select
      case
        when i.index_name is not null then
          'indexed'
        else
          'unindexed'
       end                  as status
      ,c.table_name         as table_name
      ,c.constraint_name    as fk_name
      ,c.fk_columns         as fk_columns
      ,i.index_name         as index_name
      ,i.index_columns      as index_columns
from
    (
      select  a.table_name
             ,a.constraint_name
             ,listagg(b.column_name, ' ' )
              within group (order by column_name) as fk_columns
      from
              dba_constraints a
             ,dba_cons_columns b
      where
              a.constraint_name = b.constraint_name
      and     a.constraint_type = 'R'
      and     a.owner           = b.owner
      and     a.owner           = '&&schema_owner'
      group by
              a.table_name
             ,a.constraint_name
    ) c
left outer join
  (
    select  table_name
           ,index_name
           ,cr
           ,listagg(column_name, ' ')
            within group (order by column_name) as index_columns
    from
        (
          select
                  table_name
                 ,index_name
                 ,column_position
                 ,column_name
                 ,connect_by_root(column_name) cr
          from
                  dba_ind_columns
          where
                  index_owner               = '&&schema_owner'
          connect
                 by prior column_position-1 = column_position
                 and prior index_name       = index_name
         )
    group by table_name
            ,index_name, cr
  ) i
      on c.fk_columns = i.index_columns
     and c.table_name = i.table_name;





SQL> undefine schema_owner
set pagesize 5000
set linesize 350
column status format a10
column table_name format a30
column fk_name format a30
SQL> SQL> SQL> SQL> SQL> SQL> column fk_columns format a30
column index_name format a30
column index_columns format a30


select
SQL> SQL> SQL> SQL> SQL>   2        case
        when i.index_name is not null then
          'indexed'
        else
          'unindexed'
       end                  as status
  3    4    5    6    7    8        ,c.table_name         as table_name
      ,c.constraint_name    as fk_name
      ,c.fk_columns         as fk_columns
      ,i.index_name         as index_name
      ,i.index_columns      as index_columns
  9   10   11   12   13  from
    (
      select  a.table_name
             ,a.constraint_name
             ,listagg(b.column_name, ' ' )
 14   15   16   17   18                within group (order by column_name) as fk_columns
      from
              dba_constraints a
 19   20   21               ,dba_cons_columns b
      where
              a.constraint_name = b.constraint_name
      and     a.constraint_type = 'R'
 22   23   24   25        and     a.owner           = b.owner
      and     a.owner           = '&&schema_owner'
 26   27        group by
 28                a.table_name
             ,a.constraint_name
    ) c
 29   30   31  left outer join
  (
    select  table_name
           ,index_name
           ,cr
 32   33   34   35   36             ,listagg(column_name, ' ')
            within group (order by column_name) as index_columns
    from
 37   38   39          (
 40            select
                  table_name
                 ,index_name
                 ,column_position
                 ,column_name
                 ,connect_by_root(column_name) cr
          from
 41   42   43   44   45   46   47                    dba_ind_columns
          where
                  index_owner               = '&&schema_owner'
          connect
                 by prior column_position-1 = column_position
                 and prior index_name       = index_name
 48           )
    group by table_name
            ,index_name, cr
 49   50   51   52   53   54   55   56    ) i
      on c.fk_columns = i.index_columns
     and c.table_name = i.table_name; 57   58
Enter value for schema_owner: HR
old  26:       and     a.owner           = '&&schema_owner'
new  26:       and     a.owner           = 'HR'
old  49:                   index_owner               = '&&schema_owner'
new  49:                   index_owner               = 'HR'

STATUS     TABLE_NAME                     FK_NAME                        FK_COLUMNS                     INDEX_NAME                     IN                       DEX_COLUMNS
---------- ------------------------------ ---------------  ------- ------------------------------ ----------------       ---------------        --------------                    
indexed    EMPLOYEES                      EMP_JOB_FK                     JOB_ID                         EMP_JOB_IX                     JO                       B_ID
indexed    EMPLOYEES                      EMP_MANAGER_FK                 MANAGER_ID                     EMP_MANAGER_IX                 MA                       NAGER_ID
indexed    EMPLOYEES                      EMP_DEPT_FK                    DEPARTMENT_ID                  EMP_DEPARTMENT_IX              DE                       PARTMENT_ID
indexed    LOCATIONS                      LOC_C_ID_FK                    COUNTRY_ID                     LOC_COUNTRY_IX                 CO                       UNTRY_ID
indexed    DEPARTMENTS                    DEPT_LOC_FK                    LOCATION_ID                    DEPT_LOCATION_IX               LO                       CATION_ID
indexed    JOB_HISTORY                    JHIST_JOB_FK                   JOB_ID                         JHIST_JOB_IX                   JO                       B_ID
indexed    JOB_HISTORY                    JHIST_EMP_FK                   EMPLOYEE_ID                    JHIST_EMPLOYEE_IX              EM                       PLOYEE_ID
indexed    JOB_HISTORY                    JHIST_DEPT_FK                  DEPARTMENT_ID                  JHIST_DEPARTMENT_IX            DE                       PARTMENT_ID
indexed    JOB_HISTORY                    JHIST_EMP_FK                   EMPLOYEE_ID                    JHIST_EMP_ID_ST_DATE_PK        EM                       PLOYEE_ID
unindexed  DEPARTMENTS                    DEPT_MGR_FK                    MANAGER_ID
unindexed  COUNTRIES                      COUNTR_REG_FK                  REGION_ID

11 rows selected.

SQL>

Tuesday, June 9, 2020

Import data in AWS Oracle RDS using datapump API




Import data in AWS Oracle RDS




copy dumpfile to s3 

[oracle@anurag dpdump]$
[oracle@anurag dpdump]$ pwd
/u01/oracle/admin/india/dpdump
[oracle@anurag dpdump]$
[oracle@anurag dpdump]$ aws s3 cp /u01/oracle/admin/india/dpdump/EXPDAT01-13_50_36.DMP s3://demodatapump
upload: ./EXPDAT01-13_50_36.DMP to s3://demodatapump/EXPDAT01-13_50_36.DMP
[oracle@anurag dpdump]$



download dumpfile from S3 to RDS instance


SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3(
p_bucket_name    =>  'demodatapump',  
p_directory_name =>  'DATA_PUMP_DIR')
AS TASK_ID FROM DUAL ;

1591366708566-339

check progress using log

SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-1591366708566-339.log'));



SQL> SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3(
p_bucket_name    =>  'demodatapump',
p_directory_name =>  'DATA_PUMP_DIR')
AS TASK_ID FROM DUAL ;  2    3    4

TASK_ID
--------------------------------------------------------------------------------
1591366708566-339

SQL>
SQL> SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-1591366708566-339.log'));

TEXT
--------------------------------------------------------------------------------
2020-06-05 14:18:30.436 UTC [INFO ] This task is about to list the Amazon S3 obj
ects for AWS Region us-west-1, bucket name demodatapump, and prefix .

2020-06-05 14:18:30.519 UTC [INFO ] The task successfully listed the Amazon S3 o
bjects for AWS Region us-west-1, bucket name demodatapump, and prefix .

2020-06-05 14:18:30.536 UTC [INFO ] This task is about to download the Amazon S3
 object or objects in /rdsdbdata/datapump from bucket name demodatapump and key
EXPDAT01-13_50_36.DMP.

2020-06-05 14:18:30.745 UTC [INFO ] The task successfully downloaded the Amazon

TEXT
--------------------------------------------------------------------------------
S3 object or objects from bucket name demodatapump with key EXPDAT01-13_50_36.DM
P to the location /rdsdbdata/datapump.

2020-06-05 14:18:30.745 UTC [INFO ] The task finished successfully.

SQL>


check list of directory 

SQL> select * from table(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) order by mtime;

FILENAME                       TYPE         FILESIZE MTIME
------------------------------ ---------- ---------- ---------
sample_copied.dmp              file           352256 29-MAY-20
sample_imp.log                 file              835 29-MAY-20
test_schema.dmp                file           352256 29-MAY-20
datapump/                      directory        4096 05-JUN-20
EXPDAT01-13_50_36.DMP          file           724992 05-JUN-20

SQL>


import  HR schema


DECLARE
hdnl NUMBER;
BEGIN
hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name=>null);
DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'EXPDAT01-13_50_36.DMP', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file);
DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'impdp_hr_schema.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file);
DBMS_DATAPUMP.METADATA_FILTER(hdnl,'SCHEMA_EXPR','IN (''HR'')');
DBMS_DATAPUMP.START_JOB(hdnl);
END;
/




SQL> DECLARE
hdnl NUMBER;
BEGIN
hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name=>null);
  2    3    4    5  DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'EXPDAT01-13_50_36.DMP', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file);
DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'impdp_hr_schema.log', directory => 'DATA_P  6  UMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file);
DBMS_DATAPUMP.METADATA_FILTER(hdnl,'SCHEMA_EXPR','IN (''HR'')');
DBMS_DATAPUMP.START_JOB(hdnl);
END;
/  7    8    9   10

PL/SQL procedure successfully completed.

SQL>
SQL>



check import log 


SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('DATA_PUMP_DIR','impdp_hr_schema.log'))


SQL> SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('DATA_PUMP_DIR','impdp_hr_schema.log'));

TEXT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Master table "ADMIN"."SYS_IMPORT_SCHEMA_01" successfully loaded/unloaded
Starting "ADMIN"."SYS_IMPORT_SCHEMA_01":
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "HR"."EMPLOYEES"                            17.08 KB     107 rows
. . imported "HR"."LOCATIONS"                            8.437 KB      23 rows
. . imported "HR"."JOB_HISTORY"                          7.195 KB      10 rows
. . imported "HR"."JOBS"                                 7.109 KB      19 rows
. . imported "HR"."DEPARTMENTS"                          7.125 KB      27 rows
. . imported "HR"."COUNTRIES"                            6.367 KB      25 rows
. . imported "HR"."REGIONS"                              5.546 KB       4 rows
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
Processing object type SCHEMA_EXPORT/VIEW/VIEW
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/TRIGGER
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Job "ADMIN"."SYS_IMPORT_SCHEMA_01" successfully completed at Fri Jun 5 14:22:36 2020 elapsed 0 00:00:19

30 rows selected.

SQL>

validate schema after import done
SQL> select owner,object_name ,object_type ,status from dba_objects where owner='HR';

OWNER                OBJECT_NAME                              OBJECT_TYPE             STATUS
-------------------- ---------------------------------------- ----------------------- ----------
HR                   DEPARTMENTS_SEQ                          SEQUENCE                VALID
HR                   EMPLOYEES_SEQ                            SEQUENCE                VALID
HR                   LOCATIONS_SEQ                            SEQUENCE                VALID
HR                   COUNTRIES                                TABLE                   VALID
HR                   COUNTRY_C_ID_PK                          INDEX                   VALID
HR                   DEPARTMENTS                              TABLE                   VALID
HR                   EMPLOYEES                                TABLE                   VALID
HR                   LOCATIONS                                TABLE                   VALID
HR                   REGIONS                                  TABLE                   VALID
HR                   JOBS                                     TABLE                   VALID
HR                   JOB_HISTORY                              TABLE                   VALID
HR                   SECURE_DML                               PROCEDURE               VALID
HR                   ADD_JOB_HISTORY                          PROCEDURE               VALID
HR                   EMP_DETAILS_VIEW                         VIEW                    VALID
HR                   DEPT_LOCATION_IX                         INDEX                   VALID
HR                   DEPT_ID_PK                               INDEX                   VALID
HR                   EMP_JOB_IX                               INDEX                   VALID
HR                   EMP_DEPARTMENT_IX                        INDEX                   VALID
HR                   EMP_MANAGER_IX                           INDEX                   VALID
HR                   EMP_EMP_ID_PK                            INDEX                   VALID
HR                   EMP_NAME_IX                              INDEX                   VALID
HR                   LOC_ID_PK                                INDEX                   VALID
HR                   LOC_COUNTRY_IX                           INDEX                   VALID
HR                   LOC_STATE_PROVINCE_IX                    INDEX                   VALID
HR                   LOC_CITY_IX                              INDEX                   VALID
HR                   REG_ID_PK                                INDEX                   VALID
HR                   JOB_ID_PK                                INDEX                   VALID
HR                   JHIST_EMP_ID_ST_DATE_PK                  INDEX                   VALID
HR                   JHIST_EMPLOYEE_IX                        INDEX                   VALID
HR                   JHIST_DEPARTMENT_IX                      INDEX                   VALID
HR                   JHIST_JOB_IX                             INDEX                   VALID
HR                   EMP_EMAIL_UK                             INDEX                   VALID
HR                   SECURE_EMPLOYEES                         TRIGGER                 VALID
HR                   UPDATE_JOB_HISTORY                       TRIGGER                 VALID

34 rows selected.


upload in S3

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3(
      p_bucket_name    =>  'demodatapump',       
      p_directory_name =>  'DATA_PUMP_DIR') 
   AS TASK_ID FROM DUAL;
   

check alert log in RDS

SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','alert_ORCL.log'));