You are on page 1of 110

Oracle Database 12c

The Best Oracle Database 12c


New Features for Developers and
DBAs

Presented by: Alex Zaballa, Oracle DBA


Alex Zaballa

http://alexzaballa.blogspot.com/

206 and counting… @alexzaballa


https://www.linkedin.com/in/alexzaballa
Worked for 7 years in Brazil as an Oracle Developer.
2000 - 2007

Worked for 8 years in Angola as an Oracle DBA


for the Ministry of Finance.
2007 - 2015
Oracle Database 12c

New Features for Developers and DBAs


Oracle Official Documentation
12.1.0.2

• http://docs.oracle.com/database/121/NEWFT/ch
apter12102.htm

Oracle Learning Library (OLL)

• https://apexapps.oracle.com/pls/apex/f?p=44785
:1:0
Articles about 12c

• https://oracle-base.com/articles/12c/articles-
12c
“With more than 500 new features, Oracle
Database 12c is designed to give Oracle
customers exactly what they’ve told us they
need for cloud computing, big data, security,
and availability.”
Oracle Announces Beta Availability of Oracle Database 12c Release 2 - Oct 26,
2015
• PLUGGABLE DATABASES
From 252 to 4096

• HOT CLONING
Don’t need to put the source in read-only for cloning

• SHARDING
It’s like partitioning in a shared nothing database
The data is split into multiple databases

• In-Memory
In-Memory column Store on Active Data Guard
Heat Map

• APPLICATION CONTAINER
Pluggable Databases will share application objects

• More isolation, resource manager will limit the memory in addition to CPU and I/O.
• AWR will work on Active Data Guard Database: you can tune your reporting database
Availability of Oracle Database 12.2

Source: https://blogs.oracle.com/UPGRADE/entry/oracle_database_12_2_just
Oracle Database Release Status
MOS Note:742060.1
Upgrade to 12.1.0.2 or wait for
12.2 ?

CDB ou NON-CDB?
Let’s start…
JSON

OTN Article by Alex Zaballa

http://www.oracle.com/technetwork/pt/articles
/sql/json-oracle-database-12c-2378776-
ptb.html
JSON
• Oracle Database 12.1.0.2 has now native
support for JSON.

• “JSON (JavaScript Object Notation) is a


lightweight data-interchange format. It is easy
for humans to read and write. It is easy for
machines to parse and generate.”

Source: http://json.org/
JSON
JSON
DEMO
Data Redaction

OTN Article in English by Alex Zaballa

http://www.oracle.com/technetwork/articles/d
atabase/data-redaction-odb12c-2331480.html
Data Redaction

• One of the new features introduced in Oracle


Database 12c
• Part of the Advanced Security option
• Enables the protection of data shown to the
user in real time, without requiring changes to
the application
Data Redaction
Data Redaction
DEMO
Invisible Columns
CREATE TABLE table_test_inv
(
column1 NUMBER,
column2 NUMBER,
column3 NUMBER INVISIBLE,
column4 NUMBER
);

SQL> desc table_test_inv


Name
-----------------------------------------
COLUMN1 NUMBER
COLUMN2 NUMBER
COLUMN4 NUMBER
Invisible Columns

INSERT INTO table_test_inv


(column1,column2,column3,column4) VALUES
(1,2,3,4);

INSERT INTO table_test_inv VALUES (1,2,4);


Invisible Columns
SET COLINVISIBLE ON

SQL> desc table_test_inv


Name
-----------------------------------------
COLUMN1 NUMBER
COLUMN2 NUMBER
COLUMN4 NUMBER
COLUMN3 (INVISIBLE) NUMBER
Invisible Columns

ALTER TABLE table_test_inv MODIFY column3 VISIBLE;

WHY ?

You are preparing the changes on the database, but the application is not
prepared yet.

Select * from …...

Insert into TABLE VALUES (......, ....., .....)


DEMO
SQL Text Expansion

SQL> variable retorno clob


