nologging和恢复的一点测试!
没有实质性的结论,暂时记个过程吧。[@more@]RMAN> backup database;启动 backup 于 26-3月 -09使用通道 ORA_DISK_1通道 ORA_DISK_1: 启动全部数据文件备份集通道 ORA_DISK_1: 正在指定备份集中的数据文件输入数据文件 fno=00001 name=E:ORACLEPRODUCT10.2.0ORADATAORCLSYSTEM01.DBF输入数据文件 fno=00003 name=E:ORACLEPRODUCT10.2.0ORADATAORCLSYSAUX01.DBF输入数据文件 fno=00004 name=E:ORACLEPRODUCT10.2.0ORADATAORCLUSERS01.DBF输入数据文件 fno=00007 name=E:ORACLEPRODUCT10.2.0ORADATAORCLUNDOTBS02.DBF通道 ORA_DISK_1: 正
事务提交时itl上flag标记U测试!
The U stands for "upper bound commit", meaning that the SCN is an upper bound for the time at which it committed. Note that the U flag in the ITL is also set for a fast commit, but the two cases can be distinguished by the presence or absence of row-level locks. 本例中测试的仅仅是fast commit[@more@]SQL> select id,dbms_rowid.rowid_relative_fno(rowid) fno,dbms_rowid.rowid_block_number(rowid) bno from t;ID FNO BNO---------- ---------- ----------1 1 329622 1 329623 1 329624 1 329625 1 3
itl在被覆盖之前被保存了下来1!
itl在被覆盖之前放在了事务的undo chain(单向链表的尾)的start_ubablk中以备之后构造consistent read而使用。[@more@]SQL> create table t(id int) initrans 1;表已创建。SQL> insert into t values(1);已创建 1 行。SQL> select id,dbms_rowid.rowid_relative_fno(rowid) fno,dbms_rowid.rowid_block_number(rowid) bno from t; ID FNO BNO---------- ---------- ---------- 1 1 32962--=============================== session 2:(session 2的这个操作没有任何实际意义,
itl在被覆盖之前被保存了下来!
究竟是被保存在覆盖它的这个事务所使用的undo的chain的end block还是start block中这个例子中没有得到论证,改天再验证。这里先临时记录一下。[@more@]session 1:SQL> create table t1(id int) initrans 1;表已创建。SQL> insert into t1 values(1);已创建 1 行。SQL> select id,rowid from t1; ID ROWID---------- ------------------ 1 AAAC49AABAAAIIaAAASQL> select id,dbms_rowid.rowid_relative_fno(rowid) fno,dbms_rowid.rowid_block_number(rowid) bno from t1; ID FNO BNO----
undo segment header中记录的dba是该事务使用的单向链表中的头(end block)!
以前写过一篇文章介绍事务使用的undo block其实一条单向链表,那么undo header上记录的dba到底是这条单向链表的头还是尾,经验证是头,我猜测也应该是头,因为当rollback事务时才能以最快的速度找到rollback的起点,当然这样做的目的可能不仅仅是为了rollback操作。[@more@]SQL> create table tt1 tablespace users as select *from dba_objects;表已创建。SQL> insert into tt1 select * from tt1;已创建11280行。SQL> select xidusn,ubafil,ubablk,start_ubafil,start_ubablk from v$transaction;XIDUSN UBAFIL UBABLK START_U
使用profile的Idle time时要注意。
有未提交的事务依然断开,比较恐怖,断开时自动做了提交,其实就相当于做了disconnect[@more@]SQL> select * from t1;未选定行SQL> insert into t1 values(1,'a');已创建 1 行。SQL> select * from t1;select * from t1*第 1 行出现错误:ORA-02396: 超出最大空闲时间, 请重新连接SQL> exit从 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProductionWith the Partitioning, OLAP and Data Mining options 断开C:>sqlplus c/c@abcSQL*Plus: Release 10.2.0.1.0 - Production on 星期四 3月 19 14:21:53 20
一个跟踪dml动作的的触发器!
讲课时给学员举的一个例子,顺手记录一下![@more@]create or replace trigger trigg_traceafter insert or update or delete on t1 for each rowdeclare -- local variables here v_id int; v_name varchar2(10); v_flag varchar2(10);begin if inserting then v_id := :new.id; v_name :=:new.name; v_flag :='insert'; else if updating then v_flag :='update' ; else v_flag :='delete' ; end if ; v_id := :old.id; v_name :=:old.name; end if ; insert int
事务和表空间只读和离线的一点测试!
当表空间中的segment上有事务存在时该表空间在其他session中无法read only。[@more@]session 1:SQL> CREATE TABLE T1(ID INT) TABLESPACE TEST;表已创建。SQL> INSERT INTO T1 VALUES(1);已创建 1 行。session 2:SQL> alter tablespace test read only;--上面操作会一直挂在这里(等待)session 1:SQL> commit;提交完成。--提交完成之后,session 2的read only操作完成如下:SQL> alter tablespace test read only;表空间已更改。session 1:SQL> INSERT INTO T1 VALUES(2);已创建 1 行。SQL> alter tablespace test
flashback_transaction_query的数据来源!
flashback_transaction_query的数据完全来自undo datafile![@more@]flashback_transaction_query是一个视图,定义如下create or replace view sys.flashback_transaction_query asselect xid, start_scn, start_timestamp,decode(commit_scn, 0, commit_scn, 281474976710655, NULL, commit_scn)commit_scn, commit_timestamp,logon_user, undo_change#, operation, table_name, table_owner,row_id, undo_sqlfrom sys.x$ktuqqrysys.x$ktuqqry是一个动态性能表--=======================================SQL> shutdown immediate数据库
impdp中remap_datafile的测试。
remap_datafile目前我的理解是一定是用在全库导出和全库导入这个操作上,因为只有全库导出才导出create tablespace的语法,而导入时需要重新创建表空间,这样的就需要通过remap_datafile来重新map表空间的datafile的位置。我测试的是把orcl这个库全库导出然后full导入到test这个库中。之所以要记录一下,是因为好长时间自己理解不了doc上对remap_datafile的解释[@more@]导出script比较简单,就不写了,导入如下:C:>impdp 'sys/system@test as sysdba' directory=expdp_dir dumpfile=full.dmp full=y logfile=full_imp4.txt parfile='c
scn_to_timestamp以及timestamp_to_scn的相互转化!
这两个函数相互转化时有时候经常控制不好时间的格式,写个简单的例子被查。[@more@]C:>sqlplus sys/system@orcl_d as sysdbaSQL*Plus: Release 10.2.0.1.0 - Production on 星期二 3月 10 09:08:11 2009Copyright (c) 1982, 2005, Oracle. All rights reserved.连接到:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProductionWith the Partitioning, OLAP and Data Mining optionsSQL> select current_scn from v$database;CURRENT_SCN----------- 2608762SQL> select scn_to_timestamp(2608762) from dual
Oracle10g EM使用中的主机身份证明问题!
困扰过很久的一个问题,看到网上别人的回答解决了,记录一下。[@more@]http://www.itpub.net/thread-333740-1-1.html
undo的一点内部机理!
--其实主要介绍了undo中的2条单向链表,明白了这2条链,有助于我们更深入的研究undo...[@more@]--创建一个测试表tt,注意按照object_id事先排序了SQL> create table tt tablespace users as select * from dba_objects order by object_id;表已创建。--查询一下object_id的最大值和最小值后面分析会用到SQL> select min(object_id),max(object_id) from tt;MIN(OBJECT_ID) MAX(OBJECT_ID)-------------- -------------- 2 10327SQL> update tt set object_id=1;已更新9882行。--查看事务使用undo的情况SQL&
IBM串口线序以及串口线的做法(转)
http://os.cnfan.net/ibm_aix/1959.html临时记录一下![@more@]http://os.cnfan.net/ibm_aix/1959.html
有关介绍redo的几篇不错的文章!
http://www.ixora.com.au/notes/redo_latching.htmhttp://www.ixora.com.au/notes/log_buffer_usage.htmhttp://www.ixora.com.au/notes/log_block_size.htm碰到了随手记录一下![@more@]http://www.ixora.com.au/notes/redo_latching.htmhttp://www.ixora.com.au/notes/log_buffer_usage.htmhttp://www.ixora.com.au/notes/log_block_size.htm
external procedure调用的大致测试过程!
很多功能如果直接通过plsql实现可能会很困难,如通信方面的一些功能等,如果要通过C/C++实现的话可能会非常容易,oracle在plsql中支持调用C/C++写的函数。实现过程大致如下:(声明:本人也没有在实际应用中使用过external procedure,下面仅是一个大致的测试过程),有关external procedure的原理以及更详细的了解可以参考oracle doc。[@more@]--在listener中做如下配置[oracle@linuxrac2 admin]$ more listener.ora# LISTENER.ORA.LINUXRAC2PUB Network Configuration File: /opt/oracle/product/9.2.0/network/admin/listener.ora.linu
index desc之后数据在leaf node中是如何存储的!
困扰了很久的问题得以解决,比较兴奋,尽管对我们使用而言可能用处不大![@more@]SQL> create table t(id int ,name varchar2(10)) tablespace users;表已创建。SQL> insert into t values(1,'abc');已创建 1 行。SQL> insert into t values(2,'bcd');已创建 1 行。SQL> insert into t values(3,'cde');已创建 1 行。SQL> insert into t values(123,'test');已创建 1 行。SQL> insert into t values(321,'testabc');已创建 1 行。SQL> commit;提交完成。SQL> create index idx_t_id on t(id desc);索引已创建。SQ
基于函数index的一点简单测试!
基于函数index的一点简单测试![@more@]SQL> create table tt as select *from t;表已创建。SQL> select *from tt; ID NAME---------- ---------- 1 abc 2 bcd 3 cde 123 test 321 testabcSQL> insert into tt values(null,null);已创建 1 行。SQL> insert into tt values(null,null);已创建 1 行。SQL> commit;提交完成。SQL> create index idx_tt_id on tt(id desc);索引已创建。--================================Ascending unique indexes allow multiple NULL values
avg_space of dba_tables是如何被计算出来的!
困扰自己很久的问题终于解决了,以前有个误区,以为这个值是指hwm以下blocks的avg space![@more@]其实没啥用途,只是以前一直是我心中的疑问,突然解惑,总结一下,分享!--=================================有关这个字段先看看doc上的解释:AVG_SPACE* NUMBER Average amount of free space, in bytes, [b][color=Red]in a data block allocated to the table [/color][/b]--=================================另外我心中有一个疑问:一个block是被使用过还是从未被使用过oracle是根据block上的啥标记来判断的?itl?该疑问与本贴内容
对象前面是用户名还是schema名!
我们通常访问其他用户下的对象时如果不创建同义词通常需要在被访问的对象前面加上这个对象的所有者(owner),那么这个所有者是对象的用户名还是schema?通过下面测试自己觉得应该是schema名![@more@]SQL> connect b/b已连接。SQL> select user#,username,schema#,schemaname from v$session where sid=(select sid from v$mystat where rownum=1); USER# USERNAME SCHEMA# SCHEMANAME---------- ---------- ---------- ------------------------------ 35 B 35 B--访问a用户下的tt表,事先做过了