分区表整理方案
一、背景现网中体验关系表是分区表,目前该表存放着自2006年09月份至2007年02月份的数据,但2007年2月份后的数据由于还没有创建时间分区至今数据还未入库表.由于目前现网的历史数据量很小,而该分区表中已有的6个历史分区却占用了6*2G=12G的裸设备空间,再加上基于日期的6个索引分区一共占用了24G的物理空间,而实际的业务数据(加上索引数据)占用还不到1G..考虑到资源的优化整合,该方案特提出对该分区表进行整理,回收物理空间,并添加新的分区,保证业务的正常使用。二、现网现状现网的6个表分区表空间如下:SPACE_EXRE_DATA01, SPACE_EXRE_DATA02
oracle中三个参数的进一步认识
PGA 在9i 里面这部分也有了很大的变化。在独立模式下,9i已经不再主张使用原来的UGA相关的参数设置,而代之以新的参数。假如workarea_size_policy=AUTO(缺省),则所有的会话的UGA 共用一大块内存,该内存由 pga_aggregate_target 设置。在我们根据前面介绍的方法评估了所有进程可能使用的最大PGA 内存之后,我们可以通过在初始化参数中设置这个参数,从而不再关心其他 ”*_area_size” 参数lock_sga 由于几乎所有的操作系统都支持虚拟内存,所以即使我们使用的内存小于物理内存,也不能避免操作系统将SGA 换到虚拟内存(SWAP)。所以我们
分区表对应的表空间迁移案例
最近现网一系统分区表无法录入数据(按月分区,新的月份来临)急需添加新的分区.但发现从去年200609到现在该表的数据量很小,而每个分区对应的表空间都是2G,有点浪费空间,特提出下来的方案.将该表2007-03-01前的分区(子分区)数据都move到一个表空间上,比如SPACE_EXRE_DATA06,并删除表空间SPACE_EXRE_DATA01到SPACE_EXRE_DATA05,然后释放这些表空间上的裸设备.该分区表对应的索引表空间也作类似处理.另外新建分区表的表空间,在回收的裸设备上建即可,不然新数据无法写入.具体操作如下:操作前的查询:SQL> select table_owner,PARTITION_NAME,S
case when中的条件不能用上索引
今日在对一报表数据源作优化时无论任何都不能让其走索引.数据源部分语句如下:select cityCode,servtype,1,channel,b.day_time, sum(case when to_number(to_char(subscribe_time,'yyyymmdd'))<=to_number(b.day_time||'01') then to_number(TRANSMONEY) else 0 end)/100, sum(case when to_number(to_char(subscribe_time,'yyyymmdd'))<=to_number(b.day_time||'31') then to_number(TRANSMONEY) else 0 end)/100from temp_channel_code_money a,g_card_report_day bwhere to_number(to_char(subscribe_time,'yyyymm'))
怎样得到建表(存储过程,函数等)的DDL脚本,请看案例
最近不断有同事在现网操作时问我同样的问题,那就是怎么样得到建表(存储过程,函数等)的DDL脚本,下面总结两种方法给大家,供大家学习!第一个方法:查询user_source数据字典可获得.SQL> desc user_sourceName Type Nullable Default Comments ---- -------------- -------- ------- ------------------------------------------------------------------------------------------------------------- NAME VARCHAR2(30) Y Name of the object TYPE VARCHAR2(12) Y Type of the object: "TYPE", "TYPE BODY", "PROC
物化视图的运用案例
最近一公司产品在现网频频导致数据库cpu告警,经查发现是由于应用中"高级搜索"功能的sql语句过于复杂,部分语句如下:select t1.icpcode,t3.spname,t3.spshortname spshortname,T3.SERVIDALIAS,t1.icpservid,t1.servname, t1.servstatus,t1.ServAttr, t1.umflag,T1.servtype,t1.UsageDesc,t1.wwwurl,t1.introURL, t1.ChargeType, t1.Price,t1.ChargeDesc, t1.StartTime starttime,t1.EndTime,nvl(t2.servdesc,t1.servdesc) servdesc , t3.csrtel,T3.CSRURL as spurl, t4.ACCESSMODEID,t1.FREEUSETYPE,t1.OFFLINEDESC,t1.OFFLI
oracle数据库健康检查报告模板
1.文档控制修改记录分发者审阅记录相关文档2.检查总结概要建议3.介绍目标检查方法检查范围4.系统背景数据库配置基于Oracle 数据库的应用5.操作系统性能CPU Utilisation6Paging结论/建议6.数据库配置数据库版本数据库参数运行日志错误检查控制文件Redo LogsTemporary Tablespace表空间管理回滚段结论/建议7.数据库性能数据库实例性能命中率等待事件(Top Wait Events)SORT 信息统计用户回滚信息统计Top SQL by buffer getsTop SQL by physical read其它瓶颈结论/建议[@more@]
(转)PGA自动管理原理深入分析及性能调整
最近在网上看到一遍有关pga的文章,觉得不错,特放在自己的博客中供大家学习! 1. PGA的概念以及所包含的内存结构作为一个复杂的oracle数据库系统来说,每时每刻都要处理不同的用户所提交的SQL语句,获取数据并返回数据给用户。众所周知,解析SQL语句的工作是在oracle实例中的shared pool所完成的。那么对于每个session来说,其执行SQL语句时所传入的绑定变量放在哪里?而且,对于那些需要执行比较复杂SQL的session来说,比如需要进行排序(sort)或hash连接(hash-join)时,这时这些session所需要的内存空间又从哪里来?另外,还有与每个se
#的妙用
在sql*plus中敲命令的过程中, 想不起某个列的名字, 如果取消当前的命令,待查询后再重敲, 那太痛苦了. 当然你可以另开一个sql*plus窗口进行查询, 但下面提供的方法更简单.比如说, 你想查名称带"xxx"的业务信息, 输入了下面的语句:SQL> select icpcode,icpservid2 from service3 where这时, 你发现你想不起来业务名称的列名是什么了.这种情况下, 只要在下一行以#开头, 就可以执行一条sql*plus命令, 执行完后, 刚才的语句可以继续输入SQL>> select icpcode,icpservid2 from service3 where6 #desc service Name
回滚表空间和回滚段的案例
最近在制作现网报表数据时发觉alert.log中抛如下的异常:"Failure to extend rollback segment 24 because of 30036 conditionFULL status of rollback segment 24 set."这是由于报表数据生成过程中有大量的中间临时数据insert和update,导致回滚空间爆涨,不能及时扩展新的extent.此时有效的解决方案有:1.改进报表数据的生成语句,将大事务化为小事务,多加些commit;2.将部分update语句整合(期间我新加了索引,极大提高报表生成速度);3.及时给回滚表空间添加新的数据文件或resize部分文件;4.新建专有的回滚表空间来对付报表数据的生成
临时表空间的探讨案例
对于dba来讲,涉及临时表空间的字典表和动态视图有如下:v$tempfile;v$tablespace;v$tempstat;dba_temp_files;dba_free_space,v$temp_space_headerV$TEMP_SPACE_HEADER:显示每一个临时表空间中每一个文件的聚集信息,涉及每个空间首部中当前使用多少空间和有多少自由空间.分三个方面来进行阐述:1.怎样来查看临时表空间的剩余空间.9i的话,可以采用如下的查询语句:SQL> SELECT D.TABLESPACE_NAME,SPACE "SUM_SPACE(M)",BLOCKS SUM_BLOCKS,USED_SPACE "USED_SPACE(M)",2 ROUND(NVL(USED_SPACE,0)/SPACE*100,2) "USE
append和nologging的案例
一 非归档模式下C:Documents and Settingsshiyihai>sqlplus /nologSQL*Plus: Release 9.2.0.6.0 - Production on 星期二 2月 27 11:42:43 2007Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.SQL> conn / as sysdba已连接。SQL>当前session产生的redoSQL> create or replace view v_session_redo_size 2 as 3 select value 4 from v$mystat, v$statname 5 where v$mystat.statistic# = v$statname.statistic# 6 and v$statname.name = 'redo size';视图已建立。SQL>SQL> archive log l
v$session中的saddr,paddr和taddr
saddr(session address):表示当前记录的内存地址;paddr(process address):该session对应的进程地址,关联v$process的addr字段,可以通过这个字段查处当前session对应操作系统的那个进程的id;taddr(transation address):当前有活动事务的地址,关联v$transaction表的addr,通过这个字段关联查出当前session正在使用的回滚段的情况,以及当前事务的大小等信息[@more@]
oracle中session跟process的研究
首先看看v$session跟v$process中主要的字段属性:v$session(sid,serial#,paddr,username,status,machine,terminal,sql_hash_value,sql_address,,,)v$process(addr,spid,,,)可看到v$session中的paddr跟v$process中的addr对应,也即会话session在数据库主机上对应进程的进程地址.这里我们要先定位该session正在执行的sql语句,此时我们可以查询如下的语句:select sql_textfrom v$sqltext_with_newlineswhere (hash_value,address) in (select sql_hash_value,sql_address from v$session where sid=&sid) order by address,piece; 若需手工
Oracle 9i 数据库创建手册
主要的环境变量:ORACLE_HOME: /oracle/app/oracle/product/9.2.0ORACLE_SID: ora9iNLS_LANG: American_America.zhs16gbk一、 创建前准备工作 准备好initora9i.ora文件################################################################# Copyright (c) 1991, 2001, 2002 by Oracle Corporation################################################################ ############################################ Cache and I/O###########################################db_block_size=8192db_cache_size=2147483648db_file_mult
整理了一份oracle数据库培训课程大纲
Oracle 9i/10g课程大纲UNIT 1. 数据库基础 及 SQL基础l 课程综述本课程适用于Oracle9i/10g 用户,将向学员提供数据服务器的扩展介绍。课程涉及的概念包括面向关系和面向对象数据库,以及强大的SQL编程语言。 课程将向学员教授创建和维护数据库对象,以及存储、获取和操作数据。同时学员将学会使用像ROLLUP、CUBE、Set运算符和分级获取等高级技术获取数据。学员将学会使用iSQL*Plus工具编写SQL和SQL*Plus脚本文件产生类似报表的示例和动手实践以增强基础概念。l 内容纲要※ 数据库概述 ※ 编写基本的SQL语句 ※ 限制
ORA-00059的异常处理
今天在一数据库中新建一表空间时抛如下异常:ORA-00059: maximum number of DB_FILES exceeded赶紧做了下查询,见如下查询:C:Documents and Settingsshiyihai>sqlplus /nologSQL*Plus: Release 9.2.0.6.0 - Production on 星期五 1月 26 16:34:40 2007Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.SQL> conn / as sysdbaERROR:ORA-12560: TNS: 协议适配器错误SQL> host set ORACLE_SID=PORTALSQL> conn / as sysdbaERROR:ORA-12560: TNS: 协议适配器错误SQL> host net start oracleserviceportalOra
用户密码研究
同事请求我为她自己用的测试用户改登陆密码,这种小case都help我,显然她对数据库的知识比较欠缺.于是有了下面的操作案例:SQL> conn / as sysdbaConnected.SQL> alter user shiyihai identified by abc;User altered.SQL> conn shiyihai/abcConnected.SQL> conn / as sysdbaConnected.SQL> alter user shiyihai identified by shiyihai;User altered.SQL> conn shiyihai/shiyihaiConnected.SQL> conn / as sysdbaConnected.SQL> select username,password from dba_users where username='SHIYIHAI';USERNAME
rman备份的shell脚本(例子)
#Set oracle path#source $HOME/.keychain/${HOSTNAME}-shexport SSH_AUTH_SOCK echo $SSH_AUTH_SOCK export PATHunset USERNAMEexport LD_ASSUME_KERNEL=2.4.1export ORACLE_BASE=/opt/oracle9iexport ORACLE_HOME=$ORACLE_BASE/product/9.2.0export ORACLE_SID=back1export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/dataexport LD_LIBRARY_PATH=$ORACLE_HOME/lib#echo "-----------数据库环境设置完成-----------"# Set shell search pathsexport PATH=$ORACLE_HOME/bin:$PATHexport NLS_LANG=american_america.ZHS16GBKexp
oracle中copy from的用法
用法: COPY FROM <db> TO <db> <opt> <table> {(<cols>)} USING <sel><db> : 数据库字符串, 例如: scott/tiger@d: chicago-mktg<opt> : 下列关键字之一: APPEND, CREATE, INSERT 或 REPLACE<table>: 目标表名称<cols> : 用逗号分隔的目标列别名列表<sel> : 任何有效的 SQL SELECT 语句缺少的 FROM 或 TO 子句使用当前的 SQL*Plus 连接如下举例子:SQL> copy from sd168sysp/sd168sysp@db81 to shiyihai/shiyihai@db80 create city_copy using select * from ci