有关lock的一点测试总结!
理解oracle lock的概念,有助于理解多用户的并发执行。[@more@]测试过程1:--===========================================================================1.测试表t是一个存在200w左右数据的大表,数据完全来自dba_objectssession1:22:52:28 SQL> select count(object_id) from t;COUNT(OBJECT_ID)---------------- 2019072已用时间: 00: 00: 01.2022:21:46 SQL> create index idx_t on t(object_id);执行上面create index语句,保证能持续一段时间,以便在session2,3,4中进行其他操作session:检测在t上都加了什么类型的
权限传递的一点测试!
记得在北京讲课时曾经有学员问到过这个问题,当时没有详细测试,前几天看到pub上又有人提及这类问题,简单的测试了一下,还发现了一些问题。传递出去的对象权限可以cascade回收,而传递出去的系统权限却没有cascade回收![@more@]1.对象权限传递测试C:>sqlplus xys/managerSQL*Plus: Release 11.1.0.6.0 - Production on 星期一 4月 7 22:55:01 2008Copyright (c) 1982, 2007, Oracle. All rights reserved.连接到:Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - ProductionWith the Partitioning, OLAP, Data Mining a
active session的准确定义!
什么是 active session ![@more@]An active session is defined as a session that is currently inside a transaction, a query, a fetch or a PL/SQL procedure, or a session that is currently holding any shared resources (for example, enqueues--enqueues are shared memory structures that serialize access to database resources and are associated with a session or transaction)
ORA-04031错误模拟!
不使用绑定变量,而open_cursors又开的很大,很容易导致ORA-04031错误![@more@]SQL> connect xys/manager已连接。SQL> desc t名称 是否为空? 类型----------------------------------------- -------- ----------------------------OBJECT_ID NUMBEROBJECT_NAME VARCHAR2(128)SQL> select count(*) from t;COUNT(*)----------11457SQL> show parameter sgaNAME TYPE VALUE------------------------------------ ----------- ------------------------------lock_sga boolean FALSEpre_page_sga boolean FALSEsga_max_size big
使用绑定变量的一点总结!
在oltp系统中提倡使用绑定变量,使用绑定变量可以减少hard parse,避免因解析sql而过渡消耗cpu时间以及引起latch争用等一系列问题。那么到底如何使用绑定变量?可能是困扰很多人的一个问题,下面列举了一些使用绑定变量的例子或者是场合[@more@]1.sqlplus中如何使用绑定变量,可以通过variable来定义SQL> select * from tt where id=1;ID NAME---------- ----------------------------------------1 testSQL> select * from tt where id=2;ID NAME---------- ----------------------------------------2 testSQL> variable i num
如何获得server端和client端ip address和host name!
如何获得server端和client端ip address和host name![@more@]--可以通过系统提供的utl_inaddr包中的2个函数获得数据库服务器的主机名和ip地址SQL> set serveroutput onSQL> exec dbms_output.put_line(utl_inaddr.get_host_name);XYSPL/SQL 过程已成功完成。SQL> exec dbms_output.put_line(utl_inaddr.get_host_address);192.168.0.252PL/SQL 过程已成功完成。----可以通过系统提供的函数获得client端主机名和ip地址,获得client端ip地址时需要注意连接数据库时必须通过tns连接才能获得ip地址,否则不能获得SQL> select sys_
远程调用procedure可能会有一些缺陷!
看到pub上有人问如何远程调用过程,其实大部分人都会想到通过db link事实上也确实如此,不过我相信实际在使用的时候可能没有多少人这样用而是通常会使用另外的办法[@more@]测试过程:1.首先连上库db11查看并测试了事先创建好的proc_testC:>sqlplus xys/managerSQL*Plus: Release 11.1.0.6.0 - Production on 星期三 4月 2 14:06:59 2008Copyright (c) 1982, 2007, Oracle. All rights reserved.连接到:Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - ProductionWith the Partitioning, OLAP, Data Mining and Real Appl
DATA BLOCK内部结构图
DATA BLOCK内部结构图一张不错的图,不过看起来有些累[@more@]DATA BLOCK内部结构图http://www.itpub.net/thread-955844-1-1.html
sqlplus中define定义的常量和variable定义的变量的区别!
前两天看到有人在pub上问在sqlplus中通过define和variable定义的变量的区别。其实define定义的我理解不是变量而是字符常量,通过define定义之后,在通过&或者&&引用的时候不需要输入了,仅此而已。oracle在执行的时候自动用值进行了替换;而variable定义的是绑定变量。[@more@]C:>sqlplus xys/managerSQL*Plus: Release 11.1.0.6.0 - Production on 星期二 4月 1 14:03:00 2008Copyright (c) 1982, 2007, Oracle. All rights reserved.连接到:Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - ProductionWith
口令中含@的问题!
当口令中包含@时不能通过sqlplus username/"password"连上数据库,但是可以通过sqlplus username(@tns)之后再输入password(切记password用双引号扩起来)正常连接数据库;也可以先进入sqlplus环境:sqlplus /nolog之后再connect username/"password"@tns连接数据库![@more@]SQL> create user test identified by "test@123";用户已创建。SQL> grant dba to test;授权成功。SQL> exit从 Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - ProductionWith the Partitioning, OLAP, Data
constraint=constraints?
偶然发现在为字段增加约束时使用constraint或者constraints都可以创建成功,查看oracle语法发现是constraint,不知道是否是bug?[@more@]SQL> create table t(id int primary key);表已创建。SQL> create table tt(id int);表已创建。SQL> alter table tt add constraint fk_tt foreign key (id) references t(id);表已更改。SQL> alter table tt drop constraint fk_tt;表已更改。SQL> alter table tt add constraints fk_tt foreign key (id) references t(id);表已更改。SQL>
oracle把''当null来对待!
使用sql server和sybase时记得''表示空字符串,但是在oracle中却发现没有空字符串一说,oracle把''当null来对待![@more@]C:>sqlplus /nologSQL*Plus: Release 11.1.0.6.0 - Production on 星期二 3月 25 21:08:19 2008Copyright (c) 1982, 2007, Oracle. All rights reserved.SQL> connect / as sysdba已连接。SQL> create table t(id int , name varchar2(10));表已创建。SQL> insert into t values(1 , '');已创建 1 行。SQL> commit;提交完成。SQL> select * from t where name='';未选定行SQL> select * from t
rman中的catalog命令!
之前并不清楚catalog命令的意思,直到去年考ocp时有到题目提到catalog命令,题意已经记不清楚了,当然答案也是懵的。网上无意中看到了ninoo的总结,转过来记录一下![@more@]http://www.ningoo.net/html/2007/oracle10g_rman_catalog_command.html
merge用法测试随手记!
matched之后的delete语法是10g之后才有的,使用起来更加灵活方便了;而且10g中还增加了where子句可以控制条件[@more@]测试1:SQL> create table t(id int , name varchar2(10));表已创建。SQL> insert into t(id) values(1);已创建 1 行。SQL> insert into t(id) values(2);已创建 1 行。SQL> insert into t(id) values(3);已创建 1 行。SQL> insert into t values(8,'h');已创建 1 行。SQL> insert into t values(null,'m');已创建 1 行。SQL> commit;提交完成。SQL> create table tt(id int , name varchar2(10
resumable特性以及系统触发器中的SUSPEND event测试!
之前一直没有搞清楚系统触发器中的suspend事件什么时候触发,正好看到一位puber问此问题,搜索一下doc,做了一个简单的测试。[@more@]参考doc:http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/schema.htm#sthref2075session1:SQL> create tablespace users datafile 'E:ORACLEPRODUCT10.2.0ORADATAORCLUSERS.DBF' SIZE 3M;表空间已创建。SQL> grant resumable to xys;授权成功。SQL> create or replace trigger trigg_system 2 after suspend on database 3 begin 4 dbms_resumable.set_timeout(10)
Oracle如何精确计算row的大小
http://9host.cn/oracle/200742218395312855.html转[@more@]第一步:计算整个Block Header的大小 数据块头部所需要的空间大小由以下公式计算: Space after headers (hsize) = DB_BLOCK_SIZE - KCBH - UB4 - KTBBH - ((INITRANS - 1) * KTBIT) - KDBH 其中的一些参数说明如下: DB_BLOCK_SIZE:数据库的block大小,可以查询V$PARAMETER视图中获得。 KCBH、UB4、KTBBH、KTBIT、KDBH都是常量,这些定义的大小可以从V$TYPE_SIZE视图中获得。 INITRANS是分配给表的初始化事务的数量,可以从
user和schema的区别
这两个概念确实不太好理解说穿了其实user是控制权限的,而schema是个容器,非所有者要访问这个容器下的对象就需要在对象前面写上schema(owner)的名字,如果不想写而又没有创建synonym,此时可以通过alter session set current_schema=schema_name来改变当前session的schema从而在访问对象时省去schema(owner);最终能否访问对象还是要看是否有访问这个对象的权限而和schema无关。[@more@]user和schema的区别:说穿了其实user是控制权限的,而schema是个容器,非所有者要访问这个容器下的对象就需要在对象前面写上schema(owner)的名字
Oracle 的管道化表函数(Pipelined Table) 转
http://wxy0327.itpub.net/post/16888/195142转[@more@]http://wxy0327.itpub.net/post/16888/195142
cursor express的一点测试!
http://download.oracle.com/docs/cd/B10501_01/server.920/a96540/expressions6a.htm#1033378[@more@]SQL> create table t(id int , name varchar2(10) , salary number(10,2));表已创建。SQL> insert into t values(1 , 'a' , 1000);已创建 1 行。SQL> insert into t values(2 , 'b' , 2000);已创建 1 行。SQL> insert into t values(3 , 'c' , 3000) 2 ;已创建 1 行。SQL> commit;提交完成。--利用sys_refcursor定义的输入ref cursor变量定义一个函数处理结果集之后才返回想要的结果SQL> create or replace functi
sys_refcursor以及cursor express的一点测试!
通过sys_refcursor可以实现procedure直接返回结果集不必通过package[@more@]SQL> create table ttt(id int , name varchar2(10));表已创建。SQL> insert into ttt values(1,'a');已创建 1 行。SQL> insert into ttt values(2,'b');已创建 1 行。SQL> commit;提交完成。SQL>create or replace procedure getmult(result out sys_refcursor) 2 is 3 begin 4 open result for select * from ttt; 5* end;SQL> /过程已创建。SQL> variable a refcursorSQL> exec getmult(:a);PL/SQL 过程已成功完成。SQL> p