Friday, 29 May 2020

Find Client IP from SQL Server ERRORLOG



sp_configure 'show advanced options', 1 
GO 
RECONFIGURE; 
GO 
sp_configure 'Ole Automation Procedures', 1 
GO 
RECONFIGURE; 
GO 
sp_configure 'show advanced options', 1 
GO 
RECONFIGURE;




CREATE TABLE errorLog (LogDate DATETIME, ProcessInfo VARCHAR(64), [Text] VARCHAR(MAX));





INSERT INTO errorLog
EXEC sp_readerrorlog  -- specify the log number or use nothing for active error log






CREATE FUNCTION RegexBysp_OA (@subject varchar(max), @pattern varchar(4000))
RETURNS varchar(4000)
AS
BEGIN
DECLARE @objRegexExp INT, 
@objMatch INT, 
@Result VARCHAR(8000) --Creating COM object
EXEC sp_OACreate 'VBScript.RegExp', @objRegexExp OUT--Assigning Properties to COM object
EXEC sp_OASetProperty @objRegexExp, 'Pattern', @pattern
EXEC sp_OASetProperty @objRegexExp, 'IgnoreCase', 1
EXEC sp_OASetProperty @objRegexExp, 'MultiLine', 1
EXEC sp_OASetProperty @objRegexExp, 'Global', false
EXEC sp_OASetProperty @objRegexExp, 'CultureInvariant', true --Executing the COM object
EXEC sp_OAMethod @objRegexExp, 'execute', @objMatch OUT, @subject--Fetching the first matching value
EXEC sp_OAGetProperty @objmatch, 'item(0).Value' , @Result OUT--Releasing COM object after use
EXEC sp_OADestroy @objMatch
EXEC sp_OADestroy @objRegexExp RETURN @Result
END
GO




--To Check the function
select *, master.dbo.RegexBysp_OA(Text,'(?:[0-9]{1,3}\.){3}[0-9]{1,3}') as [IP_Address] from


CREATE TABLE IP_Address (IP_Address VARCHAR(64));

  INSERT INTO IP_Address 
SELECT  master.dbo.RegexBysp_OA(Text,'(?:[0-9]{1,3}\.){3}[0-9]{1,3}') as [IP_Address]
 FROM errorLog 



select count(*) "Connection Count", IP_Address from IP_Address  where IP_Address is not null group by IP_Address order by 1;






Based on above result you can implement firewall to block specific IP to made connection to SQL Server.

Find Client IP from listener log

Some time we need to know who has made a connection attempt (successful/ unsuccessful ) because listener log is capturing all the connection attempts.

cd $ORACLE_BASE/diag/tnslsnr/$HOSTNAME/<listener name>/trace

ls -ltr 
-rw-rw----. 1 oracle oracle 3733 May 29 10:22 listener.log

cat listener.log | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | sort | uniq -c | sort -n
  
if you want to save the screen out to a file:

grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' listener.log | sort | uniq -c | sort -n > listener_unique_ip.txt




Unique Attempt Counts IP
 1 10.1.**.39
 4 10.1.**.77
 33 10.1.**.76


Based on above result you can implement ACL in sqlnet.ora by tcp.invited_nodes.

Thursday, 28 May 2020

Adding Datafile in Oracle Tablespace by Dynamic SQL


1. Check OS Free Space by Toad / SQL Developer
2. Add Datafile based on particular tablespace datafile number
3. Add Datafile based on overall database datafile number

Add Datafile based on particular tablespace datafile number



