oracle 12c 新特性之(相同欄位上的多重索引、ddl 日誌、限制PGA的大小、分頁查詢)
1. 相同欄位上的多重索引
在Oracle 12c R1之前,一個欄位是無法以任何形式擁有多個索引的。或許有人會想知道為什麼通常一個欄位需要有多重索引,事實上需要多重索引的欄位或欄位集合是很多的。在12c R1中,只要索引型別的形式不同,一個欄位就可以包含在一個B-tree索引中,同樣也可以包含在Bitmap索引中。注意,只有一種型別的索引是在給定時間可見可用的。
SQL>create table more_ind as select * from user_objects;
Table created.
SQL> create index ind_one on more_ind(object_id);
Index created.
SQL> create index ind_two on more_ind(object_id);
ORA-01408: such column list already indexed
SQL> create bitmap index ind_two on more_ind(object_id);
ORA-01408: such column list already indexed
SQL> create bitmap index ind_two on more_ind(object_id) invisible;
Index created.
2. ddl 日誌
在之前的版本中沒有可選方法來對DDL操作進行日誌記錄。而在12c R1中,你現在可以將DDL操作寫入xml和日誌檔案中。這對於瞭解誰在什麼時間執行了create或drop命令是十分有用的。要開啟這一功能必須對ENABLE_DDL_LOGGING 初始引數加以配置。這一引數可以在資料庫或會話級加以設定。當此引數為啟用狀態,所有的DDL命令會記錄在$ORACLE_BASE/diag/rdbms/DBNAME/log|ddl 路徑下的xml和日誌檔案中。一個xml中包含DDL命令,IP地址,時間戳等資訊。這可以幫助確定在什麼時候對使用者或表進行了刪除亦或是一條DDL語句在何時觸發。
SQL> ALTER SYSTEM|SESSION SET ENABLE_DDL_LOGGING=TRUE;
alter system set enable_ddl_logging=true;
以下的DDL語句可能會記錄在xml或日誌檔案中:
CREATE|ALTER|DROP|TRUNCATE TABLE
DROP USER
CREATE|ALTER|DROP PACKAGE|FUNCTION|VIEW|SYNONYM|SEQUENC
實驗:
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> alter system set enable_ddl_logging=true;
System altered.
SQL> truncate table select_top;
Table truncated.
[oracle@12c01 ddl]$ pwd
/home/oracle/app/oracle/diag/rdbms/andycdb/andycdb/log/ddl
[oracle@12c01 ddl]$ ll
total 4
-rw-r-----. 1 oracle oinstall 308 May 7 21:28 log.xml
[oracle@12c01 ddl]$ cat log.xml
<msg time='2017-05-07T21:28:36.028+08:00' org_id='oracle' comp_id='rdbms'
msg_id='opiexe:4695:2946163730' type='UNKNOWN' group='diag_adl'
level='16' host_id='12c01' host_addr='10.100.25.16'
pid='8858' version='1' con_uid='1'
con_id='1' con_name='CDB$ROOT'>
<txt>truncate table select_top
</txt>
</msg>
3. 限制PGA的大小
在Oracle 12c R1之前,沒有選項可以用來限制和控制PGA的大小。雖然你設定某個大小為PGA_AGGREGATE_TARGET 的初始引數,Oracle會根據工作負載和需求來動態地增大或減小PGA的大小。而在12c中,你可以透過開啟自動PGA管理來對PGA設定硬性限制,這需要對PGA_AGGREGATE_LIMIT 引數進行設定。因此,你現在可以透過設定新的引數來對PGA設定硬性限制以避免過度使用PGA。
SQL> ALTER SYSTEM SET PGA_AGGREGATE_LIMIT=2G;
SQL> ALTER SYSTEM SET PGA_AGGREGATE_LIMIT=0; --disables the hard limit
提示:當超過了當前PGA的限制,Oracle會自動終止/中止會話或程式以保持最合適的PGA記憶體。
4. 分頁查詢
在12c之前,只能透過一些間接手段來獲取前N行的結果,如:rownum。在12c中,透過FETCH FIRST|NEXT|PERCENT可以直接得到top_n。
11g中分頁查詢示範:
select *
from(select a.*,rownum rn
from emp a
where rownum<=10)
where rn>=5 ;
12c:
1.準備實驗環境
create table select_top (id int);
insert into select_top values(1);
insert into select_top values(2);
insert into select_top values(3);
insert into select_top values(4);
insert into select_top values(5);
insert into select_top values(6);
insert into select_top values(7);
insert into select_top values(8);
insert into select_top values(9);
insert into select_top values(5);
insert into select_top values(10);
SQL> select * from select_top;
ID
----------
1
2
3
4
5
6
7
8
9
5
10
11 rows selected.
2. 取id數字大小為前5的記錄
模式一:重複記錄只顯示一次
SQL> select id from select_top order by id fetch first 5 rows only;
ID
----------
1
2
3
4
5
模式二:重複記錄顯示多次
SQL> select id from select_top order by id fetch first 5 rows with ties;
ID
----------
1
2
3
4
5
5
6 rows selected.
3. 跳過前五條記錄,返回後五條記錄
SQL> select id from select_top order by id offset 5 rows fetch next 5 rows only;
ID
----------
5
6
7
8
9
4.取id前50%的記錄(這只是近似值)
SQL> select id from select_top order by id fetch first 50 percent rows only;
ID
----------
1
2
3
4
5
5
SQL> select count(*) from select_top;
COUNT(*)
----------
11
SQL> select 6/11 from dual;
6/11
----------
.545454545
在Oracle 12c R1之前,一個欄位是無法以任何形式擁有多個索引的。或許有人會想知道為什麼通常一個欄位需要有多重索引,事實上需要多重索引的欄位或欄位集合是很多的。在12c R1中,只要索引型別的形式不同,一個欄位就可以包含在一個B-tree索引中,同樣也可以包含在Bitmap索引中。注意,只有一種型別的索引是在給定時間可見可用的。
SQL>create table more_ind as select * from user_objects;
Table created.
SQL> create index ind_one on more_ind(object_id);
Index created.
SQL> create index ind_two on more_ind(object_id);
ORA-01408: such column list already indexed
SQL> create bitmap index ind_two on more_ind(object_id);
ORA-01408: such column list already indexed
SQL> create bitmap index ind_two on more_ind(object_id) invisible;
Index created.
2. ddl 日誌
在之前的版本中沒有可選方法來對DDL操作進行日誌記錄。而在12c R1中,你現在可以將DDL操作寫入xml和日誌檔案中。這對於瞭解誰在什麼時間執行了create或drop命令是十分有用的。要開啟這一功能必須對ENABLE_DDL_LOGGING 初始引數加以配置。這一引數可以在資料庫或會話級加以設定。當此引數為啟用狀態,所有的DDL命令會記錄在$ORACLE_BASE/diag/rdbms/DBNAME/log|ddl 路徑下的xml和日誌檔案中。一個xml中包含DDL命令,IP地址,時間戳等資訊。這可以幫助確定在什麼時候對使用者或表進行了刪除亦或是一條DDL語句在何時觸發。
SQL> ALTER SYSTEM|SESSION SET ENABLE_DDL_LOGGING=TRUE;
alter system set enable_ddl_logging=true;
以下的DDL語句可能會記錄在xml或日誌檔案中:
CREATE|ALTER|DROP|TRUNCATE TABLE
DROP USER
CREATE|ALTER|DROP PACKAGE|FUNCTION|VIEW|SYNONYM|SEQUENC
實驗:
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> alter system set enable_ddl_logging=true;
System altered.
SQL> truncate table select_top;
Table truncated.
[oracle@12c01 ddl]$ pwd
/home/oracle/app/oracle/diag/rdbms/andycdb/andycdb/log/ddl
[oracle@12c01 ddl]$ ll
total 4
-rw-r-----. 1 oracle oinstall 308 May 7 21:28 log.xml
[oracle@12c01 ddl]$ cat log.xml
<msg time='2017-05-07T21:28:36.028+08:00' org_id='oracle' comp_id='rdbms'
msg_id='opiexe:4695:2946163730' type='UNKNOWN' group='diag_adl'
level='16' host_id='12c01' host_addr='10.100.25.16'
pid='8858' version='1' con_uid='1'
con_id='1' con_name='CDB$ROOT'>
<txt>truncate table select_top
</txt>
</msg>
3. 限制PGA的大小
在Oracle 12c R1之前,沒有選項可以用來限制和控制PGA的大小。雖然你設定某個大小為PGA_AGGREGATE_TARGET 的初始引數,Oracle會根據工作負載和需求來動態地增大或減小PGA的大小。而在12c中,你可以透過開啟自動PGA管理來對PGA設定硬性限制,這需要對PGA_AGGREGATE_LIMIT 引數進行設定。因此,你現在可以透過設定新的引數來對PGA設定硬性限制以避免過度使用PGA。
SQL> ALTER SYSTEM SET PGA_AGGREGATE_LIMIT=2G;
SQL> ALTER SYSTEM SET PGA_AGGREGATE_LIMIT=0; --disables the hard limit
提示:當超過了當前PGA的限制,Oracle會自動終止/中止會話或程式以保持最合適的PGA記憶體。
4. 分頁查詢
在12c之前,只能透過一些間接手段來獲取前N行的結果,如:rownum。在12c中,透過FETCH FIRST|NEXT|PERCENT可以直接得到top_n。
11g中分頁查詢示範:
select *
from(select a.*,rownum rn
from emp a
where rownum<=10)
where rn>=5 ;
12c:
1.準備實驗環境
create table select_top (id int);
insert into select_top values(1);
insert into select_top values(2);
insert into select_top values(3);
insert into select_top values(4);
insert into select_top values(5);
insert into select_top values(6);
insert into select_top values(7);
insert into select_top values(8);
insert into select_top values(9);
insert into select_top values(5);
insert into select_top values(10);
SQL> select * from select_top;
ID
----------
1
2
3
4
5
6
7
8
9
5
10
11 rows selected.
2. 取id數字大小為前5的記錄
模式一:重複記錄只顯示一次
SQL> select id from select_top order by id fetch first 5 rows only;
ID
----------
1
2
3
4
5
模式二:重複記錄顯示多次
SQL> select id from select_top order by id fetch first 5 rows with ties;
ID
----------
1
2
3
4
5
5
6 rows selected.
3. 跳過前五條記錄,返回後五條記錄
SQL> select id from select_top order by id offset 5 rows fetch next 5 rows only;
ID
----------
5
6
7
8
9
4.取id前50%的記錄(這只是近似值)
SQL> select id from select_top order by id fetch first 50 percent rows only;
ID
----------
1
2
3
4
5
5
SQL> select count(*) from select_top;
COUNT(*)
----------
11
SQL> select 6/11 from dual;
6/11
----------
.545454545
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2138620/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle12C新特性_DDL日誌Oracle
- Oracle 12c後enable_ddl_logging的日誌位置變化Oracle
- 限制 Apache日誌檔案大小的方法Apache
- 查詢oracle欄位預設值Oracle
- Oracle的特性分頁Oracle
- LightDB 22.4 新特性之相容Oracle樹形查詢Oracle
- [20180408]那些函式索引適合欄位的查詢.txt函式索引
- ORACLE查詢欄位中含有空格的資料Oracle
- Oracle資料庫中的分頁查詢Oracle資料庫
- MySQL資料庫查詢多個欄位值全部相同的記錄MySql資料庫
- 筆記 mongo查詢慢日誌,建立索引筆記Go索引
- loki的日誌查詢Loki
- 使用 Eloquent ORM 使用 with 模型關聯查詢,如何處理select不同模型的欄位(欄位名可能相同)ORM模型
- Oracle12C新特性_不可見欄位(二)Oracle
- [20181026]12c增強索引線上DDL操作.txt索引
- 【TUNE_ORACLE】Oracle檢查點(四)檢查點對redo日誌的影響和redo日誌大小設定建議Oracle
- 【TUNE_ORACLE】PGA_AGGREGATE_LIMIT詳解(一)PGA_AGGREGATE_TARGET的限制OracleMIT
- ORACLE 12C 之叢集日誌位置變化Oracle
- Oracle總結【SQL細節、多表查詢、分組查詢、分頁】OracleSQL
- MySQL的分頁查詢MySql
- Oracle 12C新特性-History命令Oracle
- Oracle 12C新特性In-MemoryOracle
- Oracle 12c 兩個新特性Oracle
- oracle複合索引介紹(多欄位索引)Oracle索引
- oracle全文索引之如何實現查詢Oracle索引
- SQL 如何查詢每個分組都出現的欄位值SQL
- Oracle服務啟動-索引-子查詢-分頁儲存過程問題Oracle索引儲存過程
- Oracle 12c新特性--ASMFD(ASM Filter Driver)特性OracleASMFilter
- 日誌、分頁
- 分析“蜜罐NS”上的查詢,提升DNS日誌的質量DNS
- mysql之 slow log 慢查詢日誌MySql
- VUE-表格佈局、表格查詢、工具欄、表格、分頁欄Vue
- 【TUNE_ORACLE】PGA_AGGREGATE_LIMIT詳解(三)PGA_AGGREGATE_LIMIT的大小設定OracleMIT
- 分庫分表後的分頁查詢
- 關於MySQL 通用查詢日誌和慢查詢日誌分析MySql
- Oracle 12c 新特性之臨時Undo--temp_undo_enabledOracle
- MongoDB(13)- 查詢操作返回指定的欄位MongoDB
- 自己封裝的公共獲取資料的方法(支援按欄位名查詢,時間查詢,分頁,關聯查詢),只需一行程式碼封裝行程
- 欄位修改記錄操作日誌的實現