bulk_collect结合dbms_application_info监控数据处理进度
bulk collect的效率极高,原因是批量操作大量减少了pl/sql引擎与sql引擎context的切换,降低cpu使用.而且通过合理设置limit,可以使得pga使用和undo空间使用非常节制Tom说过单条数据处理不能完成,不能满足需求的时候采用bulk collect是不错的选择.下面的例子处理600多万条记录的插入操作,应用此技术在1分半钟左右搞定.Oracle 9.2.0.6 64bit For AIX4C 6G存储一般ps.这次做了一个450G的数据迁移,用的就是RMAN duplicate DB ,而 bulk collect 做schema的拆分 11小时搞定schema的拆分[@more@]存储过程CREATE OR REPLACE PROCEDURE p_migrat
第一次遇到Oracle Bug 留念
原文发表在 http://www.itpub.net/showthread.php?s=&threadid=666743上周五在RAC环境下做数据迁移前的imp测试6进程并行做impimp log中报错:IMP-00003: ORACLE error 604 encounteredORA-00604: error occurred at recursive SQL level 1ORA-04031: unable to allocate 2216 bytes of shared memory ("shared pool","TAB$","KGLS heap","KGLS MEM BLOCK")IMP-00058: ORACLE error 604 encounteredORA-00604: error occurred at recursive SQL level 1ORA-04031: unable to allocate 2216 byt
使用bulkCollect解决数据迁移问题
机器配置:IBM P690 6U12G数据库版本: Oracle 9.2.0.6需求: 根据主外键关系迁移tb1446表内数据至tb1446_copy表tb1446内有20个Hash分区,根据分区结合bulk collect技术,一次提交25000条记录(需要测试后得出一次提交的记录数),使得整个单表迁移过程耗时最短.[@more@]SQL> select count(*) from ecifupdate.tb1446; COUNT(*)---------- 7087611SQL> select count(*) from ecifupdate.tb1560; COUNT(*)---------- 74735643编写bulk collect方式的存储过程.migration_tb1446_part_00migration_tb1446_part_01migration_tb1446_part_0
监控数据库执行超过6s的操作
在日常工作中,经常需要了解一个命令发出去,Oracle执行的进度,这里提供了一个很实用的脚本,专门用来解决这个问题.监控数据库执行超过超过6s的操作 包括:1> 监控索引创建过程2> 监控物化视图刷新3> 获取当前数据库之行超过6s的SQL原文发表在:http://www.itpub.net/633751.html[@more@]例子:session A中执行一个超过6s的查询SQL>select l.owner,l.object_name,t.id from large_table l,tiny_table t where t.owner=l.owner;181507036 rows selected.Execution Plan---------------------------------------------------------
Oracle的Nologging何时生效 与 批量insert加载数据效率.
Oracle的Nologging何时生效 与 批量insert加载数据效率.首先可以参照俺师傅:http://www.eygle.com/faq/Nologging&append.htm[@more@]一 非归档模式下D:>sqlplus "/ as sysdba"数据库版本为9.2.0.1.0SQL*Plus: Release 9.2.0.1.0 - Production on 星期一 8月 14 10:20:39 2006Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.连接到:Oracle9i Enterprise Edition Release 9.2.0.1.0 - ProductionWith the Partitioning, OLAP and Oracle Data Mining optionsJServer Release 9.2.0.1.0 - Production当
oracle 9i提供2种模式导出表数据性能比较
oracle 9i提供2种模式导出表数据,传统模式CONVENTIONAL PATH和直接模式DIRECT PATH,通过direct指定。[@more@]两者间差异1. Conventional path Export.传统导出模式使用SELECT语句抽取表数据,将数据从磁盘中读入到buffer cache缓冲区中,并应用SQL表达式,将纪录返回给导出客户端,然后写到dump文件。2. Direct path Export.直接导出模式,数据直接从磁盘中读取到导出session的UGA中,跳过了SQL命令处理层。避免了不必要的数据转换,然后将纪录返回给导出客户端,然后写到到处文件 性能比较:1. Direct Export 比Conventional Export要快很
Index Range Scan成本 Histogram 和 10053
原贴发表在ITPUBhttp://www.itpub.net/581612.html试验环境:Linux AS4 + 10.2.0.1.0 - 64bit Production为了模拟数据库对象占用多个block,故设置较高pctfree.SQL> create table irs pctfree 80 tablespace users as 2 select rownum id,a.* from all_objects a;Table created.SQL> alter table irs add constraint irs_id_pk primary key(id); Table altered.SQL> create index irs_owner_idx on irs(owner) tablespace indx pctfree 80;Index created.SQL> show parameter optimizer_index NAME
在Linux中应用screen建立虚拟终端
screen建立一个你能够控制并可通过一个终端交互的虚拟终端。更好的是,你不必中断一个运行中的任务就可终止一个screen会话。想象一下,在一个远程服务器开始一个冗长编译工作,但连接中断;连接中断时,你的任务也中断了。Screen允许你与运行的会话分离、登录出去,随后再(甚至是从一个不同的地方)恢复它,从而避免这一问题。[@more@]首先,确认通过软件包管理器安装了screen包,然后输入:$ screen这样就启动screen并打开一个新会话。要断开会话,输入CTRL-A,接着再输入d,你就会返回你启动screen的提示符,但你在screen中所做的工作依
解决Library Cache latchs
可参照metalink文章Subject: HOW TO FIND THE SESSION HOLDING A LIBRARY CACHE LOCKDoc ID: Note:122793.1Type: TROUBLESHOOTINGLast Revision Date: 25-JUL-2005Status: PUBLISHED[@more@]查询v$session_waitp1raw表示: 16进制Libarry Cache Handle Address.SQL> select sid,event,p1,p1raw from v$session_wait where event like 'library%';SID EVENT---------- ----------------------------------------------------------------P1 P1RAW---------- --------138 library cache lock1213129416 484EE2C8139 library cache pin1213
一次sql执行效率的讨论
http://www.itpub.net/406784.html在测试机上测试了一把发现和楼主测试的结构有些不同表,索引,索引字段已经分析过.我感觉区别在1 NL探测Inner table的次数和这个结果记录数.2 子查询效率,INDEX FAST FULL SCAN 代价.[@more@][PHP]SQL> SQL> select count(*) from track;COUNT(*)----------12337495Elapsed: 00:00:00.01SQL> select count(*) from terminal_user;COUNT(*)----------305Elapsed: 00:00:00.00SQL> SQL> set autotrace traceonlySQL> SQL> SQL> select tu.* from terminal_user tu2 where tu.tu_i
Oracle profiles简单总结
首先可以参见yang兄的bloghttp://yangtingkun.itpub.net/post/468/64662俺写了一个profile的实例当test用户连接总时间超过120分钟 或者 test用户单次空闲时间超过2分钟,自动断开连接[@more@]sql> show parameter resource_limitname type value------------------------------------ ----------- ------------------resource_limit boolean false启用profilesql> alter system set resource_limit = true;系统已更改。sql> create profile test_pro limit idle_time 2;配置文件已创建sql> alter user test profile test_pro
降序索引应用在Top N问题上的应用
SQL> create table test_desc (id number not null,name varchar2(16)) tablespace users;Table created.SQL> create index test_id_desc_idx on test_desc(id desc) tablespace idx;Index created.Oracle默认情况下是升序索引,这里定义了降序索引。[@more@]我们看一下select会怎么样SQL> select * from test_desc where id<10;ID NAME---------- ----------------9 d8 d7 d6 d5 d4 d3 d2 d1 d下面我们求id小于100的前5条记录SQL> l1 select * from2* (select id,name,rownum rnk from test_desc where id<101) where
[zt]prebuilt 物化视图迁移数据库
最近论坛上有人问exp 一个300G的数据库,有没有更好的方法,有人提议有prebuilt,做了个试验,记下过程SQL> conn test/test@jumper;已连接。[@more@]SQL> create table test(a int,b varchar(2));表已创建。SQL> alter table test add constraint pk_test primary key(a);表已更改。SQL> create index i_b on test(b);索引已创建。SQL> insert into test values(1,'a');已创建 1 行。SQL> commit;提交完成。SQL> create materialized view log on test with primary key;实体化视图日志已创建。获得需要创建的对象SQL>
[ZT]v$sqlarea,v$sql,v$sqltext这三个视图提供的sql语句有什么区别
今天看帖子的一小点收获.先总结个人经验:通常根据v$sqlarea( DISK_READS NUMBERBUFFER_GETS NUMBER)作sql性能诊断.根据v$sqltext,(HASH_VALUE)ORDER BY PIECE获取到完整的sql语句进行分析优化.根据v$session(SQL_HASH_VALUE)联合v$sqltext也能获取到当前session正在执行的sql.[@more@]biti对v$sqlarea,v$sql,v$sqltext这三个视图的解释.出处: http://www.itpub.net/showthread.php?threadid=181450v$sqltext存储的是完整的SQL,SQL被分割SQL> desc v$sqltextName Null? Type----------------------------------------- -------- ------
10gR1 DataGuard配置文档
数据库DataGuard配置文档VERSION: 1.1.0LAST UPDATE: 2005-03-28MSN: foreverlee0619@msn.com[@more@]Primary database (Oracle 10g)IP:172.16.75.35INSTANCE_NAME=ora1Standby database (Oracle 10g)IP:172.16.75.30INSTANCE_NAME=ora21 前期操作系统级别准备: 设置操作系统用户profile文件,注意ORACLE_SID,ORACLE_BASE,ORACLE_HOME,PATH,NLS_LANG变量的设置主数据库服务器端IP:172.16.75.35[oracle@db1 ora10g]$ cat .bash_profile # .bash_profile# Get the aliases and functionsif [ -f ~/.bashrc ]; then. ~/.bashrcfi# User specif
9i分区表自动管理实现方法之一
需求cmd_sent,track保留最近三个月数据当前天为2005年3月5日为例[@more@]分析:1 2005年3月20日导出2004.12分区数据2 2005年3月21日增加2005.5分区 exec add_partition_procedure(2); 3 2005年3月20日删除2004.12分区数据 exec drop_partition_procedure(3);1 备份原有分区数据[oracle@gpsbeta admin]$ cat cmd_sent_bk_by_partition.sh#!/bin/shexport ORACLE_HOME=/home/oracle/OraHome1export ORACLE_SID=orclexport NLS_LANG=american_america.ZHS16GBKdateStr=`/bin/date +%Y%m`dateAgo=`date --date='3 months ago' +%Y%m`tabWi
Shrink Undo表空间
UNDOTBS1 已经extend到13.1396484G。 由于磁盘紧张,现在需要Shrink Undo表空间.[@more@]SQL> select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks,extends2 from v$rollstat order by rssize;USN XACTS RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024 SHRINKS EXTENDS---------- ---------- --------------------- ---------------------- ---------- ----------0 0 .000358582 .000358582 0 01 0 .005973816 .012809753 45 866 0 .005973816 .006950378 30 482 0 .005973816 .008903503 37 567 0 .005973816 .00
重建tempfile
今天上班发现公司测试库的temp表空间数据文件包增到11g ,询问开发说昨天作了数据库压力测试.出于磁盘空间考虑,重新把temp表空间数据文件做小.SQL> select FILE_NAME,TABLESPACE_NAME from dba_temp_files;FILE_NAME--------------------------------------------------------------------------------TABLESPACE_NAME------------------------------/opt/oracle/product/9i/oradata/cwt/temp01.dbfTEMP[oracle@localhost cwt]$ ls -lhtotal 13G...-rw-rw---- 1 oracle dba 11G Mar 20 14:58 temp01.dbf....[@more@]SQL> ALTER DAT
给兄弟项目做Statspack优化过程
目前数据库负载处理事务情况需要指出的是数据库每秒钟需要处理事务数(业务和Oracle数据字典本身)为99.53.说明数据库在24-Feb-05 16:00:03至24-Feb-05 22:00:05期间比较繁忙.每秒钟的物理读(disk reads)为4,558.93*8k=35671k(34M左右)表示: 每秒钟处理业务需要系统级的内存交换在34M左右.这一点是需要降低的,看到这里我感觉到数据缓冲区中的命中率不会高.Load Profile~~~~~~~~~~~~ Per Second Per Transaction --------------- ---------------
histogram一点研究(待整理)
一 基于值的histogram1corp表sp_id列的distinct key为22SQL> select count(distinct sp_id) from corp;COUNT(DISTINCTSP_ID)-------------------- 22[@more@]一 基于值的histogram1corp表sp_id列的distinct key为22SQL> select count(distinct sp_id) from corp;COUNT(DISTINCTSP_ID)-------------------- 222 使用以下语句产生柱状图数据.默认会产生75个buckets来表示数据分布SQL> analyze table corp compute statistics for columns sp_id; Table analyzed.3 当histogram buckets>=表