Pythian Blog: Technical Track

Oracle 11g ASM Diskgroup Compatibility

Back in April I was at COLLABORATE 08 and delivered a presentation on 11g — Oracle 11g New Features Out of the Box, including Oracle 11g ASM features. The first ASM slide was about diskgroup compatibility, and I have a bit more to share than I said back then.

Every diskgroup in ASM has two compatibility attributes — compatible.asm and compatible.rdbms. In 10.2, the V$ASM_DISKGROUP view has a couple new columns added — COMPATIBILITY and DATABASE_COMPATIBILITY, but only in 11g did Oracle introduce the concept of diskgroup attributes and the V$ASM_ATTRIBUTE view. Thus, there are two ways to check the diskgroup attributes in 11g:

SQL> col COMPATIBILITY form a10
SQL> col DATABASE_COMPATIBILITY form a10
SQL> col NAME form a20
SQL> select group_number, name, 
compatibility, database_compatibility from v$asm_diskgroup;

GROUP_NUMBER NAME                 COMPATIBIL DATABASE_C
------------ -------------------- ---------- ----------
           1 DG1                  11.1.0.0.0 11.1.0.0.0
           2 DG2                  10.1.0.0.0 10.1.0.0.0

SQL> col value form a10
SQL> select group_number, name, value from v$asm_attribute;

GROUP_NUMBER NAME                 VALUE
------------ -------------------- ----------
           1 disk_repair_time     3.6h
           1 au_size              1048576
           1 compatible.asm       11.1.0.0.0
           1 compatible.rdbms     11.1

Note that V$ASM_ATTRIBUTES is filled only when compatible.asm is set to 11.1. What’s important is that you can only change compatibility level upwards; there is no way to reset it back to the lower value. Compatibility attributes can be changed online one at a time:

SQL> alter diskgroup dg2 set attribute 'compatible.asm'='11.1';

Diskgroup altered.

SQL> alter diskgroup dg2 set attribute 'compatible.rdbms'='11.1';

Diskgroup altered.

SQL> select group_number, name, compatibility, database_compatibility from v$asm_diskgroup;

GROUP_NUMBER NAME                 COMPATIBIL DATABASE_C
------------ -------------------- ---------- ----------
           1 DG1                  11.1.0.0.0 11.1.0.0.0
           2 DG2                  11.1.0.0.0 11.1.0.0.0

What are compatibility attributes are useful for? They are very handy for upgrades and migrations when ASM diskgroups need to be available for ASM instances and database instances of different versions. Depending on the migration path, you might need to be able to access some diskgroups from different versions of ASM and different database instances. It might also be useful for transportable tablespaces between 10g and 11g databases.

The compatible.asm diskgroup attribute controls the format of the ASM diskgroup metadata. Only ASM instances with a software version equal to or greater than compatible.asm can mount the diskgroup.

The compatible.rdbms diskgroup attribute determines the format of ASM files themselves. The diskgroup can be accessed by any database instance with a compatible init.ora parameter set equal to or higher than the compatible.rdbms attribute. Note that the compatible.rdbms attribute can be set to 10.2 as well, but I couldn’t see if there were any differences in the feature set except that the compatible.rdbms=10.2 setting requires a database instance with the compatible parameter set to 10.2 or higher. compatible.asm cannot be set below 11.1 except when it’s already 10.1 by default.

The compatible.rdbms attribute can be changed only if compatible.asm is advanced to 11.1. Otherwise, you get the following error message:

SQL> alter diskgroup dg2 set attribute 'compatible.rdbms'='11.1';
alter diskgroup dg2 set attribute 'compatible.rdbms'='11.1'
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15242: could not set attribute compatible.rdbms
ORA-15221: ASM operation requires compatible.asm of 11.1.0.0.0 or higher

When creating a new diskgroup, compatibility attributes can be explicitly specified. It is interesting that the default is still 10.1 for both attributes even when the diskgroup is created from an ASM 10g instance and all connected databases are of 11g version. Oracle is conservative here.

During the COLLABORATE presentation, Jeremy Schneider asked me if there is a way to control the default compatibility version and, at that time, I didn’t know how to set the default compatibility to 11.1. Now that I have had a bit of time to look into it, I found couple hidden underscore parameters: _asm_compatibility and _rdbms_compatibility:

SQL> select i.ksppinm, v.ksppstvl from x$ksppi i, x$ksppcv v 
  2  where i.ksppinm in ('_rdbms_compatibility','_asm_compatibility')
  3    and i.indx=v.indx;

KSPPINM                        KSPPSTVL
------------------------------ ----------
_asm_compatibility             10.1
_rdbms_compatibility           10.1

Let’s test.

SQL> alter system set "_asm_compatibility"='11.1' scope=spfile;

System altered.

SQL> alter system set "_rdbms_compatibility"='11.1' scope=spfile;

System altered.

SQL> shutdown immediate
ASM diskgroups dismounted
ASM instance shutdown
SQL> startup
ASM instance started

Total System Global Area  284565504 bytes
Fixed Size                  1299428 bytes
Variable Size             258100252 bytes
ASM Cache                  25165824 bytes
ASM diskgroups mounted
SQL> select i.ksppinm, v.ksppstvl from x$ksppi i, x$ksppcv v 
  2  where i.ksppinm in ('_rdbms_compatibility','_asm_compatibility')
  3    and i.indx=v.indx;

KSPPINM                        KSPPSTVL
------------------------------ ----------
_asm_compatibility             11.1
_rdbms_compatibility           11.1

SQL> create diskgroup dg3 external redundancy disk '/asm1/dg2-50mb-1.asm';

Diskgroup created.

SQL> select name, compatibility, database_compatibility                     
  2  from v$asm_diskgroup where name='DG3';

NAME                 COMPATIBIL DATABASE_C
-------------------- ---------- ----------
DG3                  11.1.0.0.0 11.1.0.0.0

Now what features are available with different compatibility settings?

Diskgroup attributes

compatible.asm — 11.1
compatible.rdbms — any

Non-default allocation unit size

For AU sizes 1-8 MB, both compatibility attributes can be 10.1.

SQL> select group_number, allocation_unit_size, compatibility, database_compatibility
  2  from v$asm_diskgroup where name='DG4';

GROUP_NUMBER ALLOCATION_UNIT_SIZE COMPATIBIL DATABASE_C
------------ -------------------- ---------- ----------
           3              2097152 10.1.0.0.0 10.1.0.0.0

SQL> select group_number, name, value from v$asm_attribute
  2  where group_number=3;

no rows selected

The absence of the attribute au_size in V$ASM_ATTRIBUTE is confusing, but recall that attributes are displayed only when compatible.asm is set to 11.1.

SQL> select group_number, name, value from v$asm_attribute
  2  where group_number=3;

GROUP_NUMBER NAME                 VALUE
------------ -------------------- --------------------
           3 disk_repair_time     3.6h
           3 au_size              2097152
           3 compatible.asm       11.1.0.0.0
           3 compatible.rdbms     10.1.0.0.0

For AU sizes 16-64 MB both compatibility attributes must be 11.1.

The rest of 11g’s ASM new features — fast mirror resync, variable size extents, preferred read failure groups

Both compatible.asm and compatible.rdbms must be set to 11.1.

It looks like one of our customers is going to production with the new 11g RAC cluster on ASM using some of these new ASM features, so I’m looking forward to see how well it works in real life.

No Comments Yet

Let us know what you think

Subscribe by email