oracle序列的改变解析.docx
《oracle序列的改变解析.docx》由会员分享,可在线阅读,更多相关《oracle序列的改变解析.docx(14页珍藏版)》请在冰豆网上搜索。
oracle序列的改变解析
分区方法
范围分区
散列分区
列表分区
复合分区
❑范围分区
❑以表中的一个列或一组列的值的范围分区
❑范围分区的语法:
PARTITIONBYRANGE(column_name)
(
PARTITIONpart1VALUELESSTHAN(range1),
PARTITIONpart2VALUELESSTHAN(range2),
...
[PARTITIONpartNVALUELESSTHAN(MAXVALUE)]
);
❑散列分区
❑允许用户对不具有逻辑范围的数据进行分区
❑通过在分区键上执行HASH函数决定存储的分区
❑将数据平均地分布到不同的分区
❑散列分区语法
PARTITIONBYHASH(column_name)
PARTITIONSnumber_of_partitions;
或
PARTITIONBYHASH(column_name)
(PARTITIONpart1[TABLESPACEtbs1],
PARTITIONpart2[TABLESPACEtbs2],
...
PARTITIONpartN[TABLESPACEtbsN]);
❑列表分区
❑允许用户将不相关的数据组织在一起
❑列表分区的语法:
PARTITIONBYLIST(column_name)
(
PARTITIONpart1VALUES(values_list1),
PARTITIONpart2VALUES(values_list2),
...
PARTITIONpartNVALUES(DEFAULT)
);
❑复合分区
❑范围分区与散列分区或列表分区的组合
❑复合分区的语法:
PARTITIONBYRANGE(column_name1)
SUBPARTITIONBYHASH(column_name2)
SUBPARTITIONSnumber_of_partitions
(
PARTITIONpart1VALUELESSTHAN(range1),
PARTITIONpart2VALUELESSTHAN(range2),
...
PARTITIONpartNVALUELESSTHAN(MAXVALUE)
);
引用分区:
基于由外键引用的父表的分区的方
法,它依赖已有的父表子表的关系,子表通过外键
关联到父表,进而继承了父表的分区方式而不需自
己创建,子表还继承了父表的维护操作。
1,主表是范围分区,子表是引用分区
2,主表是列表分区,子表是引用分区
3,主表是散列分区,子表是引用分区
间隔分区:
可以完全自动地根据间隔阈值创建范
围分区,它是范围分区的扩展。
在数据仓库中有广泛的应用。
基于虚拟列的分区:
把分区建立在某个虚拟列
上,即建立在函数或表达式的计算结果上,来完成
某种任务。
系统分区:
不指定分区列,由ORACLE来完成分
区的控制和管理,它没有了范围分区或列表分区的
界限
❑在已分区的表中插入数据与操作普通表完全相同,Oracle会自动将数据保存到对应的分区
❑查询、修改和删除分区表时可以显式指定要操作的分区
INSERTINTOSALES3VALUES(‘P001’,’02-3月-2001',2000);
INSERTINTOSALES3VALUES(‘P002’,’10-5月-2001',2508);
INSERTINTOSALES3VALUES(‘P003’,’05-7月-2001',780);
INSERTINTOSALES3VALUES(‘P004’,’12-9月-2001',1080);
SELECT*FROMSALES3PARTITION(P3);
DELETEFROMSALES3PARTITION(P2);
❑分区维护操作修改已分区表的分区。
❑分区维护的类型:
❑计划事件-定期删除最旧的分区
❑非计划事件-解决应用程序或系统问题
❑分区维护操作有:
❑添加分区
❑删除分区
❑截断分区
❑合并分区
❑拆分分区
❑添加分区–在最后一个分区之后添加新分区
SQL>ALTERTABLESALES
ADDPARTITIONP4VALUESLESSTHAN(4000);
❑删除分区–删除一个指定的分区,分区的数据也随之删除
SQL>ALTERTABLESALESDROPPARTITIONP4;
❑截断分区–删除指定分区中的所有记录
SQL>ALTERTABLESALESTRUNCATEPARTITIONP3;
❑合并分区-将范围分区或复合分区的两个相邻分区连接起来
SQL>ALTERTABLESALES
MERGEPARTITIONSS1,S2INTOPARTITIONS2;
❑拆分分区-将一个大分区中的记录拆分到两个分区中
SQL>ALTERTABLESALESSPLITPARTITIONP2AT(1500)
INTO(PARTITIONP21,PARTITIONP22);
❑同义词是现有对象的一个别名。
❑简化SQL语句
❑隐藏对象的名称和所有者
❑提供对对象的公共访问
❑同义词共有两种类型:
私有同义词只能在其模式内访问,且不能与当前模式的对象同名。
同义词
私有同义词
公有同义词
CREATESYNONYMempFORSCOTT.emp;
SCOTT.emp 的别名
模式名
表名
私有同义词
公有同义词
CREATEPUBLICSYNONYMemp_synFORSCOTT.emp;
同义词名称
创建或替换现有的同义词
CREATEORREPLACESYNONYMemp_synFORSCOTT.emp;
替换现有的同义词
SQL>DROPSYNONYMemp;
SQL>DROPPUBLICSYNONYMemp_syn;
删除同义词
❑序列是用于生成唯一、连续序号的对象
❑序列可以是升序的,也可以是降序的
❑使用CREATESEQUENCE语句创建序列
指定内存中预先分配的序号数
SQL>CREATESEQUENCEstu_seq
STARTWITH1
INCREMENTBY1
MAXVALUE2000
MINVALUE1
NOCYCLE
CACHE10;
通过序列的伪列来访问序列的值
NEXTVAL返回序列的下一个值
CURRVAL返回序列的当前值
第一次使用序列中的值的时候,要使用NEXTVAL
使用ALTERSEQUENCE语句修改序列,
不能更改序列的STARTWITH参数
SQL>ALTERSEQUENCEstu_seqMAXVALUE5000CYCLE;
使用DROPSEQUENCE语句删除序列
SQL>DROPSEQUENCEstu_seq;
❑视图以经过定制的方式显示来自一个或多个表的数据
❑视图可以视为“虚拟表”或“存储的查询”
❑创建视图所依据的表称为“基表”
❑视图的优点有:
❑提供了另外一种级别的表安全性
❑隐藏的数据的复杂性
❑简化的用户的SQL命令
❑隔离基表结构的改变
❑通过重命名列,从另一个角度提供数据
创建视图的语法:
CREATE[ORREPLACE][FORCE]VIEW
view_name[(alias[,alias]...)]
ASselect_statement
[WITHCHECKOPTION]
[WITHREADONLY];
使用WITHCHECKOPTION选项创建视图
createorreplaceviewview2asselect*fromstudentwheresno=3withcheckoption;
使用ORDERBY子句创建视图
createorreplaceviewview3asselect*fromstudentorderbysnodesc;
创建带有错误的视图
CREATEFORCEVIEWvenAS
SELECT*FROMaddress;
联接视图
相等连接(第一种写法):
selecttable1.column,table2.column
fromtable1,table2
wheretable1.column1=table2.column2
可以使用表的别名,为了书写的简化。
相等连接(第二种写法):
selecttable1.column,table2.column
fromtable1innerjointable2
ontable1.column1=table2.column2
可以使用表的别名,为了书写的简化。
左外连接(第一种写法):
selecttable1.column,table2.column
fromtable1leftouterjointable2
ontable1.column1=table2.column2
可以使用表的别名,为了书写的简化。
左外连接(第二种写法):
selecttable1.column,table2.column
fromtable1,table2
wheretable1.column1=table2.column2(+)
可以使用表的别名,为了书写的简化。
❑在视图上也可以使用修改数据的DML语句,如INSERT、UPDATE和DELETE
❑视图上的DML语句有如下限制:
❑只能修改一个底层的基表
❑如果修改违反了基表的约束条件,则无法更新视图
❑如果视图包含连接操作符、DISTINCT关键字、集合操作符、聚合函数或GROUPBY子句,则将无法更新视图
❑如果视图包含伪列或表达式,则将无法更新视图
键保留表
department
student
英语系
003
数学系
002
中文系
001
deptname
deptno
001
李四
2
002
王五
3
001
张三
1
deptno
Sname
Sno
CREATEVIEWview_stu_deptAS
selects.sno,s.sname,s.deptno,d.deptname
fromstudents,departmentdwheres.deptno=d.deptno;
updateview_stu_deptsetdeptno='d'wheresno=1;
--可以更新键保留表的列
updateview_stu_deptsetdepartment='历史系'wheresno=1;
--不可以更新非键保留表的列
❑视图中可以使用单行函数、分组函数和表达式
❑必须为使用函数或者表达式的字段指定名字
CREATEVIEWitem_viewAS
SELECTitemcode,LOWER(itemdesc)item_desc
FROMitemfile;
❑使用DROPVIEW语句删除视图
SQL>DROPVIEWtoys_view;
❑索引是与表相关的一个可选结构
❑用以提高SQL语句执行的性能
❑减少磁盘I/O
❑使用CREATEINDEX语句创建索引
❑在逻辑上和物理上都独立于表的数据
❑Oracle自动维护索引
❑索引分为:
B树索引(平衡树索引)、位图索引。
❑B树索引分为:
唯一索引、组合索引、反向键索引、基于函数的索引
索引的类型
基于函数的索引
反向键索引
位图索引
唯一索引
组合索引
创建标准索引
SQL>CREATEINDEXitem_indexONitemfile(itemcode)
TABLESPACEindex_tbs;
分析索引
❑analyzeindexvalidatestructure;
查看index_stats表中的pct_used列的值,如果pct_used的
值过低,说明在索引中存在碎片,可以重建索引,来提高
pct_used的值,减少索引中的碎片。
❑唯一索引确保在定义索引的列中没有重复值
❑Oracle自动在表的主键列上创建唯一索引
❑使用CREATEUNIQUEINDEX语句创建唯一索引
SQL>CREATEUNIQUEINDEXitem_index
ONitemfile(itemcode);
❑组合索引是在表的多个列上创建的索引
❑索引中列的顺序是任意的
❑如果SQL语句的WHERE子句中引用了组合索引的所有列或大多数列,则可以提高检索速度
SQL>CREATEINDEXcomp_index
ONitemfile(p_category,itemrate);
❑反向键索引反转索引列键值的每个字节
❑通常建立在值是连续增长的列上,使数据均匀地分布在整个索引上
❑创建索引时使用REVERSE关键字
SQL>CREATEINDEXrev_index
ONitemfile(itemcode)REVERSE;
SQL>ALTERINDEXrev_indexREBUIDNOREVERSE;
❑位图索引适合创建在低基数列上
❑位图索引不直接存储ROWID,而是存储字节位到ROWID的映射
❑节省空间占用
❑如果索引列被经常更新的话,不适合建立位图索引
❑总体来说,位图索引适合于数据仓库中,不适合OLTP中
SQL>CREATEBITMAPINDEXbit_index
ONorder_master(orderno);
❑基于一个或多个列上的函数或表达式创建的索引
❑表达式中不能出现聚合函数
❑不能在LOB类型的列上创建
❑创建时必须具有QUERYREWRITE权限
SQL>CREATEINDEXlowercase_idx
ONtoys(LOWER(toyname));
SQL>SELECTtoyidFROMtoys
WHERELOWER(toyname)='doll';
重建索引
❑ALTERINDEXindex_nameREBUILD[ONLINE][NOLOGGING][COMPUTESTATISTICS];
其中:
ONLINE使得在重建索引过程中,用户可用对原来
的索引进行修改;
NOLOGGING表示在重建过程中产生最少的重做条目redo
Entry;
COMPUTESTATISTICS表示在重建过程中就生成了oracle
优化器所需的统计信息,避免了索引重建之后再进行analyze
或dbms_stats来收集统计信息。
删除索引
SQL>DROPINDEXitem_index;
❑可以将索引存储在不同的分区中
❑与分区有关的索引有三种类型:
❑局部分区索引-在分区表上创建的索引,在每个表分区上创建独立的索引,索引的分区范围与表一致
❑全局分区索引-在分区表或非分区表上创建的索引,索引单独指定分区的范围,与表的分区范围或是否分区无关
❑全局非分区索引-在分区表上创建的全局普通索引,索引没有被分区
❑与索引有关的数据字典视图有:
❑USER_INDEXES-用户创建的索引的信息
❑USER_IND_PARTITIONS-用户创建的分区索引的信息
❑USER_IND_COLUMNS-与索引相关的表列的信息
SQL>SELECTINDEX_NAME,TABLE_NAME,COLUMN_NAME
FROMUSER_IND_COLUMNS
ORDERBYINDEX_NAME,COLUMN_POSITION
Stud_details
Science
5
Maths
4
English
2
Subname
Subno
4
33
James
2
4
40
Jesica
3
2
45
Rob
1
Subno
Submrks
Studname
Studno
Sub_dets