Oracle 12c Multitenant – Inmemory admin basics
October 21, 2014 Leave a comment
A couple of very, very basic observations on getting going with 12c Inmemory in a multitenant database.
1. When trying to set inmemory_size within a PDB when inmemory_size is 0 in the CDB
ORA-02096: specified initialization parameter is not modifiable with this option
SQL> alter session set container = cdb$root; Session altered. SQL> select value from v$parameter where name = 'inmemory_size'; VALUE -------------------------------------------------------------------------------- 0 SQL> alter session set container = orcl; Session altered. SQL> alter session set inmemory_size=100M; alter session set inmemory_size=100M * ERROR at line 1: ORA-02096: specified initialization parameter is not modifiable with this option
2. You have to use scope=spfile when setting inmemory on CDB and it requires restart to take effect
SQL> alter session set container = cdb$root; Session altered. SQL> alter system set inmemory_size = 500M; alter system set inmemory_size = 500M * ERROR at line 1: ORA-02097: parameter cannot be modified because specified value is invalid ORA-02095: specified initialization parameter cannot be modified SQL> alter system set inmemory_size = 500M scope=spfile; System altered. SQL> select * from v$sga; NAME VALUE CON_ID -------------------- ---------- ---------- Fixed Size 2926472 0 Variable Size 1224738936 0 Database Buffers 905969664 0 Redo Buffers 13848576 0 SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 2147483648 bytes Fixed Size 2926472 bytes Variable Size 1275070584 bytes Database Buffers 318767104 bytes Redo Buffers 13848576 bytes In-Memory Area 536870912 bytes Database mounted. Database opened.
3. You don’t use scope when setting in a PDB otherwise
ORA-02096: specified initialization parameter is not modifiable with this option
SQL> alter session set container = orcl; Session altered. SQL> alter system set inmemory_size=400M scope=spfile; alter system set inmemory_size=400M scope=spfile * ERROR at line 1: ORA-02096: specified initialization parameter is not modifiable with this option SQL> alter system set inmemory_size=400M; System altered.
4. If you try to set the PDB inmemory_size larger than the CDB then you get
ORA-02097: parameter cannot be modified because specified value is invalid
SQL> alter session set container = orcl; Session altered. SQL> alter system set inmemory_size=600M; alter system set inmemory_size=600M * ERROR at line 1: ORA-02097: parameter cannot be modified because specified value is invalid ORA-02095: specified initialization parameter cannot be modified
Added:
5. Similar to point (2), if we change the inmemory size of the CDB, we have to restart for it to take effect
SQL> select sys_context('USERENV','CON_NAME') from dual; SYS_CONTEXT('USERENV','CON_NAME') -------------------------------------------------------------------------------- CDB$ROOT SQL> alter system set inmemory_size=500M scope=spfile; System altered. SQL> select value from v$parameter where name = 'inmemory_size'; VALUE -------------------------------------------------------------------------------- 218103808 SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 2147483648 bytes Fixed Size 2926472 bytes Variable Size 1157630072 bytes Database Buffers 436207616 bytes Redo Buffers 13848576 bytes In-Memory Area 536870912 bytes Database mounted. Database opened. SQL>
6. If we modify inmemory_size for PDB, it takes effect immediately (presumably because all it really is a maximum quota on the actual memory structure established in the CDB?):
SQL> alter session set container = orcl; Session altered. SQL> alter system set inmemory_size=200M; System altered. SQL> select value from v$parameter where name = 'inmemory_size'; VALUE -------------------------------------------------------------------------------- 209715200 SQL> alter system set inmemory_size=400M; System altered. SQL> select value from v$parameter where name = 'inmemory_size'; VALUE -------------------------------------------------------------------------------- 419430400
7. While we showed in point (4) that a single PDB inmemory_size cannot exceed the CDB size, we can overallocate such “maximum quotas” across all PDBs – i.e. the sum of inmemory_size for all PDBs can exceed CDB size (prompts future investigations):
SQL> alter session set container=cdb$root; Session altered. SQL> select value from v$parameter where name = 'inmemory_size'; VALUE -------------------------------------------------------------------------------- 536870912 SQL> alter session set container=orcl; Session altered. SQL> select value from v$parameter where name = 'inmemory_size'; VALUE -------------------------------------------------------------------------------- 419430400 SQL> alter session set container=cdb$root; Session altered. SQL> create pluggable database dom from orcl file_name_convert= 2 ('/home/oracle/app/oracle/oradata/cdb1/orcl', 3 '/home/oracle/app/oracle/oradata/cdb1/dom'); Pluggable database created. SQL> alter pluggable database dom open; Pluggable database altered. SQL> alter session set container = dom; Session altered. SQL> alter system set inmemory_size = 400M; System altered. SQL> select value from v$parameter where name = 'inmemory_size'; VALUE -------------------------------------------------------------------------------- 419430400
Recent Comments