Thursday, November 19, 2015

Shell Script for log file cleanup

Problem :

lets find the list of file that are older than 30days. That has extension of *.log

-rw-r--r-- 1 oracle oinstall        513 Jul 28 08:27 change_pass.sql
-rw-r----- 1 oracle oinstall     188416 Jul 30 11:37 testnetlink.dmp
-rw-r--r-- 1 oracle oinstall       1477 Jul 30 11:37 impi_temp.log
-rw-r--r-- 1 oracle oinstall       1433 Jul 30 12:58 impi1_temp.log

Requirement :

Now I want to remove the files that are older than 30 days and at same time I want keep a log of the files that are being deleted.


### Script starts here ###

#!/usr/bin/ksh

cd /u01/app/oracle/dpump; ## location where I want to cleanup the log files
echo " we are now in : `pwd`"


for FILE in `find /u01/app/oracle/dpump/*.log -mtime +30`
   do echo $FILE
   rm -f $FILE ##2>/dev/null # Gets rid of directory or permission errors
done  2>&1 1> /u01/app/oracle/dpump/log.txt




sample output of log file :

lets see what is captured in cleanup log file.

cat u01/app/oracle/dpump/log.txt

u01/app/oracle/dpump/AUDIT_PART1.log
/u01/app/oracle/dpump/impi1_temp.log
/u01/app/oracle/dpump/impi_temp.log
/u01/app/oracle/dpump/test1.log

Thursday, November 5, 2015

shell script to find files in a directory



####This script starts here ####
###This script cheks if the a file exist current Directory ##
## script will propmt for filename ##
#!bin/ksh

echo "eneter Filename :"
read DUMPFILE;
echo " **** checking if the File exists **** "
if [ -e ${DUMPFILE} ];
then
echo " **** Given file exists in directory `pwd` ****"
else
echo " **** ERRR : Given file does not exist in directory `pwd` ****"
fi


Lets see how to use this code :



atoorpu@Linux01:[~/scripts] $ ls -al testfile
ls: testfile: No such file or directory

atoorpu@Linux01:[~/scripts] $ . check_file.sh
eneter Filename :
testfile
 **** checking if the File exists ****
 **** ERRR : Given file does not exist in directory /home/atoorpu/scripts ****

atoorpu@Linux01:[~/scripts] $ touch testfile

atoorpu@Linux01:[~/scripts] $ ls -al testfile
-rw-rw-r-- 1 atoorpu atoorpu 0 Oct 23 14:03 testfile

atoorpu@Linux01:[~/scripts] $ . check_file.sh
eneter Filename :
testfile
 **** checking if the File exists ****
 **** Given file exists in directory /home/atoorpu/scripts ****

atoorpu@Linux01:[~/scripts] $
atoorpu@Linux01:[~/scripts] $

using UNIX pipes to export oracle table and compress

Script explanation:

This script is to export the dump file and compress the exported data using UNIX pipes. This method is best suited when there is not enough space on disk. The file exported and compressed at same time, this method will not require much space while exporting the dumpfile.

Note: Using of UNIX pipe's will also speed up the export process & yes there will consume a good amount of CPU.



#!/usr/bin/ksh:


#### This script will export the dumpfile and compress at same time using linux pipe
#### You can use normal gunzip cmd to unzip the zipped file
####

export mydate=`date "+%d%b%Y"`;
export TEST_BAK=TEST_MKNOD_"$mydate";
DUMPFILE=$TEST_BAK".dmp";  ## Setting dumpfile name here
LOGFILE=$TEST_BAK".log";            ## Setting logfile name here
DPUMP=/u01/app/oracle/dpump;                  ## Setting target directory for dump & log



## create exp
## you can use the pipe for compress the file
mknod $DPUMP/exp.pipe p

## compress dmp with file using pipe
gzip < $DPUMP/exp.pipe > $DPUMP/$DUMPFILE.gz &

exp USERNAME/PASSWORD@ORCL file="$DPUMP"/exp.pipe log="$DPUMP/$LOGFILE" tables=TEST statistics=none

## remove the pipe created
rm $DPUMP/exp.pipe

echo $' \n ';

echo " export completed "

Shell script - Check if the files exists in a file


This is a simple script to look for a file in a given location.



















#!/usr/bin/ksh
 
echo " File name please : "
read FILENAME;
dataDir=/u01/app/oracle/dpump; ### Directory to look for a file ###
sourceFile=SCOTT.dmp; ### file name to search for ###
 
cd /u01/app/oracle/dpump;
echo " Present directory : " `pwd`"";
 
##Did we get a file?
 
if [ -e ${dataDir}/${sourceFile} ];
then
echo "Found file !! "

else
echo " No file found !!! "

fi

Backup unix files and folders using tar - compress and backup files





Because of various reasons some of which hearken back to the era of tape drives, Unix uses a program named tar to archive data, which can then be compressed with a compression program like gzip, bzip2, 7zip, etc.

In order to "zip" a directory, the correct command would be

tar -zcvf archive.tar.gz directory/
This will tell tar to c (create) an archive from the files in directory (tar is recursive by default), compress it using the z (gzip) algorithm, store the output as a f (file) named archive.tar.gz, and v (verbosely) list all the files it adds to the archive.

To decompress and unpack the archive into the current directory you would use

----------------------------------
ARCHIVE FOLDER CONTENTS & CREATE NEW BACKUP FILE:
----------------------------------

