Friday, October 18, 2024

Patching fails during relink , with error code 102 :: Fatal error: Command failed for target `javavm_refresh'

Patching fails during relink , with error code 102 :: Fatal error: Command failed for target `javavm_refresh' 


REFER DOC ID (Doc ID 2002334.1) for the details


ERRORS like

Caused by: java.lang.Error: Re-link fails on target "javavm_refresh".

Patching fails during relink , with error code 102 :: Fatal error: Command failed for target `javavm_refresh' 

Stack Description: java.lang.RuntimeException: Re-link fails on target "javavm_refresh".







Symptoms
Patch Apply fails with below error:

Symptom 1:

Make failed to invoke "/usr/ccs/bin/make -f ins_rdbms.mk javavm_refresh ioracle ORACLE_HOME=/u01/app/oracle/product/db/12.1.0.2"....'Can't locate File/Copy.pm in @INC (@INC contains: ../lib/site_perl/5.14.1/sun4-solaris-thread-multi-64 ../lib/site_perl/5.14.1 ../lib/5.14.1/sun4-solaris-thread-multi-64 ../lib/5.14.1 .) at /u01/app/oracle/product/db/12.1.0.2/javavm/install/update_javavm_binaries.pl line 62.
BEGIN failed--compilation aborted at /u01/app/oracle/product/db/12.1.0.2/javavm/install/update_javavm_binaries.pl line 62.
make: Fatal error: Command failed for target `javavm_refresh'

The following make actions have failed :

Re-link fails on target "javavm_refresh ioracle".



Symptom 2:

 Make failed to invoke "/usr/bin/make -f ins_rdbms.mk javavm_refresh patchset_opt_all ioracle
ORACLE_HOME=/u01/app/oracle/pro
duct/12.1.0/db_1"....'make: perl: Command not found
make: *** [javavm_refresh] Error 127
 

Cause
PERL5LIB environment variable is not set
 

Solution
Oracle provided Perl needs to be referenced at the beginning of the PATH and PERL5LIB for Patch apply or rollback.

Set PATH and PERL5LIB environment variable and apply patch again.

export PATH=$ORACLE_HOME/perl/bin:$PATH
export PERL5LIB=$ORACLE_HOME/perl/lib






Monday, April 29, 2024

ORA-19751: could not create the change tracking file ORA-19750: change tracking file: ORA-17502: ksfdcre:4 Failed to create file


ISSUE

SQL> alter database open resetlogs;

alter database open resetlogs
*
ERROR at line 1:
ORA-19751: could not create the change tracking file
ORA-19750: change tracking file:
'+DATA/DB_NAME/CHANGETRACKING/ctf.281.1234567789'
ORA-17502: ksfdcre:4 Failed to create file
+DATA/DB_NAME/CHANGETRACKING/ctf.281.1234567789
ORA-15046: ASM file name
'+DATA/DB_NAME/CHANGETRACKING/ctf.281.1234567789' is not in
single-file creation form
ORA-17503: ksfdopn:2 Failed to open file
+DATA/DB_NAME/CHANGETRACKING/ctf.281.1234567789
ORA-15012: ASM file '+DATA/DB_NAME/CHANGETRACKING/ctf.281.1234567789'

does not exist


ACTIONS PERFORMED

Database was restored and recovered using rman and attempted to open with resetlogs.

Source Database using a 'block change tracking' file stored in ASM. Controlfile and Database is restored and recovered successfully but the open resetlogs fails with above errors.


ISSUE IS DUE TO

The change tracking file is originally created like this:
.
SQL> alter database enable block change tracking using file '+<DGNAME>';

Because the change tracking file is created by only specifying the ASM Diskgroup, a fully qualified ASM name is used for this file and stored in the DataDictionary.
When this file is not found during the open phase, the same filename will be used to recreate the file automatically by using the fully qualified ASM name which is not allowed, hence the error.

Bug 5362418 is opened for this has been closed as a duplicate of 11744544.



SOLUTION

Disable  the block change tracking 

- try OPEN RESTLOGS again, if any error, open normally.

- And enable block chnage tracking again, Use an ASM alias in the diskgroup. This way, the alias will be recreated successfully (which in turn will be linked to a new ASM fully qualified name behind the scenes)



SQL> alter database disable BLOCK CHANGE TRACKING;

Database altered.


SQL> alter database open resetlogs;

alter database open resetlogs

*

ERROR at line 1:

ORA-01139: RESETLOGS option only valid after an incomplete database recovery


SQL>  alter database open;

Database altered.


SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '+DATA';

Database altered.








Friday, February 9, 2024

ORA-04063: package body "SYS.DBMS_RCVMAN" has errors

 

ISSUE DESCRIPTION

rman target /


