Tuesday, August 10, 2021

How to extend ASM SAN disk group in Solaris zone

1. First of all, identify disk's paths to work with. Use sqlplus, kfod or OS utilities to get the information.

Example using sqlplus (GI home) :

% sqlplus / as sysdba

SYS@+ASM> col path for a50

SYS@+ASM> select path,os_mb,total_mb,free_mb from v$asm_disk ;

Example using kfod (GI home) :

% kfod disks=all

2. Next, increase the space on LUNs using storage system software (on HPE 3PAR, it was made by growvv command)

3. Next, on the global zone, use format utility to extend the space on OS side:

For example :

# format /dev/rdsk/c0t60002AC00000000002003CDE000095DDd0

selecting c0t60002AC00000000002003CDE000095DDd0 <3PARdata-VV-3226-2.49TB>
[disk formatted]
Note: capacity in disk label is less than the disk capacity.
Select <partition> <expand> to adjust the label capacity.

FORMAT MENU:
       disk       - select a disk
       type       - select (define) a disk type
       partition  - select (define) a partition table
       current    - describe the current disk
       format     - format and analyze the disk
       repair     - repair a defective sector
       label      - write label to the disk
       analyze    - surface analysis
       defect     - defect list management
       backup     - search for backup labels
       verify     - read and display labels
       inquiry    - show disk ID
       volname    - set 8-character volume name
       !<cmd>     - execute <cmd>, then return
       quit
format> p


