鲨鱼百年_强者至尊

飞雪连天射白鹿,笑书神侠倚碧鸳,九宵云天惊天变,风云稽会潜水游

2009年07月02日

原创 ORACLE 压缩技术

压缩数据以节省空间和提高速度 =========================================================== 作者: xsb(http://xsb.itpub.net)
发表于:2004.11.15 10:35
分类: Oracle
出处:http://xsb.itpub.net/post/419/5087
---------------------------------------------------------------
使用表压缩来节省空间并提高查询性能。

  很多决策支持系统通常都涉及到存储于几个特大表中的大量数据。随着这些系统的发展,对磁盘空间的需求也在快速增长。在当今的环境下,存储着数百TB(太字节)的数据仓库已经变得越来越普遍。

  为了帮助处理磁盘容量问题,在Oracle9i第2版中引入了表压缩特性,它可以极大地减少数据库表所需要的磁盘空间数量,并在某些情况下提高查询性能。

  在本文中,我将向你说明表压阅读全文>

发表于 @ 2009年07月02日 18:13:00|评论(loading...)|举报|收藏

原创 ORACLE tRUNc()函数


oracle trunc()函数的用法


1.TRUNC(for dates)
TRUNC函数为指定元素而截去的日期值。
其具体的语法格式如下:
TRUNC(date[,fmt])
其中:
date 一个日期值
fmt 日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的日期截去
2.TRUNC(for number)
TRUNC函数返回处理后的数值,其工作机制与ROUND函数极为类似,只是该函数不对指定小数前或后的部分做相应舍入选择处理,而统统截去。
其具体的语法格式如下
TRUNC(number[,decimals])
其中:
number 待做截取处理的数值
decimals 指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分
下面是该函数的使用情况:
TRUNC(89.985,2)=89.98
TRUNC(89.985)=89
TRUNC(89.98阅读全文>

发表于 @ 2009年07月02日 11:41:00|评论(loading...)|举报|收藏

2009年07月01日

原创 SHRINK SEGMENT降低高水位


在线段收缩支持:LOB段,IOT溢出段;
 使用在线段收缩回收HWM以下碎片的空闲空间,段收缩的好处:
 ?更好的缓存使用率,提高OLTP的性能;
 ?减少全表扫描的数量,提高DSS的性能;
 段收缩是在线的,索引在段收缩期间维护,不要求额外的磁盘空间。
 段收缩收回HWM以下和以上的未使用空间,而空间释放仅仅释放高水位以上的未使用空间。默认情况下,段收缩压缩段,调整高水位,释放空间。
 使用段收缩前必须使用ALTER TABLE ... ENABLE ROW MOVEMENT启用行移动,因为段收缩要求行移动到新位置。
 段收缩只能在本地管理ASSM表空间上执行,ASSM中所有的段除以下外均可收缩:
 IOT映射表;
 物化视图基于ROWID;
 具有函数索引的表;
 调用段收缩
 调用段收缩前,查看顾问的发现和推荐。使用ALTER TABLE, ALTER INDEX, ALTER MATERIALIZED VIEW, ALTER MATERIALIZE阅读全文>

发表于 @ 2009年07月01日 16:24:00|评论(loading...)|举报|收藏

原创 oracle压缩表表空间


表压缩是如何工作的
在Orcle9i第2版中,表压缩特性通过删除在数据库表中发现的重复数据值来节省空间。压缩是在数据库的数据块级别上进行的。当确定一个表要被压缩后,数据库便在每一个数据库数据块中保留空间,以便储存在该数据块中的多个位置上出现的数据的单一拷贝。这一被保留的空间被称作符号表(symbol table)。被标识为要进行压缩的数据只存储在该符号表中,而不是在数据库行本身内。当在一个数据库行中出现被标识为要压缩的数据时,该行在该符号表中存储一个指向相关数据的指针,而不是数据本身。节约空间是通过删除表中数据值的冗余拷贝而实现的。
对于用户或应用程序开发人员来说,表压缩的效果是透明的。无论表是否被压缩,开发人员访问表的方式都是相同的,所以当你决定压缩一个表时,不需要修改SQL查询。表压缩的设置通常由数据库管理人员或设计人员进行配置,几乎不需要开发人员或用户参与。
1.表级别:
1.1 创建一个压缩表:
创建表时使用COMPRESS关键字,COMPRESS关键字指示Oracle数据库尽可能以压缩的格式存储该表中的行。
阅读全文>

发表于 @ 2009年07月01日 16:23:00|评论(loading...)|举报|收藏

2009年06月26日

转载 ORACLE审计小结

1、什么是审计

审计(Audit)用于监视用户所执行的数据库操作,并且Oracle会将审计跟踪结果存放到OS文件(默认位置为$ORACLE_BASE/admin /$ORACLE_SID/adump/)或数据库(存储在system表空间中的SYS.AUD$表中,可通过视图dba_audit_trail查 看)中。默认情况下审计是没有开启的。

不管你是否打开数据库的审计功能,以下这些操作系统会强制记录:用管理员权限连接Instance;启动数据库;关闭数据库。

2、和审计相关的两个主要参数

Audit_sys_operations:
默认为false,当设置为true时,所有sys用户(包括以sysdba,sysoper身份登录的用户)的操作都会被记录,audit trail不会写在aud$表中,这个很好理解,如果数据库还未启动aud$不可用,那么像conn /as sysdba这样的连接信息,只能记录在其它地方。如果是windows平台,audti trail会记录在windows的事件管阅读全文>

发表于 @ 2009年06月26日 17:48:00|评论(loading...)|举报|收藏

原创 Oracle 并行查询 parallel Query


81    53,5297 P_Base_Day_I_NewTaredUser 2009-06-25 17:28:56 2009-06-25 18:24:21 55 insert 成功 base
82    53,5300 P_BASE_DAY_I_NEWTAREDUSER_test 2009-06-25 17:29:31 2009-06-25 17:54:21 24 insert 成功 base

这是两个同样的过程 访问6千万的数据进行inner join 统计 前个花了55分钟 后一个花了24分钟
insert /*+parallel(t_newtraed_test,4) */ into  t_newtraed_test 
  select  b.addtime,0,b.username,sysdate,0,c.lotid,0,c.playid,0,0,sysdate
  from
  (
       select  username,min(addtime) as addtime 阅读全文>

发表于 @ 2009年06月26日 09:30:00|评论(loading...)|举报|收藏

2009年06月25日

原创 username,Min(time),MIn(age),min(money) 带不出最早时间那条记录


select  username ,min(time),MIn(age),min(money)
from user
group by username

Oracle 根据 用户名排序 取最小时间,再取出最小年龄,再取出最少钱的

小李  8:00  12岁  100元
小李 9:00  11岁    90元
小 李 10:00 10岁  110元

结果是: 小李 8:00  10岁  90 元
并非我想要的 小李 8:00 12岁 100元
如何带出 最小时间 那行 其他字段值呢?
阅读全文>

发表于 @ 2009年06月25日 11:43:00|评论(loading...)|举报|收藏

2009年06月15日

原创 ORA-12838: cannot read/modify an object after modifying it in parallel

如果用了insert /*+ append */ into table as select .. from table 这样的操作来insert,必须在操作后commit,或是rollback,不然就不能再insert /*+ append */ into table as select .. from table 。ORACLE报出错误如下:ORA-12838: cannot read/modify an object after modifying it in parallel解释如下:ORA-12838 cannot read/modify an object after modifying it in parallel
Cause: Within the same transaction, an attempt was made to add read or modification statements on a table after it had been modified in parallel or with direct load. This is not阅读全文>

发表于 @ 2009年06月15日 16:12:00|评论(loading...)|举报|收藏

2009年06月09日

转载  今天遇到个杀不死的会话


一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库。现在提供一种方法解决这种问题,那就是在ORACLE中杀不掉的,在OS一级再杀。


1.下面的语句用来查询哪些对象被锁:

select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
2.下面的语句用来杀死一个进程:
alter system kill session '24,111'; (其中24,111分别是上面查询出的sid,serial#)
【注】以上两步,可以通过Oracle的管理控制台来执行。
3.如果利用上面的命令杀死一个进程后,进程状态被置为"killed",但是锁定的资源很长时间没有被释阅读全文>

发表于 @ 2009年06月09日 16:28:00|评论(loading...)|举报|收藏

2009年06月05日

原创 Oracle 作业Job 无法停止下来---最后....


有个JOB 为22号的  跑了一天一晚都没跑完! 该JOB调用一个JOB过程,JOB过程调用了8个统计过程。
其中有个Update过程跑的很慢,后来知道要访问的数据太多了。

JOB 我通过EM 网页版 杀掉了该会话。一分钟后ORACLE 又重启该JOB    晕死了
使用下面方法也无效
dbms_job.broken(22,true);
dbms_job.remove(22);

最后 杀掉后 马上修改 JOB过程 屏蔽掉8个子过程 编译它。

这下好 让你空跑一下吧 ORACLE 才肯放过这个作业阅读全文>

发表于 @ 2009年06月05日 10:28:00|评论(loading...)|举报|收藏

原创 sql%rowcount 为零??


begin
 starttime:=sysdate;
 v_maxtime := to_date('9999-12-31 00:00:00','yyyy-mm-dd hh24:mi:ss');  
 select max(f_logintime) into v_maxtime from t_gather_userloginlog;

  if  v_maxtime != to_date('9999-12-31 00:00:00','yyyy-mm-dd hh24:mi:ss') then

    insert  into t_gather_userloginlog (f_userid,f_username,f_logintime,f_userip,f_loginflag,f_logintype) --来源主网登陆的。
      select  f_uid,f_username,f_logintime,f_ip,f_flag,f_type from t_webloginlog_ba阅读全文>

发表于 @ 2009年06月05日 10:24:00|评论(loading...)|举报|收藏

2009年06月04日

原创 获得日期的年周次并且反算回日期


获得日期的周次
SELECT TO_CHAR(TO_DATE('2007-05-21','YYYY-MM-DD'),'YYYYWW') FROM DUAL;
SELECT TO_CHAR(TO_DATE('2007-05-27','YYYY-MM-DD'),'YYYYWW') FROM DUAL;
结果:
200721
反转计算:
select to_date(substr('200721',0,4)||'0101','YYYYMMDD')+to_number(substr('200721',5,2))*7-1 as weekfirstdate from dual;
select to_date(substr('200721',0,4)||'0101','YYYYMMDD')+to_number(substr('200721',5,2))*7-1 as weekfirstdate from dual;阅读全文>

发表于 @ 2009年06月04日 17:34:00|评论(loading...)|举报|收藏

2009年06月02日

原创 这样的语句如何优化Temp空间 现在它要用30G哦

select  /*+PARALLET(T_BASE_USER_BUY_INFO,4)*/ a.f_yearweek,a.f_lotbigclass,b.ExpeNum,a.salay,b.countrysalay,a.bonus,b.countrybonus
  from
      (
          select TO_CHAR(b.f_DATE,'YYYYMMWW') as f_yearweek,c.f_lotbigclass,F_FlatName,
          sum(F_BuyMoney) Salay,
          sum(F_TaxBefforBonus) Bonus
          from T_Base_User_Buy_Info b
          left join T_Base_Lot_Send_Bonus s
             on b.F_LotID=s.f_lotid and s.f_wtype=b.f_wtype  and s.f_ex阅读全文>

发表于 @ 2009年06月02日 17:39:00|评论(loading...)|举报|收藏

2009年05月18日

原创 oracle case

select wnameb,sum(F_CopeUserA),sum(F_CopeUserB),sum(F_CopeUserC),sum(F_CopeUserD) from ( select (case when wtype in(44,123,43,49) then '任选九场' when wtype in(14,11,13) then '胜负十四场' when wtype in(154,51,153,42,4,3,135,2,1,151,40,152,41,150,34) then '北京足球单场' end ) as wnameb,F_CopeUserA,F_CopeUserB,F_CopeUserc,F_CopeUserd from ( select wtype,wname, sum (case when BuyType= 1 then 1 else 0 end) F_CopeUserA, sum (case when BuyType= 2 the阅读全文>

发表于 @ 2009年05月18日 10:46:00|评论(loading...)|举报|收藏

2009年05月14日

原创 得到某个时间的前周最后一天

0. 上周最后天SQL>select trunc(to_date('2009-05-14 15:19:12','YYYY-MM-DD HH24:MI:SS'),'D')-1 from dual;1.上月末天:select to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') LastDay from dual;2.上月今天SQL> select to_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday from dual;3.上月首天SQL> select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDay from dual;4 本季度第一天SQL>select trunc(sysdate,'Q') from dual;5 本周的第一天(周日)S阅读全文>

发表于 @ 2009年05月14日 15:24:00|评论(loading...)|举报|收藏

用户操作
[即时聊天] [发私信] [加为好友]
曾牧暗鲨
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
曾牧暗鲨的公告
曾牧暗鲨

曾牧暗鲨
男儿少壮不树立
挟此穷老将安归
金陵岂此池中物
一遇风云变幻龙
来自:江西帝国
星际大都市赣州星球
在冷莫流离深圳讨饭
腾讯手机:
10071487
微软手机ZengMuAnSha@Hotmail.com Email:
ZengMuAnSha@163.com

文章分类
收藏
    好友
    辉兄长电影院
    存档
    Csdn Blog version 3.1a
    Copyright © 曾牧暗鲨