the new, improved and free flashback data archives in 12c

The 12c licensing information document holds great news. In 11g, flashback data archives have only been availabe as a seperate option to Enterprise Edition. This was first sold as the Total Recall Option which was later abandoned and the feature was continued as part of the more expensive Advanced Compression option. But starting with 12c, basic flashback data archives are included in all editions, even Standard Edition. Only if you want or need to employ compression to optimize storage consumption you’ll need the Advanced Compression Option on top of EE. An extra parameter was added to the create flashback archive command defaulting to not use compression. There have been speculations about this change since last year.

Let’s have a look at how this works. But first one more caveat: Flashback Archives are not (yet?) supported with CDBs or PDBs that you would need to take advantage of the new Oracle Multitenant option. This is documented as a restriction. If you try to set up a flashback archive on such a CDB anyway, you will receive this error:

SQL> CREATE FLASHBACK ARCHIVE CDBFBA TABLESPACE FBA_TS RETENTION 1 MONTH NO OPTIMIZE DATA;
CREATE FLASHBACK ARCHIVE CDBFBA TABLESPACE FBA_TS RETENTION 1 MONTH NO OPTIMIZE DATA
*
ERROR at line 1:
ORA-65131: The feature Flashback Data Archive  is not supported in a pluggable database.

So I had to create a new database on my test system as a non container database and retry. First, I’ll simply create a new tablespace for the flashback data archives. I’ll do this twice to show the difference between an “optimized” and a “basic” flashback archive.

SQL> CREATE TABLESPACE FBA_NO_OPTIMIZATION DATAFILE 'FBA_NO_OPT01.DBF' SIZE 1G;

Tablespace created.

SQL> CREATE TABLESPACE FBA_OPTIMIZATION DATAFILE 'FBA_OPT01.DBF' SIZE 1G;

Tablespace created.

Next, create the flashback archives on those tablespaces. This is where one specifies the retention time and also the new [NO] OPTIMIZE DATA parameter. In this case, I’d like a retention time of 1 month for the archives and create one with and another one without the optimization. See the full syntax for CREATE FLASHBACK ARCHIVE in the documentation.

SQL> CREATE FLASHBACK ARCHIVE FBA_NO_OPTIMIZATION TABLESPACE FBA_NO_OPTIMIZATION RETENTION 1 MONTH NO OPTIMIZE DATA;

Flashback archive created.

SQL> CREATE FLASHBACK ARCHIVE FBA_OPTIMIZATION TABLESPACE FBA_OPTIMIZATION RETENTION 1 MONTH OPTIMIZE DATA;

Flashback archive created.

Now we are ready to create tables and associate them with the FBA. The underlying archive tables will get created with a little delay once we perform DML on the base table so I’ll insert and delete a record to trigger this.

SQL> CREATE TABLE T_NO_OPTIM (ID NUMBER(19), DESCRIPTION VARCHAR2(42)) FLASHBACK ARCHIVE FBA_NO_OPTIMIZATION;

Table created.

SQL> CREATE TABLE T_OPTIM (ID NUMBER(19), DESCRIPTION VARCHAR2(42)) FLASHBACK ARCHIVE FBA_OPTIMIZATION;

Table created.

SQL> INSERT INTO T_NO_OPTIM VALUES (42, 'my first 12c insert');

1 row created.

SQL> commit;         

Commit complete.

SQL> DELETE FROM T_NO_OPTIM;

1 row deleted.

SQL> COMMIT;

Commit complete.

SQL> INSERT INTO T_OPTIM VALUES (42, 'my first 12c insert on optimized FBA');

1 row created.

SQL> COMMIT;

Commit complete.

SQL> DELETE FROM T_OPTIM;

1 row deleted.

SQL> COMMIT;

Commit complete.

And now we can have a look at the DDL for the actual flashback archive tables. You can find the names for these tables by querying DBA_FLASHBACK_ARCHIVE_TABLES. This one is for the one created with the NO OPTIMIZE DATA option (the new default).

