1. 程式人生 > >Oracle 12c新特性

Oracle 12c新特性

Oracle Database 12c前幾天正式釋出了,如果學習一個新版本的資料庫?我通常是從New Features Guide文件看起,先通覽文件的目錄,遇到感興趣的新功能點,就開始做實驗來驗證這個新功能。當然,這之前需要先把新版本的資料庫安裝好,先把新版本的全部文件下載到本地,這樣即使你坐在飛機上也可以有文件可查。

這次我的計劃是實驗一下Identity型別的欄位,這個欄位可以用來作主鍵,會自動遞增,這種型別的欄位在SQL Server中早就存在,但是Oracle直到12c才推出這個功能。

通常我不會用sys使用者進行任何實驗(除非是驗證sysdba的新功能),因此總是會先建立一個我自己的dba使用者。
在12c中建立這個使用者首先就遇到了錯誤。

SQL> CREATE USER kamus IDENTIFIED BY oracle DEFAULT tablespace users;
CREATE USER kamus IDENTIFIED BY oracle DEFAULT tablespace users
            *
ERROR at line 1:
ORA-65096: invalid common USER OR ROLE name

對於一個不熟悉的錯誤,第一件事情不是去Google(如果你說Baidu那就更幼稚了),而是用oerr實用程式來看看Oracle自己對這個錯誤是怎麼解釋的。為什麼我喜歡非Windows環境中的Oracle?oerr的存在也是很大一個原因。

[[email protected] ~]$ oerr ora 65096
65096, 00000, "invalid common user or role name"
// *Cause:  An attempt was made to create a common user or role with a name
//          that wass not valid for common users or roles.  In addition to
//          the usual rules for user and role names, common user and role
//          names must start with C## or c## and consist only of ASCII
//          characters.
// *Action: Specify a valid common user or role name.
//

錯誤資訊的解析非常明確地告知“試圖建立一個通用使用者,必需要用C##或者c##開頭”,這時候心裡會有疑問,什麼是common user?但是我通常不會先急著去翻文件,而是先把手頭的事情做完,也就是先把使用者建立上。

SQL> CREATE USER c##kamus IDENTIFIED BY oracle DEFAULT tablespace users;   USER created.   SQL> GRANT dba TO c##kamus;   GRANT succeeded.   SQL> SELECT USERNAME,COMMON,ORACLE_MAINTAINED FROM dba_users;   USERNAME                       COM O
------------------------------ --- -
AUDSYS                         YES Y
GSMUSER                        YES Y
SPATIAL_WFS_ADMIN_USR          YES Y
SPATIAL_CSW_ADMIN_USR          YES Y
APEX_PUBLIC_USER               YES Y
SYSDG                          YES Y
DIP                            YES Y
SYSBACKUP                      YES Y
MDDATA                         YES Y
GSMCATUSER                     YES Y
C##KAMUS                       YES N
SYSKM                          YES Y
XS$NULL                        YES Y
OJVMSYS                        YES Y
ORACLE_OCM                     YES Y
OLAPSYS                        YES Y
SI_INFORMTN_SCHEMA             YES Y
DVSYS                          YES Y
ORDPLUGINS                     YES Y
XDB                            YES Y
ANONYMOUS                      YES Y
CTXSYS                         YES Y
ORDDATA                        YES Y
GSMADMIN_INTERNAL              YES Y
APPQOSSYS                      YES Y
APEX_040200                    YES Y
WMSYS                          YES Y
DBSNMP                         YES Y
ORDSYS                         YES Y
MDSYS                          YES Y
DVF                            YES Y
FLOWS_FILES                    YES Y
SYS                            YES Y
SYSTEM                         YES Y
OUTLN                          YES Y
LBACSYS                        YES Y   36 ROWS selected.

建立C##KAMUS使用者成功之後,再返回去解決心中的疑問,什麼是common user?在聯機文件的左上角搜尋關鍵字common user,會得到如下的結果。
Oracle Online Doc Search Result

