Quantcast
Channel: Deiby Gomez's Activities
Viewing all articles
Browse latest Browse all 108

catcdb.sql and the util.pm issue in Oracle Database 12.2

$
0
0

A couple of days ago I was playing with Oracle Database 12.2.0.1.0 Enterprise Edition Extreme Performance (released  last week in Cloud) and I tried to create a new Container Database. As per the 12.2 documentation (that was released a couple of weeks ago) we have to execute the "catcdb.sql" script right after create a Container Database (CDB). This script is located in $ORACLE_HOME/rdbms/admin.

So after execute the CREATE DATABASE sentence (using the new Local Undo btw) I executed the script as I show you below: 


SQL> @?/rdbms/admin/catcdb.sql
SQL>
SQL> Rem The script relies on the caller to have connected to the DB
SQL>
SQL> Rem This script invokes catcdb.pl that does all the work, so we just need to
SQL> Rem construct strings for $ORACLE_HOME/rdbms/admin and
SQL> Rem $ORACLE_HOME/rdbms/admin/catcdb.pl
SQL>
SQL> Rem $ORACLE_HOME
SQL> column oracle_home new_value oracle_home noprint
SQL> select sys_context('userenv', 'oracle_home') as oracle_home from dual;

SQL>
SQL> Rem OS-dependent slash
SQL> column slash new_value slash noprint
SQL> select sys_context('userenv', 'platform_slash') as slash from dual;

SQL>
SQL> Rem $ORACLE_HOME/rdbms/admin
SQL> column rdbms_admin new_value rdbms_admin noprint
SQL> select '&&oracle_home'||'&&slash'||'rdbms'||'&&slash'||'admin' as rdbms_admin from dual;
old 1: select '&&oracle_home'||'&&slash'||'rdbms'||'&&slash'||'admin' as rdbms_admin from dual
new 1: select '/u01/app/oracle/product/12.2.0/dbhome_1'||'/'||'rdbms'||'/'||'admin' as rdbms_admin from dual

SQL> Rem $ORACLE_HOME/rdbms/admin/catcdb.pl
SQL> column rdbms_admin_catcdb new_value rdbms_admin_catcdb noprint
SQL> select '&&rdbms_admin'||'&&slash'||'catcdb.pl' as rdbms_admin_catcdb from dual;
old 1: select '&&rdbms_admin'||'&&slash'||'catcdb.pl' as rdbms_admin_catcdb from dual
new 1: select '/u01/app/oracle/product/12.2.0/dbhome_1/rdbms/admin'||'/'||'catcdb.pl' as rdbms_admin_catcdb from dual

SQL> SQL> host perl -I &&rdbms_admin &&rdbms_admin_catcdb --logDirectory &&1 --logFilename &&2
Enter value for 1: /u01/app/oracle/product/12.2.0/dbhome_1/rdbms/admin
Enter value for 2: /u01/app/oracle/product/12.2.0/dbhome_1/rdbms/admin/catcdb.pl

The script asked me to type two values. Firstly the documentation doesn't say catcdb.pl will request  some inputs, I felt this strange.

Well I spent a couple of seconds to figure out which values should I put for the bind variables :1 and :2 but when I saw the previous lines (in green color) I saw that the values were built already by the script but for some reason it is not using them properly. Anyways I used the values obtained from the previous lines and I hit Enter. The result, was an error, the following one:

Can't locate util.pm in @INC (you may need to install the util module) (@INC contains: /u01/app/oracle/product/12.2.0/dbhome_1/rdbms/admin /u01/app/oracle/product/12.2.0/dbhome_1/perl/lib/site_perl/5.22.0/x86_64-linux-thread-multi /u01/app/oracle/product/12.2.0/dbhome_1/perl/lib/site_perl/5.22.0 /u01/app/oracle/product/12.2.0/dbhome_1/perl/lib/5.22.0/x86_64-linux-thread-multi /u01/app/oracle/product/12.2.0/dbhome_1/perl/lib/5.22.0 .) at /u01/app/oracle/product/12.2.0/dbhome_1/rdbms/admin/catcdb.pl line 35.
BEGIN failed--compilation aborted at /u01/app/oracle/product/12.2.0/dbhome_1/rdbms/admin/catcdb.pl line 35.

