delete/truncate删除数据索引空间问题
drop table dt_test_tab; create table dt_test_tab (i number); create index dt_test_idx on dt_test_tab(i); insert into dt_test_tab values (1); insert into dt_test_tab select i from dt_test_tab; / ... / 共17次得到131072条记录,然后 commit; select sum(bytes)/1024 from user_extents where segment_name='DT_TEST_IDX'; 结果为4352k truncate table dengtaotest; select sum(bytes)/1024 from user_extents where segment_name='DT_TEST_IDX'; 结果为128k(就是建表建索引时缺省的initial extent,看来是缩回去了) alter i
oracle查询一年中的工作日
从下面这个结果集中,我们就可以知道一年中的所有工作日的情况。这里只所以多用一重查询是因为select level as id from dual connect by level < 102;这个结果只能出现100行,SQL> select level as id from dual connect by level < 102;ID----------1234567891011121314151617181920ID----------212223242526272829303132333435363738394041ID----------424344454647484950515253545556575859606162ID----------636465666768697071727374757677787980818283ID----------84858687888990919293949596979899100100 rows selected如
utl_file使用实例
通过这个实例可以理解如何利用该包读写文件:DECLAREFILE_HANDLE UTL_FILE.FILE_TYPE;BEGINFILE_HANDLE:=UTL_FILE.FOPEN(‘d:orant’,’tmp.txt’,’a’);UTL_FILE.PUT_LINE(FILE_HANDLE,’HELLO WORLD’);UTL_FILE.FCLOSE(FILE_HANDLE);END;DECLAREDATA_LINE VARCHAR2(80);FILE_HANDLE UTL_FILE.FILE_TYPE;BEGINFILE_HANDLE:=UTL_FILE.FOPEN(‘d:orant’,’tmp.txt’,’r’);UTL_FILE.GET_LINE(FILE_HANDLE,DATA_LINE);DBMS_OUTPUT.PUT_LINE(DATA_LINE);UTL_FILE.FCLOSE(FILE_HANDLE);EXCEPTIONWHEN UTL_FILE.invalid_path THENDBMS_OUTP
oracle中执行os命令
I can think of a couple of different ways....o In Oracle8i, release 8.1, we could use java to run a system command with an "&" after it (assuming unix) or perhaps "start xxx.cmd" if using NT.o In Oracle8.0 and up, we can write an external procedure in C that runs host commands with system() and the "&". (see attached for an external procedure example)o In Oracle7.0 and up, we can use dbms_pipes to talk to a daemon running outside the database. Here is
oracle interval日期函数的bug
SQL> select to_char(to_date('20060831','yyyymmdd') + interval '1' month,'yyyymmdd') from dual ;select to_char(to_date('20060831','yyyymmdd') + interval '1' month,'yyyymmdd') from dualORA-01839: 指定月份的日期无效 SQL> select to_char(to_date('20060831','yyyymmdd') + interval '2' month,'yyyymmdd') from dual ;TO_CHAR(TO_DATE('20060831','YY------------------------------20061031SQL> select to_char(to_date('20060831','yyyymmdd') + interval '3' month,'yyyymmdd') from dual ;select to_char(to_da
Oracle Pipelined Table Functions
OverviewBasically, when you would like a PLSQL (or java or c) routine to be the «source»of data -- instead of a table -- you would use a pipelined function.PIPELINED functions will operate like a table.A PL/SQL function may be used in a data warehouse database to transform large amounts of data. This might also involve massaging the data in a series of transformations, each performed by different functions. Prior to Oracle Database 9, large transformations required either
oracle performance tunning(10)
十、操作系统优化和使用资源管理器1、操作系统优化1)概念操作系统优化时应该考虑的因素有:内存的使用;Cpu的使用;IO级别;网络流量。各个因素互相影响,正确的优化次序是内存、IO、CPU。操 作系统使用了虚拟内存的概念,虚拟内存使每个应用感觉自己是使用内存的唯一的应用,每个应用都看到地址从0开始的单独的一块内存,虚拟内存被分成4K或 8K的page,操作系统通过MMU(memory management unit)将这些page与物理内存映射起来,这个映射关系通过page table控制。Raw device是没有文件结构或目录结构的磁盘或磁盘分区,由于它忽略了操
oracle performance tunning(8)
八、提升block的效率 1、避免动态分配的缺陷 创建本地管理的表空间; 合理设置segment的大小; 监控将要扩展的segment: SELECT owner, table_name, blocks, empty_blocks FROM dba_tables WHERE empty_blocks / (blocks+empty_blocks) < .1; 2、high water mark 记录在segment header block中,在segment创建的时候设定在segment的起始位置,当记录被插入的时候以5个block的增量增加,truncate可以重设high water mark的位置,但delete不能。 在full table scan中,oracle会读取high water mark以下的所有的数
oracle performance tunning(9)
九、SQL优化1、优化器模式Oracle9i有两种优化器模式可以选择:• Rule-based:– Uses a ranking system– Syntax- and data dictionary–driven• Cost-based:– Chooses least-cost path– Statistics-drivenRule-based模式满足向后兼容,而Cost-based模式中的成本大部分来自于逻辑读的次数,推荐使用Cost-based模式。2、固定optimizer plan1)概念对 于每一个查询,optimizer都会准备一个定义了操作执行顺序和方法的操作树(执行计划),oracle server根据这个执行计划执行语句。通过固定执行计划,可以强制应用通过一种理想
oracle performance tunning(7)
七、应用优化 1、概念 为了提高性能,可以使用下列数据访问方法: A、Clusters B、Indexes -B-tree(normal or reverse key) -bitmap -function-based C、Index-organized tables D、Materialized views 索引的层次越多,效率越低,如果索引中含有许多已删除的行,这个索引也会变得低效,如果索引数据的15%已经被删除,应该考虑重建索引。 2、应用问题 A、使用可声明的约束而不是通过代码限制 B、代码共享 C、使用绑定变量而不是文字来优化共享sql D、调整cursor_sharing的值(EXACT/SIMILAR/FORCE)[@more@]
oracle performance tunning(6)
六、Lock Contention1、概念DML事务使用row-level locks,查询不会锁定数据。锁有两种模式:exlusive、share。锁的类型:• DML or data locks:– Table-level locks(TM)– Row-level locks(TX)• DDL or dictionary locks一个transaction至少获得两个锁:一个共享的表锁,一个专有的行锁。Oracle server将所有的锁维护在一个队列里,队列跟踪了等待锁的用户、申请锁的类型以及用户的顺序信息。Lock在下列情况会释放:commit;rollback;terminated(此时由pmon清理locks)。Quiesced database:一个数据库如果除了sys和sys
oracle performance tunning(5)
五、Rollback(undo) Segment 优化1、概念Transaction以轮循的方式使用rollback segment里的extent,当前所在的extent满时就移动到下一个extent。可能有多个transaction同时向同一个extent写 数据,但一个rollback segment block中只能保存一个transaction的数据。Oracle 在每个Rollback segment header中保存了一个transaction table,包括了每个rollback segment中包含的事务信息,rollback segment header的活动控制了向rollbak segment写入被修改的数据。rollback segment header是经常被修改的数据库块,因此它应该被长时间留在b
oracle performance tunning(4)
四、诊断latch竞争1、概念Latch是简单的、低层次的序列化技术,用以保护SGA中的共享数据结构,比如并发用户列表和 buffer cache里的blocks信息。一个服务器进程或后台进程在开始操作或寻找一个共享数据结构之前必须获得对应的latch,在完成以后释放latch。 不必对latch本身进行优化,如果latch存在竞争,表明SGA的一部分正在经历不正常的资源使用。1)Latch的作用:A、序列化访问:保护SGA中的共享数据结构;保护共享内存的分配。B、序列化执行:避免同时执行某些关键代码;避免互相干扰。2)Latch请求的两种类型:A、willing-to-wait:
oracle performance tunning(3)
三、优化排序操作1、概念服务器首先在sort_area_size指定大小的内存区域里排序,如果所需的空间超过 sort_area_size,排序会在临时表空间里进行。在专用服务器模式下,排序空间在PGA中,在共享服务器模式下,排序空间在UGA中。如果没有 建立large pool,UGA处于shared pool中,如果建立了large pool,UGA就处于large pool中,而PGA不在sga中,它是与每个进程对应单独存在的。PGA:program global area,为单个进程(服务器进程或后台进程)保存数据和控制信息的内存区域。PGA与进程一一对应,且只能被起对应的进程读写,PGA在用户登录数
oracle performance tunning(2)
二、数据库配置和IO问题降低磁盘的IO分散磁盘的IO表空间使用本地管理1、将文件分散到不同的设备上1)将数据文件与日志文件分开2)减少与服务器无关的磁盘IO3)评估裸设备的使用4)分割表数据2、表空间的使用系统表空间保留给数据字典对象创建本地管理表空间以避免空间管理问题将表和索引分散到独立的表空间中使用独立的回滚表空间将大的数据库对象保存在各自独立的表空间中创建一个或多个独立的临时表空间下列数据库对象应该有单独的表空间:数据字典、回滚段、索引、临时段、表、大对象3、检查IO统计数据Select phyrds,phywrts,d.name fr
oracle performance tunning(1)
一、SGA1、Shared pool tunningShared pool的优化应该放在优先考虑,因为一个cache miss在shared pool中发生比在data buffer中发生导致的成本更高,由于dictionary数据一般比library cache中的数据在内存中保存的时间长,所以关键是library cache的优化。Gets:(parse)在namespace中查找对象的次数;Pins:(execution)在namespace中读取或执行对象的次数;Reloads:(reparse)在执行阶段library cache misses的次数,导致sql需要重新解析。1) 检查v$librarycache中sql area的gethitratio是否超过90%,如果未超过90%,应该检查应用
Linux文件的复制、删除和移动命令
cp命令 功能:将给出的文件或目录拷贝到另一文件或目录中,就如同DOS下的copy命令一样,功能非常强大。 语法:cp [选项] 源文件或目录 目标文件或目录 说明:该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中。 参数: - a 该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。 - d 拷贝时保留链接。 - f 删除已经存在的目标文件而不提示。 - i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式
checkpoint相关概念
html,body { border: 0px; }相关概念:RBA checkpoin rba on-disk rba RBA:redo block address 重作日志地址logfile sequence number(4bytes)logfile block number(4bytes)redo entry offset(2bytes)checkpoint rba:最后一次检查点对应的重作日志地址,意味着这个地址之前的redo log都是实例恢复不需要的。实例恢复的起点on-disk rba:当前日志中最新的重作日志地址。实例恢复的终点相关视图:x$kcccp v$instance_recovery v$instance_recovery实例恢复对应的视图:actual_redo_blks:最后一次检查点到当前日志尾所差的redo b
Linux 的常用网络命令
计算机网络的主要优点是能够实现资源和信息的共享,并且用户可以远程访问信息。Linux提供了一组强有力的网络命令来为用户服务,这些工具能够帮助用户登录到远程计算机上、传输文件和执行远程命令等。 本章介绍下列几个常用的有关网络操作的命令: ftp 传输文件 telnet 登录到远程计算机上 r - 使用各种远程命令 netstat 查看网络的状况 nslookup 查询域名和IP地址的对应 finger 查询某个使用者的信息 ping 查询某个机器是否在工作 使用ftp命令进行远程文件传输 ftp命令是标准的文件传输协议的用户
用insert all实现同时向多表插入数据
html,body { border: 0px; }看到一个很有意思的问题如下: 有三个表,表A , 表B, 表C。这3个表,都有4个字段,并且这4个字段名称都一样,分别是:ID NAME CODE MESSAGE。我现在要做以下操作:每一个表都同时插入5条数据。其中这5条数据当中,前两列是一样的,第三列的数据是1--5,而最后一列的值是固定的。 例如:表A: ID NAME CODE MESSAGE0001 xiaoming 1 1400001 xiaoming 2 1120001 xiaoming 3 840001 xiaoming 4 560001 xiaoming 5 28表B: ID NAME CODE MESSAGE0001 xiaoming 1 550001 xiaoming 2 330001 xiaoming 3 5700