通常我會先瀏覽Concept,如果看完覺得心中疑問已經解決,就會返回繼續作之前的實驗,不會再瀏覽其他的連結;如果想要查詢怎麼做,比如說如何建立Common User,才會繼續去看Task部分。這樣的好處是可以保持專注而不至於被過多文件分心

但是由於Common User這個概念幾乎是嶄新的,所以我很有興趣繼續探索一下,跟Common User相對的Local User該如何建立。繼續去看Task當然是個方法,但是這裡我選擇的是直接去看SQL Language Reference,因為我們知道一定是在Create User語法裡面會有不同的定義,進入Create User語法頁面,直接搜尋common user,就可以看到如下這段話。

CONTAINER Clause

To create a local user in a pluggable database (PDB), ensure that the current container is that PDB and specify CONTAINER = CURRENT. To create a common user, ensure that the current container is the root and specify CONTAINER = ALL. The name of the common user must begin with C## or c##. If you omit this clause and the current container is a PDB, then CONTAINER = CURRENT is the default. If you omit this clause and the current container is the root, then CONTAINER = ALL is the default.

也就是說我們一定要先登入進一個PDB,才可以建立本地使用者,那麼如何知道現在的sqlplus是登入進了哪個DB呢?這個疑問其實是一個很簡單的聯想,既然需要去一個地方,那麼一定有方法知道我現在在什麼地方,通過簡單地查詢文件,可以得知以下的方法。現在確實在CDB中。

SQL> SHOW con_name   CON_NAME
------------------------------
CDB$ROOT   SQL> SELECT SYS_CONTEXT ('USERENV', 'CON_NAME') FROM DUAL;   SYS_CONTEXT('USERENV','CON_NAME')
-----------------------------------------------
CDB$ROOT

dbca建庫的時候,有一個新選項是同時建立PDB,我勾選過(對於dbca中出現的新選項,如果不是條件不允許,我都會選中進行測試),建立了名字為pdbtest的PDB,那麼現在我想嘗試登入這個PDB,去建立一個Local User。如何登入PDB?Administrator’s Guide中有專門新的一個章節“Part VI Managing a Multitenant Environment”來描述如何管理多租戶環境,瀏覽目錄就可以直接找到“Connecting to a PDB with SQL*Plus”這部分,如下所示。

You can use the following techniques to connect to a PDB with the SQL*Plus CONNECT command:

Database connection using easy connect
Database connection using a net service name

那嘗試直接使用easy connect來登入PDB。

$ sqlplus sys/[email protected]:15210/pdbtest AS sysdba   SQL*Plus: Release 10.2.0.4.0 - Production ON Sat Jul 6 21:44:42 2013   Copyright (c) 1982, 2007, Oracle.  ALL Rights Reserved.     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 SYS_CONTEXT ('USERENV', 'CON_NAME') FROM DUAL;   SYS_CONTEXT('USERENV','CON_NAME')
------------------------------------------
PDBTEST   Elapsed: 00:00:00.01   SQL>  SELECT NAME,PDB FROM dba_services;
 SELECT NAME,PDB FROM dba_services
                      *
ERROR at line 1:
ORA-01219: DATABASE OR pluggable DATABASE NOT OPEN: queries allowed ON fixed TABLES OR views ONLY

PDB沒有Open?嘗試開啟。無法使用startup命令。這是顯而易見的。 原因是我使用了舊版本的SQL*Plus(如上所示是10.2.0.4.0)連線到12c資料庫的PDB中,某些新特性不被支援。

SQL> startup
ORA-24543: instance startup OR shutdown NOT allowed IN pluggable DATABASE

使用12c自帶的SQL*Plus登入,就可以使用startup命令將PDB開啟,使用SQL*Plus管理PDB的詳細命令可以參看文件描述

SQL> SHOW USER
USER IS "SYS"
SQL> startup
Pluggable DATABASE opened.
SQL>
SQL> SHOW con_name   CON_NAME
------------------------------
PDBTEST

