group_id和distinct
distinct剔除重复行,而不是按重复分组级别剔除;而group_id是按重复分组级别剔除。在扩展分组中,使用distinct有时结果可能不对,而group_id是oracle专门用来剔除重复分组结果的。SQL> with t as 2 (select 1 s, 'a' name 3 from dual 4 union all 5 select 1 s, null name 6 from dual 7 union all 8 select 2 s, null name 9 from dual 10 union all 11 select 1 s, 'a' name from dual) 12 select s, name, count(1), grouping(name), group_id() 13 from t 14 group by rollup(
sequence中的cache
sequence会产生一系列连续的不重复数字,但是这个序列很容易断号,尤其在有cache时,如果应用要求一定不能断号,那就不能使用sequence了。建一序列zhaoss_test_seq:SQL> create sequence zhaoss_test_seq 2 minvalue 1 3 maxvalue 100 4 start with 1 5 increment by 1 6 cache 20 7 order; Sequence created注意:刚刚创建的序列需要先用nextval来获取第一个初始值,否则会报如下错误:SQL> select zhaoss_test_seq.currval from dual; select zhaoss_test_seq.currval from dual ORA-08002: 序列 ZHAOSS_TEST_SEQ.CU
oracle分析函数(一)
Oracle内置分析函数: 序号 函数类型 函数名称 函数简介 1 常规统计函数 MAX 查找组中表达式的最大值 2 MIN 查找组中表达式的最小值 3 AVG 计算组中表达式的平均值 4 SUM 计算组中表达式的累积和 5 COUNT 对一组内发生事情进行累计计数 6
表空间传输步骤
表空间传输:1、把要传输表空间设置为只读状态;2、以传输表空间模式(transport_tablespace=y)将表空间的元数据导出到转储文件;3、判断源数据库所在平台与目标数据库所在平台的endian是否相同: select a.platform_name,b.endian_format from v$database a,v$transportable_platform b where a.platform_name=b.platform_name;4、转换数据文件格式,既可以在源数据库转换也可以在目标数据库转换: 在源数据库执行转换: RMAN> CONVERT TABLESPACE USERS TO PLATFORM 'Microsoft Windows IA (32-bit)' FORMAT 'E:ZHAOSS'; 在
UNDO SEGMENT的扩展和收缩
当发生一个DML操作时,服务器进程会选择一个undo segment。AUM采用的是事务绑定undo segment的算法:1、首先尝试将每个undo段绑定一个事务,也就是每个undo segment上只被一个事务使用。2、如果不能发现完全空闲的(也就是没有与任何事务绑定)undo segment,则系统会尝试将其他脱机的undo segment脱机。3、如果没有可用的undo segment进行联机,则会尝试创建一个新的undo segment。4、如果上面步骤都不可行,也就是创建新的undo segment也没有可用空间了,则事务绑定算法才会尝试去找最早被使用的那个undo segment。这种情况下,才可能出
UNDO三大最用
UNDO三大最用:一致性读(consistent read)、回滚事务(rollback transaction)、实例恢复(instance recovery)一致性读是相对于脏读而言的,假如:某个表T有10000条记录,获取所有记录需要15分钟。当前时间为9点整,某用户A发出select * from T,该语句在9点15分时执行完毕。当用户A执行到9点10分时,另一个用户B发出一条delete命令,将表T最后一条记录删除并提交。那么到9点15分时,会返回给A用户多少条数据? 如果返回9999条记录,则说明发生了脏读,如果返回10000条记录,则说明发生了一致性读。很明显,在9点钟那个时间点发出
UPDATE操作和UNDO
UPDATE T SET COL='A' WHERE COL='B'; 1、在SHARED POOL里解析,从而生成执行计划。 2、假如根据执行计划,得出COL='B'的记录放在10号数据文件的54号数据块里。 3、服务器进程在BUFFER CACHE里找到一个可用UNDO数据块,如果没有发 现,则到UNDO表空间找一个可用的UNDO数据块,并调入BUFFER CACHE。假如获得的UNDO数据块在10号表空间块号为24号。 4、将改变前的值B放入24号数据块里。 5、由于UNDO块发生了变化,需要产生重做记录,假设重做记录号位120: 行号 事务ID FILE# BLOCK# VALUE 120
【学习笔记】分区表和分区索引——管理索引分区(四)
1、增加索引分区(add index partitions) add index partitions 只适用于 hash 的 global 索引。 语法: alter index indexname add partition ptname tablespace tablespacename; 2、删除索引分区(droping index partitions) 语法:alter index indexname drop partition ptname; 注意:只针对gloabal索引的range分区;drop partition 删除的只是分区,数据还在表中,导致删除分区后,数据存储到比它 更高的区间值的索引分区里了。另外global索引必须建maxvalue分区,并且该分区不能删除。 3、重新编译索引分区(rebuilding ind
【学习笔记】分区表和分区索引——分区表的其他管理(三)
2、收缩表分区(coalesce partitions)收缩表分区仅适用于 hash 分区或复合分区的 hash 子分区,执行之后会自动收缩当前的表分区;但是对于分区表如果只有一个分区,则执行收缩操作会报错。语法:alter table tbname coalesce partition;注意:收缩的只是分区,并不影响数据;但是视被收缩分区中数据的多少,收缩表分区也会涉及到IO操作;如果执行时没有指定 update indexes 子句,收缩过程中有数据改动的分区其 local 和 global 索引都会失效。3、删除表分区(drop partition)除 hash 分区和 hash 子分区外,其他的分区格式都支持删除表分
学习笔记】分区表和分区索引——添加表分区(二)
一、增加表分区(add partition)增加表分区适用于所有的分区形式,语法是:alter table tbname add partition ...但是,对于像 list、range 这种存在范围值的分区,所要增加的分区值必须大于当前分区中的最大值(如果当前存在maxvalue 或 default 分区,add partition 会报错,这种情况之能适用 split)。示例如下:(1)增加 range 分区表的分区SQL> create table t_partition_range (id number,name varchar2(50))2 partition by range (id)(3 partition t_range_p1 values less than (10) tablespace test1,4 partition t_range_p2 val
【学习笔记】分区表和分区索引——概念部分(一)
上周看了《[三思笔记]全面学习分区表及分区索引.pdf》,按学习顺序记录将学习笔记粘出来如下:当表中的数据量不断增加,查询数据的速度就会变慢,程序性能也会降低,这时候或许可以考虑将表分区。表进行分区后,逻辑上表仍然是一个逻辑表,但是由于进行了分区,就可以将每个分区分别存放到不同的物理文件里(每个分区对应一个段,一个或多个段可以存放到一个表空间,而一个或多个物理文件又可以存放到一个表空间里,结果就是可能每个分区存放到不同的物理文件里)一、使用分区的优点:1、增强可用性:如果表的某个分区出现故障,表在其他分