Null 对 Index 的阴谋
今天在测试过程中遇到一问题, SQL该走Index的,没走. 加index hint也不行. 描述如下:1. 建立测试表create table t1asselect object_id, object_name from dba_objects;2. 在object_name列上建立b-tree indexcreate index idx_t1_name on t1(object_name);3. 如果我是select object_name from t1, 按理说CBO应该会选择走Index scan. 但奇怪的是结果走的full table scan.SQL> set autotrace trace expSQL> select object_name from t1;Execution Plan----------------------------------------------------------Plan hash value: 3617
对Oracle 10g ASSM管理方式的理解 III
步骤8: 多插入一些信息看看变化情况. SQL> select extent_id, block_id from dba_extents where owner='HARRY' and segment_name='T4';EXTENT_ID BLOCK_ID---------- ----------0 481SQL> declare2 a number;3 i number;4 begin5 for i in 1.. 510 loop6 a := i+2;7 insert into t48 select 'i'||'i'||'i', 'harry'||'i' from dual;9 end loop;10 end;11 /PL/SQL procedure successfully completed.SQL> commit;SQL> select extent_id, block_id, blocks from dba_extents where owner='HARRY' and segment_name='T4';EXTENT_
隐藏参数
在学习过程记录的一些隐含参数记录在此.set linesize 120col name for a30col value for a20col describ for a60SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describFROM SYS.x$ksppi x, SYS.x$ksppcv yWHERE x.inst_id = USERENV ('Instance')AND y.inst_id = USERENV ('Instance')AND x.indx = y.indxAND x.ksppinm LIKE '%&par%'/-- _ksmg_granule_size ( granule size deponds on SGA Size )-- smm-- pool_size-- pga_max-- _spin_count ( Amount to spin waiting for a latch )-- _db_block_lru_latches ( numbe
对Oracle 10g ASSM管理方式的理解 II
为了进一步了解ASSM管理方式, 可以通过dump segment header 来观察segment中block的管理情况和其他的一些相关信息. 为了理理自己的思路, 做了如下实验:步骤1. 创建测试表( Block size 是 8192 ), SQL> create table t4( id char(1000),2 name char(2000));每个block能放两行数据. 步骤2. SQL> select extent_id, block_id, blocks from dba_extents2 where owner='HARRY' and segment_name='T4';EXTENT_ID BLOCK_ID BLOCKS ---------- ---------- ---------- 0 481 8我们可以看到现在给这个表分配了一个extent, 这个extent由8个bloc
对Oracle 10g ASSM管理方式的理解 I
从10g开始,对创建tablespace, Oracle强制使用locally management的管理方式,用dictionary 的管理方式只是用于针对向下兼容. 做个简单的测试如下 :SQL> create tablespace test22 datafile size 10m3 extent management dictionary;create tablespace test2*ERROR at line 1:ORA-12913: Cannot create dictionary managed tablespaceDictionary-managed tablespace的管理方式是通过系统表来管理, 它相关的信息是存在data dictionary中的, 那就是说对于空间使用的变化情况都需要通过更新data dictionary中相关的表来进行跟踪. 所以在更
对RBA的说明
Redo Byte Address (RBA)Recent entries in the redo thread of an Oracle instance are addressed using a 3-part redo byte address, or RBA. An RBA is comprised of 1. the log file sequence number (4 bytes) 2. the log file block number (4 bytes) 3. the byte offset into the block at which the redo record starts (2 bytes) RBAs are not necessarily unique within their thread, because the log file sequence number may be reset to 1 in all threads if a database is opened with the RESETLOGS option. RBAs are us
手动创建Oracle 10g EM
搞了一把手动创建oralce EM, 记录创建步骤如下: 1. 运行下面的命令创建EM repositoryemca -config dbcontrol db -repos create2. 创建过程中遇到两个错误a. 配置: ORA-28000: 帐户已被锁定oracle.sysman.assistants.util.sqlEngine.SQLFatalErrorException: ORA-28000: 帐户已被锁定at oracle.sysman.assistants.util.sqlEngine.SQLEngine.executeImpl(SQLEngine.java:1467)at oracle.sysman.assistants.util.sqlEngine.SQLEngine.connect(SQLEngine.java:814)at oracle.sysman.assistants.util.sqlEngine.SQLEngine.connect(SQLEngine.
对MINTRANS 和 MAXTRANS 参数的理解
在创建表的时候, 我们会注意到有两个参数 MINTRANS 和 MAXTRANS. 这两个参数决定了在分配给这个表的block上初始的并发操作数和最大的并发操作数. 建表时, 指定MINTRANS大小可以在block中预留相应的空间, MAXTRANS参数一般为255, 但在block上并发的trans不一定能达到255个, 原因之一就是因为block上可能会没有足够的空闲空间来分配给新的transition. 在Tom大师的书上有一个相关的实验, 如下:-- 创建表并插入数据create table t(x int) maxtrans 1;insert into t values( 1 );insert into t value( 2 );commit;-- 登录一个新的session连接到
深入浅出oracle Chapter 1 -- 4
---------------------------------------------- Chapter 1 DB start and shutdown --------------------------------------------------- Check heartbeat valueselect cphbt from x$kcccp;--- check wait event of heartbeatselect event#,name from v$event_name where name like '%heart%';-- Generate orapw file( filename: orapwSID)orapwd file=orapwharry password=123 entries=5-- Get system change number ( SCN )select dbms_flashback.get_system_change_number from dual;[@more@]-- Get checkpoint SCNselect a.file#, a
Oracle 10g study Guide I 笔记
感觉Oracle 的study guide是挺好的资料, 里面包括了oracle中大部分基础的知识要点和基本的操作步骤. 有时间还是值得在过一下这些文档. 在此先贴上自己以前在学习study Guide I中做的一些操作笔记 -------------------------------------------- Chapter 3 ------------------------------------------------- Create a tablespaceCREATE TABLESPACE TEST2DATAFILE SIZE 25GEXTENT MANAGEMENT LOCAL AUTOALLOCATESEGMENT SPACE MANAGEMENT auto;[@more@]-- Create a temporary tablespaceCREATE TEMPORARY TABLESPACE tempTEMPFILE 'C:ORAC
Backup and Recover basic guide 笔记
数据本身才是最重要的, 不管一个数据库系统run地有多顺畅, 数据丢失了, 其他的什么东西都免谈. 于是最近也花了很多时间来学习和了解备份和恢复的基本概念和方法. 在看完Backup and Recover basic guide的文档, 做了一些实验后, 对Oracle大概的备份和恢复有了一个基本的认识. 下面贴上在学习过程记录的一些基本语句.[@more@]------------------------------------------ RMAN quick start guide ------------------------------------------------- --- Backup individual fileRMAN> BACKUP ARCHIVELOG COMPLETION TIME BETWEEN 'SYS
使用RMAN恢复数据库到不同的主机上
为了加深对RMAN的理解, 今天做了下对数据恢复的实验. 手上有两台RedHat虚拟环境. 目的是用rman把一台机器的数据库恢复到另外一台上. 以下记录了实验中的步骤: 1. 实验环境( 两台数据库环境一致 )-- Database 10g Enterprise Edition Release 10.2.0.2.0 for Linux-- Rman没有使用catalog[@more@]2. 备份源数据库环境rman target / -- 记录DBID "connected to target database: HARRY (DBID=2188061810)"RMAN> show all; -- 查看当前RMAN设置RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;RMAN> sql 'alter system archiv
关于名词 Thread
在oracle的学习过程中总会遇到一些概念和名词总不太好理解, 在此将不断记录自己在学习过程中遇到的困惑, 以及后续自己对这些困惑的理解和查看到的相关信息THREAD#查看 v$log的结构时, 有thread#这个字段, 不知道它代表什么含意. 以下给出查到的一些解释-- THREAD# Log thread number ( From Oracle online doc )-- Thread = the instance # in RACa thread must have >= 2 groupsa group must have >= 1 members也就是说, 在单库环境中我们不用考虑thread#, 它的值都是1. 但, 在RAC环境中, 不同的instance会对应不同的thread numb
Oracle upgrade
一直不太清楚Oracle打patch和做upgrade会涉及到那些步骤和方法. 前几天有空试了一把. 现有oracle 10.2.0.1版本的单节点环境, 准备升级到10.2.0.2 总结大概的升级步骤如下.1. 到Metalink上下载10.2.0.2 patchset和安装guide[@more@]2. 安装Patchset-- 设置环境变量export ORACLE_HOMEexport ORACLE_SIDNote: 因为安装10.2.0.1的时候已经设置了这俩个变量, 省略了这一步 -- 停掉所有Oracle服务emctl stop dbconsolesql> shutdown immeidatelsnrctl stop-- 备份现有环境find /opt/app/oracle | cpio -pduvm /storage/ora_data/backup-
Windows上卸载Oracle
以前在Windows上卸载Oracle, 总会有些东西搞不干净. 昨天发现本本上的OEM老是有问题, 死活启不来, 搞了半天也没解决问题. 怒了, 重装..... 偶先问了下MR google 看有没有办法在Windows下完全卸载ORACLE, 他人不错, 很快就给了个答案, 试了一下, 效果不错. 步骤总结如下:1. 用dbca 先把库卸载掉. 图形界面的,直接点就是了, 那是相当的easy : )[@more@]2. 开始->程序->Oracle >Oracle Installation Products-> Universal 3. 运行regedit,到HKEY_LOCAL_MACHINE/SOFTWARE 下, 删掉ORACLE这个目录4. 运行regedit, 到HKEY_LOCAL_MACHINE