或者可以使用如下語句開啟PDB。

SQL> ALTER PLUGGABLE DATABASE OPEN;   Operation 227 succeeded.   Elapsed: 00:00:02.44   SQL> SELECT NAME, OPEN_MODE, RESTRICTED, OPEN_TIME FROM V$PDBS;   NAME			       OPEN_MODE  RES OPEN_TIME
------------------------------ ---------- --- ------------------------------------------------
PDBTEST 		       READ WRITE NO  06-JUL-13 09.48.57.260 PM

到此,可以建立Local User了。

SQL> CREATE USER kamus IDENTIFIED BY oracle;   USER created.   Elapsed: 00:00:00.10
SQL> GRANT dba TO kamus;   GRANT succeeded.   Elapsed: 00:00:00.03

那麼在一個PDB中可以看到多少使用者呢?可以看到CDB中的使用者嗎?這又是一個簡單的聯想,學習的過程其實是一個發散再收縮的迴圈。看來不可以,只能看到自己的使用者,當然這裡有很多Common User。可以看到即使是在PDB中,cdb_檢視也是可以使用的。

SQL> SELECT CON_ID,COUNT(*) FROM cdb_users GROUP BY con_id;   CON_ID   COUNT(*)
---------- ----------
	 3	   38   Elapsed: 00:00:00.03

那麼再回到CDB中看一下,會是什麼情況?可以看到所有Container中的使用者都可以查詢到。

SQL> SELECT CON_ID,COUNT(*) FROM cdb_users GROUP BY con_id;   CON_ID   COUNT(*)
---------- ----------
         1         36
         2         35
         3         38   Elapsed: 00:00:00.08

終於,我可以回到最開始的實驗目標上去了,在PDB中建立了T1表,id列為Identity型別。

SQL> CREATE TABLE t1 (id NUMBER GENERATED AS IDENTITY);   TABLE created.   Elapsed: 00:00:00.22

根據文件描述,Identity型別仍然是通過Sequence來實現的,那麼應該是自動建立了一個Sequence,果然如此。在你學習的過程中會多此一步來查詢一下Sequence檢視嗎?

SQL> SELECT SEQUENCE_NAME FROM user_sequences;   SEQUENCE_NAME
----------------------------------------------------------------------------------------------
ISEQ$$_91620   Elapsed: 00:00:00.00

預設建立的Sequence,CACHE_SIZE是20,開始值是1,這都跟單獨建立的Sequence預設值一樣。

SQL> SELECT * FROM user_sequences;   SEQUENCE_NAME															  MIN_VALUE  MAX_VALUE
-------------------------------------------------------------------------------------------------------------------------------- ---------- ----------
INCREMENT_BY C O CACHE_SIZE LAST_NUMBER PARTITION_COUNT S K
------------ - - ---------- ----------- --------------- - -
ISEQ$$_91620																  1 1.0000E+28
	   1 N N	 20	      1 		N N     Elapsed: 00:00:00.00

插入一條資料試一下,報錯報錯還是報錯。所以如果是generated always的identity列,如果只有這一列,沒法插入資料。

SQL> INSERT INTO t1 VALUES('');
INSERT INTO t1 VALUES('')
*
ERROR at line 1:
ORA-32795: cannot INSERT INTO a generated always IDENTITY COLUMN     Elapsed: 00:00:00.01   SQL> INSERT INTO t1 VALUES(ISEQ$$_91620.NEXTVAL);
INSERT INTO t1 VALUES(ISEQ$$_91620.NEXTVAL)
*
ERROR at line 1:
ORA-32795: cannot INSERT INTO a generated always IDENTITY COLUMN     Elapsed: 00:00:00.00   SQL> INSERT INTO t1 VALUES(NULL);
INSERT INTO t1 VALUES(NULL)
*
ERROR at line 1:
ORA-32795: cannot INSERT INTO a generated always IDENTITY COLUMN     Elapsed: 00:00:00.00

