Monthly Archives: February 2011
SQLPLUS使用技巧总结
一、修改sqlplus的提示符。初看上过去没什么大用,不过直接在数据库做的操作,还是小心为妙。 在login.sql中增加下面的内容: set termout off define gname=idle // 定义instance 没起的情况下使用的默认值// column global_name new_value gname select lower(user) || ‘@’ ||upper(instance_name) global_name from v$instance; set sqlprompt ‘&gname>’ set termout on 关于login.sql和上面语句的具体含义可以参加这篇文章:全面了解SQL*PLUS工具的一点补充 也可以参考我的login.sql文件 added on 2011-09-12 by adam,上面功能在10g中的新写法: set sqlprompt “_USER’@’_CONNECT_IDENTIFIER>” 二、编辑技巧,下面我用一个有点意义的场景做说明,–后面是说明文本,实际运行时候需要去掉。 create table t (id number); select * from t; i where id > 5; –在原来的语句新增一行 l [...]
windows命令行使用的小技巧
一、在文件夹的右键,增加“open cmd shell here”的菜单,点击后可以打开命令行窗口,当前目录为开选中的文件夹。 直接导入这个注册表文件就可以了。 在我的电脑上选择这个菜单后当前路径为桌面,在我的文档选择这个菜单后当前路径为我的文档设置的路径。 二、设置环境变量 用SET命令设置的环境变量只对当前窗口生效,所以微软另外给了一个叫SETX的工具,可以设置用户或系统的环境变量,如: setx java_home e:jdk15 -m 三、命令行输入的快捷键,参考这篇文章:http://wjason.javaeye.com/blog/404107 右箭头:如果当前光标处字符空白,重复上一条命令中同一位置的字符,F1键也可以。 CTRL + 左、右箭头:按单词进行光标移动。 F2: 按F2后输入一个字符,在光标处增加上一条命令中当前光标位置和输入字符首次出现位置之间的所有字符。读起来比较拗口,举一个例子: 上一条命令为 setx java_home e:jdk15 -m 当前命令行输入set,加一个空格,按F2,再输入-,命令行字符变为: set java_home e:jdk15 F4: 按F4后输入一个字符,删除当前光标与其之后输入字符首次出现位置之间的字符。如果输入字符为空,则删除到行尾,如: 当前命令行字符为:setx java_home e:jdk15 -m 光标定位到第一个j字母,按F4,在输入j,命令行字符变为: setx jdk15 -m F7: 显示已执行的命令记录,按上下箭头进行选择,回车键执行。输入字符的话,按命令的第一个字母进行匹配选择。 F8: 在命令记录中,按输入顺序的反序,匹配当前已输入的命令行字符,如上面的过程中,输入set后: 第一次按F8, 出现最近一次匹配的命令: setx jdk15 -m 第二次按F8, 出现 setx home e:jdk15 -m 第三次按F8, 出现 [...]
补习Oracle的基本知识,HWM/RFILE#/V$BH/V$TRANSACTION/DUMP DATAFILE
学习对象:晶晶实验二十二之 直接路径插入篇 主要内容总结:直接插入(如 INSERT /*+ APPEND */)时,直接向数据文件HWM之上的块写入,不经过Buffer Cache,以提高速度,利用HWM进行回滚。但如果插入表有索引,仍然要写到Buffer Cache,由DBWn写入磁盘。所以数据量较大时可以先drop掉索引,等插入完成后重建。 概念学习: 1、HWM(High Water Mark):一般翻译为高水位或高水点。说白了就是从HWM那个BLOCK开始就是空白块了。在Troubleshooting Oracle Performance这本书的第四章122页有详细说明。 2、RFILE#:主要了解ROWID的组成和从Oracle 8的变更情况。ROWID中增加DATA_OBJECT_ID之后,DATAFILE文件的限制变成了每个TABLESPACE最大1023。可以参考这篇文章:ORACLE ROWID 主要内容摘抄如下: rowid就是唯一标志记录物理位置的一个id,在oracle 8版本以前,rowid由file#+block#+row#组成,占用6个bytes的空间,10 bit 的 file# ,22bit 的 block# ,16 bit 的 row#。 从oracle 8开始rowid变成了extend rowid,由data_object_id#+rfile#+block#+row#组成,占用10个bytes的空间, 32bit的 data_object_id#,10 bit 的 rfile#,22bit 的 block#,16 bit 的 row#.由于rowid的组成从file#变成了rfile#,所以数据文件数的限制也从整个库不能超过1023个变成了每个表空间不能超过1023个 数据文件。 说了rowid的组成,那么我们再来看看rowid在索引里面占用的字节数又是什么样子的。在oracle 8以前索引中存储的rowid占用字节数也是6bytes,在oracle8之后,虽然oracle使用了extend rowid,但是在普通索引里面依然存储了bytes的rowid,只有在global index中存储的是10bytes的extend rowid,而extend rowid也是global index出现的一个必要条件 3、V$BH:用来查询Buffer Cache中块的基本信息 select file#,block# [...]
[转]Oracle的在线重定义表功能
原文地址:Oracle的在线重定义表功能 Oracle的在线重定义表功能(二) 另外一篇:10g在线重定义新特性——复制表相关对象 从原文摘出的主要操作步骤: 1.选择一种重定义方法: 存在两种重定义方法,一种是基于主键、另一种是基于ROWID。ROWID的方式不能用于索引组织表,而且重定义后会存在隐藏列M_ROW$$。默认采用主键的方式。 2.调用DBMS_REDEFINITION.CAN_REDEF_TABLE()过程,如果表不满足重定义的条件,将会报错并给出原因。 3.在用一个方案中建立一个空的中间表,根据重定义后你期望得到的结构建立中间表。比如:采用分区表,增加了COLUMN等。 4.调用DBMS_REDEFINITION.START_REDEF_TABLE()过程,并提供下列参数:被重定义的表的名称、中间表的名称、列的映射规则、重定义方法。 如果映射方法没有提供,则认为所有包括在中间表中的列用于表的重定义。如果给出了映射方法,则只考虑映射方法中给出的列。如果没有给出重定义方法,则认为使用主键方式。 5.在中间表上建立触发器、索引和约束,并进行相应的授权。任何包含中间表的完整性约束应将状态置为disabled。 当重定义完成时,中间表上建立的触发器、索引、约束和授权将替换重定义表上的触发器、索引、约束和授权。中间表上disabled的约束将在重定义表上enable。 6.(可选)如果在执行DBMS_REDEFINITION.START_REDEF_TABLE()过程和执行DBMS_REDEFINITION.FINISH_REDEF_TABLE()过程直接在重定义表上执行了大量的DML操作,那么可以选择执行一次或多次的SYNC_INTERIM_TABLE()过程,以减少最后一步执行FINISH_REDEF_TABLE()过程时的锁定时间。 7.执行DBMS_REDEFINITION.FINISH_REDEF_TABLE()过程完成表的重定义。这个过程中,原始表会被独占模式锁定一小段时间,具体时间和表的数据量有关。 执行完FINISH_REDEF_TABLE()过程后,原始表重定义后具有了中间表的属性、索引、约束、授权和触发器。中间表上disabled的约束在原始表上处于enabled状态。 8.(可选)可以重命名索引、触发器和约束。对于采用了ROWID方式重定义的表,包括了一个隐含列M_ROW$$。推荐使用下列语句经隐含列置为UNUSED状态或删除。 ALTER TABLE TABLE_NAME SET UNUSED (M_ROW$$); ALTER TABLE TABLE_NAME DROP UNUSED COLUMNS;
[转]alter table move跟shrink space的区别
原文地址:alter table move跟shrink space的区别 都知道alter table move 或shrink space可以收缩段,用来消除部分行迁移,消除空间碎片,使数据更紧密,但move 跟shrink space还是有区别的。Move会移动高水位,但不会释放申请的空间,是在高水位以下(below HWM)的操作。而shrink space 同样会移动高水位,但也会释放申请的空间,是在高水位上下(below and above HWM)都有的操作。也许很难理解吧,看测试就知道了。 SQL> select * from v$version; BANNER—————————————————————-Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – ProdPL/SQL Release 10.2.0.1.0 – ProductionCORE 10.2.0.1.0 ProductionTNS for 32-bit Windows: Version 10.2.0.1.0 – ProductionNLSRTL Version 10.2.0.1.0 – Production SQL> create table test (id number) storage [...]
[推荐]understanding shared pool memory structures
oracle官方白皮书,个人感觉讲的很清晰,值得一读。目录如下: 其他参考文章: Oracle 内存区域之shared pool结构解析 oracle wiki的文章:Shared Pool Memory Structures,与白皮书文章有重复,可能是老的版本。 oracle shared pool深入讨论系列文章
判断oracle数据库中硬解析的两个参考sql
–运行一次sql语句的次数统计select count(1) num_sql,sum(decode(executions, 1, 1, 0)) num_1_use_sql,sum(sharable_mem)/1024/1024 mb_sql_mem,sum(decode(executions, 1, sharable_mem, 0))/1024/1024 mb_1_use_sql_memfrom v$sqlstatswhere sharable_mem > 0 出自:understanding shared pool memory structures –具有相同执行计划sql语句信息select plan_hash_value, count(*), min(sql_id), min(sql_text), round(sum(sharable_mem) / 1024 / 1024, 0) total_mem, rank() over(order by sum(sharable_mem) / 1024 / 1024 desc) as mem_rank from V$SQlstats group by plan_hash_value order by count(*) desc 出自:Shared Pool [...]
如何用程序提交后台作业
DATA: number TYPE tbtcjob-jobcount, name TYPE tbtcjob-jobname VALUE ‘JOB_TEST’, print_parameters TYPE pri_params. … CALL FUNCTION ‘JOB_OPEN’ EXPORTING jobname = name IMPORTING jobcount = number EXCEPTIONS cant_create_job = 1 invalid_job_data = 2 jobname_missing = 3 OTHERS = 4. IF sy-subrc = 0. SUBMIT submitable TO SAP-SPOOL SPOOL PARAMETERS print_parameters WITHOUT SPOOL DYNPRO VIA JOB name NUMBER [...]
oracle 10046 event使用记录
一、设定trace文件的名称 SQL> alter session set tracefile_identifier = ‘adam’; Session altered. 二、启用事件,执行sql语句,停止时间 SQL> alter session set events ’10046 trace name context forever, level 12′; Session altered. SQL> select object_id from dba_objects where rownum < 2; OBJECT_ID ———- 20 SQL> alter session set events ’10046 trace name context off’; 三、使用tkprof工具格式化trace文件,方便查看 tkprof crm_ora_2960_adam.trc adam.txt aggregate=yes sys=no waits=yes sort=fchela [...]
oracle 10053 event使用记录
一、获取trace文件的名称 SELECT c.VALUE || ‘/’ || d.instance_name || ‘_ora_’ || a.spid || ‘.trc’ TRACE FROM v$process a, v$session b, v$parameter c, v$instance d WHERE a.addr = b.paddr AND b.audsid = USERENV (‘sessionid’) AND c.NAME = ‘user_dump_dest’; 基本原理就是user_dump_dest参数的值 + 数据库实例名称 + _ora_ + 当前进程id + .trc 二、注意只有第一次生成sql语句的执行计划的时候,才会产生trace文件。 三、执行过程: SQL> alter session set events ’10053 trace name [...]