SQL> begin
dbms_utility.expand_sql_text( input_sql_text
=> 'select * from emp', output_sql_text=>
:retorno );
end;
SQL Text Expansion

• Views
• VPDs
DEMO
Extended Data Types

SQL> create table table_test(column01


varchar2(4001));
*
ERROR at line 1:
ORA-00910: specified length too long for its
datatype
Extended Data Types

- VARCHAR2 : 32767 bytes


- NVARCHAR2 : 32767 bytes
- RAW : 32767 bytes
Extended Data Types
SHUTDOWN IMMEDIATE;
STARTUP UPGRADE;
ALTER SYSTEM SET max_string_size=extended;
@?/rdbms/admin/utl32k.sql
SHUTDOWN IMMEDIATE;
STARTUP;

**Once you switch to extended data types you can't switch back
DEMO
Multiple Indexes on the same set of
Columns

Pre 12c:

ORA-01408: such column list already indexed


error.
Multiple Indexes on the same set of
Columns
Is the ability to create more than one index on
the same set of columns in 12c.

**Only one of these indexes can be visible at a


time
Multiple Indexes on the same set of
Columns

Why would you want to do that?

• Unique versus nonunique

• B-tree versus bitmap

• Different partitioning strategies


DEMO
READ Object Privilege and READ ANY
TABLE System Privilege

What is the difference to SELECT and SELECT


ANY TABLE?
READ Object Privilege and READ ANY
TABLE System Privilege

SELECT and SELECT ANY TABLE provides the


ability to lock rows:

LOCK TABLE table_name IN EXCLUSIVE MODE;


SELECT ... FROM table_name FOR UPDATE;
READ Object Privilege and READ ANY
TABLE System Privilege

SQL> grant select on scott.emp to teste;


Grant succeeded.

SQL> lock table scott.emp in exclusive mode;


Table(s) Locked.
READ Object Privilege and READ ANY
TABLE System Privilege

SQL> grant read on scott.emp to teste;


Grant succeeded.

SQL> lock table scott.emp in exclusive mode;


lock table scott.emp in exclusive mode
*
ERROR at line 1:
ORA-01031: insufficient privileges
DEMO
Statistics During Loads
The ability to gather statistics automatically
during bulk loads:

- CREATE TABLE AS SELECT

- INSERT INTO ... SELECT into an empty table


using a direct path insert
DEMO
Partial Indexes for Partitioned Table
• You can create local and global indexes on a
subset of the partitions of a table, enabling
more flexibility in index creation.

• This feature is not supported for unique


indexes, or for indexes used for enforcing
unique constraints.
Partial Indexes for Partitioned Table
DEMO
SQL*Loader Express

• You don't need to to write and test a


SQL*Loader control file.

• The benefit main is the savings for time and


effort.
SQL*Loader Express
[oracle@oracle01 tmp]$ cat EMP_TEST.dat
1,Emp 1
2,Emp 2
3,Emp 3
4,Emp 4
5,Emp 5
6,Emp 6
7,Emp 7
8,Emp 8
9,Emp 9
SQL*Loader Express
[oracle@oracle01 tmp]$ sqlldr teste/teste TABLE=EMP_TEST
SQL*Loader: Release 12.1.0.1.0 - Production on Sat Jan 11 12:16:28 2014
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
Express Mode Load, Table: EMP_TEST
Path used: External Table, DEGREE_OF_PARALLELISM=AUTO

Table EMP_TEST:
9 Rows successfully loaded.

Check the log files:


EMP_TEST.log
EMP_TEST_%p.log_xt
for more information about the load.
DEMO
Truncate Cascade

SQL> truncate table scott.dept;


truncate table scott.dept
*
ERROR at line 1:
ORA-02266: unique/primary keys in table
referenced by enabled foreign keys
Truncate Cascade

SQL> truncate table scott.dept cascade;


Table truncated.

The constraint should be ON DELETE CASCADE.


DEMO
Limit the PGA
SQL> show parameter pga

NAME TYPE VALUE


-------------------------- ------------- ----------------------
pga_aggregate_limit big integer 2G