換GENERATED BY DEFAULT ON NULL 型別試一下,Wait,如果刪除了表,對應的序列會自動刪除嗎?理論上應該會,當然還是要測試一下。

SQL> DROP TABLE t1;   TABLE dropped.   Elapsed: 00:00:00.19

序列還在?

SQL> SELECT * FROM user_sequences;   SEQUENCE_NAME															  MIN_VALUE  MAX_VALUE
-------------------------------------------------------------------------------------------------------------------------------- ---------- ----------
INCREMENT_BY C O CACHE_SIZE LAST_NUMBER PARTITION_COUNT S K
------------ - - ---------- ----------- --------------- - -
ISEQ$$_91620																  1 1.0000E+28
	   1 N N	 20	      1 		N N     Elapsed: 00:00:00.00

再建一張表。

SQL> CREATE TABLE t2 (id NUMBER GENERATED BY DEFAULT AS IDENTITY);   TABLE created.   Elapsed: 00:00:00.01

現在是2個序列了。

SQL> SELECT * FROM user_sequences;   SEQUENCE_NAME															  MIN_VALUE  MAX_VALUE
-------------------------------------------------------------------------------------------------------------------------------- ---------- ----------
INCREMENT_BY C O CACHE_SIZE LAST_NUMBER PARTITION_COUNT S K
------------ - - ---------- ----------- --------------- - -
ISEQ$$_91620																  1 1.0000E+28
	   1 N N	 20	      1 		N N   ISEQ$$_91622																  1 1.0000E+28
	   1 N N	 20	      1 		N N     Elapsed: 00:00:00.00

寫完整的Drop語句試一下。

SQL> DROP TABLE t2 cascade CONSTRAINT purge;   TABLE dropped.   Elapsed: 00:00:00.12

後建立的序列已經被自動刪除了,之前建立的還在。

SQL> SELECT * FROM user_sequences;   SEQUENCE_NAME															  MIN_VALUE  MAX_VALUE
-------------------------------------------------------------------------------------------------------------------------------- ---------- ----------
INCREMENT_BY C O CACHE_SIZE LAST_NUMBER PARTITION_COUNT S K
------------ - - ---------- ----------- --------------- - -
ISEQ$$_91620																  1 1.0000E+28
	   1 N N	 20	      1 		N N     Elapsed: 00:00:00.00

兩者的不同應該是purge,如果被刪除的表還在回收站中,序列是會保留的,Make sense,因為表還可能從回收站裡面再restore回來,需要保證序列仍然有效。那麼清空回收站實驗一下。

SQL> purge recyclebin;   Recyclebin purged.   Elapsed: 00:00:00.04

果然,序列也相應地被刪除了。

SQL> SELECT * FROM user_sequences;   no ROWS selected   Elapsed: 00:00:00.00

再回到正題,建立T3表,插入一條資料。

SQL> CREATE TABLE t3 (id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY);   TABLE created.   Elapsed: 00:00:00.01
SQL> INSERT INTO t3 VALUES(NULL);   1 ROW created.   Elapsed: 00:00:00.01

序列的LAST_NUMBER已經增加為21。

SQL> SELECT * FROM user_sequences;   SEQUENCE_NAME															  MIN_VALUE  MAX_VALUE
-------------------------------------------------------------------------------------------------------------------------------- ---------- ----------
INCREMENT_BY C O CACHE_SIZE LAST_NUMBER PARTITION_COUNT S K
------------ - - ---------- ----------- --------------- - -
ISEQ$$_91624																  1 1.0000E+28
	   1 N N	 20	     21 		N N

後臺如何操作的?使用10046 trace,再插入幾條資料。

SQL> INSERT INTO t3 VALUES(NULL);   1 ROW created.   SQL> INSERT INTO t3 VALUES(NULL);   1 ROW created.   SQL> SELECT * FROM t3;   ID
----------
	 1
	 2
	 3

