久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Oracle中相對文件號(RFN)和絕對文件號(AFN)的示例分析

205次閱讀
沒有評論

共計 7643 個字符,預計需要花費 20 分鐘才能閱讀完成。

Oracle 中相對文件號(RFN)和絕對文件號(AFN)的示例分析,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

大家都知道從 Oracle8 開始,Oracle 開始使用“相對文件號”,使原來一個數據庫最多只能有 1023 個文件,擴展為一個表空間最多可以有 1023 個文件,每個庫最多可以有 65534 個文件。

絕對文件號相對于整個數據庫是唯一的,每個庫最多可以有 65534 個文件。

相對文件號則相對于表空間是唯一的,就是說每個表空間都有自己的相對文件號,每個表空間的最大文件數為 1023,相對文件號對于整個數據庫來說是不唯一的;

查詢:
SQL select TS#,FILE#,name from v$datafile order by 1,2;

  TS#  FILE# NAME
———- ———- ————————————————————
  0  1 /u01/app/oracle/oradata/DBdb/system01.dbf
  1  2 /u01/app/oracle/oradata/DBdb/sysaux01.dbf
  2  3 /u01/app/oracle/oradata/DBdb/undotbs01.dbf
  4  4 /u01/app/oracle/oradata/DBdb/users01.dbf
  4  7 /u01/app/oracle/oradata/DBdb/users02.dbf
  4  9 /u01/app/oracle/oradata/DBdb/users03.dbf
  6  5 /u01/app/oracle/oradata/DBdb/example01.dbf
  7  6 /u01/app/oracle/oradata/DBdb/test.dbf
  7  8 /u01/app/oracle/oradata/DBdb/test02.DBF

9 rows selected.
查詢 v$datafile 此視圖缺少 tmp 臨時表空間信息,同時包含出 tmp 臨時表空間之外的所有表空間下的所有數據文件

SQL select TS#,FILE#,NAME,BYTES/1024/1024 size_m from v$tempfile;

  TS#  FILE# NAME  SIZE_M
———- ———- ———————————————————— ———-
  3  1 /u01/app/oracle/oradata/DBdb/temp01.dbf  179

file# 絕對文件號

SQL select TS#,NAME,BIGFILE from v$tablespace order by 1;

  TS# NAME  BIG
———- ———————————————————— —
  0 SYSTEM  NO
  1 SYSAUX  NO
  2 UNDOTBS1  NO
  3 TEMP  NO
  4 USERS  NO
  6 EXAMPLE  NO
  7 TEST  NO

7 rows selected.

SQL select TABLESPACE_NAME,FILE_ID,FILE_NAME,BYTES/1024/1024 size_m,STATUS from dba_data_files order by 2;

TABLESPACE_NAME  FILE_ID FILE_NAME  SIZE_M STATUS
—————————— ———- ———————————————————— ———- ———
SYSTEM  1 /u01/app/oracle/oradata/DBdb/system01.dbf  2800 AVAILABLE
SYSAUX  2 /u01/app/oracle/oradata/DBdb/sysaux01.dbf  720 AVAILABLE
UNDOTBS1  3 /u01/app/oracle/oradata/DBdb/undotbs01.dbf  2585 AVAILABLE
USERS  4 /u01/app/oracle/oradata/DBdb/users01.dbf  3058.75 AVAILABLE
EXAMPLE  5 /u01/app/oracle/oradata/DBdb/example01.dbf  338.75 AVAILABLE
TEST  6 /u01/app/oracle/oradata/DBdb/test.dbf  10 AVAILABLE
USERS  7 /u01/app/oracle/oradata/DBdb/users02.dbf  10 AVAILABLE
TEST  8 /u01/app/oracle/oradata/DBdb/test02.DBF  10 AVAILABLE
USERS  9 /u01/app/oracle/oradata/DBdb/users03.dbf  10 AVAILABLE

9 rows selected.

查詢得包含表空間下的所有數據文件

SQL select TABLESPACE_NAME,STATUS,CONTENTS,FORCE_LOGGING,EXTENT_MANAGEMENT,SEGMENT_SPACE_MANAGEMENT,ALLOCATION_TYPE,RETENTION,BIGFILE from dba_tablespaces;