atoorpu@linux01:[~] $ tar -zcvf Output_File.tar.gz SourceFile
ziptest/
ziptest/readme1.txt

--->>> Output_File.tar.gz   >>>   output file
--->>> SourceFile >>> source directory

atoorpu@linux01:[~] $ ls
oswbb733.tar                       patches                readme.txt  sys_checker.sh  ziptest.tar.gz
p19543113_851499_Linux-x86-64.zip  pitt_4_21_2014.dmp.gz  scripts     ziptest1

LIST CONTENTS OF TAR FILE:

atoorpu@linux01:[~] $ tar -ztvf ziptest.tar.gz
drwxrwxr-x atoorpu/atoorpu   0 2015-08-27 14:16:41 ziptest/
-r--r--r-- atoorpu/atoorpu  50 2015-08-27 14:14:20 ziptest/readme1.txt

----------------------------------
EXTRACT/UNTAR THE FILE USE :
----------------------------------

To extract one or more members from an archive, enter:
$ tar -zxvf {file.tar.gz}

If your tarball name is backup.tar.gz, enter the following at a shell prompt to extract files:
$ tar -zxvf backup.tar.gz

To extract resume.doc file from backup.tar.gz tarball, enter:
$ tar -zxvf backup.tar.gz resume.doc

Simple Shell script to execute a sql from UNIX





This is a simple shell script to execute a sql from UNIX shell script.


#!/usr/bin/ksh

export ORACLE_SID=ORCL
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export PATH=$ORACLE_HOME/bin:/usr/local/bin:$PATH
export mydate=`date "+%d%b%Y"`


echo " ************** EXECUTING SQL STARTS HERE ************ "

sqlplus -s USERNAME/PASSWORD@ORCL > /u01/app/oracle/dpump/test.log  <<EOF

SET SERVEROUTPUT ON;
SET FEED OFF;

select name from v\$database;

SET SERVEROUTPUT OFF;
EOF

echo " ************** END OF SQL HERE ************ "

Shell script to export a schema and move it to different server





#!/usr/bin/ksh

### local_path is the data pump directory in local server.
### remote_path is the target location in the remote server.
### RMTSERVER is the ip adress (or) hostname of remote host.

export mydate=`date "+%d%b%Y"`;
local_path=/u01/oracle/DPUMP;
RMTSERVER=10.176.33.99;  ### We are hard coding the remote server here ###
remote_path=/u01/app/oracle/dpump;

## echo "Enter Password:"
##read PASSWORD;

echo "Enter SCHEMA name:"
read SCHEMA;


expdp EXPORT_USER/PASSWORD directory=DPUMP dumpfile="$SCHEMA"_"$mydate".dmp logfile="$SCHEMA"_exp"$mydate".log schemas="$SCHEMA" COMPRESSION=ALL

echo "Export Completed"

cd /u01/oracle/DPUMP;
echo `pwd`
export DUMP_FILE="$SCHEMA"_"$mydate".dmp
sftp $RMTSERVER  <<EOF

cd $remote_path;
put $DUMP_FILE

EOF

Unix Permissions and values







Change UNIX permissions by using the simple command.


Syntax:


chmod 775 filename or foldername


Example:



chmod 775 test.txt


In the above cmd we are changing the permission of test file to 775 (Read/Write/Execute).


Below is the table of permissions.


UNIX Permissions:
ValuePermissionDirectory Listing
0No read, no write, no execute---
1No read, no write, execute--x
2No read, write, no execute-w-
3No read, write, execute-wx
4Read, no write, no executer--
5Read, no write, executer-x
6Read, write, no executerw-
7Read, write, executerwx
rwx rwx rwx = 111 111 111 rw- rw- rw- = 110 110 110 rwx --- --- = 111 000 000 and so on... rwx = 111 in binary = 7 rw- = 110 in binary = 6 r-x = 101 in binary = 5 r-- = 100 in binary = 4

exception handling in shell script

Problem :

I have a a situation where I want to execute script1 and then script 2 in sequence.. But at same time want to make sure if script1 fails, script2 doesn't get executed. In this case I want to explain how to break the script if there were some errors in

lets create twp scripts script1.sh as below

#!bin/ksh
echo " this is with in script 1 "

create script2.sh as below

#!bin/ksh
echo " this is with in script 2 "


now lets create another script handle_errors.sh as below

#!bin/ksh
script1.sh
rc=$?
if [ ${rc} -eq 0 ];then
echo "script1 pass, starting script2"
  script2.sh
  rc=$?
  if [ ${rc} -eq 0 ];then
   echo "script2 pass"
  else
   echo "script2 failed"
  fi
else
 echo "script1 failed"
fi

Sample output :

atoorpu@Linux01:[~/scripts] $ . handle_errors.sh
this is from script1
script1 passed, starting script2 now !!
 this is from script2
script2 has passed
atoorpu@Linux01:[~/scripts] $


now if  you want to mess around you can update one of script1 or script2 :

I changed script1.sh to below now :

#/bin/sh
this is from script1"


If you see here the script has failed on script1 and it didn't go to script2 

atoorpu@Linux01:[~/scripts] $ . handle_errors.sh
-bash: /home/atoorpu/scripts/script1.sh: line 2: unexpected EOF while looking for matching `"'
-bash: /home/atoorpu/scripts/script1.sh: line 4: syntax error: unexpected end of file
script1 failed !!