码迷,mamicode.com
首页 > 其他好文 > 详细

小菜杂杂作随笔

时间:2016-05-31 06:37:28      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:oracle学习

    接触ORACLE有段日子了,不过基本上就是写写几条SELECT语句,存储过程也是依葫芦画瓢写的,没有什么技术含量。所以有关这方面的技术水平就这样徘徊着。

    ORACLE资料也有一大堆,包括之前自己雄心壮志买下的那本厚厚的书。书是好书,就是难啃。一开始看的还算积极,就算不懂的地方也会尽量搞懂。看到快一半的时候,又一次回头翻了翻过去的内容……这都什么鬼……很多都不太记得了,当时好像懂了,还做了笔记的地方,现在要连着笔记一起啃……感觉现在用不到这么深吧,而且看了就忘,于是渐渐不怎么翻了。

   不过ORACLE还在继续接触,有不懂的地方就请教厉害的同事,同事都愿意大方地指导,嘿嘿。渐渐地,虽然理解还是比较浅显,不过好像对之也通了点,之前啃资料得到的一些‘ORACLE印象’在这里还是有帮助的,不过并没有因此再一次开啃资料,只在对一个问题好奇而不解的时候去查看一下……

   下面继续随笔:

   (1)表数据量大(亿级),一次加载多张表,导致表空间快爆了,使用率达90%:

    查看回收站是否还有残留的表:select * from recyclebin;删除一张表如果没有PURGE,则不会真的删除,而是放到回收站,而且如果不去处理,会一直占用空间。

    如果发现回收站有误删的表,可以进行数据恢复,还原此表。确认这些残留表都是真的不需要可以执行:purge recyclebin,这样就可以真正物理地删除此表;

   反思:在这种情况下加载数据时,应该同时监控表空间使用情况。

   (2)查询一张大表每月数据量:

    alter session enable parallel dml;  --开并行

    select /*parallel(16)*/           --查询大表

     count(*), to_char(colname, ‘yyyymm‘)  --colname是日期字段

      from tablename

     group by to_char(colname, ‘yyyymm‘);

    commit;                           --提交事务

     亿级数据表用此方法可以更快的查到结果。

    (3)创建表空间:

    create tablespace p1 datafile ‘E:\app\表空间\p1_space.dbf‘ size 32m autoextend on next       32M MAXSIZE 2048M ;

  create tablespace p2 datafile ‘E:\app\表空间\p2_space.dbf‘ size 32m autoextend on next 32M MAXSIZE 2048M EXTENT MANAGEMENT LOCAL;

      会产生对应的数据库文件在对应的目录下。

    (4)分区:

     ORACLE分区包含以下几个分区

      a.HASH分区(也是散列分区)

     如:

      create table part 

      partition by hash(empno)

      (

       partition part1 tablespace P1,

       partition part2 tablespace P2

      )

      as select * from emp; 

      插入一条数据到哈希分区时,会用这条数据的分区建值通过一个ORACLE的内置函数计算,决定它应该到哪个分区去,这是随机的。

      分区个数最好是2的幂次方(2,4,8,16),这样的数据分布能更均匀。

      b.范围分区

      关键字:

       RANGE,LESS THAN,LESS THAN(MAXVALUE)

      c.列表分区

      关键字:

       枚举,VALUES(DEFUALT)

      d.间隔分区

       只能用数值列作为分区字段。

       它会根据新插入的数据按预定义的规则来创建需要的分区(当应入的分区不存在时;若已存在,则直接进入分区)。不过删除一个分区里的数据并不会导致分区被删除。

       当更新数据时可能会涉及到行移动问题。如果建表时没有允许行移动,则更新数据时会报错。

      e.引用分区

       子表分区方法引用父表。当父表分区有变动时,子表分区随之改变。保持数据完整性。

      f.组合分区

       即分区中可以进一步分区(子分区(subpartition))

       不过并不是支持所有的分区组合,不同的版本支持不同的组合。

      (5)查询一个分区中的数据:

       SELECT * FROM tablename PARTITION(partitionname);

      (6)当想复制一张表,新表的表空间如果和原表是在同一空间会报错。如:

       CREATE TABLE NEW_TABLE TABLESPACE TEMP AS SELECT * FROM OLD_TABLE;(OLD_TABLE也在TEMP表空间中)

       执行时报如下错误:

       ORA-02195:尝试创建的PERMANENT对象在TEMPORARY表空间中。

      (7)……

       随笔结束吧,第一次写博客,真有点小激动呢!不仅为了博你们客,还为了整理自己的思绪,嘿嘿。写博客蛮有意思!以后有时间继续写着玩,哈哈~~

       对了,ORACLE资料已经继续看了,加油吧。

       写的比较简单随意,有误的地方欢迎指正。

 



本文出自 “11646774” 博客,请务必保留此出处http://11656774.blog.51cto.com/11646774/1784588

小菜杂杂作随笔

标签:oracle学习

原文地址:http://11656774.blog.51cto.com/11646774/1784588

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!