TABLESPACE_NAME  STATUS  CONTENTS  FOR EXTENT_MAN SEGMEN ALLOCATIO RETENTION  BIG
—————————— ——— ——— — ———- —— ——— ———– —
SYSTEM  ONLINE  PERMANENT NO  LOCAL  MANUAL SYSTEM  NOT APPLY  NO
SYSAUX  ONLINE  PERMANENT NO  LOCAL  AUTO  SYSTEM  NOT APPLY  NO
UNDOTBS1  ONLINE  UNDO  NO  LOCAL  MANUAL SYSTEM  NOGUARANTEE NO
TEMP  ONLINE  TEMPORARY NO  LOCAL  MANUAL UNIFORM  NOT APPLY  NO
USERS  ONLINE  PERMANENT NO  LOCAL  AUTO  SYSTEM  NOT APPLY  NO
EXAMPLE  ONLINE  PERMANENT NO  LOCAL  AUTO  SYSTEM  NOT APPLY  NO
TEST  ONLINE  PERMANENT NO  LOCAL  AUTO  SYSTEM  NOT APPLY  NO

7 rows selected.

實驗開始:

SQL create tablespace test_mf datafile /u01/app/oracle/oradata/DBdb/m1.dbf size 100k reuse;

Tablespace created.

SQL alter tablespace test_mf add datafile /u01/app/oracle/oradata/DBdb/m2.dbf size 88k;

Tablespace altered.

SQL show parameter db_files

NAME  TYPE  VALUE
———————————— ———– ——————————
db_files  integer  2000
SQL  
SQL begin
  for i in 3..1025 loop
  execute immediate alter tablespace test_mf add datafile /u01/app/oracle/oradata/DBdb/m_ || i || size 88k
  end loop;
  end;
  /
 
 begin
*
ERROR at line 1:
ORA-01686: max # files (1023) reached for the tablespace TEST_MF
ORA-06512: at line 3

SQL select count(*) from dba_data_files where tablespace_name= TEST_MF

  COUNT(*)
———-
  1023

可以看到表空間 TEST_MF 的文件數為 1023 個,最多也只能為 1023 個。

SQL   select count(*) from dba_data_files where tablespace_name= TEST_MF

  COUNT(*)
———-
  1023

SQL   select ts# from v$tablespace where name= TEST_MF

  TS#
———-
  9

– 查詢表空間 test_mf 的相對文件號、絕對文件號:
select file_id,relative_fno,TABLESPACE_NAME,FILE_NAME from dba_data_files where tablespace_name= TEST_MF

或者

select file#,rfile#,name from v$datafile where ts#=9;

SQL select file#,rfile#,name from v$datafile where ts#=9;

  FILE#  RFILE# NAME
———- ———- ————————————————————
  10  10 /u01/app/oracle/oradata/DBdb/m1.dbf
  11  11 /u01/app/oracle/oradata/DBdb/m2.dbf
  12  12 /u01/app/oracle/oradata/DBdb/m_3
  13  13 /u01/app/oracle/oradata/DBdb/m_4
  14  14 /u01/app/oracle/oradata/DBdb/m_5
  15  15 /u01/app/oracle/oradata/DBdb/m_6
  16  16 /u01/app/oracle/oradata/DBdb/m_7
  17  17 /u01/app/oracle/oradata/DBdb/m_8
  18  18 /u01/app/oracle/oradata/DBdb/m_9
省略 …………………………………………………………..
  FILE#  RFILE# NAME
———- ———- ————————————————————
  1011  1011 /u01/app/oracle/oradata/DBdb/m_1002
  1012  1012 /u01/app/oracle/oradata/DBdb/m_1003
  1013  1013 /u01/app/oracle/oradata/DBdb/m_1004
  1014  1014 /u01/app/oracle/oradata/DBdb/m_1005
  1015  1015 /u01/app/oracle/oradata/DBdb/m_1006
  1016  1016 /u01/app/oracle/oradata/DBdb/m_1007
  1017  1017 /u01/app/oracle/oradata/DBdb/m_1008
  1018  1018 /u01/app/oracle/oradata/DBdb/m_1009
  1019  1019 /u01/app/oracle/oradata/DBdb/m_1010
  1020  1020 /u01/app/oracle/oradata/DBdb/m_1011
  1021  1021 /u01/app/oracle/oradata/DBdb/m_1012

  FILE#  RFILE# NAME
