【11g体系结构,5】rowid,11g体系结构rowid
一.rowid
扩展的rowid 使用以64为基数的编码方案来显示。 rowid简单理解为数据的身份证号,总共18位,6位对象号,3为文件号,6位块号,3位行号。 rowid前15位表示块地址,前15位相同的数据在同一个块中。
#查询EMProwid SQL> select rowid from scott.emp;
ROWID ------------------ AAACgBAAEAAAAAdAAA AAACgBAAEAAAAAdAAB AAACgBAAEAAAAAdAAC AAACgBAAEAAAAAdAAD AAACgBAAEAAAAAdAAE AAACgBAAEAAAAAdAAF AAACgBAAEAAAAAdAAG AAACgBAAEAAAAAdAAH AAACgBAAEAAAAAdAAI AAACgBAAEAAAAAdAAJ AAACgBAAEAAAAAdAAK
ROWID ------------------ AAACgBAAEAAAAAdAAL AAACgBAAEAAAAAdAAM AAACgBAAEAAAAAdAAN
14 rows selected.
#查询对象id SQL> select object_id,object_name,object_type from dba_objects where owner='SCOTT';
OBJECT_ID OBJECT_NAM OBJECT_TYP ---------- ---------- ---------- 10239 DEPT TABLE 10240 PK_DEPT INDEX 10241 EMP TABLE 10242 PK_EMP INDEX 10243 BONUS TABLE 10244 SALGRADE TABLE
6 rows selected.
#获取对象号 SQL> select dbms_rowid.rowid_object('AAACgBAAEAAAAAdAAG') from dual;
DBMS_ROWID.ROWID_OBJECT('AAACGBAAEAAAAADAAG') --------------------------------------------- 10241
#文件号 SQL> select dbms_rowid.rowid_relative_fno('AAACgBAAEAAAAAdAAG') from dual;
DBMS_ROWID.ROWID_RELATIVE_FNO('AAACGBAAEAAAAADAAG') --------------------------------------------------- 4 #块号 SQL> select dbms_rowid.rowid_block_number('AAACgBAAEAAAAAdAAG') from dual;
DBMS_ROWID.ROWID_BLOCK_NUMBER('AAACGBAAEAAAAADAAG') --------------------------------------------------- 29 #行号,第7条记录 SQL> select dbms_rowid.rowid_row_number('AAACgBAAEAAAAAdAAG') from dual;
DBMS_ROWID.ROWID_ROW_NUMBER('AAACGBAAEAAAAADAAG') ------------------------------------------------- 6 #查询区的信息, emp表现在拥有8个块,block_id 是25~32. SQL> col segment_name for a10 SQL> select extent_id,segment_name,bytes/1024 k,blocks,file_id,block_id from dba_extents where owner='SCOTT';
EXTENT_ID SEGMENT_NA K BLOCKS FILE_ID BLOCK_ID ---------- ---------- ---------- ---------- ---------- ---------- 0 DEPT 64 8 4 9 0 EMP 64 8 4 25 0 BONUS 64 8 4 41 0 SALGRADE 64 8 4 49 0 PK_DEPT 64 8 4 17 0 PK_EMP 64 8 4 33
6 rows selected.
二.一个数据块能存放多少条数据和1g空间能存放多少条数据:
三.OFA:最优灵活体系架构
ofa:是指oracle软件和数据库文件集文件夹的命名约定和存储位置规则。$ORACLE_BASE 为:/u01/app/oracle $oracle_home为:/u01/app/oracle/11.2.0/db_home_1 $ORACLE_BASE/ /oradata 数据文件 /product 软件地址 /admin 放置dump 文件
$oracle_home /dbs 初始化文件(参数文件,密码文件) /network/admin 配置监听
四:instance_name,sid ,db_name,global_name的关系
1.sid是操作系统用来表示实例的编号,可以理解为instance的操作系统编号,所以sid和instance_name一一对应。 select instance_name from v$instance 中存储的就是sid 2.但是instance_name 和db_name是有区别的: rac环境下db_name为racdb,但实例名可能是racdb1和dacdb2 3.global_name 就是db_name.db_domain,global_name是为了在由多个数据库组成的分布式数据库中标识数据库名称而设立的。SQL> select * from global_name; GLOBAL_NAME -------------- LOSCSMAN
SQL> select instance_name from v$instance;
INSTANCE_NAME -------------------------------- loscsmanager
SQL> show parameter db_name;
NAME TYPE VALUE ------------------------------------ ---------------------- ------------------------------ db_name string loscsman
rownum和rowid是两种不同的东西,不知道你如何利用rowid来分页?
rownum是返回的记录编号。rowid可理解为返回记录的实际地址。
当根据rowid访问时相当于不经查询直接取数,用rownum必须经过查询(即数据库里有查询动作)。如果已经知道了rowid再去获取数据和通过rownum计数去获取数据,肯定用rowid快。
实际上,由于oracle不支持的真正的分页查询,所谓分页,是先把数据从数据库中查询出来,然后再把对应页的数据返回给调用者,剩余的数据扔掉了。所以,这种情况下,注定用rowid不如用rownum快。
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。