Here different thoughts came to my mind, but the first thought was: Perhaps I provided wrong values, but since these "inputs" are not documented I didn't know what to type. After investigation, I found the values were correct (now you don't  have to spend time on this [:)] ). I found that the problem was the "util.pm"  perl module. While my investigation I had to take a look into the "catcdb.pl" file in the line #35 as the error says:

vi /u01/app/oracle/product/12.2.0/dbhome_1/rdbms/admin/catcdb.pl

Line #32   use Cwd;
Line #33   use File::Spec;
Line #34   use Data::Dumper;
Line #35   use util qw(trim, splitToArray);
Line #36   use catcon qw(catconSqlplus);

I searched that perl module in my filesystem:

[oracle@NuvolaDB $]$ find $ORACLE_HOME -name util.pm | wc -l
0

But interestingly I didn't find any, then I tried (just for fun) to search "Util" instead of "util":

[oracle@NuvolaDB ~]$ find $ORACLE_HOME -name Util.pm | wc -l
5

I had 5 results [:O]

[oracle@NuvolaDB ~]$ find $ORACLE_HOME -name Util.pm
/u01/app/oracle/product/12.2.0/dbhome_1/perl/lib/site_perl/5.22.0/HTTP/Headers/Util.pm
/u01/app/oracle/product/12.2.0/dbhome_1/perl/lib/5.22.0/x86_64-linux-thread-multi/Hash/Util.pm
/u01/app/oracle/product/12.2.0/dbhome_1/perl/lib/5.22.0/x86_64-linux-thread-multi/Sub/Util.pm
/u01/app/oracle/product/12.2.0/dbhome_1/perl/lib/5.22.0/x86_64-linux-thread-multi/Scalar/Util.pm
/u01/app/oracle/product/12.2.0/dbhome_1/perl/lib/5.22.0/x86_64-linux-thread-multi/List/Util.pm
[oracle@NuvolaDB ~]$

I changed the line #35 in the catcdb.sql file. I replaced "util" by "Util":

vi /u01/app/oracle/product/12.2.0/dbhome_1/rdbms/admin/catcdb.pl

Line #32     use Cwd;
Line #33     use File::Spec;
Line #34     use Data::Dumper;
Line #35     use Util qw(trim, splitToArray);
Line #36     use catcon qw(catconSqlplus);

Then I re-executed catcdb.pl and I got the same error, but, since I was pretty sure that Util.pm exists I thought "perhaps I have to include the directory where the Util.pm is located? So Included in the PATH env variable the directory where one Util.pm was located, it didn't work [:(]   . Then I thought "Should I move to that directory?" Perhaps Oracle is not calling Util.pm from PATH env variable but using "." (current directory) to call it. I decided to move there:

[oracle@NuvolaDB ~]$ cd /u01/app/oracle/product/12.2.0/dbhome_1/perl/lib/5.22.0/x86_64-linux-thread-multi/Hash/

I re-executed catcdb.pl again and guess what? it worked [:)]

SQL> host perl -I &&rdbms_admin &&rdbms_admin_catcdb --logDirectory &&1 --logFilename &&2

Enter value for 1: /u01/app/oracle/product/12.2.0/dbhome_1/rdbms/admin
Enter value for 2: /u01/app/oracle/product/12.2.0/dbhome_1/rdbms/admin/catcdb.pl
Enter new password for SYS: Nuvola1
Enter new password for SYSTEM: Nuvola1
Enter temporary tablespace name: temp
No options to container mapping specified, no options will be installed in any containers
....
....
catcon.pl: completed successfully

SQL>

The script lasted several minutes (more than 1hour) to complete but that is another story.... So, to fix the issue of util.pm do the the following:

  • Change Line #35 in catcdb.pl replacing "util" by "Util"
  • Move to the directory where "Util.pm" is located and from there exeucte catcdb.pl

Follow me:

      


Viewing all articles
Browse latest Browse all 108

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>