ROWID存储结构
今天有人问论坛上有人问data_object_id#+rfile#+block#+row#组成,占用10个bytes的空间32bit的 data_object_id#10 bit 的 rfile#22bit 的 block#16 bit 的 row#我动手实验了一下记录下来select dump(rowid) dump,dbms_rowid.rowid_object(rowid) dno,dbms_rowid.rowid_relative_fno(rowid) fno,dbms_rowid.rowid_block_number(rowid) bno,dbms_rowid.rowid_row_number(rowid) rno from test2;DUMP DNO FNO BNO RNO---------------------------------------- ----------
NOTE: cannot fetch plan for SQL_ID错误解决
今天使用select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));总是报NOTE: cannot fetch plan for SQL_ID: 9babjv8yq8ru3, CHILD_NUMBER: 1Please verify value of SQL_ID and CHILD_NUMBER;It could also be that the plan is no longer in cursor cache (check v$sql_plan)这个错误最终的网上找到解决办法The error is due to the SQL*Plus environment variable SERVEROUTPUT is turned on. One of the Prerequisites for running the package is to turn off SERVEROUTPUT.set serveroutput off[@more@]
关于用户角色切换的问题(default role的用法)
首先创建2个角色,一个是有口令的,一个是没有口令的create role test_role identified by test;create role test_role1;把一下的对象权限和角色,分别赋予这两个用户,test_role有insert的权限,test_role1只有select的权限grant insert on dz.test to test_role;grant select on dz.test to test_role1;grant connect,resource to test_role;grant connect,resource to test_role1;下面创建一个用户 testcreate user test identified by testgrant test_role,test_role to test;设置用户test的缺省的角色是test_role1,alter user role_
manual segment space management(文档的验证)
Oracle maintains one or more free lists—lists of data blocks that have been allocated for that segment’s extents and have free space greater than PCTFREE. These blocks are available for inserts. When you issue an INSERT statement, Oracle checks a free list of the table for the first available data block and uses it if possible. If the free space in that block is not large enough to accommodate the INSERT statement, and the block is at least PCTUSED, then Oracle takes the block off the free lis
Linux下关于连接进程问题(根据tom书上的理论)
1. 1.Dedicated server(专有服务器模式)远程连接(local=yes):客户请求连接监听器(Listener),监听器进程为我们创建了一个专用服务器,专用服务器进程继承了监听建立的连接。怎么论证这个问题没有想出来办法。因为在远程连接的时候专用服务器进程的父进程总是显示1。以后慢慢研究。本地连接(local=no):客户进程自己来创建。>select a.spid dedicated_server,b.process clientpid from v$process a , v$session b where a.addr = b.paddr and b.sid = (select sid from v$mystat where rownum=1);Dedicated server Clientpid-
关于rowid的试验(根据网上的资料自己做的试验记录下来,方便以后查询)
> select * from t;KEY NAME---------- ----------1 boobooke2 boobooke3 boobooke>select rowid,dbms_rowid.rowid_object(rowid) ono,dbms_rowid.rowid_relative_fno(rowid) fno,dbms_rowid.rowid_block_number(rowid) bno,dbms_rowid.rowid_row_number(rowid) rno,key,name from t;ROWID ONO FNO BNO RNO KEY NAME---------------------------------------- ---------- ---------- ---------- ----------- ----------- ----------AAANYeAAEAAAAGIAAA 54814 4 392 0
Linux下系统启动时oracle自动启动
今天想做Linux下系统启动时oracle自动启动在网上找了一下自己做了一下试验成功了,记录下来。1 在oracle用户下编辑一个新脚本 vi $ORACLE_HOME/dbstart.sh 内容如下# set environment variableexport ORACLE_BASE=/u01export ORACLE_HOME=$ORACLE_BASE/oracleexprot ORACLE_SID=wilson#start oracle listener$ORACLE_HOME/bin/lsnrctl start#start oracle database$ORACLE_HOME/bin/sqlplus / as sysdba << eofstartupexiteof2 chmod +x $ORACLE_HOME/dbstart.sh 给这个脚本加上执行权限。3 在root用户下编辑文件 vi /etc/rc.local
关于在Linux下sqlplus、rman中的日期格式
在redhat上的oracle10gR2,今天在rman、sqlplus中想将日期格式设置成‘yyyy/mm/dd hh24:mi:ss’ 1.在sqlplus中执行alter system set nls_date_format='yyyy/mm/dd hh24:mi:ss' scope=spfile;重新启动oracle后发现在sqlplus的日期变成了‘yyyy/mm/dd hh24:mi:ss’格式。进入rman,看list backupset的日期还是默认的‘yyyy/mm/dd ’这种格式。2.在.bash_profile中添加环境变量 NLS_DATE_FORMAT='yyyy/mm/dd hh24:mi:ss' export NLS_DATE_FORMAT 后,执行了这个脚本. ./.bash_profile或切换一下当前用户,保证这个脚本被执行。回到rman中发现日