CREATE TABLE "BROST"."SYS_FBA_HIST_93059" 
   (	"RID" VARCHAR2(4000 BYTE), 
	"STARTSCN" NUMBER, 
	"ENDSCN" NUMBER, 
	"XID" RAW(8), 
	"OPERATION" VARCHAR2(1 BYTE), 
	"ID" NUMBER(19,0), 
	"DESCRIPTION" VARCHAR2(42 BYTE)
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "FBA_NO_OPTIMIZATION" 
  PARTITION BY RANGE ("ENDSCN") 
 (PARTITION "HIGH_PART"  VALUES LESS THAN (MAXVALUE) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING 
  STORAGE(INITIAL 8388608 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "FBA_NO_OPTIMIZATION" ) ;

And this is the DDL for the flashback archive table with the OPTIMIZE DATA parameter enabled which requires the Advanced Compression option on top of Enterprise Edition. The only difference to the one above is the COMPRESS FOR OLTP in the DDL.

CREATE TABLE "BROST"."SYS_FBA_HIST_93060" 
   (	"RID" VARCHAR2(4000 BYTE), 
	"STARTSCN" NUMBER, 
	"ENDSCN" NUMBER, 
	"XID" RAW(8), 
	"OPERATION" VARCHAR2(1 BYTE), 
	"ID" NUMBER(19,0), 
	"DESCRIPTION" VARCHAR2(42 BYTE)
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 COMPRESS FOR OLTP 
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "FBA_OPTIMIZATION" 
  PARTITION BY RANGE ("ENDSCN") 
 (PARTITION "HIGH_PART"  VALUES LESS THAN (MAXVALUE) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 COMPRESS FOR OLTP LOGGING 
  STORAGE(INITIAL 8388608 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "FBA_OPTIMIZATION" ) ;

I have not done any tests to show just how much OLTP COMPRESSION saves in this case which would be important to answer the question of the real benefit of purchasing the advanced compression option if you are not already using it for other parts of your system. But I am pretty sure that in many cases customers can easily get away with using FDAs without compression just fine. As long as you don’t perform a lot of updates or deletes on tables or keep historic data for years, archives won’t grow too big.

One issue remains unresolved in 12c and that is the default partitioning combined with the minextent size. Every flashback data archive will have a new partition created for each day which is mostly a good thing, especially for larger history tables. But this partition will get created even for the smallest of your flashback enabled tables. And since the partitition is created with SEGMENT CREATION IMMEDIATE, even an empty partition will take up the space of the INITIAL extent which was bumped by default to 8MB in 11.2. So if you have flashback enabled for 42 tables, even if you don’t perform any DML on those tables, a month worth of flashback archive partitions will take up more than 10GB of data on your disks. And it does not even matter if you use compression or not. I have already discussed this (and a workaround) in a previous blog post. Setting the hidden parameter _PARTITION_LARGE_EXTENTS to false still seems to do the trick.

The big change with 12c and FBA is obviously the option to not compress the archives with the implication of making this feature free to use, even in SE. It does not happen very often that Oracle hands out presents like that and stops charging for a feature that once required an extra option. I bet many people would love to see the same move with AWR and some other EE-Option features. But I think that more than a gift this is also a very good chance for Oracle to differentiate itself from the competitors. Total Recall and flashback queries are (at least to my knowledge) unique to Oracle, no other database vendor can offer this feature. So if more ISVs pick up this technology and integrate it into their solution it commits them to using the Oracle database. And this added value may just be what drives the decision to use one db vendor over another.
I have presented multiple times about how we used flashback archives in our Global Price Management software to enable end users to start a session within a sort of time machine where we use total recall to put a whole session back in time by up to three years.

Update 2013/08/27:
The 11.2.0.4 patchset is just out and it looks like the option to leave flashback archives uncompressed was included here aswell. The 11.2 license document states:
Beginning with Oracle Database 11g Release 2 (11.2.0.4): You must license the Oracle Advanced Compression option to use Optimization for Flashback Data Archive history tables. Basic Flashback Data Archive—without history table optimization—is available in all editions.

Oracle 12c install live blog

Ok, so Oracle 12c has been available for download since earlier today and since I already had my Oraclenerd shirt on, this means some serious playtime is called for.

I though it would be fun and/or interesting to blog about all the steps I did to install 12c and share it. So first step was to download the software from edelivery. Note that since this is not a download from OTN (which would fall under the OTN developer license) you may want to think about licensing. Not a huge problem for us, being an OPN ISV partner.
Update 21:30 CET: The download is available on OTN now aswell.

Sadly, the only port or version available is for Linux, I can only assume that Solaris versions will be available later (update 20:00CET: Solaris sparc and x64 versions now available aswell). I downloaded the two parts (total 2,3GB) of “Oracle Database 12c Release 1 (12.1.0.1.0) Media Pack for Linux x86-64″ in just a few minutes.


Next step: find a suitable machine to install this on. We have a pool of Oracle VM servers and a template for Oracle Linux 6 ready to clone. A few minutes later I have a fresh machine to play with.
create_12c_vm

Had to pause the installation progress to follow the OPN partnercast and FY14 kickoff. But we won a free pass to OpenWorld with this picture. WooHoo!
opn_webcast_winner

The VM template created a 12GB boot disk but I figured that I’ll need a bit more to install the software so I created a new disk. The storageconnect plugin and the ZFS storage appliance make this really easy since you don’t even have to open up a new admin interface and can simply create the iSCSI LUN from the OVM manager. I also added the virtual network interface, notice the last byte of the mac address: 0x0c is 12 in decimal.
create_iscsi_lun_storageconnect

assign_vnet

Start up the machine and bring up the VNC console, answer some basic questions about the desired hostname, IP address and so on and a few minutes later you are all set with the linux VM. Usually I’d run a yum update at this point but today is more about getting the database software installed as quickly as possible.

Partition, format and mount the extra disk I created earlier:

[root@ora12c ~]# fdisk /dev/xvdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x08475db9.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): p

Disk /dev/xvdb: 45.1 GB, 45097156608 bytes
255 heads, 63 sectors/track, 5482 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x08475db9

    Device Boot      Start         End      Blocks   Id  System

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-5482, default 1): 1
Last cylinder, +cylinders or +size{K,M,G} (1-5482, default 5482): 5482

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 82
Changed system type of partition 1 to 82 (Linux swap / Solaris)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

[root@ora12c ~]# mkfs.ext3 /dev/xvdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
2752512 inodes, 11008533 blocks
550426 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
336 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 24 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

[root@ora12c ~]# echo "/dev/xvdb1              /u01                    ext3    defaults        0 2" >> /etc/fstab
[root@ora12c ~]# mount /u01

Copy the downloaded zipfiles (i put them at /u01/download/) and extract with the unzip command. On my first overly excited try, I tried to run the installer as root which is still not allowed:

[root@ora12c database]# ./runInstaller 

The user is root. Oracle Universal Installer cannot continue installation if the user is root.

So I quickly chowned /u01 to the oracle user, set a password for it (the user and groups were already set up in this template) and reconnected as oracle making sure to use the -X option to ssh to forward the X11 protocol for the GUI installer. And off we go:

[oracle@ora12c database]$ ./runInstaller 
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 500 MB.   Actual 7469 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 2047 MB    Passed
Checking monitor: must be configured to display at least 256 colors.    Actual 16777216    Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2013-06-25_02-24-35PM. Please wait ...

The installer itself has not changed (much?) since 11g, I opted to only install the software first and run dbca myself later and accepted all the other default options. Swap was not big enough but I chose to ignore this rather than fix it now. The one thing I missed was the nice flashy ads for new features while the software actually installs. There was just a red 12c banner there.

12c_installer_01

12c_installer_02

12c_installer_03

12c_installer_04

12c_installer_05

12c_installer_06

12c_installer_07

12c_installer_08

12c_installer_09

12c_installer_10

12c_installer_11

12c_installer_12

There are still scripts to be run as root:
12c_installer_13

[root@ora12c oraInventory]# ./orainstRoot.sh 
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.
[root@ora12c ~]# /u01/app/oracle/product/12.1.0/dbhome_1/root.sh 
Performing root user operation for Oracle 12c 

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/oracle/product/12.1.0/dbhome_1

Enter the full pathname of the local bin directory: [/usr/local/bin]: 
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.

And that’s it for the installation.
12c_installer_finish

DBCA has a few more and new options and I’ll go (and guess) through them

[oracle@ora12c ~]$ export ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1
[oracle@ora12c ~]$ export ORACLE_SID=ORCL12
[oracle@ora12c ~]$ /u01/app/oracle/product/12.1.0/dbhome_1/bin/dbca

The very first screen has a new (but greyed out for now) option of “Manage Pluggable Databases”. I guess this would be available after I set up a container DB first.
12c_dbca_01

What upset me on the second screen was the default DB character set of WE8MSWIN1252. Who uses that? I quickly changed it to AL32UTF8 and entered a (too) simple password.

12c_dbca_02

Only then did I see the option to enter a PDB name (whatever that is?) and even more interesting: A button for an “Advanced Mode” installation. I am feeling adventurous today and choose that option.

12c_dbca_03

12c_dbca_adv_01

There is a new option allowing me to setup this DB as a container DB for PDB. I guess that is a good thing and selected to create two PDBs aswell.

12c_dbca_adv_03

12c_dbca_adv_04

Again, there is a warning because my password of ‘oracle’ is too simple. Kids, only try this at home, do not use a simple password like that in production.

12c_dbca_adv_05

This next page confused me. I selected the one listener that was mentioned and tried next but I had to enter something for the name and port so I went with LISTENER and 1521 which may have been a bad choice as you will see later

12c_dbca_adv_06

12c_dbca_adv_07

12c_dbca_adv_08

12c_dbca_adv_09

12c_dbca_adv_10

12c_dbca_adv_11

Interesting. I cannot change the default block size but I also don’t care since I would have chosen 8k anyway.

12c_dbca_adv_12

Again, I don’t care much about anything but UTF

12c_dbca_adv_13

12c_dbca_adv_14

12c_dbca_adv_15

12c_dbca_adv_16

12c_dbca_adv_17

12c_dbca_adv_18

12c_dbca_adv_19

A few moments after the creation started, an error popped up saying that I was not supposed to create another listener with an existing name.

12c_dbca_adv_20

So I started the whole process all over again and this time there was already a listener with a status of “up”. I did not change anything, just clicked next and went on with dbca.

12c_dbca_adv_21

12c_dbca_adv_22

12c_dbca_adv_23

12c_dbca_adv_24

And that was it! The instance was started, the database open and I could simply connect.

[oracle@ora12c ~]$ /u01/app/oracle/product/12.1.0/dbhome_1/bin/sqlplus sys/ as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Tue Jun 25 15:42:59 2013

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Enter password: 

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> select version, status, instance_role from v$instance;

VERSION 	  STATUS       INSTANCE_ROLE
----------------- ------------ ------------------
12.1.0.1.0	  OPEN	       PRIMARY_INSTANCE

Oh, and lsnrctl shows that my pluggable databases have registered as services:

[oracle@ora12c ~]$ /u01/app/oracle/product/12.1.0/dbhome_1/bin/lsnrctl status

LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 25-JUN-2013 16:09:07

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ora12c)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.1.0.1.0 - Production
Start Date                25-JUN-2013 15:05:35
Uptime                    0 days 1 hr. 3 min. 32 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/ora12c/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora12c)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=ora12c)(PORT=5500))(Security=(my_wallet_directory=/u01/app/oracle/admin/ORCL12/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "ORCL12.PORTRIX.NET" has 1 instance(s).
  Instance "ORCL12", status READY, has 1 handler(s) for this service...
Service "ORCL12XDB.PORTRIX.NET" has 1 instance(s).
  Instance "ORCL12", status READY, has 1 handler(s) for this service...
Service "ptxpdb1.portrix.net" has 1 instance(s).
  Instance "ORCL12", status READY, has 1 handler(s) for this service...
Service "ptxpdb2.portrix.net" has 1 instance(s).
  Instance "ORCL12", status READY, has 1 handler(s) for this service...
The command completed successfully

And I’ll better stop here for today even though I would love to read through all the documentation and play with the cool new features but I’ll better leave some stuff for tomorrow and the next days.

And I already have a long list of features that I know I want to play with.

Fun with Tablespace quotas and DBA

Yesterday on one of our oracle databases (11g) we were faced with something, that was quite new to me:

All of a sudden, one database user was not able to insert data into its own default tablespace any more. Instead, we received a “ORA-01536: space quota exceeded for tablespace” Message (which, by the way, does not occur in the alertlog).

Strange, because we do not work with quotas in our database at all. Every user has granted the ressource role and therefore unlimited quota on its default tablespace.

To understand, was oracle does here, I created a ltitle test case:

First, create a new tablespace and a user and create some data:

SQL> create tablespace tts datafile '+DATA' size 1g;
Tablespace created.

SQL> create user tuser identified by x default tablespace tts;
User created.

SQL> create table tuser.tab (a number);
Table created.

SQL> create table tuser.tab as select * from user_objects;
create table tuser.tab as select * from user_objects
                                        *
ERROR at line 1:
ORA-01950: no privileges on tablespace 'TTS'

Of course, per default, no one is allowed anything in oracle. So, give the user permission:

SQL> alter user tuser quota unlimited on tts;
User altered.

SQL> create table tuser.tab as select * from user_objects;
Table created.

We can see, the quota also appears in dba_ts_quotas:

SQL> select * from dba_ts_quotas where username='TUSER';

TABLESPACE_NAME                USERNAME                            BYTES MAX_BYTES     BLOCKS MAX_BLOCKS DRO
------------------------------ ------------------------------ ---------- ---------- ---------- ---------- ---
TTS                            TUSER                               65536        -1          8         -1 NO

“-1″ actually means unlimited.

And here comes the tricky part. In our live system we granted our user the dba role a couple of days ago, did a few tests with it and revoked the dba role again.

Let’s reproduce this:

SQL> grant dba to tuser;
Grant succeeded.

SQL> revoke dba from tuser;
Revoke succeeded.

SQL> select * from dba_ts_quotas where username='TUSER';
no rows selected

So, after revoking dba, the unlimited quota seems to be gone. Check:

SQL> create table tuser.tab2 as select * from user_objects;
create table tuser.tab2 as select * from user_objects
*
ERROR at line 1:
ORA-01536: space quota exceeded for tablespace 'TTS'

After giving it back, everything is fine again:

SQL> alter user tuser quota unlimited on tts;
User altered.

SQL> create table tuser.tab2 as select * from user_objects;
Table created.

So, by revoking dba, oracle implicitly also revokes any tablespace quotas for that user.

edit:
Same goes for role “resource”.
This is actually documented behaviour. See Metalink Note 465737.1 “ORA-01536 After Revoking DBA Role”:

Note: If you grant or revoke the RESOURCE or DBA role to or from a user, Oracle implicitly grants or revokes the UNLIMITED TABLESPACE system privilege to or from the user.

Good to know.

I did read the frakking manual

I just thought this was funny. It propably is not but I’ll post it anyway. I just wanted to set the white locator on a 7120 ZFS storage appliance so that a field engineer could swap some parts to actually make it work. So I logged on to the iLOM (which is conveniently identical to all other Oracle hardware), checked the syntax for the LED again and tried to set it On:

Oracle(R) Integrated Lights Out Manager

Version 3.0.16.10.d r74499

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

-> cd /SYS/LOCATE
/SYS/LOCATE

-> show

 /SYS/LOCATE
    Targets:

    Properties:
        type = Indicator
        ipmi_name = LOCATE
        value = Off

    Commands:
        cd
        set
        show

-> help value  
    Properties:
	value : Value of component.
	value : Possible values = On, Off, Standby_Blink, Slow_Blink, Fast_Blink
	value : User role required for set = a

-> set value=On
set: Invalid property value. Valid values: Fast_Blink, Off

So wait a minute, I actually just checked that among some other options “On” is a possible value. Oh well, if you don’t like it, let’s just do some fancy blinking

-> set value=Fast_Blink
Set 'value' to 'Fast_Blink'

-> show

 /SYS/LOCATE
    Targets:

    Properties:
        type = Indicator
        ipmi_name = LOCATE
        value = Fast Blink

    Commands:
        cd
        set
        show

Really just a minor annoyance but it bothers me if something does not work the way it is documented. If I am really bored any one of these days, I’ll file an SR for it. I already checked the iLOMs of some other machines (T4-1, X3-2) and they show the same behavior.