oracle database 12c new features for developers and dbas - otn tour la 2015

96
Oracle Database 12c New Features for Developers and DBAs Presented by: Alex Zaballa, Oracle DBA

Upload: alex-zaballa

Post on 16-Aug-2015

234 views

Category:

Technology


8 download

TRANSCRIPT

Oracle Database 12c

New Features for Developers and DBAs

Presented by:

Alex Zaballa, Oracle DBA

Alex Zaballa

http://alexzaballa.blogspot.com/

@alexzaballa145 and counting…

Worked 8 years for the Ministry of Finance

March - 2007 until March - 2015

ORACLE ACE PROGRAMhttp://www.oracle.com/technetwork/community/oracle-ace/index.html

Oracle Database 12c

New Features for Developers and DBAs

“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.”

Multitenant

Source: Oracle Documentation

Source: Oracle Documentation

Multitenant

Source: https://blogs.oracle.com/UPGRADE/entry/non_cdb_architecture_of_oracle

Multitenant

Source: https://blogs.oracle.com/UPGRADE/entry/non_cdb_architecture_of_oracle

Multitenant

Source: https://blogs.oracle.com/UPGRADE/entry/non_cdb_architecture_of_oracle

In-Memory

Source: Oracle Documentation

In-MemorySIMD Vector Processing

Source: 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

Source: OracleBase.com

In-Memory

Alter table hr.EMPLOYEES inmemory;

ALTER TABLE sales MODIFY PARTITION SALES_Q1_1998 NO INMEMORY;

ALTER TABLE sales INMEMORY NO INMEMORY(prod_id);

CREATE TABLESPACE tbs_test DATAFILE '+DG01 SIZE 100M DEFAULT INMEMORY;

In-Memory

Source: http://www.oracle.com/technetwork/database/in-memory/overview/twp-oracle-database-in-memory-2245633.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

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

SQL Query Row Limits and Offsets

SQL Query Row Limits and Offsetscreate table tabela_teste (codigo number, nome varchar2(20), salario number); insert into tabela_teste values (1,'Alex' ,100);insert into tabela_teste values (2,'Joao' ,200);insert into tabela_teste values (3,'Maria' ,300);insert into tabela_teste values (4,'Pedro',400);insert into tabela_teste values (5,'Paulo',500);insert into tabela_teste values (6,'Fernando',600);insert into tabela_teste values (7,'Rafael',700);insert into tabela_teste values (8,'Samuel',700);insert into tabela_teste values (9,'Daniel',800);insert into tabela_teste values (10,'Luciano',1000);

SQL Query Row Limits and Offsets

Top-N Queries – Pré 12c

select * from ( select codigo, nome, salario from tabela_teste order by salario desc)where rownum <= 5

SQL Query Row Limits and Offsets

select codigo, nome, salario from tabela_testeorder by salario descFETCH FIRST 5 ROWS ONLY

SQL Query Row Limits and Offsets

select codigo, nome, salario from tabela_testeorder by salario FETCH FIRST 30 PERCENT ROWS ONLY

SQL Query Row Limits and Offsets

select codigo, nome, salario from tabela_testeorder by salario desc OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY;

Invisible ColumnsCREATE TABLE tabela_teste( coluna1 NUMBER, coluna2 NUMBER, coluna3 NUMBER INVISIBLE, coluna4 NUMBER);

SQL> desc tabela_testeName ----------------------------------------- COLUNA1 NUMBERCOLUNA2 NUMBERCOLUNA4 NUMBER

Invisible Columns

INSERT INTO tabela_teste (coluna1,coluna2,coluna3,coluna4) VALUES (1,2,3,4);

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

Invisible Columns

SET COLINVISIBLE ON

SQL> desc tabela_testeName ----------------------------------------- COLUNA1 NUMBERCOLUNA2 NUMBERCOLUNA4 NUMBERCOLUNA3 (INVISIBLE) NUMBER

Invisible Columns

ALTER TABLE tabela_teste MODIFY coluna3 VISIBLE;

Approximate Count Distinct

This function provides an alternative to the COUNT (DISTINCT expr)

SQL Text Expansion

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

SQL Text Expansion

• Views• VPDs

PL/SQL From SQLwith 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_teste START WITH 1 INCREMENT BY 1 SESSION/

Session Level Sequences

ALTER SEQUENCE sequence_testeSESSION;

ALTER SEQUENCE sequence_testeGLOBAL;

Extended Data Types

SQL> create table tabela_teste(campo01 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.sqlSHUTDOWN IMMEDIATE;STARTUP;

**Once you switch to extended data types you can't switch back

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

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

STATS------------------------------------------------------------------------------SESSION

Session private statistics for Global Temporary Tables

BEGIN DBMS_STATS.set_global_prefs ( pname => 'GLOBAL_TEMP_TABLE_STATS', pvalue => 'SHARED');END;/

BEGIN DBMS_STATS.set_global_prefs ( pname => 'GLOBAL_TEMP_TABLE_STATS', pvalue => 'SESSION');END;/

Session private statistics for Global Temporary Tables

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

BEGIN dbms_stats.set_table_prefs('SCOTT','GTT_TESTE','GLOBAL_TEMP_TABLE_STATS','SESSION');END;

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.

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

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

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.

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 EMPRESA.dat 1,Empresa 12,Empresa 23,Empresa 34,Empresa 45,Empresa 56,Empresa 67,Empresa 78,Empresa 89,Empresa 9

SQL*Loader Express

[oracle@oracle01 tmp]$ sqlldr teste/teste TABLE=EMPRESASQL*Loader: Release 12.1.0.1.0 - Production on Sat Jan 11 12:16:28 2014Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.Express Mode Load, Table: EMPRESAPath used: External Table, DEGREE_OF_PARALLELISM=AUTO

Table EMPRESA: 9 Rows successfully loaded.

Check the log files: EMPRESA.log EMPRESA_%p.log_xtfor more information about the load.

Limit the PGA

SQL> show parameter pga NAME TYPE VALUE-------------------------- ------------- ----------------------pga_aggregate_limit big integer 2G

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

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

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

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'

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)

);

In-Database Archiving

SQL> create table tabela_teste(coluna1 number) row archival;

insert into tabela_teste values(1);insert into tabela_teste values(2);insert into tabela_teste values(3);

In-Database Archiving

In-Database Archiving

update tabela_teste set ora_archive_state=DBMS_ILM.ARCHIVESTATENAME(1) where coluna1=3;

In-Database Archiving

alter session set row archival visibility=all;

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 POLICYROW STORE COMPRESS ADVANCEDSEGMENT 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 POLICYROW STORE COMPRESS ADVANCEDGROUP 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;

SQLcl

Thank You