define v_path = '';
select 'ALTER TABLESPACE '|| TBS_NAME ||' ADD DATAFILE  ''&v_path'||lower(TBS_NAME)||'_'||max(df#+1)||'.dbf'''||
' SIZE 5G AUTOEXTEND ON NEXT 512M MAXSIZE 31G;' as cmd
FROM  (
select df.file# as df#,df.ts#,df.name,tbs.name as TBS_NAME from v$datafile df,v$tablespace tbs
where df.ts#=tbs.ts#  and tbs.name=upper('&name')) group by TBS_NAME;

Enter the datafile path and tablespace name.







Generated SQL:

ALTER TABLESPACE FCAT ADD DATAFILE  '/data1/oradata/fcat_73.dbf' SIZE 5G AUTOEXTEND ON NEXT 512M MAXSIZE 31G;

copy this generated SQL and run, datafile successfully added!

Add Datafile based on overall database datafile number


define v_path = '';

select 'ALTER TABLESPACE '|| TBS_NAME ||' ADD DATAFILE  ''&v_path'||lower(TBS_NAME)||'_'||(select max(file#+1)from v$datafile)||'.dbf'''||
' SIZE 5G AUTOEXTEND ON NEXT 512M MAXSIZE 31G;' as cmd
FROM  (
select df.file# as df#,df.name,tbs.name as TBS_NAME from v$datafile df,v$tablespace tbs
where df.ts#=tbs.ts#  and tbs.name=upper('&name')) group by TBS_NAME;

Enter the datafile path and tablespace name.





Generated SQL:

ALTER TABLESPACE FCAT ADD DATAFILE  '/data1/oradata/fcat_74.dbf' SIZE 5G AUTOEXTEND ON NEXT 512M MAXSIZE 31G;

copy this generated SQL and run, datafile successfully added!



Friday, 22 May 2020

Kill Blocking Sessions in RAC

select decode(request,0,'Holder: ','Waiter: ') || gv$lock.sid ses, 'alter system kill session ''||gv$lock.sid||','||gvs.serial#||',@'||gvs.inst_id||''';'  from gv$lock join gv$session gvs  on gv$lock.sid=gvs.sid  and gv$lock.inst_id=gvs.inst_id join gv$locked_object lo  on gv$lock.sid = lo.session_id and gv$lock.inst_id=lo.inst_id join dba_objects do on lo.object_id = do.object_id where (id1, id2, gv$lock.type) in (select id1, id2, type from gv$lock where request>0) order by id1, request;

Command Syntax:

 Alter system kill session 'sid,serial#,@inst_id' ;



copy the generated SQL command and execute.

alter system kill session '1523,3805,@1';


Tuesday, 19 May 2020

Check OS Free Space by Toad / SQL Developer

1. Create a Databae Directory

create or replace directory DATA_PUMP_DIR as '/oracle/app/admin/e2edb/dpdump/'

2. Make Script

cd /oracle/app/admin/e2edb/dpdump/

vi run_df.sh
#/bin/bash

/bin/df -Pl

chmod 775 run_df.sh


3. Create External Table

CREATE TABLE df
   (
     "FILESYSTEM" VARCHAR2(100),
     "BLOCKS" NUMBER,
     "USED" NUMBER,
     "AVAILABLE" NUMBER,
     "CAPACITY" VARCHAR2(10),
     "MOUNT" VARCHAR2(100)
   )
   ORGANIZATION external
   (
     TYPE oracle_loader
     DEFAULT DIRECTORY DATA_PUMP_DIR
     ACCESS PARAMETERS
     (
       RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII
           preprocessor  DATA_PUMP_DIR:'run_df.sh'
       READSIZE 1048576
       SKIP 1
       FIELDS TERMINATED BY WHITESPACE LDRTRIM
       REJECT ROWS WITH ALL NULL FIELDS
       (
         "FILESYSTEM" CHAR(255)
           TERMINATED BY WHITESPACE,
         "BLOCKS" CHAR(255)
           TERMINATED BY WHITESPACE,
         "USED" CHAR(255)
           TERMINATED BY WHITESPACE,
         "AVAILABLE" CHAR(255)
           TERMINATED BY WHITESPACE,
         "CAPACITY" CHAR(255)
           TERMINATED BY WHITESPACE,
         "MOUNT" CHAR(255)
           TERMINATED BY WHITESPACE
       )
     )
     location
     (
       DATA_PUMP_DIR:'run_df.sh'
     )
   )
   /
alter table df reject limit unlimited;
   
   
4. Check Functionality 
select * from df;



5. Create View
create or replace view dfv as
select Mount,blocks/1024/1024 as "Allocated_GB",available/1024/1024 as "Free_GB",Used/1024/1024 as "Total_Used",capacity as "%Used"from df order by 5 desc

select * from dfv





For AIX

1. Create a Databae Directory

create or replace directory DATA_PUMP_DIR as '/oracle/11.2.0/admin/treasury/dpdump/'



2. Make Script

cd /oracle/11.2.0/admin/treasury/dpdump/

vi run_df.sh
#/bin/bash

/bin/df -k

chmod 775 run_df.sh


3. Create External Table
CREATE TABLE df
   (
     "FILESYSTEM" VARCHAR2(100),
     "GB blocks" NUMBER,
     "Free" NUMBER,
     "%Used" VARCHAR2(1000),
     "Iused" VARCHAR2(10),
     "%Iused" VARCHAR2(100),
     "Mounted on" VARCHAR2(1000)
   )
   ORGANIZATION external
   (
     TYPE oracle_loader
     DEFAULT DIRECTORY DATA_PUMP_DIR
     ACCESS PARAMETERS
     (
       RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII
           preprocessor  DATA_PUMP_DIR:'run_df.sh'
       READSIZE 1048576
       SKIP 1
       FIELDS TERMINATED BY WHITESPACE LDRTRIM
       REJECT ROWS WITH ALL NULL FIELDS
       (
         "FILESYSTEM" CHAR(255)
           TERMINATED BY WHITESPACE,
         "GB blocks" CHAR(255)
           TERMINATED BY WHITESPACE,
         "Free" CHAR(255)
           TERMINATED BY WHITESPACE,
         "%Used" CHAR(255)
           TERMINATED BY WHITESPACE,
         "Iused" CHAR(255)
           TERMINATED BY WHITESPACE,
         "%Iused" CHAR(255)
           TERMINATED BY WHITESPACE,
            "Mounted on" CHAR(500)
           TERMINATED BY WHITESPACE
           
       )
     )
     location
     (
       DATA_PUMP_DIR:'run_df.sh'
     )
   )
   /
alter table df reject limit unlimited;



select * from df;

create or replace view dfv as select "Mounted on" as "Mount","GB blocks"/1024/1024 as "Allocated_GB","Free"/1024/1024 as "Free_GB",("GB blocks"-"Free")/1024/1024 as "Total_Used","%Used" as "%Used" from df
order by 5 desc;

select * from dfv



Referece:
https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:5088536900346242095

Monday, 18 May 2020

AVDF Sowing failed upgrade after installing pre-upgrade package

We installed AVDF 12.2.0.12 pre-upgrade package and rebooted the machine. After the server  reboot it was showing failed upgrade on console and ssh session.

Error:


SYSTEM_STATE=RECOVERY 
INSTALL_STATE=NOT_APPLICABLE
BOOT_STATE=RUNTIME
MIGRATION_SET=POSTRDBMS
MIGRATION_SET_HASH=1000F81C5C6727EF98748CA8CEF2BDA1FFF2B5E855EA86D4AFEFF19AC7EFC206
MIGRATION_SET_STATE=SUCCEEDED
MIGRATION=87
MIGRATION_STATE=SUCCEEDED
MIGRATION_DETAILS=6C61737420286173206E6F626F647929
UPGRADE_STATE=PRE_UPGRADING 


Solution:

The issue is with the pre-upgrade package in place the RPM is going to trigger a recovery state message.
Remove the pre-upgrade package and update /etc/sysconfig/avdf

SYSTEM_STATE="RUNTIME"
UPGRADE_STATE="NOT_APPLICABLE"

If the warning messages is seen again that its in recovery state

/usr/bin/install -m 0644 -o root -g root /dev/null /etc/motd -- will clear the MOTD and avoid false warnings


AVDF 12.2.0.12 Upgrade Failed



[root@avs upgrade]# /usr/bin/avdf-upgrade --confirm
Please wait while validating SHA256 checksum for /var/dbfw/upgrade/avdf-upgrade-12.2.0.12.0.iso
Checksum validation successfull for /var/dbfw/upgrade/avdf-upgrade-12.2.0.12.0.iso
Mounting /var/dbfw/upgrade/avdf-upgrade-12.2.0.12.0.iso on /images
mount: /var/dbfw/upgrade/avdf-upgrade-12.2.0.12.0.iso is write-protected, mounting read-only
Successfuly mounted /var/dbfw/upgrade/avdf-upgrade-12.2.0.12.0.iso on /images

Power loss during upgrade may cause data loss. Do not power
off during upgrade.

Please review Note ID 2235931.1 for a current list of known issues.
Failed to apply update: Not all processes were stopped: 35700 or the processes have been restarted.
Failed to apply update: /images/upgrade/lib/common.rb:606:in `stop_nonroot_processes'
upgrade.rb:107:in `upgrade'
upgrade.rb:258:in `<main>'
Unmounted /var/dbfw/upgrade/avdf-upgrade-12.2.0.12.0.iso on /images

Solution:
If you have open multiple ssh sessions please close all sessions and reconnect only one ssh session and start your upgrade or simply start your upgrade by taking Audit Vault server's console.