Recovery Manager: Release 12.2.0.1.0 - Production on Fri Feb 9 19:26:23 2024


Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.


ORACLE error from target database:

ORA-04063: package body "SYS.DBMS_RCVMAN" has errors

ORA-06508: PL/SQL: could not find program unit being called: "SYS.DBMS_RCVMAN"


error executing package DBMS_RCVMAN in TARGET database

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-00554: initialization of internal recovery manager package failed

RMAN-06429: TARGET database is not compatible with this version of RMAN









COMPILE the objects

rman target /


Recovery Manager: Release 12.2.0.1.0 - Production on Fri Feb 9 19:26:23 2024





STATUS of the OBJECTS 

select owner,object_name,object_type,status from dba_objects where status='INVALID'

OWNER OBJECT_NAME OBJECT_TYPE STATUS
-------------------- ------------------------------ ----------------------- -------
SYS DBMS_RCVMAN PACKAGE BODY INVALID




SOLUTION

SQL> alter PACKAGE SYS.DBMS_RCVMAN compile BODY;

Warning: Package Body altered with compilation errors.

SQL>
SQL>
SQL>
SQL> sho error
Errors for PACKAGE BODY SYS.DBMS_RCVMAN:

LINE/COL ERROR
-------- -----------------------------------------------------------------
462/1    PL/SQL: Item ignored
463/8    PLS-00400: different number of columns between cursor SELECT
         statement and return value

8247/1   PL/SQL: Item ignored
8248/8   PLS-00400: different number of columns between cursor SELECT
         statement and return value




SQL>

SQL> @?/rdbms/admin/prvtrmns.plb

Session altered.

Package body created.

Session altered.

SQL>

SQL>

SQL> !



rman target /

Recovery Manager: Release 12.2.0.1.0 - Production on Fri Feb 9 21:07:36 2024

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

connected to target database: DBNAME (DBID=123456789)

RMAN> exit

Recovery Manager complete.







Thursday, November 9, 2023

GATHER STATS for TABLE/SCHEMA/DATABASE/SYSTEM and LOCK STATS scripts

GATHER STATS for TABLE/SCHEMA/DATABASE/SYSTEM and LOCK STATS scripts



 TABLE STATS

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

EXEC DBMS_STATS.gather_table_stats('HR','EMPLOYEES');

EXEC DBMS_STATS.gather_table_stats('HR','EMPLOYEES',cascade=>TRUE);

EXEC DBMS_STATS.gather_table_stats('SCOTT', 'EMPLOYEES', estimate_percent => 15, cascade => TRUE);

exec dbms_stats.gather_table_stats(ownname=>'&Schema_name',tabname=>'&Table_name',estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE,cascade=>TRUE,degree =>4);

exec DBMS_STATS.GATHER_TABLE_STATS (ownname => '&OWNER' , tabname => '&TAB_NAME',cascade => true, estimate_percent => 10,method_opt=>'for all indexed columns size 1',granularity => 'ALL', degree => 1);




INDEX STATS

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

EXEC DBMS_STATS.gather_index_stats('HR','EMPLOYEES_PK');

exec DBMS_STATS.GATHER_INDEX_STATS(ownname => '&OWNER',indname =>'&INDEX_NAME',estimate_percent =>DBMS_STATS.AUTO_SAMPLE_SIZE);





SCHEMA STATS

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

EXEC DBMS_STATS.gather_schema_stats('SCOTT');

EXEC DBMS_STATS.gather_schema_stats('SCOTT', estimate_percent => 15, cascade => TRUE);

exec dbms_stats.gather_schema_stats(ownname=>'&schema_name',ESTIMATE_PERCENT=>dbms_stats.auto_sample_size,degree =>4);

exec dbms_stats.gather_schema_stats(ownname=>'&schema_name', CASCADE=>TRUE,ESTIMATE_PERCENT=>dbms_stats.auto_sample_size,degree =>4);




DATABASE STATS

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

EXEC DBMS_STATS.gather_database_stats;

EXEC DBMS_STATS.gather_database_stats(estimate_percent => 15, cascade => TRUE);

exec dbms_stats.gather_database_stats(cascade=>TRUE,method_opt =>'FOR ALL COLUMNS SIZE AUTO');

EXEC DBMS_STATS.GATHER_DATABASE_STATS(ESTIMATE_PERCENT=>DBMS_STATS.AUTO_SAMPLE_SIZE,degree=>6);

EXEC DBMS_STATS.GATHER_DATABASE_STATS(ESTIMATE_PERCENT=>dbms_stats.auto_sample_size,CASCADE => TRUE,degree => 4);





DICTIONARY STATS

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

EXEC DBMS_STATS.gather_dictionary_stats;

EXEC DBMS_STATS.gather_system_stats;

