Oracle12C新特性有哪些
这篇文章主要介绍“Oracle12C新特性有哪些”,在日常操作中,相信很多人在Oracle12C新特性有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle12C新特性有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
1、只读分区或子分区
在Oracle12.2数据库中可以将表,分区和子分区设置为只读状态,以保护数据免受任何用户或触发器的无意DML操作。
只读子句的值可以是READ ONLY或READ WRITE。READ WRITE是默认值。除非为分区或子分区显式设置了只读子句,否则只读子句的更高级别设置将应用于分区和子分区!
例子:创建具有只读和读写分区的表:orders_read_write_only
以下是创建具有只读和读写状态的复合范围列表分区表的示例。将orders_read_write_only被明确指定为READ WRITE,所以表的默认属性是读写。partition的默认属性order_p1被指定为只读,因此子分区ord_p1_northwest和order_p1_southwest从分区继承只读状态order_p1。子分区ord_p2_southwest和order_p3_northwest显式指定为只读,覆盖默认读写状态。
CREATETABLEorders_read_write_only(order_idNUMBER(12),order_dateDATECONSTRAINTorder_date_nnNOTNULL,stateVARCHAR2(2))READWRITEPARTITIONBYRANGE(order_date)SUBPARTITIONBYLIST(state)(PARTITIONorder_p1VALUESLESSTHAN(TO_DATE('01-DEC-2015','DD-MON-YYYY'))READONLY(SUBPARTITIONorder_p1_northwestVALUES('OR','WA'),SUBPARTITIONorder_p1_southwestVALUES('AZ','UT','NM')),PARTITIONorder_p2VALUESLESSTHAN(TO_DATE('01-MAR-2016','DD-MON-YYYY'))(SUBPARTITIONorder_p2_northwestVALUES('OR','WA'),SUBPARTITIONorder_p2_southwestVALUES('AZ','UT','NM')READONLY),PARTITIONorder_p3VALUESLESSTHAN(TO_DATE('01-JUL-2016','DD-MON-YYYY'))(SUBPARTITIONorder_p3_northwestVALUES('OR','WA')READONLY,SUBPARTITIONorder_p3_southwestVALUES('AZ','UT','NM')));
--检查分区和子分区的状态:
SQL>SELECTPARTITION_NAME,READ_ONLYFROMUSER_TAB_PARTITIONSWHERETABLE_NAME='ORDERS_READ_WRITE_ONLY';PARTITION_NAMEREAD-----------------------------ORDER_P1YES---只读状态ORDER_P2NONEORDER_P3NONESQL>setlinesize300SQL>colPARTITION_NAMEfora25SQL>colSUBPARTITION_NAMEfora25SQL>SELECTPARTITION_NAME,SUBPARTITION_NAME,READ_ONLYFROMUSER_TAB_SUBPARTITIONSWHERETABLE_NAME='ORDERS_READ_WRITE_ONLY';PARTITION_NAMESUBPARTITION_NAMEREA-----------------------------------------------------ORDER_P1ORDER_P1_NORTHWESTYESORDER_P1ORDER_P1_SOUTHWESTYESORDER_P2ORDER_P2_NORTHWESTNOORDER_P2ORDER_P2_SOUTHWESTYESORDER_P3ORDER_P3_NORTHWESTYESORDER_P3ORDER_P3_SOUTHWESTNO6rowsselected.
(从上面可以看出,如果单独设置子分区为只读状态 会覆盖分区的读写属性,也就是说对一个分区的子分区进行设置只读状态 不会影响这个分区下的其他子分区的属性!)
--:分区的属性可以通过modify语句进行在线修改。
SQL> alter table ORDERS_READ_WRITE_ONLY modify partition ORDER_P1 read write;
################################################################
2、创建 外部表分区:
在12.2中,Oracle还支持外部表分区,类似如下的语法展示了这一特性的用途,对于一个统一的外部表,可以通过分区指向不同的外部文件,不同文件可以用于存储已经分类的数据,从而更加灵活的使用外部表:
例子:
SQL>Createdirectoryload_d1as'/home/oracle';CREATETABLEsales(loc_idnumber,prod_idnumber,cust_idnumber,amount_soldnumber,quantity_soldnumber)ORGANIZATIONEXTERNAL(TYPEoracle_loaderDEFAULTDIRECTORYload_d1ACCESSPARAMETERS(RECORDSDELIMITEDBYNEWLINECHARACTERSETUS7ASCIINOBADFILELOGFILElog_dir:'sales.log'FIELDSTERMINATEDBY","))REJECTLIMITUNLIMITEDPARTITIONBYRANGE(loc_id)(PARTITIONp1VALUESLESSTHAN(1000)LOCATION('california.txt'),PARTITIONp2VALUESLESSTHAN(2000)DEFAULTDIRECTORYload_d2LOCATION('washington.txt'),PARTITIONp3VALUESLESSTHAN(3000));
###########################################################
3、列表分区:
创建列表分区的语义与创建范围分区的语义非常相似。从Oracle12.2开始可以创建多列列表分区。
例子:创建列表分区
CREATETABLEq1_sales_by_region(deptnonumber,deptnamevarchar2(20),quarterly_salesnumber(10,2),statevarchar2(2))PARTITIONBYLIST(state)(PARTITIONq1_northwestVALUES('OR','WA'),PARTITIONq1_southwestVALUES('AZ','UT','NM'),PARTITIONq1_northeastVALUES('NY','VM','NJ'),PARTITIONq1_southeastVALUES('FL','GA'),PARTITIONq1_northcentralVALUES('SD','WI'),PARTITIONq1_southcentralVALUES('OK','TX'));
3.1、、使用默认分区创建列表分区:(指定默认分区就是将不符合的行都插入到默认分区中)
与范围分区不同,使用列表分区,分区之间没有明显的顺序感。
您还可以指定一个默认分区,将未映射到任何其他分区的行映射到该分区。如果在前面的示例中指定了默认分区,则状态CA将映射到该分区。
例子:使用默认分区创建列表分区表
CREATETABLEsales_by_region(item#INTEGER,qtyINTEGER,store_nameVARCHAR(30),state_codeVARCHAR(2),sale_dateDATE)STORAGE(INITIAL10KNEXT20K)TABLESPACEtbs5PARTITIONBYLIST(state_code)(PARTITIONregion_eastVALUES('MA','NY','CT','NH','ME','MD','VA','PA','NJ')STORAGE(INITIAL8M)TABLESPACEtbs8,PARTITIONregion_westVALUES('CA','AZ','NM','OR','WA','UT','NV','CO')NOLOGGING,PARTITIONregion_southVALUES('TX','KY','TN','LA','MS','AR','AL','GA'),PARTITIONregion_centralVALUES('OH','ND','SD','MO','IL','MI','IA'),PARTITIONregion_nullVALUES(NULL),PARTITIONregion_unknownVALUES(DEFAULT));
3.2、创建自动列表分区:
自动列表分区方法允许按需创建列表分区。
自动列表分区表类似于常规列表分区表,但该分区表更易于管理。您可以仅使用已知的分区键值创建自动列表分区表。当数据加载到表中时,如果加载的分区键值与任何现有分区不对应,则数据库会自动创建新分区。由于分区是按需自动创建的,因此自动列表分区方法在概念上与现有的间隔分区方法类似。
注意:
①:除非您可以调整数据,否则对值非常频繁更改的数据类型的自动列表分区不太适合此方法。
②:自动列表分区表在创建时必须至少有一个分区。由于为新的和未知的分区键值自动创建了新分区,因此自动列表分区不能具有DEFAULT分区。
例子:
CREATETABLEsales_auto_list(salesman_idNUMBER(5),salesman_nameVARCHAR2(30),sales_stateVARCHAR2(20),sales_amountNUMBER(10),sales_dateDATE)PARTITIONBYLIST(sales_state)AUTOMATIC(PARTITIONP_CALVALUES('CALIFORNIA'));
--查看列表分区是否为自动列表分区
SQL>colTABLE_NAMEfora20SQL>colownerfora10SQL>setlinesize300SQL>selectOWNER,TABLE_NAME,PARTITIONING_TYPE,AUTOLISTfromdba_PART_TABLESwheretable_name=upper('sales_auto_list');OWNERTABLE_NAMEPARTITIONAUT------------------------------------------SYSSALES_AUTO_LISTLISTYES
3.3、创建多列列表分区:
与单列列表分区类似,各个分区可以包含包含值列表的集合。
语法:PARTITION BY LIST (column1,column2)
例子:创建多列列表分区
CREATETABLEdba_by_db_in_yhem(dbalicNUMBER,usernameVARCHAR2(20),dbcatVARCHAR2(4),regionVARCHAR2(10))PARTITIONBYLIST(dbcat,region)(PARTITIONnorth_partVALUES(('ORCL','BEIJING'),('ORCL','TIANJIN')),PARTITIONsouth_partVALUES(('DB2','SHENZHEN'),('DB2','GUANGZHOU')),PARTITIONwest_partVALUES(('SQL','CHENGDU'),('ORCL','CHENGDU'),('DB2','KUNMING')),PARTITIONeast_partVALUES('ORCL','SHANGHAI'),PARTITIONrestVALUES(DEFAULT));insertintodba_by_db_in_yhemvalues(1,'EYGLE','ORCL','BEIJING');insertintodba_by_db_in_yhemvalues(2,'KAMUS','ORCL','BEIJING');insertintodba_by_db_in_yhemvalues(3,'LAOXIONG','SQL','CHENGDU');insertintodba_by_db_in_yhemvalues(4,'ORA-600','DB2','GUANGZHOU');insertintodba_by_db_in_yhemvalues(5,'YANGTINGKUN','ALL','BEIJING');SQL>select*fromdba_by_db_in_yhempartition(north_part);DBALICUSERNAMEDBCAREGION--------------------------------------------1EYGLEORCLBEIJING2KAMUSORCLBEIJINGSQL>select*fromdba_by_db_in_yhempartition(south_part);DBALICUSERNAMEDBCAREGION--------------------------------------------4ORA-600DB2GUANGZHOU
####################################################
指定秘钥列的分区:
对于范围分区和散列分区表,最多可以指定16个分区键列。
1、按日期创建多列范围分区表
CREATETABLEsales_demo(yearNUMBER,monthNUMBER,dayNUMBER,amount_soldNUMBER)PARTITIONBYRANGE(year,month)(PARTITIONbefore2001VALUESLESSTHAN(2001,1),PARTITIONq1_2001VALUESLESSTHAN(2001,4),PARTITIONq2_2001VALUESLESSTHAN(2001,7),PARTITIONq3_2001VALUESLESSTHAN(2001,10),PARTITIONq4_2001VALUESLESSTHAN(2002,1),PARTITIONfutureVALUESLESSTHAN(MAXVALUE,0));INSERTINTOsales_demoVALUES(2000,12,12,1000);INSERTINTOsales_demoVALUES(2001,3,17,2000);INSERTINTOsales_demoVALUES(2001,11,1,5000);INSERTINTOsales_demoVALUES(2002,1,1,4000);
2、创建多列范围分区表(强制实施相等的分区)
CREATETABLEsupplier_parts(supplier_idNUMBER,partnumNUMBER,priceNUMBER)PARTITIONBYRANGE(supplier_id,partnum)(PARTITIONp1VALUESLESSTHAN(10,100),PARTITIONp2VALUESLESSTHAN(10,200),PARTITIONp3VALUESLESSTHAN(MAXVALUE,MAXVALUE));INSERTINTOsupplier_partsVALUES(5,5,1000);INSERTINTOsupplier_partsVALUES(5,150,1000);INSERTINTOsupplier_partsVALUES(10,100,1000);--查看各分区的值:SQL>SELECT*FROMsupplier_partsPARTITION(p1);SUPPLIER_IDPARTNUMPRICE-------------------------------55100051501000SQL>SELECT*FROMsupplier_partsPARTITION(p2);SUPPLIER_IDPARTNUMPRICE-------------------------------101001000
到此,关于“Oracle12C新特性有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。