pga_aggregate_target ****
Limit the PGA
PGA_AGGREGATE_LIMIT is set to the greater of:

- 2 GB (default value)
- 200% of PGA_AGGREGATE_TARGET
- 3 MB times the PROCESSES parameter
Full Database Caching
Can be used to cache the entire database in
memory. It should be used when the buffer
cache size of the database instance is greater
than the whole database size.
RMAN Table Recovery in 12c

RMAN enables you to recover one or more


tables or table partitions to a specified point in
time.
RMAN Table Recovery in 12c

RMAN> RECOVER TABLE HR.REGIONS


UNTIL TIME "TO_DATE('01/10/2013
09:33:39','DD/MM/RRRR HH24:MI:SS')"
AUXILIARY DESTINATION '/tmp/backups'
In-Database Archiving
SQL> create table table_test(column1 number)
row archival;

insert into table_test values(1);


insert into table_test values(2);
insert into table_test values(3);
In-Database Archiving
In-Database Archiving
update table_test
set ora_archive_state=DBMS_ILM.ARCHIVESTATENAME(1)
where column1=3;
In-Database Archiving
alter session set row archival visibility=all;
Heat Map, Automatic Data
Optimization and ILM

OTN Article in Portuguese by Daniel Da Meda and Alex Zaballa

http://www.oracle.com/technetwork/pt/articles
/database-performance/ilm-e-automatic-data-
optimization-2601873-ptb.html
Heat Map, Automatic Data
Optimization and ILM
• Heat Map: Oracle Database 12c feature that stores system-
generated data usage statistics at the block and segment
levels. Automatically tracks modification and query
timestamps at the row and segment levels.

• Automatic Data Optimization (ADO): automatically moves


and compresses data according to user-defined policies
based on the information collected by Heat Map

• ILM: Heat Map and Automatic Data Optimization make


Oracle Database 12c ideal for implementing ILM
Heat Map, Automatic Data
Optimization and ILM

Enabling Heat Map

SQL> alter system set heat_map = on;


Heat Map, Automatic Data
Optimization and ILM
Heat Map statistics can be viewed graphically
through EM Cloud Control:
Heat Map, Automatic Data
Optimization and ILM

Creating ADO policies

Compress the tablespace USER_DATA and all its residing


segments at OLTP level after 30 days of low access:

ALTER TABLESPACE USER_DATA ILM ADD POLICY


ROW STORE COMPRESS ADVANCED
SEGMENT AFTER 30 DAYS OF LOW ACCESS;
Heat Map, Automatic Data
Optimization and ILM

Creating ADO policies

Compress the table ORDER_ITEMS including any


SecureFile LOBs at OLTP level after 90 days of no
modification:

ALTER TABLE ORDER_ITEMS ILM ADD POLICY


ROW STORE COMPRESS ADVANCED
GROUP AFTER 90 DAYS OF NO MODIFICATION;
DDL LOGGING
DDL LOGGING
/u01/app/oracle/diag/rdbms/orcl/orcl/log/ddl/log.xml
Direct SQL statement execution in
RMAN

Pre - 12c:
RMAN> SQL ‘SELECT sysdate FROM dual’;

12c:
RMAN> SELECT sysdate FROM dual;
Session private statistics for Global
Temporary Tables

Pre 12c, statistics gathered for global temporary


tables (GTTs) were common to all sessions.
Session private statistics for Global
Temporary Tables

On 12c, by default session-private statistics are


enabled

SELECT DBMS_STATS.get_prefs('GLOBAL_TEMP_TABLE_STATS')
FROM dual;

STATS
------------------------------------------------------------------------------
SESSION
Session private statistics for Global
Temporary Tables
How to change?
Behavior pre 12c:
BEGIN
DBMS_STATS.set_global_prefs (
pname => 'GLOBAL_TEMP_TABLE_STATS',
pvalue => 'SHARED');
END;
/

Back to default on 12c:


BEGIN
DBMS_STATS.set_global_prefs (
pname => 'GLOBAL_TEMP_TABLE_STATS',
pvalue => 'SESSION');
END;
/
Session private statistics for Global
Temporary Tables
How to change for one table?