EXEC DBMS_STATS.gather_fixed_objects_stats;







lock/unlock statistics on table

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

exec dbms_stats.lock_table_stats('&OWNER', '&TAB_NAME');


exec dbms_stats.unlock_table_stats('&OWNER', '&TAB_NAME');



SELECT stattype_locked FROM dba_tab_statistics WHERE table_name='RAJ' and owner='SH';









CHECK STALE STATS

~~~~~~~~~~~~~~~~~~~~~~~~~~~~


SELECT owner, table_name, last_analyzed, stale_stats

FROM dba_tab_statistics

WHERE table_name='EMPLOYEES'

and owner='HR';


SELECT owner, table_name, index_name last_analyzed, stale_stats FROM dba_ind_statistics 

WHERE table_name='EMPLOYEES'

and owner = 'HR';













Linux Script to Gather Stats

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



#!/bin/bash


. /home/oracle/.bash_profile


export ORACLE_HOME=/u01/app/oracle/product/19.3/db_home

export ORACLE_BASE=/u01/app/oracle

export ORACLE_SID=orcl

export DATE=$(date +%y-%m-%d_%H%M%S)


#### Gather HR schema stats ####

sqlplus / as sysdba << EOF > /tmp/HR_stats_gather_$DATE.log

EXEC DBMS_STATS.gather_schema_stats('HR');

EOF


echo "Stats gathered succeeded"






Tuesday, November 7, 2023

to CHECK & Pause/Resume/Kill a Running RMAN Backup

TO VIEW BACKUP STATUS for RMAN BACKUP Processes    

 SELECT b.opname,b.SID, b.SERIAL#, a.status,b.CONTEXT, b.SOFAR, b.TOTALWORK,

ROUND (b.SOFAR/b.TOTALWORK*100, 2) "% COMPLETE"

FROM gV$SESSION_LONGOPS b, gv$session a

WHERE b.OPNAME LIKE 'RMAN%' 

AND b.OPNAME NOT LIKE '%aggregate%' 

and a.sid=b.sid 

AND b.TOTALWORK! = 0 AND b.SOFAR <> b.TOTALWORK;

    


TO GENERATE KILL SESSION scripts for RMAN  BACKUP Processes    

select 'alter system kill session '''||sid||'',''||serial#||''' immediate;' FROM V$SESSION_LONGOPS

WHERE OPNAME LIKE 'RMAN%' AND OPNAME NOT LIKE '%aggregate%'

AND TOTALWORK! = 0 AND SOFAR <> TOTALWORK;







1. Pause/Resume/Kill a Running RMAN Backup

To Check if there is an RMAN backup is currently running:


col START_TIME for a15

col END_TIME for a15

col TIME_TAKEN_DISPLAY for a10

col INPUT_BYTES_DISPLAY heading "DATA SIZE" for a10

col OUTPUT_BYTES_DISPLAY heading "Backup Size" for a11

col OUTPUT_BYTES_PER_SEC_DISPLAY heading "Speed/s" for a10

col output_device_type heading "Device_TYPE" for a11

SELECT to_char (start_time,'DD-MON-YY HH24:MI') START_TIME,to_char(end_time,'DD-MON-YY HH24:MI') END_TIME, time_taken_display, status,input_type, output_device_type,input_bytes_display, output_bytes_display,output_bytes_per_sec_display,COMPRESSION_RATIO COMPRESS_RATIO FROM v$rman_backup_job_details WHERE status like 'RUNNING%';







2. To Pause an already running RMAN backup: [This is only applicable for Linux OS]


set pages 0 feedback off 

select 'TO PAUSE THE RUNNING RMAN BACKUP RUN THIS OS COMMAND:=>    kill -STOP '||listagg (p.spid, ' ')  WITHIN GROUP (ORDER BY p.spid) from v$session s, v$process p where s.program like 'rman@%' and p.addr=s.paddr;





3. To Resume an already "Paused" RMAN backup: [This is only applicable for Linux OS]


set pages 0 feedback off 

select 'TO RESUME A "PAUSED" RMAN BACKUP RUN THIS OS COMMAND:=>  kill -CONT '||listagg (p.spid, ' ')  WITHIN GROUP (ORDER BY p.spid) from v$session s, v$process p where s.program like 'rman@%' and p.addr=s.paddr;





4. To Terminate an already running RMAN backup: [This is only applicable for Linux OS]


set pages 0 feedback off 

select 'TO KILL  THE RUNNING RMAN BACKUP RUN THIS OS COMMAND:=>  kill -9 '||listagg (p.spid, ' ')  WITHIN GROUP (ORDER BY p.spid) from v$session s, v$process p where s.program like 'rman@%' and p.addr=s.paddr;