绑定变量就一定好么
通常在OLTP系统中,我们尽可能的使用绑定变量,因为可以减少硬解析.那么有个问题,使用绑定变量就一定好么?我们来看一个试验:SQL> desc t 名称 是否为空? 类型 ----------------------------------------- -------- ---------------------------- ID NUMBER DESCRI VARCHAR2(20) SQL> select id,count(1) from t group by id; ID COUNT(1)---------- ---------- 1 65536
RBO的规则
Rank Access Path---- --------------------------------1 Single row by ROWID2 Single row by cluster join3 Single row by hash cluster key with unique or primary key4 Single row by unique or primary key5 Cluster join6 Hash cluster key7 Indexed cluster key8 Composite index9 Single-column index10 Bounded range search on indexed columns11 Unbounded range search on indexed columns12 Sort-merge join13 MAX or MIN of indexed column14 ORDER BY on indexed column15 Ful
在全面评估后再使用Oracle并行
Oracle中,使用并行的目的一般是为了能够提高语句的执行效率。但是并不是所有的语句只要加上并行就能提高效率,有时候可能会起到相反的作用。因此在使用并行的时候,首先需要查清楚,我当前数据库的瓶颈是在哪里.[@more@]下面是两个使用并行后语句执行效率降低的例子.(1)并行查询表的记录数SQL>SQL> select count(1) from xx_test;COUNT(1)----------13926144已用时间: 00: 00: 24.16SQL>可以看到不加并发的情况下,执行查询语句的时间是24sSQL> select event from v$session_wait where sid in (select sid from v$session w
最近在看<让Oracle跑得更快>一书
最近在看谭怀远写的《让Oracle跑得更快》一书.书的封皮风格有点像O'relly的书,上面也是一个动物,不过这本书中的应该是麒麟.内容介绍了大量的数据库优化思路,主要是SQL优化比较多一些.语言比较通俗,分析得都比较细致,很多东西都是实际工作经验凝集而成的,读起来也比较轻松.对这块内容以前学习得不是很深入,这本书可以作为一本不错的中文资料.[@more@]
测试磁盘的读写IO速度
有时候我们在做维护的时候,总会遇到类似于IO特别高,但不能判定是IO瓶颈还是软件参数设置不当导致热盘的问题.这时候通常希望能知道磁盘的读写速度,来进行下一步的决策.下面是两种测试方法:(1)使用hdparm命令 这是一个是用来获取ATA/IDE硬盘的参数的命令,是由早期Linux IDE驱动的开发和维护人员 Mark Lord开发编写的( hdparm has been written by Mark Lord <mlord@pobox.com>, the primary developer and maintainer of the (E)IDE driver for Linux, with suggestions from many netfolk).该命令应该也是仅用于Linux系统,对于UN
insert的时候使用append会不会影响到表的大小
我们在insert表的时候,经常会使用append的方式来提高效率.append的会将insert的数据直接加到表的最后,而不会在表的空闲块中插入数据.无论是归档模式还是非归档模式,append会减少产生的日志,产生的UNDO也比较少。append属于direct insert,因此会提高insert的效率.那么insert使用append与不使用append,表的大小会不会不同呢?我简单做了个试验:(1)在没有做insert之前的表的select * from dba_segments where tablespace_name='TS_CHARIS';HEADER_BLOCK BYTES BLOCKS45835 1342177280 163840原表数据占用163840个块(2)执行insert(不使用appe
优化数据库EXP的效率
如何提高EXP文件的效率?有时候我们可能会遇到这类的问题首先,我们通常的做法是提高buffer,如下,我设置了10M的bufferexp charsi/charsi tables=tst_exp file=tst_exp.dmp log=tst_exp.log buffer=10240000开始时间:Mon Nov 8 10:09:26 CST 2010结束时间:Mon Nov 8 10:09:35 CST 2010如下,我测试一个70M的表使用exp花了9秒的时间.当然可以将buffer设置的再大一些可能还会提高一些效率,但是当buffer设置到一定大的时候,再往大设置就不能起作用了.其次,还可以设置另外一个参数DIRECT和RECORDLENGTH需要注意的是,如果同时设置direct和b
同时多个SQL命令执行的方法
我们有时候会遇到类似这种情况:需要对不同的表上创建索引,有很多创建索引的语句,但是把它们都在一个窗口执行的话,它只是串行的去处理,如果能够让他们同时执行呢?有两种方法:1.写多个脚本文件,同时运行及同时写成多个脚本,每个脚本都可以独立运行,然后将这些脚本都同时后台执行,就可以达到同时执行的效果了.示例单个脚本的方法:sqlplus charsi/charsi <<EOF >/dev/nullselect * from dual;EOF2.脚本里面后台执行程序如下,使用类似echo "select * from dual;"|sqlplus charsi/charsi的命令,只是对一个语句执行一
增加数据库SGA的方法
数据库版本10.2.0.1.1.如果数据库库使用的是pfile 修改pfile文件,记住sga_max_size的值必须大于sga_target的值. 修改完成后重启数据库.*.sga_max_size=251M*.sga_target=242MSQL> shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SQL> SQL> SQL> startupORACLE instance started.Total System Global Area 264241152 bytesFixed Size 1218892 bytesVariable Size 96470708 bytesDatabase Buffers 163577856 bytesRedo Buffers 2
通过OCP考试,等待证书
今天上午在尚观通过042,043,047三门考试,接下来就是等待证书了.现在OCP的考试越来越普遍,有一些工作过很多年的老DBA对这个认证其实抱着一种不屑的态度,毕竟证书不能代表能力,也不能取代经验.对于我,考这个证书主要有两个目的:1.鞭策自己学习 其实考试的范围挺广的,通过学习和试验题库中的场景,可以学到很多东西,有些内容以前仅仅是听说过,在日常的工作中也基本不会使用,但是出现在题库中,那么就需要去了解,或者去测试。在这个准备的过程中就可以学习到很多东西. 如果单凭是背题库,那就太不划算了.培训加考试下来得好几千上万元的钱,却仅
Oracle的另外一些文件
今天停止数据库之后,去$ORACLE_HOME目录下去修改pfile文件,然后看到一些怪异的文件名,而且占用的空间也不小,文件类如这种:-rw-rw---- 1 oracle dba 1544 May 15 04:40 hc_testdb.dat-rw-rw---- 1 oracle dba 24 May 15 04:40 lkTESTDB-rw-r----- 1 oracle dba 7405568 Jun 22 20:31 02lgt74g_1_1-rw-r----- 1 oracle dba 7405568 Jun 23 00:48 04lgtm7n_1_1-rw-r----- 1 oracle dba 1193746432 Jun 23 00:55 05lgtmek_1_1-rw-r----- 1 oracle dba 7356416 Jun 23 00:55 snapcf_testdb.f-rw-r----- 1 o
Oracle中SQL里面的Help命令
一直在寻找关于Oracle命令的一些帮助和提示,因为Oracle在sql命令中并没有提示。想想应该是sql太过于复杂,也太过于变化,使用一些公式的方式提供可能太过于麻烦,Oracle直接就提供了一本SQL Reference供你查询.不过也不是一点帮助信息也没有.你可以在sql下执行? index或者help index就会有一些帮助的信息.SQL> help indexEnter Help [topic] for help. @ COPY PAUSE SHUTDOWN @@ DEFINE PRINT SPOOL / DEL PROMPT
不同blocksize的表空间上全表扫描的差异实验
oracle9i之前,数据库的blocksize是固定的,一旦数据库创建之后就不可改变,也不能创建不同blocksize的表空间.9i之后,可以对非系统表空间设置不同db_block_size的值.那么blocksize不同会对SQL造成什么影响呢?我简单做了一个实验进行对比(这个实验还会再继续深入分析下).数据库版本10.2.0.3,系统默认的db_block_size为8K,创建一个新的表空间设置blocksize为16KSQL> alter system set db_16k_cache_size=4M scope=memory;系统已更改。SQL> create tablespace test16 datafile 'c:datafile_test16.dbf' size 100M blocksize 16k;表空
exp导出一个表中符合查询条件的数据
导出一个表中的部分数据,使用QUERY参数,如下导出select * from test where object_id>50000这个条件中的数据exp charsi/charsi@testdb tables=(TEST) query="'where object_id>50000'" file=aaa.dmp log=aaa.log其他参数含义:GRANTS:指定是否导出对象的授权信息,默认参数为Y,即默认导出INDEXES:指定是否导出表的索引,默认为YCONSTRAINTS:指定是否导出标的约束,默认为YTRIGGERS:指定是否导出与表相关的触发器,默认为YFILESIZE:如果生成的dump文件超过指定的,需要使用FILE参数指定多个文件BUFFER:用来指定执行导
oracle 10g isqlplus使用初体验
oracle 10g中新添加了isqlplus的方式,可以使用网页的方式查询sql等。查询起来显得比较方便一些。相比命令方式sqlplus,它会自动调整每列的分配值.启动方式:isqlplusctl start停止方式:isqlplusctl stopisqlplus默认使用的是5560端口,如果使用isqlplus,首先得确认网络中没有屏蔽该端口.我测试的时候是使用本机的虚拟机进行测试的。刚开始测试时,由于本机浏览器设置了代理,无论怎么都无法连接,后来把代理去掉就可以访问了。看来以后得少犯这种低级错误了.另外,使用本机访问虚拟机数据库的http://192.168.43.4:5560/isqlplus时,那些
修改数据库db_name的方法
如何修改数据库的db_name?下面提供一种方法供参考本例将db_name=testdb改名成db_name=testdb1,修改结束后,instance_name还不变,仍为testdb首先将数据库启动到mount状态SQL> shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SQL> SQL> SQL> startup mount ORACLE instance started.Total System Global Area 289406976 bytesFixed Size 1219040 bytesVariable Size 109053472 bytesDatabase Buffers 176160768 bytesRedo Buffers
系统和数据库LANG不一致的问题
对于系统和数据库字符集设置不一致的问题,可能会出现多种问题.1.对数据imp/exp导出导入时,可能会有些字符出现报错,典型的报错如下(虽然对数据的影响应该不会造成影响): EXP-00091:Exporting questionable statistics.2.有些数据格式可能不能识别,遇到一个问题,如果系统shell设置的环境变量不是AL32UTF8,则有些数据格式的数据无法识别 主要是影响到date数据类型.如果系统shell环境变量为中文,数据库环境变量为字符类型,则会报错$ export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"$ sqlplus "/ as sysdba"
UNIX的架构及UNIX/Windows演进图
对于UNIX/Windows系统的演进历史还是需要了解的。The evolution of the UNIX operating systemThe evolution of the Windows family of operating systems对UNIX的架构也需要学习UNIX architecture以上内容来自http://technet.microsoft.com/en-us/library/bb496993.aspx[@more@]
这种外键(Foreign Key)方法能不能造成死锁
网上看了一篇文章(http://blog.csdn.net/youjianbo_han_87/archive/2010/03/17/5390993.aspx),关于使用外键造成死锁的分析.按照上面的方法做了一遍,却模拟不出来死锁,只能模拟出session blocking的情况.不知道所以然,将我做的过程贴出来.数据库版本:10.2.0.1SQL> 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 Linux: Versi
Oracle数据库发展
(Oracle最早期的产品是Oracle5)--1979年:基于SQL的数据库 Oracle开发出第一个基于SQL标准的数据库管理系统,同时该产品也是第一个以SQL(Structured Query Language,结构化查询语言)语言为基础的关系型数据库管理系统.--1986年:Oracle5 Oracle5版具有分布式数据库处理能力,同时支持Client/Server结构,对数据进行集中存储与处理--1988年:Oracle6 Oracle6版支持过程化语言PL/SQL(Procedural Language)、带事务处理TPO(Transaction Processing Option)选件,使用SQL*Net进行客户端与服务器间的通信.--1992年:Oracle7 多线索服务器体系结构MT