檢視10046 trace的結果。可以看到執行計劃中直接呼叫了SEQUENCE,就跟之前插入記錄的時候明確指定SEQ.NEXTVAL一樣。其實Oracle的實現方法非常簡單,這一列其實就是Number型別,然後將這一列的Default值設定為”KAMUS”.”ISEQ$$_91624″.nextval,僅此而已。

--tkprof 10046 trace
insert into t3
values
(null)     call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          1          3           1
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        2      0.00       0.00          0          1          3           1   Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 104
Number of plan statistics captured: 1   Rows (1st) Rows (avg) Rows (max)  Row Source Operation
---------- ---------- ----------  ---------------------------------------------------
         0          0          0  LOAD TABLE CONVENTIONAL  (cr=1 pr=0 pw=0 time=90 us)
         1          1          1   SEQUENCE  ISEQ$$_91624 (cr=0 pr=0 pw=0 time=14 us)     Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  SQL*Net message to client                       1        0.00          0.00
  SQL*Net message from client                     1        5.28          5.28
********************************************************************************

到此為止,可以休息一下了,從ORA-65096開始大概花費了1個多小時的時間,我學習到了:
1. 什麼是Common User,什麼是Local User?
2. 如何查詢現在的環境是CDB還是某個PDB?
3. 如何登入PDB?
4. 如何啟動PDB?
5. PDB和CDB中檢視看到的內容有怎樣的不同?
6. 如何建立Identity型別的列?
7. 刪除表以後,對應的Sequence如何處理?
8. Oracle後臺對於Identity列是如何處理的?

你是不是也是這樣學習的呢?

[email protected]
謝謝留言中Asher的建議,增加如下測試。
使用DBMS_METADATA.GET_DDL獲取到的DDL資訊,已經是符合12c語法的樣式了,顯示出了Sequence的具體資訊。