———- ———- ————————————————————
  1022  1022 /u01/app/oracle/oradata/DBdb/m_1013
  1023  1023 /u01/app/oracle/oradata/DBdb/m_1014
  1024  1 /u01/app/oracle/oradata/DBdb/m_1015
  1025  2 /u01/app/oracle/oradata/DBdb/m_1016
  1026  3 /u01/app/oracle/oradata/DBdb/m_1017
  1027  4 /u01/app/oracle/oradata/DBdb/m_1018
  1028  5 /u01/app/oracle/oradata/DBdb/m_1019
  1029  6 /u01/app/oracle/oradata/DBdb/m_1020
  1030  7 /u01/app/oracle/oradata/DBdb/m_1021
  1031  8 /u01/app/oracle/oradata/DBdb/m_1022
  1032  9 /u01/app/oracle/oradata/DBdb/m_1023

1023 rows selected.

SQL    

從上面的數據可以看出,當絕對文件號小于等于 1023,相對文件號與絕對文件號一樣。相對文件號大于 1023 之后,又從 1 開始循環。

SQL create tablespace test_lf datafile /u01/app/oracle/oradata/DBdb/TEST_LF.dbf size 1m;

Tablespace created.

SQL select ts# from v$tablespace where name= TEST_LF

  TS#
———-
  10

SQL select file#,rfile#,name from v$datafile where ts#=10;

  FILE#  RFILE# NAME
———- ———- ————————————————————
  1033  10 /u01/app/oracle/oradata/DBdb/TEST_LF.dbf

從上面的數據可以看出,一個表空間的數據文件,其相對文件號并不是從 1 開始的,而依然是從上一個用過的最后一個相對文件號繼續,及 file#號從上面的 1032 增加到 1033,而 RFILE# 從 9 增加到 10。

– 接著增加新表空間 ORA
SQL create tablespace ORA datafile /u01/app/oracle/oradata/DBdb/ora.dbf size 1m;

Tablespace created.

SQL
SQL alter tablespace ORA  add datafile /u01/app/oracle/oradata/DBdb/ora02.dbf size 1m;

Tablespace altered.

SQL select file_id,relative_fno,TABLESPACE_NAME,FILE_NAME from dba_data_files where tablespace_name= ORA    

  FILE_ID RELATIVE_FNO TABLESPACE_NAME  FILE_NAME
———- ———— —————————— ————————————————————
  1034  11 ORA  /u01/app/oracle/oradata/DBdb/ora.dbf
  1035  12 ORA  /u01/app/oracle/oradata/DBdb/ora02.dbf

從上查詢得,FILE_ID 絕對文件號以創建表空間或給表空間添加數據文件的形式遞進增加,而 RELATIVE_FNO(rfile#) 相對文件號相對于表空間而言,一個表空間的數據文件熟練小于等于 1023 個。

– 接著查詢
SQL select OBJ#,OWNER# from obj$ where name= EMP

  OBJ#  OWNER#
———- ———-
  87108  83

SQL select object_id from dba_objects where OWNER= SCOTT and object_name= EMP and object_type= TABLE

 OBJECT_ID
———-
  87108

SQL select obj#,dataobj#,ts#,file# from tab$ where obj#=87108;

  OBJ#  DATAOBJ#  TS#  FILE#
———- ———- ———- ———-
  87108  87108  4  4

SQL select SEGMENT_NAME,HEADER_FILE,HEADER_BLOCK,RELATIVE_FNO,TABLESPACE_NAME from dba_segments where SEGMENT_NAME= EMP and SEGMENT_TYPE= TABLE

SEGMENT_NAME  HEADER_FILE HEADER_BLOCK RELATIVE_FNO TABLESPACE_NAME
————— ———– ———— ———— ——————————
EMP  4  146  4 USERS

在 DBA_SEGMENTS 視圖里面,可以查到段頭的相對文件號和絕對文件號。(這個視圖最終是從 file$、seg$ 等字典表里面取得數據)

看完上述內容,你們掌握 Oracle 中相對文件號(RFN)和絕對文件號(AFN)的示例分析的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-18發表,共計7643字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 札达县| 嫩江县| 双峰县| 毕节市| 上蔡县| 遂溪县| 黔西县| 上杭县| 柘荣县| 元阳县| 黔西县| 西昌市| 宁南县| 龙里县| 团风县| 银川市| 靖远县| 兴化市| 阿瓦提县| 上思县| 北票市| 雷波县| 阿拉善右旗| 甘肃省| 驻马店市| 沛县| 蒲江县| 德安县| 梁平县| 麻城市| 十堰市| 保定市| 玛多县| 榆林市| 双峰县| 通辽市| 景东| 潞城市| 策勒县| 通辽市| 蚌埠市|