Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs [USR12010]

42 views

Published on

Esta sessão irá analisar quais dos novos recursos do Oracle Database 12c são os mais interessantes para DBAs e desenvolvedores e dará exemplos de como utilizá-los.
#oowbr

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs [USR12010]

  1. 1. Oracle Database 12c Novas Características para DBAs e Desenvolvedores Presented by: Alex Zaballa, Oracle DBA
  2. 2. Alex Zaballa http://alexzaballa.blogspot.com/ @alexzaballa205 and counting… https://www.linkedin.com/in/alexzaballa
  3. 3. 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
  4. 4. Oracle Database 12c Novas Características para DBAs e Desenvolvedores
  5. 5. Documentação Oficial - 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
  6. 6. Artigos – 12c • https://oracle-base.com/articles/12c/articles- 12c • http://www.oracle.com/technetwork/pt/articles/ index.html • http://profissionaloracle.com.br
  7. 7. “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.”
  8. 8. 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
  9. 9. Availability of Oracle Database 12.2 Source: https://blogs.oracle.com/UPGRADE/entry/oracle_database_12_2_just
  10. 10. Oracle Database Release Status MOS Note:742060.1
  11. 11. SQLcl http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html
  12. 12. Devo migrar para 12.1.0.2 ou aguardar a 12.2 ? CDB ou NON-CDB?
  13. 13. Multitenant
  14. 14. Fonte: Oracle Documentation
  15. 15. Multitenant Fonte: https://blogs.oracle.com/UPGRADE/entry/non_cdb_architecture_of_oracle
  16. 16. Multitenant Fonte: https://blogs.oracle.com/UPGRADE/entry/non_cdb_architecture_of_oracle
  17. 17. Multitenant Fonte: https://blogs.oracle.com/UPGRADE/entry/non_cdb_architecture_of_oracle
  18. 18. In-Memory Fonte: Oracle Documentation
  19. 19. SIMD Vector Processing Fonte: http://www.oracle.com/technetwork/database/in-memory/overview/twp- oracle-database-in-memory-2245633.html
  20. 20. In-Memory In-Memory Area – Pool estático que faz parte da SGA
  21. 21. In-Memory Fonte: OracleBase.com
  22. 22. 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;
  23. 23. In-Memory Fonte: http://www.oracle.com/technetwork/database/in-memory/overview/twp- oracle-database-in-memory-2245633.html
  24. 24. insert /*+ append parallel */ into tab1 select /*+ parallel */ * from tab2 nologging; 15 minutes to complete. create table tab1 as select /*+ parallel */ * from tab2 nologging; 2 minutes to complete. Parallel
  25. 25. Parallel Source: https://docs.oracle.com/database/121/VLDBG/GUID-5EB01FA8-030B-45BB-9B16-2D13881F6010.htm
  26. 26. Parallel
  27. 27. JSON Artigo no OTN: http://www.oracle.com/technetwork/pt/articles /sql/json-oracle-database-12c-2378776- ptb.html
  28. 28. JSON • No Oracle Database 12c (12.1.0.2), foi adicionado o suporte nativo ao JavaScript Object Notation (JSON). • O JSON é um formato leve para intercâmbio de dados que é relativamente fácil para o ser humano ler e escrever, além de ser fácil para os softwares analisarem e gerarem.
  29. 29. JSON
  30. 30. JSON
  31. 31. DEMO
  32. 32. Data Redaction Artigo no OTN: http://www.oracle.com/technetwork/pt/articles /idm/funcionalidade-data-redaction-12c- 2209076-ptb.html
  33. 33. 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
  34. 34. Data Redaction
  35. 35. Data Redaction
  36. 36. DEMO
  37. 37. SQL Query Row Limits and Offsets
  38. 38. SQL Query Row Limits and Offsets create 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);
  39. 39. 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
  40. 40. SQL Query Row Limits and Offsets select codigo, nome, salario from tabela_teste order by salario desc FETCH FIRST 5 ROWS ONLY
  41. 41. SQL Query Row Limits and Offsets select codigo, nome, salario from tabela_teste order by salario FETCH FIRST 30 PERCENT ROWS ONLY
  42. 42. SQL Query Row Limits and Offsets select codigo, nome, salario from tabela_teste order by salario desc OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY;
  43. 43. DEMO
  44. 44. Invisible Columns CREATE TABLE tabela_teste ( coluna1 NUMBER, coluna2 NUMBER, coluna3 NUMBER INVISIBLE, coluna4 NUMBER ); SQL> desc tabela_teste Name ----------------------------------------- COLUNA1 NUMBER COLUNA2 NUMBER COLUNA4 NUMBER
  45. 45. Invisible Columns INSERT INTO tabela_teste (coluna1,coluna2,coluna3,coluna4) VALUES (1,2,3,4); INSERT INTO tabela_teste VALUES (1,2,4);
  46. 46. Invisible Columns SET COLINVISIBLE ON SQL> desc tabela_teste Name ----------------------------------------- COLUNA1 NUMBER COLUNA2 NUMBER COLUNA4 NUMBER COLUNA3 (INVISIBLE) NUMBER
  47. 47. Invisible Columns ALTER TABLE tabela_teste MODIFY coluna3 VISIBLE;
  48. 48. DEMO
  49. 49. 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;
  50. 50. SQL Text Expansion • Views • VPDs
  51. 51. DEMO
  52. 52. 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;
  53. 53. DEMO
  54. 54. Session Level Sequences Session level sequences são utilizadas para produzir valores únicos dentro de uma sessão. Assim que a sessão termina, a sequence é reinicializada. Elas são muito utilizadas para gerar valores de Primary Keys em Global Temporary Tables.
  55. 55. Session Level Sequences CREATE SEQUENCE sequence_teste START WITH 1 INCREMENT BY 1 SESSION /
  56. 56. Session Level Sequences ALTER SEQUENCE sequence_teste SESSION; ALTER SEQUENCE sequence_teste GLOBAL;
  57. 57. DEMO
  58. 58. Extended Data Types SQL> create table tabela_teste(campo01 varchar2(4001)); * ERROR at line 1: ORA-00910: specified length too long for its datatype
  59. 59. Extended Data Types - VARCHAR2 : 32767 bytes - NVARCHAR2 : 32767 bytes - RAW : 32767 bytes
  60. 60. Extended Data Types SHUTDOWN IMMEDIATE; STARTUP UPGRADE; ALTER SYSTEM SET max_string_size=extended; @?/rdbms/admin/utl32k.sql SHUTDOWN IMMEDIATE; STARTUP; **Após aumentar o tamanho máximo dos tipos de dados, não é possível desfazer esta alteração.
  61. 61. DEMO
  62. 62. Multiple Indexes on the same set of Columns Pré 12c: ORA-01408: such column list already indexed error.
  63. 63. Multiple Indexes on the same set of Columns No 12c é possível ter vários índices em uma mesma coluna ou lista de colunas. A criação de um índice sobre uma coluna ou lista de colunas que já foram indexadas é simples e você tem que garantir que apenas um índice será visível.
  64. 64. Multiple Indexes on the same set of Columns • Unique versus nonunique • B-tree versus bitmap • Different partitioning strategies
  65. 65. DEMO
  66. 66. READ Object Privilege and READ ANY TABLE System Privilege Qual a diferença para SELECT e SELECT ANY TABLE?
  67. 67. READ Object Privilege and READ ANY TABLE System Privilege O privilégio de objeto SELECT e o privilégio de sistema SELECT ANY TABLE permitem bloquear as linhas de uma tabela através da execução das seguintes operações: LOCK TABLE table_name IN EXCLUSIVE MODE; SELECT ... FROM table_name FOR UPDATE;
  68. 68. 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.
  69. 69. 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
  70. 70. DEMO
  71. 71. Session private statistics for Global Temporary Tables Até o 12c, as estatísticas para tabelas temporárias globais (GTTs) eram comuns para todas as sessões.
  72. 72. Session private statistics for Global Temporary Tables SELECT DBMS_STATS.get_prefs('GLOBAL_TEMP_TABLE_STATS') Stats FROM dual; STATS ------------------------------------------------------------------------------ SESSION
  73. 73. 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; /
  74. 74. Session private statistics for Global Temporary Tables BEGIN dbms_stats.set_table_prefs('SCOTT','GTT_TESTE','GLOB AL_TEMP_TABLE_STATS','SHARED'); END; BEGIN dbms_stats.set_table_prefs('SCOTT','GTT_TESTE','GLOB AL_TEMP_TABLE_STATS','SESSION'); END;
  75. 75. DEMO
  76. 76. Temporary Undo Uma Global Temporary Table armazena seus dados em uma temporary tablespace e estes dados são mantidos durante a transação ou durante toda a sessão (ON COMMIT DELETE ROWS ou ON COMMIT PRESERVE ROWS). Instruções DML em Global Temporary Tables não geram REDO, devido ao fato destes dados estarem armazenados em uma temporary tablespace, mas geram UNDO e isto sim implicará na geração de REDO.
  77. 77. Temporary Undo alter session set temp_undo_enabled=true; **pode ser alterado a nível de banco de dados ou de sessão.
  78. 78. DEMO
  79. 79. Statistics During Loads O banco de dados irá coletar estatísticas automaticamente das tabelas durante os seguintes tipos de operações bulk load: - CREATE TABLE AS SELECT - INSERT INTO ... SELECT into an empty table using a direct path insert
  80. 80. DEMO
  81. 81. Partial Indexes for Partitioned Table • Você pode criar os índices (globais ou locais) para partições ou sub-partições específicas, isto é, os índices serão criados apenas para partições/sub-partições que você deseja. • Este recurso não é suportado para índices únicos, ou seja, para índices utilizados para impor restrições exclusivas.
  82. 82. Partial Indexes for Partitioned Table
  83. 83. DEMO
  84. 84. SQL*Loader Express • No modo express, não é necessário criar o arquivo de controle. • O objetivo principal é salvar tempo e diminuir o esforço. • O express mode pode ser utilizado quando todas as colunas são do tipo character, number ou datetime
  85. 85. SQL*Loader Express [oracle@oracle01 tmp]$ cat EMPRESA.dat 1,Empresa 1 2,Empresa 2 3,Empresa 3 4,Empresa 4 5,Empresa 5 6,Empresa 6 7,Empresa 7 8,Empresa 8 9,Empresa 9
  86. 86. SQL*Loader Express [oracle@oracle01 tmp]$ sqlldr teste/teste TABLE=EMPRESA 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: EMPRESA Path used: External Table, DEGREE_OF_PARALLELISM=AUTO Table EMPRESA: 9 Rows successfully loaded. Check the log files: EMPRESA.log EMPRESA_%p.log_xt for more information about the load.
  87. 87. DEMO
  88. 88. 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
  89. 89. Truncate Cascade SQL> truncate table scott.dept cascade; Table truncated. A constraint deve ser do tipo ON DELETE CASCADE.
  90. 90. DEMO
  91. 91. Limit the PGA SQL> show parameter pga NAME TYPE VALUE -------------------------- ------------- ---------------------- pga_aggregate_limit big integer 2G
  92. 92. Limit the PGA PGA_AGGREGATE_LIMIT é setado como default para o maior valor entre: - 2 GB (valor default) - 200% do valor do parâmetro PGA_AGGREGATE_TARGET - 3 MB multiplicado pelo valor do parâmetro PROCESSES
  93. 93. Full Database Caching Este novo recurso permite armazenar todos os segmentos do banco de dados em memória (quando os segmentos forem acessados).
  94. 94. DEMO
  95. 95. Recuperando Tabelas com o RMAN • Utilizado para recuperação de tabelas/partições de um backup realizado pelo RMAN. • Este comando, diminui o tempo e a complexidade da restauração, permitindo a recuperação “point- in-time” apenas da tabela/partição, ao invés de toda tablespace como era nas versões anteriores. • É muito útil quando não temos informações suficientes no UNDO para utilizar o Flashback Table.
  96. 96. Recuperando Tabelas com o RMAN 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'
  97. 97. DEMO
  98. 98. 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);
  99. 99. In-Database Archiving
  100. 100. In-Database Archiving update tabela_teste set ora_archive_state=DBMS_ILM.ARCHIVESTATENAME(1) where coluna1=3;
  101. 101. In-Database Archiving alter session set row archival visibility=all;
  102. 102. DEMO
  103. 103. Heat Map, Automatic Data Optimization and ILM OTN - Artigo do Alex Zaballa e Daniel Da Meda http://www.oracle.com/technetwork/pt/articles /database-performance/ilm-e-automatic-data- optimization-2601873-ptb.html
  104. 104. 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
  105. 105. Heat Map, Automatic Data Optimization and ILM Habilitando o Heat Map SQL> alter system set heat_map = on;
  106. 106. Heat Map, Automatic Data Optimization and ILM As estatísticas de Heat Map visualizadas graficamente através do EM Cloud Control:
  107. 107. Heat Map, Automatic Data Optimization and ILM Criando políticas ADO Comprimir a tablespace USER_DATA e todos os seus segmentos utilizando compressão OLTP após 30 dias de baixo acesso: ALTER TABLESPACE USER_DATA ILM ADD POLICY ROW STORE COMPRESS ADVANCED SEGMENT AFTER 30 DAYS OF LOW ACCESS;
  108. 108. Heat Map, Automatic Data Optimization and ILM Criando políticas ADO Comprimir a tabela ORDER_ITEMS utilizando compressão OLTP após 90 dias sem modificações. ALTER TABLE ORDER_ITEMS ILM ADD POLICY ROW STORE COMPRESS ADVANCED GROUP AFTER 90 DAYS OF NO MODIFICATION;
  109. 109. DEMO
  110. 110. DDL LOGGING
  111. 111. DDL LOGGING /u01/app/oracle/diag/rdbms/orcl/orcl/log/ddl/log.xml
  112. 112. DEMO
  113. 113. Direct SQL statement execution in RMAN Pré 12c: RMAN> SQL ‘SELECT sysdate FROM dual’; 12c: RMAN> SELECT sysdate FROM dual;
  114. 114. DEMO
  115. 115. Identity Columns CREATE TABLE tabela_teste ( id NUMBER GENERATED ALWAYS AS IDENTITY, coluna1 VARCHAR2(30));
  116. 116. Identity Columns CREATE TABLE tabela_teste ( id NUMBER GENERATED BY DEFAULT AS IDENTITY, coluna1 VARCHAR2(30));
  117. 117. Identity Columns CREATE TABLE tabela_teste ( id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY, coluna1 VARCHAR2(30));
  118. 118. DEMO
  119. 119. Obrigado Slides disponíveis no

×