SQL> SELECT dbms_metadata.GET_DDL('TABLE','T3') FROM dual;   DBMS_METADATA.GET_DDL('TABLE','T3')
--------------------------------------------------------------------------------   CREATE TABLE "KAMUS"."T3"
   (	"ID" NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY MINVALUE 1 MAXVALUE 99
99999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER  NOCYCLE
  NOT NULL ENABLE,
	"COMMENTS" VARCHAR2(100)
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"

系統自動產生的序列無法手工修改屬性。

SQL> ALTER SEQUENCE "ISEQ$$_91624" INCREMENT BY 10;
ALTER SEQUENCE "ISEQ$$_91624" INCREMENT BY 10
*
ERROR at line 1:
ORA-32793: cannot ALTER a system-generated SEQUENCE   SQL> host oerr ora 32793
32793,0000, "cannot alter a system-generated sequence"
// *Cause:  An attempt was made TO ALTER a system-generated SEQUENCE.
// *Action: A system-generated SEQUENCE, such AS one created FOR an
//          IDENTITY COLUMN, cannot be altered.

系統自動產生的序列也不允許刪除。

SQL> DROP SEQUENCE "ISEQ$$_91624";
DROP SEQUENCE "ISEQ$$_91624"
              *
ERROR at line 1:
ORA-32794: cannot DROP a system-generated SEQUENCE   SQL> host oerr ora 32794
32794,0000, "cannot drop a system-generated sequence"
// *Cause:  An attempt was made TO DROP a system-generated SEQUENCE.
// *Action: A system-generated SEQUENCE, such AS one created FOR an
//          IDENTITY COLUMN, cannot be dropped.

在11gR2中錯誤資訊編號在ORA-32790和ORA-32800之間是空白,而12c使用了這其間的8個錯誤號作為新特性的報錯。

ORA-32791: prebuilt table managed column cannot have a default on null
Cause: An attempt was made to create a materialized view on a prebuilt table that has a managed column with a default on null expression.
Action: Either remove the default on null property, or do not include the column in the materialized view definition.

ORA-32792: prebuilt table managed column cannot be an identity column
Cause: An attempt was made to create a materialized view on a prebuilt table that has a managed column that is an identity column.
Action: Either remove the identity property, or do not include the column in the materialized view definition.

ORA-32793: cannot alter a system-generated sequence
Cause: An attempt was made to alter a system-generated sequence.
Action: A system-generated sequence, such as one created for an identity column, cannot be altered.

ORA-32794: cannot drop a system-generated sequence
Cause: An attempt was made to drop a system-generated sequence.
Action: A system-generated sequence, such as one created for an identity column, cannot be dropped.

ORA-32795: cannot insert into a generated always identity column
Cause: An attempt was made to insert a value into an identity column created with GENERATED ALWAYS keywords.
Action: A generated always identity column cannot be directly inserted. Instead, the associated sequence generator must provide the value.

ORA-32796: cannot update a generated always identity column
Cause: An attempt was made to update an identity column created with GENERATED ALWAYS keywords.
Action: A generated always identity column cannot be directly updated.

ORA-32797: identity column sequence mismatch in ALTER TABLE EXCHANGE PARTITION
Cause: The two tables specified in the EXCHANGE have identity columns with sequences that are neither both increasing nor decreasing.
Action: Ensure that the identity columns have sequences with INCREMENT BY having the same sign.

ORA-32798: cannot use ANSI RIGHT or FULL outer join with a left correlation
Cause: An attempt was made to use a lateral view with a left correlation to the first operand of an ANSI RIGHT or FULL outer join.
Action: Rewrite the query without the left correlation.

相關推薦

oracle 12c 特性之不可見字段

創建 oracl alt created 顯式 11g 不可見 插入數據 esc 在Oracle 11g R1中,Oracle以不可見索引和虛擬字段的形式引入了一些不錯的增強特性。繼承前者並發揚光大,Oracle 12c 中引入了不可見字段思想。在之前的版本中

Oracle 12C 特性之擴展數據類型(extended data type)

stand 特性 standard ava dbm har sco stat rac Oracle 12C 新特性-擴展數據類型,在12c中,與早期版本相比,諸如VARCHAR2, NAVARCHAR2以及 RAW這些數據類型的大小會從4K以及2K字節擴展至32K字節。只要

Oracle 12C 特性之在線重命名、遷移活躍的數據文件

查看 查詢 存在 data gop ddl ins aux 正在 Oracle 數據庫 12c 版本中對數據文件的遷移或重命名不再需要太多繁瑣的步驟,可以使用 ALTER DATABASE MOVE DATAFILE 這樣的 SQL 語句對數據文件進行在線重命名和移動。而當

Oracle 12C 特性之 db默認字符集AL32UTF8、PDB支持不同字符集

ans ica 允許 12c gbk 操作 utf contain sin 一、 db默認字符集AL32UTF8Specify the database character set when you create the database. Starting from Or

Oracle 12C 特性之 sqlplus查看History命令

let date 添加 version sys com delete 自動 ber 12c裏,Oracle推出了 History 命令,這很像 Shell 中的 history ,減少了重敲 SQL ,帶來了很多便利。1. 查看history幫助SQL> help h

Oracle 12C 特性之 恢復表

play 截斷 mman temp 租戶 ict total 重啟 修改表結構 RMAN的表級和表分區級恢復應用場景:1、You need to recover a very small number of tables to a particular point in t

循序漸進:Oracle 12c特性Sharding技術解讀

引言 資料庫構架設計中主要有 Shared Everthting、Shared Nothing 和 Shared Disk: Shared Everthting:一般是針對單個主機,完全透明共享 CPU/MEMORY/IO,並行處理能力是最差的,例如 Oracle

Oracle 12c 特性之varchar2長度最大值支援到32767

show parameter MAX_STRING_SIZE standard:代表12c之前的長度限制,即varchar2和nvarchar2 4是4000 bytes,raw是2000,且系統           預設是sta

ORACLE 12C特性——CDB與PDB

  Oracle 12C引入了CDB與PDB的新特性,在ORACLE 12C資料庫引入的多租使用者環境(Multitenant Environment)中,允許一個數據庫容器(CDB)承載多個可插拔資料庫(PDB)。CDB全稱為Container Database,中文翻譯為資料庫容器,PDB全稱為Plugg

Oracle 12c特性

Oracle Database 12c前幾天正式釋出了,如果學習一個新版本的資料庫?我通常是從New Features Guide文件看起,先通覽文件的目錄,遇到感興趣的新功能點,就開始做實驗來驗證這個新功能。當然,這之前需要先把新版本的資料庫安裝好,先把新版本的全部文件下載

Oracle 12C 特性之表分割槽帶非同步全域性索引非同步維護(一次add、truncate、drop、spilt、merge多個分割槽)

實驗準備: -- 建立實驗表 CREATE TABLE p_andy (ID number(10), NAME varchar2(40)) PARTITION BY RANGE (id) (PARTITION p1 VALUES LESS THAN (10), PARTITION p2 VALUES LES

Oracle 12C 特性之線上重新命名、遷移活躍的資料檔案

Oracle 資料庫 12c 版本中對資料檔案的遷移或重新命名不再需要太多繁瑣的步驟,可以使用 ALTER DATABASE MOVE DATAFILE 這樣的 SQL 語句對資料檔案進行線上重新命名和移動。而當此資料檔案正在傳輸時,終端使用者可以執行查詢,DML以及 DD

Oracle 12C 特性之 PDB熱克隆

 說明:版本12.2.0.1 12c r1版本中 clone 一份PDB源庫需要開啟在read only只讀模式 , 在12c r2版本中引入了local undo mode, 源PDB在read/write 讀寫模式也可以 clone 。  local undo mo

Oracle 12c 特性:SQL Plan Directives與過量的動態取樣解析

在 12c 中,優化器進行了較大的改變,推出了 Adaptive query optimizat

Oracle Database 12c 特性:RAC Cluster Hub Node 和 Leaf Node

Oracle Database 12c 新特性:RAC Cluster Hub Node 和 Leaf Node 在 Oracle Database 12c 的 Cluster 中引入了很多新特性和新概念,其中重複最多的幾個名詞除了 Flex Cluster、F

12c特性-感受ORACLE 12C IN_MEMORY效能威力

感受ORACLE 12C IN_MEMORY效能威力       oracle 12C in_memory(簡稱IM)對資料庫效能的提升是巨大的,最重要的一點是這一切  對應用程式是透明的。首先我們來看看實驗中IM的相關引數設定 使用imemory特性的前提,要

12c 特性-統一審計(Unified Auditing)

sele true chmod pre nan rdb roo login 12c 數據庫版本12.1.0.2生產環境可以關閉掉這個特性。 1、默認關閉統一審計 SYS@orcl1> SELECT VALUE FROM V$OPTION WHERE PARAMETER

Oracle 18C特性介紹

Oracle 18C新特性Oracle 18c 是在 2018-02-16 發布出來的,還是秉承著 Oracle 的 Cloud first 理念,18c 現在 Cloud 和 Engineered Systems 上推出。Oracle 18c號稱是一款自治性的數據庫,可以減少很多DBA的工作,很多從事DBA

Oracle 18c特性:Schema-Only 帳號提升應用管理安全性

在 Oracle 18c 中,一個特殊型別的帳號被引入到資料庫當中,這特特性被稱為 Schema-Only 帳號,這個帳號通過 NO AUTHENTICATION 語句建立,沒有密碼,也就不允許直接登入,所以這種帳號型別是 純模式型別。 帳號不能直接

Oracle 18c特性一覽

1. 一般新特性 1.1. Shadow Lost Write Protection Shadow lost write protection檢測到一個丟失的寫,它會導致一個主要的資料損壞。可以在不需要Oracle DG備庫的情況下為資料庫、表空間或資料檔案啟用Shadow lost