BEGIN
dbms_stats.set_table_prefs('SCOTT','GTT_TEST',
'GLOBAL_TEMP_TABLE_STATS','SHARED');
END;

BEGIN
dbms_stats.set_table_prefs('SCOTT','GTT_TEST',
'GLOBAL_TEMP_TABLE_STATS’,’SESSION');
END;
DEMO
Temporary Undo
Global Temporary Tables (GTT) hold the data in a
temporary tablespace. The data in GTTs are either
deleted after commit or kept until the session is
connected depending of the definition of the
GTT.(ON COMMIT PRESERVE OR DELETE ROWS ).

DMLs in a Global Temporary Tables do not generate


REDO, but generate UNDO and this will result in
REDO generating.
Temporary Undo

alter session set temp_undo_enabled=true;

**you can change for the session or for the database.


DEMO
Identity Columns
CREATE TABLE tabela_teste (
id NUMBER GENERATED ALWAYS AS IDENTITY,
coluna1 VARCHAR2(30)
);
Identity Columns
CREATE TABLE tabela_teste (
id NUMBER GENERATED BY DEFAULT AS IDENTITY,
coluna1 VARCHAR2(30)
);
Identity Columns
CREATE TABLE tabela_teste (
id NUMBER GENERATED BY DEFAULT ON NULL AS
IDENTITY,
coluna1 VARCHAR2(30)
);
SQL Query Row Limits and Offsets
SQL Query Row Limits and Offsets
SQL Query Row Limits and Offsets
Top-N Queries – Pré 12c
SQL Query Row Limits and Offsets
SQL Query Row Limits and Offsets
SQL Query Row Limits and Offsets
DEMO
PL/SQL From SQL
with
function Is_Number
(x in varchar2) return varchar2 is
Plsql_Num_Error exception;
pragma exception_init(Plsql_Num_Error, -06502);
begin
if (To_Number(x) is NOT null) then
return 'Y';
else
return '';
end if;
exception
when Plsql_Num_Error then
return 'N';
end Is_Number;
select rownum, x, is_number(x) is_num from t;
Session Level Sequences

Session level sequences are used to produce


unique values in a session. Once the session
ends, the sequence is reset.

Generating Primary Keys for a Global Temporary


Table would be a field where those kinds of
sequences could be used.
Session Level Sequences

CREATE SEQUENCE sequence_test


START WITH 1
INCREMENT BY 1
SESSION
/
Session Level Sequences

ALTER SEQUENCE sequence_test


SESSION;

ALTER SEQUENCE sequence_test


GLOBAL;
Multitenant
Fonte: Oracle Documentation
Multitenant

Fonte: https://blogs.oracle.com/UPGRADE/entry/non_cdb_architecture_of_oracle
Multitenant

Fonte: https://blogs.oracle.com/UPGRADE/entry/non_cdb_architecture_of_oracle
Multitenant

Fonte: https://blogs.oracle.com/UPGRADE/entry/non_cdb_architecture_of_oracle
In-Memory

Fonte: Oracle Documentation


SIMD Vector Processing

Fonte: http://www.oracle.com/technetwork/database/in-memory/overview/twp-
oracle-database-in-memory-2245633.html
In-Memory

In-Memory Area – a static pool in SGA


In-Memory

Fonte: OracleBase.com
In-Memory
Alter table hr.EMPLOYEES inmemory;

ALTER TABLE sales MODIFY PARTITION SALES_Q1_1998


INMEMORY;

ALTER TABLE sales INMEMORY NO INMEMORY(prod_id);

CREATE TABLESPACE tbs_test


DATAFILE '+DG01 SIZE 100M
DEFAULT INMEMORY;
In-Memory

Fonte: http://www.oracle.com/technetwork/database/in-memory/overview/twp-
oracle-database-in-memory-2245633.html
SQLcl

http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html
Thank You

Slides Available: http://www.slideshare.net/

You might also like