Perl Scripting & Oracle

Where do I start with Scripting in Perl with Oracle?
Apart from Installing Perl, do i need any extra libraries to connect to an Oracle Database using a Perl Script?

both modules are separate installations. e.g. red hat provides a perl-dbi module for RHEL, AS, ... and the oracle dbd driver you can get here: http://search.cpan.org/~pythian/DBD-Oracle-1.19/Oracle.pm
http://www.orafaq.com/faqperl.htm#DBDORACLE

Similar Messages

  • Oracle Driver fails on PERL script

    I am trying to run a PERL script that accesses the Oracle database library. I get the following error:
    install_driver(Oracle) failed: Can't load '/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/DBD/Oracle/Oracle.so' for module DBD::Oracle: libclntsh.so.10.1: cannot open shared object file: No such file or directory at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230.
    at (eval 16) line 3
    Compilation failed in require at (eval 16) line 3.
    Perhaps a required shared library or dll isn't installed where expected
    I've looked, and the Oracle.so file is located in the path where it says it cant find it and the libclntsh.so.10.1 is located in the $ORACLE_HOME directory. The $ORACLE_HOME is set to /opt/instantclient_10_2 where the libclntsh.so.10.1 file is located, I also set $LD_LIBRARY_PATH to :/opt/instantclient_10_2 where the libclntsh.so.10.1 file is located. I can't seem to figure out why it won't work. Are there any other environment variables that need to be set? It seems to me that the Oracle driver should be found. Any insights would be greatly appreciated.
    Also, when I print the $ENV{'ORACLE_HOME'} variable in PERL, it doesn't print anything out. Could that be the problem?
    Thanks!
    Edited by: 804130 on Oct 21, 2010 8:59 AM
    Edited by: 804130 on Oct 21, 2010 9:24 AM

    It seems like it must be a problem with the $ORACLE_HOME value. I added the following line at the beginning of the script:
    print $ENV{'ORACLE_HOME'};
    and I get the following error message:
    Use of uninitialized value in print at ./get_closed_TR.pl line 17.
    The environment variable is set in my .bashrc profile and exported. It displays properly when I echo $ORACLE_HOME, but apparently the PERL script can't see it.
    Any ideas? Thanks again!

  • Perl Scripts in Sybase to oracle 8

    Wondering what type of libraries do I need to load onto my Sun
    OS and Perl system to make database calls to our new Oracle 8
    database system.
    Librabies to invoke?
    Sample Perl script calls?
    Thanks
    null

    <BLOCKQUOTE><font size="1" face="Verdana, Arial">quote:</font><HR>Originally posted by Oracle Migration Workbench Team:
    Mikael,
    The Oracle Migration Workbench migrates from Sybase to Oracle. For further information see http://technet.oracle.com/tech/migration .
    The Oracle Migration Workbench can be run on NT and use ODBC network connections to Sybase on (for example) solaris and Oracle sqlnet connections to Oracle on solaris.
    Turloch
    Oracle Migration Workbench Team<HR></BLOCKQUOTE>
    Thanks....
    Does The Oracle Migration Workbench migrate from Sybase ASE v.12?
    /Mikael

  • Problem in running Perl script through oracle

    Hi,
    I am facing one problem in perl script.
    " I have one perl script which is interact with sybase database.We have migrated the sybase database to oracle successfully.Now i wanna to change the perl script to interact with oracle database.
    I am using the code like that for interacting the oracle database
    Old Code with sybase database : use DBI::Sybase::GFAS;
    New code with oracle database : Use DBI::oracle::GFAS;
    When i am running the perl script,Its showing the below mentioned error:
    Can't locate DBI/oracle.pm in @INC (@INC contains: C:\oracle\product\10.2.0\db_1
    \perl\5.8.3\lib\MSWin32-x86 C:\oracle\product\10.2.0\db_1\perl\5.8.3\lib/MSWin32
    -x86-multi-thread C:\oracle\product\10.2.0\db_1\perl\5.8.3\lib C:\oracle\product
    \10.2.0\db_1\perl\5.8.3\lib\MSWin32-x86 C:\oracle\product\10.2.0\db_1\perl\site\
    5.8.3 C:\oracle\product\10.2.0\db_1\perl\site\5.8.3\lib/MSWin32-x86-multi-thread
    C:\oracle\product\10.2.0\db_1\perl\site\5.8.3\lib C:\oracle\product\10.2.0\db_1
    \sysman\admin\scripts C:/Perl/lib C:/Perl/site/lib .) at hello.pl line 4.
    BEGIN failed--compilation aborted at hello.pl line 4.
    Anyone have any idea about this error.
    Thx in advance.

    If you look in the oracle home in the perl\site\5.8.3\lib\MSWin32-x86-multi-thread directory you will see two directories. Once is DBI and one is DBD.
    All you need in your perl program is a line 'use DBI'. It will use DBD automatically as and when required. You can specify the necessary connection information when you issue the DBI->connect statement.
    I have successfully managed to connect to Oracle databases and perform DML using the software installed by default. You don't need to download and install anything else.
    I'm no perl expert so maybe some functionality is missing using the interfaces provided by Oracle but for my needs it has sufficed.
    Hope this helps.

  • Oracle 11g perl script consuming high cpu

    Hello,
    I'm running Oracle Database 11g Release 11.2.0.1.0 - 64bit Production on a Windows system and periodically it runs a perl script, parse-log1.pl and it consumes a lot of cpu. I find it irritating. I've searched around and I've seen issues if the machine has no c: drive but this machine does have a c: drive. Granted Oracle is not installed on c: drive but should that matter. I've tried looking in the script and I see no references to c: nor any of the scripts the parse-log1.pl requires. Is there any way to fix this?

    835321 wrote:
    Hello,
    I'm running Oracle Database 11g Release 11.2.0.1.0 - 64bit Production on a Windows system and periodically it runs a perl script, parse-log1.pl and it consumes a lot of cpu. I find it irritating. I've searched around and I've seen issues if the machine has no c: drive but this machine does have a c: drive. Granted Oracle is not installed on c: drive but should that matter. I've tried looking in the script and I see no references to c: nor any of the scripts the parse-log1.pl requires. Is there any way to fix this?include sleep inside loop
    http://perldoc.perl.org/functions/sleep.html

  • Calling stored procedure from Perl Script

    Need help with the syntax to call a stored procedure with an input paramter using Perl. The input paramter will be set within the perl script.

    there is an oracle module you can find on cpan
    http://cpan.org/modules/by-category/07_Database_Interfaces/Oracle
    of course, you could also use sqlplus binary, as you would do in shell
    hth

  • Using perl with Oracle DB

    Hi,
    I have perl scripts to import csv data to an existing 9.2 oracle database 32bit. It is using DBI to connect. I am moving the database in question to 10gR2 windows X64. I want the scripts to follow and run on the new server.
    I know there is an install of perl in the oracle home. Is it intended to be used by oracle internally only?
    So my question is: should I install perl separately or could I use the one shipped with oracle?
    Best wishes!

    Of course.
    You are right if more modules are required, then adding them to the oracle perl would have potentially bad effects.
    The only thing I need really is to read files, call sqlloader, connect to the DB and run some stored procedures... I will be ok then. I already tested connectivity and it all looks fine.
    Thank you very much for the input!

  • Perl Script in PLSQL

    When do we typically need to use external scripts like perl scripts while working in oracle?
    For file manipulation,perls split function would be better than pl/sql code ,however,performance wise which one is better?
    How many such scenarios are there where a perl is better to be used as opposed to pl/sql
    please advise

    That depends on where the data is. If it is outside Oracle then PL/SQL is not the best approach. The UTL_FILE I/O interface is primitive.
    If the data is inside Oracle, then PL/SQL is the best approach.
    One method to consider is loading the files to be processed by Perl, as CLOBs, into Oracle. And once in Oracle, use PL and SQL to process the contents.
    Performance wise, I expect pretty similar performance. It is unlikely that one would be significantly faster than the other in this case. Regular expressions are also supported in Oracle.
    There are however features and advantages on the Oracle side that you do not have on the o/s side with Perl. Concurrency controls. Transactions. How do you rollback changes made when in Perl? Code them - which can be complex. In PL/SQL, you simply use the rollback command. And save points are also supported.
    Other factors can include the availability of the file to other applications and web reporting systems, and security and backup.
    If the file resides outside Oracle and a web reporting system for example needs to show the file contents plus the structured data set parsed from the file... this gets hairy when Perl was used to load the structured into a database (easily accessible via web app layer) and the file still sits on the o/s (another method required by app layer to access file, another set of authentication and authorisation to deal with, etc).
    It is a lot easier if the file is a CLOB inside Oracle - as any application will use the database (single access method and point of access) to obtain both the structured data and the file's contents.
    Then there's also the issue of backups. If the file is a CLOB in the database, it is part of the backup and security mechanisms implemented on that database. No need to deal with it at o/s level and its complexities.
    Of course, I assume that these are requirements accompanying the need to process and parse the file. And that is the bottom line - the requirements should drive the decision of whether to use Perl or PL/SQL in such a case. It is not a mere matter of which one may perform better than the other (especially not when it cannot be shown that there will be a significant performance improvement).
    By the way - the above scenario is a real world one for us. And interestingly, we had more performance issues with the Perl code (huge knock on server resources) than doing the same inside Oracle using PL/SQL.

  • Calling perl script from PLSQL

    Hi All,
    I have created Java stored procedure and oracle function to execute the os commnad, this works fine for calling batch scripts but when i used same function to call perl script,
    like how we call in batch script
    perl <script name> the sql gets hanged.
    Is it possible to call perl like this?
    or is their any other way to call from plsql
    Thanks Chandra

    Are you able to run that perl script at DOS command line?
    Did you call the perl script directly from the java proc or you put the perl command line in a DOS .BAT scirpt and called that from the java proc?

  • Facing Problem in Perl Script

    Hi ,
    I m facing one problem in perl script.
    Oracle Database 10g.
    DBD::Oracle::db selectall_arrayref failed: handle 2 is owned by thread 225ffc not c
    urrent thread 1c4f8ac (handles can't be shared between threads and your driver may
    need a CLONE method added) at c:\perl\update_card_numbers_oracle.pl line 258, <STDI
    N> line 1.
    Thx in advance....

    There are forums here at OTN for Perl related issues ... this isn't it.
    Return to the list of all forums and find the one where your inquiry belongs.

  • Perl on Oracle

    Hallo,
    For perl scripting over an Oracle Database , it is required to install DBI, usually shipped with perl, and DBD:Oracle, usually installed on an Oracle Client.
    Is it safe to install DBD:Oracle on an Oracle Server with a live instance running? Does it imply a relinking of binaries?
    TIA

    There is a full version of Perl installed with the RDBMS, it has DBI built in already. You can use it, but it needs a little bit of config with shell vars to take full advantage of it. Obviously adding other modules is a not supported, but depends on how much you need to do with it.
    Norbert Debes book Secrets of the Oracle Database, goes into how to take advantage of the Oracle supplied Perl kit.
    http://apress.com/book/view/9781430219521
    If you do decide to put DBI into the local Perl on your O/S, it will not damage a running instance. The O/S compiler simply needs access to the Oracle header and library files to link to.
    You can also build Perl DBI against Oracle Instant Client, which we have done in my shop. It gives you a very lightweight Oracle client with which you can attach Perl to Oracle instances and saves having to install a huge RDBMS or full client kit.
    Rgds

  • Perl script and unix users

    Hi, I have a perl script that connects to a regular users account, using DBI/DBD::Oracle. It works fine is the UNIX user is in the oinstall group, but if its in oracle, dba or neither it gives me the following error:
    DBI connect('orcl','xxxxxxx',...) failed: ORA-24327: need explicit attach before authenticating a user (DBD ERROR: OCISessionBegin) at /terida/opt/smarthost/updatedatabases.pl line 15
    I'm guessing here that Perl DBD::Oracle needs access to a specific file in the oracle installation perhaps ? I'm also gonna wager that letting it live in the oinstall group is not recommended..
    Tips?
    Thanks

    For people running into ORA-24327 errors with DBD::Oracle: the underlying cause is often a missing hostname, but the ORA-24327 error message is misleading. I've submitted a patch for DBD::Oracle to trap and report errors like this in OCIServerAttach, which will hopefully make it into the 1.29 release.
    https://rt.cpan.org/Public/Bug/Display.html?id=68958
    Marc

  • Perl Script from PL/SQL

    Hi,
    I am trying to design a trigger which launches a Perl script as external procedure. Ias it possible to do that?
    I have found only examples of external C/Java programs.
    Thanks,
    Rafael

    Have a look at http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:952229840241
    But I don't know if it would be a good thing to do this in a trigger? Maybe it could be better to let the trigger insert a job using dbms_job.
    What does the perl script do?
    greetings
    Freek D
    Hi,
    I am trying to design a trigger which launches a Perl script as external procedure. Ias it possible to do that?
    I have found only examples of external C/Java programs.
    Thanks,
    Rafael

  • Can't open perl script "/opatch.pl": No such file or directory

    After installed Oracle 9.2.04 and applied patch p3006854, p3948480 and p4188455 on Linux AS4, I found that I can not start agent. If I execute "agentctl start", oracle will through our error like:
    Starting Oracle Intelligent Agent.../u01/app/oracle/product/9.2.0/bin/dbsnmpwd: line 156: 1855 Segmentation fault nohup $ORACLE_HOME/bin/dbsnmp $*
    $DBSNMP_WDLOGFILE 2>&1/u01/app/oracle/product/9.2.0/bin/dbsnmpwd: line 156: 1868 Segmentation fault nohup $ORACLE_HOME/bin/dbsnmp $* >>$DBSNMP_WDLOGFILE 2>&1
    /u01/app/oracle/product/9.2.0/bin/dbsnmpwd: line 156: 1880 Segmentation fault nohup $ORACLE_HOME/bin/dbsnmp $* >>$DBSNMP_WDLOGFILE 2>&1
    /u01/app/oracle/product/9.2.0/bin/dbsnmpwd: line 156: 1892 Segmentation fault nohup $ORACLE_HOME/bin/dbsnmp $* >>$DBSNMP_WDLOGFILE 2>&1
    I searched Internet and some article said p3238244 is needed. So I started to install it. At the very beginning, the error is "Can not find ../oui/OraInstall.jar". I found this file in "../oui/jlib" and copy it to "../oui". Then I run "opatch apply" and the error is "Can't open perl script "/opatch.pl": No such file or directory". This time I can not find much similiar information from google.
    Any idea?
    PS: I changed path of inventory during the installation to "/henry/cwdata" ($ORACLE_HOME=/henry/app/oracle/product/9.2). Will this action cause the error below? What is the usage of inventory path exactly?
    Much appreciated!
    Henry

    Below is my env and .bash_profile.
    [oracle@henrylinux lib]$ env
    SSH_AGENT_PID=2814
    HOSTNAME=henrylinux
    SHELL=/bin/bash
    TERM=xterm
    HISTSIZE=1000
    NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
    GTK_RC_FILES=/etc/gtk/gtkrc:/home/oracle/.gtkrc-1.2-gnome2
    WINDOWID=39880874
    OLDPWD=/home/oracle
    ORACLE_OWNER=oracle
    USER=oracle
    LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;0 1:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.b tm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31: *.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:* .bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;3 5:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:
    ORACLE_SID=ora92
    GNOME_KEYRING_SOCKET=/tmp/keyring-BckaCh/socket
    ORACLE_BASE=/henry/app/oracle
    SSH_AUTH_SOCK=/tmp/ssh-nsWlKX2762/agent.2762
    KDEDIR=/usr
    SESSION_MANAGER=local/henrylinux:/tmp/.ICE-unix/2762
    GDN_LANG=en_US
    MAIL=/var/spool/mail/oracle
    DESKTOP_SESSION=default
    PATH=/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/oracle/ bin:/henry/app/oracle/product/9.2/bin:/henry/app/oracle/product/9.2/Apache/Apach e/bin:
    INPUTRC=/etc/inputrc
    PWD=/henry/app/oracle/product/9.2/ctx/lib
    THREADS_FLAG=native
    LANG=en_US.UTF-8
    LC=en_US
    ORACLE_TERM=xterm
    GDMSESSION=default
    SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
    HOME=/home/oracle
    SHLVL=2
    LD_ASSUME_KERNEL=2.4.19
    GNOME_DESKTOP_SESSION_ID=Default
    LOGNAME=oracle
    LC_CTYPE=zh_CN.GB2312
    CLASSPATH=/henry/app/oracle/product/9.2/JRE:/henry/app/oracle/product/9.2/jlib:/ henry/app/oracle/product/9.2/rdbms/jlib:/henry/app/oracle/product/9.2/network/jl ib
    DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-Z7HVMAC8Dh
    LESSOPEN=|/usr/bin/lesspipe.sh %s
    ORA_NLS33=/henry/app/oracle/product/9.2/ocommon/nls/admin/data
    DISPLAY=:0.0
    ORACLE_HOME=/henry/app/oracle/product/9.2
    G_BROKEN_FILENAMES=1
    COLORTERM=gnome-terminal
    XAUTHORITY=/home/oracle/.Xauthority
    _=/usr/bin/env
    # .bash_profile
    # Get the aliases and functions
    if [ -f ~/.bashrc ]; then
    . ~/.bashrc
    fi
    # User specific environment and startup programs
    PATH=$PATH:$HOME/bin
    export ORACLE_BASE=/henry/app/oracle
    export ORACLE_HOME=$ORACLE_BASE/product/9.2
    export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin:/sbin
    export ORACLE_OWNER=oracle
    export ORACLE_SID=ora92
    export ORACLE_TERM=xterm
    export LD_ASSUME_KERNEL=2.4.19
    export THREADS_FLAG=native
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
    export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
    export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
    export DISPLAY=:0
    export LANG=en_US
    export GDN_LANG=en_US
    export LC=en_US
    export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib
    export LC_CTYPE=zh_CN.GB2312
    export PATH
    unset USERNAME

  • Rman/PERL scripts errors

    I am trying to automate the backups and disk maintenence on a test machine using a "Host Command" in the 10g EM environment. If I run the script from the command on the target host the scripts completes successfully.
    This is the script:
    ORACLE_HOME=/u01/app/oracle/product/9.2.0
    export ORACLE_HOME
    ORACLE_SID=coeusdba.
    export ORACLE_SID
    rman <<EOF
    connect target sys<password>@coeusdba;
    connect catalog <user>/<password>@recv;
    replace script coeusdba_full_bkp { 
    allocate channel Channel1 type disk format '/u03/orabkp/coeusdba/b_%u_%p_%c';
    backup
    ( database include current controlfile );
    backup ( archivelog all delete input );
    run { execute script coeusdba_full_bkp;}
    EOF
    /u01/app/oracle/product/9.2.0/dbs/scripts/coeusdba_new.sh
    exit
    When I execute the same script from a 10g EM "Host Command" job the script fails at the PERL command step with the following output:
    Recovery Manager: Release 9.2.0.7.0 - Production
    Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.
    RMAN>
    RMAN>
    connected to target database: COEUSDBA (DBID=1916078485)
    RMAN>
    RMAN>
    connected to recovery catalog database
    RMAN> 2> 3> 4> 5> 6> 7> 8>
    replaced script coeusdba_full_bkp
    RMAN>
    RMAN>
    executing script: coeusdba_full_bkp
    allocated channel: Channel1
    channel Channel1: sid=10 devtype=DISK
    Starting backup at NOV-01-2005 10:32:32
    channel Channel1: starting full datafile backupset
    channel Channel1: specifying datafile(s) in backupset
    including current controlfile in backupset
    input datafile fno=00006 name=/u02/oradata/coeusdba/users01.dbf
    input datafile fno=00002 name=/u03/oradata/coeusdba/undotbs01.dbf
    input datafile fno=00004 name=/u03/oradata/coeusdba/index01.dbf
    input datafile fno=00005 name=/u03/oradata/coeusdba/tools01.dbf
    input datafile fno=00007 name=/u03/oradata/coeusdba/xdb01.dbf
    input datafile fno=00001 name=/u02/oradata/coeusdba/system01.dbf
    input datafile fno=00003 name=/u02/oradata/coeusdba/drsys01.dbf
    channel Channel1: starting piece 1 at NOV-01-2005 10:32:33
    channel Channel1: finished piece 1 at NOV-01-2005 10:33:28
    piece handle=/u03/orabkp/coeusdba/b_3rh2l4q1_1_1 comment=NONE
    channel Channel1: backup set complete, elapsed time: 00:00:55
    Finished backup at NOV-01-2005 10:33:28
    Starting backup at NOV-01-2005 10:33:29
    current log archived
    channel Channel1: starting archive log backupset
    channel Channel1: specifying archive log(s) in backup set
    input archive log thread=1 sequence=49 recid=200 stamp=573215609
    channel Channel1: starting piece 1 at NOV-01-2005 10:33:32
    channel Channel1: finished piece 1 at NOV-01-2005 10:33:33
    piece handle=/u03/orabkp/coeusdba/b_3sh2l4rr_1_1 comment=NONE
    channel Channel1: backup set complete, elapsed time: 00:00:02
    channel Channel1: deleting archive log(s)
    archive log filename=/u04/arch/coeusdba/1_49.dbf recid=200 stamp=573215609
    Finished backup at NOV-01-2005 10:33:35
    Starting Control File and SPFILE Autobackup at NOV-01-2005 10:33:35
    piece handle=/u04/orabkp/coeusdba/ctl_file_bkps/c-1916078485-20051101-00 comment=NONE
    Finished Control File and SPFILE Autobackup at NOV-01-2005 10:33:38
    released channel: Channel1
    RMAN>
    RMAN>
    Recovery Manager complete.
    syntax error at /u01/app/oracle/product/9.2.0/EM10g_1/perl/lib/5.6.1/warnings.pm line 306, near "{^"
    syntax error at /u01/app/oracle/product/9.2.0/EM10g_1/perl/lib/5.6.1/warnings.pm line 311, near "{^"
    BEGIN failed--compilation aborted at /u01/app/oracle/product/9.2.0/EM10g_1/perl/lib/5.6.1/English.pm line 38.
    BEGIN failed--compilation aborted at /u01/app/oracle/product/9.2.0/dbs/scripts/rmanc.pl line 20
    Is anyone having this problem in 10g and if so , can you provide me with some insight with respect to resolution?

    The .sh script calls a perl script that parses the output of the report obsolete command in rman and deletes the obsolete datasets from disk. This shell completes from the command line with no errors. Here is the .sh and the perl script. Like I said the odd thing is that this shell executes successfully from the command line. Thanks for your interest in looking at this.
    cat coeusdba_new.sh
    /u01/app/oracle/product/9.2.0/dbs/scripts/rmanc.pl target sys/<password>@coeusdba catalog rmantest/<password>@recv redundancy 2
    rmanc.$ cat rmanc.pl
    #!/usr/bin/perl -w
    # NAME
    # rmanc.pl - delete obsolete backups and copies
    # DESCRIPTION
    # This perl script automates deletion of obsolete datafilecopies and
    # backup pieces. It uses perl strin manipulation to process the output of the RMAN
    # "report obsolete" command and creates rm commands to delete the files
    # NOTES
    # Some customization is necessary.
    # Adapted from Oracle 8i rman1.sh Unix shell script.
    # benmalek 03/08/2003 - Modified to delete backup sets and datafilecopies only
    # Does not touch backup records.
    use strict;
    #use English;
    #$ENV{ORACLE_OWNER}='oracle';
    #$ENV{ORACLE_HOME}='/disk01/app/oracle/product/9.2.0';
    $ENV{NLS_DATE_FORMAT}='DD-MON-YYYY:HH24:MI:SS';
    &PrintEnv;
    sub Usage {
    my ($arg1, @arg2) = @_;
    my $base_name = `basename $0`;
    chop($base_name);
    CASE: {
    if (!defined($arg1)) {last CASE; }
    if ($arg1 =~ /\S/) {print ("\nUnknown argument or incorrect value for: $arg1\n\n"); last CASE; }
    my $example1 = 'rmanc.pl target sys/orclpass@orcl catalog rman/rmanpass@rec redundancy 5';
    my $example2 = 'rmanc.pl target sys/orclpass@orcl nocatalog redundancy 5';
    my $usage_txt =
    " Usage: $base_name [option] ...
    option: [target CNCTSTR] [catalog CNCTSTR | nocatalog] [params 'PARMS'] [redundancy NUMBER]
    Option Description
    target CNCTSTR Connect to the target db using CNCTSTR.
    catalog CNCTSTR Connect to catalog db using CNCTSTR.
    nocatalog Don't use a recovery catalog.
    parms 'PARMS' Use PARMS string for SBT_TAPE maintenance channel.
    You can use single or double quotes depending on
    your needs. In the rman script, single-quotes
    will be used.
    redundancy NUMBER Set redundancy of backups to NUMBER.
    The catalog or nocatalog option must be specified. All others are optional
    The target option must also be specified
    Examples:
    $example1
    $example2 ";
    print ("$usage_txt \n");
    die "Exiting subroutine 'Usage'.\n";
    # Initialize default connect string variables:
    my $target=""; # force user to supply target option
    my $catalog=""; # force user to supply catalog option;
    my $parms="";
    my $redun=""; # force user to supply redundancy option;
    # process target and catalog arguments
    my $args = @ARGV;
    while ( $args > 0 ) {
    ARGS: {
    if (($ARGV[0] eq "target") && defined($ARGV[1]))
    {$target="$ARGV[0] $ARGV[1]"; shift(@ARGV); last ARGS;}
    if (($ARGV[0] eq "catalog" || $ARGV[0] eq "rcvcat") && defined($ARGV[1]))
    { $catalog="$ARGV[0] $ARGV[1]"; shift(@ARGV); last ARGS;}
    if ($ARGV[0] eq "nocatalog") { $catalog="$ARGV[0]"; last ARGS;}
    if (($ARGV[0] eq "parms") && defined($ARGV[1])) { $parms = "$ARGV[0] $ARGV[1]"; shift(@ARGV); last ARGS;}
    if (($ARGV[0] eq "redundancy") && defined($ARGV[1]) && !($ARGV[1] =~ /\D/))
    {$redun=$ARGV[1]; shift(@ARGV); last ARGS;}
    &Usage($ARGV[0]);
    shift(@ARGV);
    $args= @ARGV;
    if ((!defined($catalog) || $catalog eq "") || (!defined($target) || $target eq "") || (!defined($redun) || $redun eq "" )) {&Usage;}
    #print (" target=$target \n catalog=$catalog \n parms=$parms \n redundancy=$redun\n");
    # Get a list of obsolete disk files to delete:
    my @rman_out=`rman $target $catalog << EOF
    report obsolete redundancy=$redun device type disk;
    exit;
    EOF`;
    # debug
    print ("############################################\n");
    print ("Output of REPORT OBSOLETE REDUNDANCY=$redun\n");
    print @rman_out;
    print ("############################################\n");
    #my $command = `rman $target $catalog << EOF
    # report obsolete redundancy=$redun device type disk;
    # exit;
    # EOF"
    #open (RMAN, "$command |" );
    #my @rman_out=<RMAN>;
    # Extract the names of the obsolete files to delete
    my $line;
    my @files;
    my @dates;
    my @pieces;
    foreach $line (@rman_out) {
    if (($line =~ /Backup Piece/) && ($line =~ /\S/)) {
    my @fields=split (/\s+/, $line);
    my $nelem=@fields;
    push(@pieces, $fields[$nelem-3]);
    push(@dates, $fields[$nelem-2]);
    push(@files, $fields[$nelem-1]);
    # Verify files exists
    my $i=0;
    foreach $line (@files) {
    if (-e $line) {
    print ("Deleting backup piece or file copy: $pieces[$i] $dates[$i] $line\n");
    system("rm $line");
    } else {
    # print ("file $line does not exist. \n");
    $i = $i + 1;
    sub PrintEnv{
    my $var;
    foreach $var (sort keys %ENV) {
    print "$var: \"$ENV{$var}\".\n"
    pl

Maybe you are looking for

  • My HP OfficeJet Pro 8500a Plus won't print. Paused queue cannot resume. 'Doctor' fails to solve.

    As a Windows 7 Admin user I can print to the HP OfficeJet Pro 8500a Plus but other users cannot. Their prints go into the 'Print Queue' and neither Resume or Restart will work. Resume merely deletes it from the queue and Restart does nothing. Print a

  • Get-order of FTP-adapter (bpel/esb)

    Hello, Is it possible to change or influence the order of getting files, i.e. get files by oldest creation date? Scenario: I'm using an FTP-adapter in a bpel process to get files. The interval is set to 1 minute. However, sometimes files are created

  • IPad syncing problem - HELP!

    iPad sync problem - HELP!  I keep getting this message "...cannot be synced because there is not enough free space to hold all of the items in the iTunes library (additional ...space needed)"  and yet I seem to have plenty of space on the iPad.  This

  • Can I get an FM chip for itouch 4th gen?

    Anyone know how to get radio on a itouch 4th gen without using an app requireing wifi?

  • Log Directories in Oracle 10g RAC environment

    Hi all, Would you please tell me in which directories, the following log files will be created, in a Oracle 10g RAC enviroment. evmd.log crsd.log ocssd.log Best Regards, Narayan