Skip to content

Database - 64. page

0519

今天在群里,一朋友把flashback table和回收站的功能混淆了,

他一直坚持他正确的,认为flashback table用的是回收站的资源,而不是使用undo,

这里一下就暴露了对闪回和回收站的认识不足,回收站只针对drop的对象,而flashback table不止针对ddl,也针对dml

但是flashback table对ddl的闪回限制比较多,而且一般的ddl将首先考虑flashback database。

最后还是用实验说服了他…

最近瞎忙,复习了下concepts。

马上就要再次步入OCM的路程

我也会继续更新对block的解析文章,包括bbed的使用方法,块以及datafile的结构分析

还会增加OCM的考试内容的实地操作介绍。

坚持

在最艰难的时候,告诉自己,再坚持一下,再坚持一下,也许就成功了

关于在线日志组增加删除注意事项

alter system switch logfile;执行一次,就只切换一个日志租,比如当前是group1,那么执行一次,就切换到group2
alter system archive log current;必须置数据库于归档模式下

ative状态的redolog 是可能把数据写进磁盘了,也可能没写进,所以这时候要删除这个组的重做联机日志时候就最好执行一下如下的命令:
alter system switch logfile;
alter system checkpoint;

5月13日小记

今天公司搬迁到天苑大厦,昨天就把自己的东西打包好了,可是没想到还是挺累的。 大早跑去交通厅听报告,然后被告知交审计计划书…… 中午回来剪了个头发,然后到了新公司,搬家公司陆陆续续把东西搬来了…… 几十个服务器……太重了,还好不用我抬 不过公司的女人们也没放过我……谁叫我是男人……苦命

普通表转换分区表的方法

在oracle中,将一个非分区表转换为分区表 (split partition 和exchange partition)
将一个非分区表转换为分区表
思路:
HZMH_Bak_SALE是(数据量上百万条,列比较多)一个非分区表,此时创建一个与HZMH_Bak_SALE同结构的分区表luda_partition,维护数据,
删除HZMH_Bak_SALE表,将luda_partition更名为ludatou_pat,删除luda_partition

步骤:
查询非分区表数据
select to_char(DATE, ‘yyyymm’), count(*) from HZMH_Bak_SALE group by to_char(DATE, ‘yyyymm’) order by to_char(DATE, ‘yyyymm’);
创建分区表(结构和非分区表HZMH_Bak_SALE相同)
create table luda_partition
(
PIG_ID VARCHAR2(12) not null,
DATE DATE not null,
NUM_NO VARCHAR2(12),
……
)
tablespace ludatou
partition by range(DATE)(
partition rest values less than (maxvalue))

交换数据(数据从非分区表到分区表)
alter table luda_partition exchange partition rest with table HZMH_Bak_SALE;

查询分区表数据
select to_char(DATE, ‘mm-yyyy’), count(*) from HZMH_Bak_SALE group by to_char(DATE, ‘mm-yyyy’);

–辅助脚本
select ‘alter table luda_partition split partition rest at (to_date(”’
|| to_char(DATE, ‘yyyymm’) ||”’,”yyyymm”)) into (partition p’
|| to_char(DATE, ‘yyyymm’)
|| ‘, partition rest);’
from luda_partition
group by to_char(DATE, ‘yyyymm’)
order by to_char(DATE, ‘yyyymm’)

–5、对rest分区进行拆分
alter table luda_partition split partition rest at (to_date(‘201008′,’yyyymm’)) into (partition p201008, partition rest);
alter table luda_partition split partition rest at (to_date(‘201009′,’yyyymm’)) into (partition p201009, partition rest);
alter table luda_partition split partition rest at (to_date(‘201010′,’yyyymm’)) into (partition p201010, partition rest);
alter table luda_partition split partition rest at (to_date(‘201011′,’yyyymm’)) into (partition p201011, partition rest);
alter table luda_partition split partition rest at (to_date(‘201012′,’yyyymm’)) into (partition p201012, partition rest);

–6、删除非分区表
drop table HZMH_Bak_SALE

–7、将分区表重命名为原非分区表名
alter table luda_partition rename to HZMH_Bak_SALE

–8、删除中间处理过程的分区表
drop table luda_partition

如果已存在分区表,要将未分区表(与已分区表结构完全相同)加入到分区中:

alter table HZMH_Bak_SALE exchange partition p201008 with table luda_test;
alter table HZMH_Bak_SALE exchange partition p201009 with table luda_test_t;

如果luda_test_t不符合分区规则,需要指定without validation 来禁止检查
alter table HZMH_Bak_SALE exchange partition p201009 with table luda_test_t without validation;

如果luda_test表中的数据是符合分区规则的,那指定without validation 之后,不会对luda_test进行全表扫描,
则会缩短exchange时间

参考手册:

Administrator Guide