PARTITION MENU:
       0      - change `0' partition
       1      - change `1' partition
       2      - change `2' partition
       3      - change `3' partition
       4      - change `4' partition
       5      - change `5' partition
       6      - change `6' partition
       expand - expand label to use the maximum allowed space
       select - select a predefined table
       modify - modify a predefined partition table
       name   - name the current table
       print  - display the current table
       label  - write partition map and label to the disk
       !<cmd> - execute <cmd>, then return
       quit
partition> ex
The expanded capacity is added to the unallocated space.
partition> p

Current partition table (original):
Total disk sectors available: 5343526845 + 16384 (reserved sectors)

Part      Tag    Flag     First Sector          Size          Last Sector
 0        usr    wm                64         2.00TB           4294950847
 1 unassigned    wm                 0            0                0
 2 unassigned    wm                 0            0                0
 3 unassigned    wm                 0            0                0
 4 unassigned    wm                 0            0                0
 5 unassigned    wm                 0            0                0
 6 unassigned    wm                 0            0                0
 8   reserved    wm        5343526879         8.00MB           5343543262

partition> 0
Part      Tag    Flag     First Sector          Size          Last Sector
 0        usr    wm                64         2.00TB           4294950847

Enter partition id tag[usr]:
Enter partition permission flags[wm]:
Enter new starting sector[64]:
Enter partition size[4294950784b, 4294950847e, 2097143mb, 2047gb, 1tb]: $
partition> p
Current partition table (unnamed):
Total disk sectors available: 5343526845 + 16384 (reserved sectors)

Part      Tag    Flag     First Sector          Size          Last Sector
 0        usr    wm                64         2.49TB           5343526877
 1 unassigned    wm                 0            0                0
 2 unassigned    wm                 0            0                0
 3 unassigned    wm                 0            0                0
 4 unassigned    wm                 0            0                0
 5 unassigned    wm                 0            0                0
 6 unassigned    wm                 0            0                0
 8   reserved    wm        5343526879         8.00MB           5343543262

partition> label
Ready to label disk, continue? y

partition> q


FORMAT MENU:
       disk       - select a disk
       type       - select (define) a disk type
       partition  - select (define) a partition table
       current    - describe the current disk
       format     - format and analyze the disk
       repair     - repair a defective sector
       label      - write label to the disk
       analyze    - surface analysis
       defect     - defect list management
       backup     - search for backup labels
       verify     - read and display labels
       inquiry    - show disk ID
       volname    - set 8-character volume name
       !<cmd>     - execute <cmd>, then return
       quit
format> ver

Volume name = <        >
ascii name  = <3PARdata-VV-3226-2.49TB>
bytes/sector    =  512
sectors = 5343543295  
accessible sectors = 5343543262
Part      Tag    Flag     First Sector          Size          Last Sector
 0        usr    wm                64         2.49TB           5343526877
 1 unassigned    wm                 0            0                0
 2 unassigned    wm                 0            0                0
 3 unassigned    wm                 0            0                0
 4 unassigned    wm                 0            0                0
 5 unassigned    wm                 0            0                0
 6 unassigned    wm                 0            0                0
 8   reserved    wm        5343526879         8.00MB           5343543262

format> q

4. Repeat previous step for the rest of LUNs

5. Resize ASM diskgroup 

SYS@+ASM> alter diskgroup disk_group_name resize all ;

You might encounter the error 

ORA-15099, 00000, "disk '%s' is larger than maximum size of %s MBs" 

In my case it was low compatibility.rdbms value (10.1) for the altered diskgroup.


Good Luck !


Thursday, July 1, 2021

Column width in the sqlplus output

The queries might include char typed columns in the output. The output of these columns can be extended by sqlplus when multi-byte character set was set in the environment (NLS_LANG variable). Of course choosing NLS_LANG value should not be determined by the cosmetic effects of the output only; there are more important things like character set of input files, operating system output handling etc. All that I wanted to say - just know that "detail".

There are examples :

1. NLS_LANG=.al32utf8

SQL> r
 1* select 'status' from dual

'STATUS'
------------------
status

2. NLS_LANG was unset (then us7ascii character set is used) or set to single-byte character set

SQL> select 'status' from dual ;

'STATU
------
status

Good Luck !

Thursday, May 6, 2021

orabase returns "XPointer evaluation failed: no locset" ; oraenv returns the same and "-bash: [: too many arguments"

The situation specific to old and tight number of Oracle Products used Oracle Universal Installer for lifetime maintenance.

orabase binary executable is used by Oracle products to set ORACLE_BASE environmental variable in the shell session. Contemporary Oracle products have a file $ORACLE_HOME/install/orabasetab which is read by orabase executable to set ORACLE_BASE for current ORACLE_HOME. Some older orabase (32-bit) executables read the file $ORACLE_HOME/inventory/ContentsXML/oraclehomeproperties.xml in order to set ORACLE_BASE.

The issue can be a result of an accident when sometimes (and somehow) the Oracle installer (via installation of the patches or performing a deinstallation (even being operating on another ORACLE_HOME)) corrupts oraclehomeproperties.xml file (located in $ORACLE_HOME/inventory/ContentsXML) cutting out property ORACLE_BASE from it. The fix is to restore it from backup or modify manually.

The following example is an example of corrupted xml file :

<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright (c) 1999, 2015, Oracle and/or its affiliates.
All rights reserved. -->
<!-- Do not modify the contents of this file by hand. -->
<ORACLEHOME_INFO>
   <GUID>113393302.#259383652</GUID>
   <HOME/>
   <ARU_PLATFORM_INFO>
       <ARU_ID>226</ARU_ID>
       <ARU_ID_DESCRIPTION>Linux x86-64</ARU_ID_DESCRIPTION>
   </ARU_PLATFORM_INFO>
</ORACLEHOME_INFO>


The following example is an example of restored xml file :

<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright (c) 1999, 2015, Oracle and/or its affiliates.
All rights reserved. -->
<!-- Do not modify the contents of this file by hand. -->
<ORACLEHOME_INFO>
   <GUID>113393302.#259383652</GUID>
   <HOME/>
   <ARU_PLATFORM_INFO>
       <ARU_ID>226</ARU_ID>
       <ARU_ID_DESCRIPTION>Linux x86-64</ARU_ID_DESCRIPTION>
   </ARU_PLATFORM_INFO>
   <PROPERTY_LIST>
       <PROPERTY NAME="ORACLE_BASE" VAL="/u01/app/oracle"/>
   </PROPERTY_LIST>
</ORACLEHOME_INFO>

After modification you should relogin to the server because the contents of corrupted xml for the current session is mapped into the memory (by mmap syscall). 

Good Luck !

Tuesday, April 20, 2021

Upgrade old release of PDB to new - by using the database link instead of plug/unplug

Although this information is not provided in the documentation, I tried to implement it when performed and upgrade of 12.1 PDB to 19.10; and in my case all works fine aftermath. I do not encourage you to do this, just consider it as another unofficial way to act.

The main sequence of steps :

1. run preupgrade.jar on the source PDB, resolve the issues etc.

2. create common user on the source and target CDBs, grant create pluggable database container=all to it, and create database link from the dest CDB to the source CDB.

3. open source PDB (12.1) in read only mode (you can use local undo mode when performing upgrade from 12.2 and upper, and thus no need to open source PDB in read only mode).

4. on the dest CDB create pluggable database using newly created database link.

5. alter pluggable database <new_pdb> open upgrade ;

6. to perform upgrade run catctl.pl (or dbupgrade) only on newly created PDB. catctl.pl must run catupgrd.sql script, or you can manually run catupgrd.sql being connected to new PDB.

7. open new PDB (it was closed after finishing catupgrd.sql) and apply postupgrade_fixups (script generated from preupgrade.jar utility)

8. compile all invalid objects on new PDB (utlrp.sql)

9. upgrade database time zone if needed

10. do not forget about backup at every step. do not increase compatible of destination CDB in order to make in possible to fail back to the source CDB.

Good luck !

Saturday, March 27, 2021

Error 1033 received logging on to the standby

It seems very simple answer should be to that error which you could see in the primary database alert log file - just synchronize orapw files between primary and standby. But... 

In my case it wasn't so :) 

The answer laid in the interesting detail. The primary was located on filesystem, the standby on ASM. After creation of standby DB the names of redo log files (including names of standby redo logs) stayed as it were on the primary (names according mount points). The primary tried to establish a link to standby redo log files, but because they did not reinitialized (and not renamed accordingly) on standby site, the primary DB failed to transform the transactions content to standby redo log and such meaning :) error was arisen. 

The solution - rename and initialize your standby redo logs or try use different transport (ARCH).

Good Luck !

Friday, March 26, 2021

SEVERE: Connection details provided as OMS_HOST and EM_UPLOAD_PORT is not active when installing OEM agent in silent mode

Recently I stuck into this issue, and the solution was not provide FQDN of OMS server in the response file (parameter OMS_HOST). It turned out that agent installer try to resolve it adding the domain name to FQDN. The installation performed by agentpush method from OMS server.

Worse to note, that agentpush operation from agent host (via emcli) do not throw such error when OMS_HOST=FQDN_of_OMS. So take care about it ! :)

Friday, March 12, 2021

Another case of ORA-01756 error

In sqlplus, when using exec builtin instead of begin...end for running PL/SQL, you may encounter such error when perl quoting mechanism is used (q'{...}' for example) and there are new lines inside the 'execute immediate' command called from PL/SQL block (length of 'execute immediate' is too long). To overcome, use begin...end construction instead of exec.

Good Luck