Oracle 表空間和資料檔案遇到的坑 (轉載於 微信公眾號 JieKeXu DBA之路)

BlackData發表於2024-03-04

轉載連結https://mp.weixin.qq.com/s/IKF_KrWkxZ5BJS-OacYWUw

前言

本文適用於普通的標準的 8k 塊大小的 Oracle 企業版資料庫,10g、11g、19c 均可適用,但對於 ODA,一體機可能有所區別,請慎重使用

1.db_files 的坑

記錄一下年前遇到的一個關於表空間擴容的小問題,大家都知道對於 Oracle 普通的表空間直接 alter tablespace XX add datafile 新增資料檔案則就可以擴容了。但是當執行此命令時卻報錯了 ORA-00059。

SQL> alter tablespace PROD_DATA add datafile '+DATA' size 30g;
alter tablespace DWD_DATA add datafile '+DATA' size 30g
*
ERROR at line 1:
ORA-00059: maximum number of DB_FILES exceeded
SQL> exit
Disconnected
[oracle@JiekeXu ~]$ oerr ora 58
00058, 00000, "DB_BLOCK_SIZE must be %s to mount this database (not %s)"
// *Cause:  DB_BLOCK_SIZE initialization parameter is wrong for the database
//          being mounted. It does not match the value used to create the
//          database.
// *Action: Fix the value of the DB_BLOCK_SIZE parameter or mount a database
//          that matches the value.
[oracle@JiekeXu ~]$ oerr ora 59
00059, 00000, "maximum number of DB_FILES exceeded"
// *Cause:  The value of the DB_FILES initialization parameter was exceeded.
// *Action: Increase the value of the DB_FILES parameter and warm start.

報錯很明顯,DB_FILES 達到最大值了,oerr 給出的答案也很合理,增加 DB_FILES 的值,然後重啟資料庫。

檢視資料庫 DB_FILES 引數,果然是預設的 200,剛好 dba_data_files 也已經達到了 200 個,所以新增資料檔案時則直接報錯 ORA-00059 了,檢視後臺 alert 日誌報錯一樣。這就實屬被坑了一把,生產環境又不能隨便修改引數重啟,只能申請變更視窗,坑呀。

SQL> show parameter DB_FILES

NAME             TYPE   VALUE
------------------------------------ ----------- ------------------------------
db_files           integer   200
SQL> select count(*) from dba_data_files;

  COUNT(*)
----------
       200


-- 檢視後臺 alert 日誌報錯一樣
2024-02-24T14:11:43.317617+08:00
alter tablespace PROD_DATA add datafile '+DATA' size 30g
2024-02-24T14:12:31.614611+08:00
ORA-59 signalled during: alter tablespace PROD_DATA add datafile '+DATA' size 30g...
DB_FILES 是 Oracle 比較重要的一個引數,當你的資料量不太大的時候(大概 5TB以內,200*30G),這個引數不用修改是沒有問題的,但你不能保證這個庫以後的資料增長量不大於5TB,所以一般在建庫的時候隨著其他核心引數一起調整了,
但這個庫是前人 19年建立的,引數幾乎都是預設值,也由於當時資料量較少的緣故,所以到現在也沒去關注這個引數。
那麼,這個引數應該改為多少才合適呢?對於 RAC+ADG 而言是否可以滾動重啟例項呢?我們來看看官方文件吧。如下圖所示,DB_FILES 的預設值為 200,可以在 PDB 級別修改,最小值則是資料庫中資料檔案的絕對檔案數中最大值,最大值則取決於作業系統。
RAC 例項則需要全部重啟方可生效,如果增加 DB_FILES 的值,則必須關閉並重新啟動所有訪問資料庫的例項,新值才能生效。
如果您有一個主庫和備庫,那麼它們應該具有相同的此引數值。https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/DB_FILES.html#GUID-DD8C2F18-F04D-43F7-A9C3-5EAAAB9E9DEE

考慮將資料檔案新增到表空間時可能存在的限制

將資料檔案新增到表空間時需要考慮一些限制。

  • 您可以將資料檔案新增到傳統的小檔案表空間,但要遵守以下限制:

  • 作業系統通常對程序可以同時開啟的檔案數施加限制。當達到開啟檔案的作業系統限制時,無法建立更多資料檔案。

  • 作業系統對資料檔案的數量和大小施加了限制。

  • 該資料庫對任何例項開啟的任何 Oracle 資料庫的資料檔案數施加了最大限制。此限制是特定於作業系統的。

  • 不能超過超過 DB_FILES 引數指定的資料檔案數。

  • 發出CREATE DATABASE或CREATE CONTROLFILE語句時,MAXDATAFILES引數指定控制檔案的資料檔案部分的初始大小。但是,如果嘗試新增數量大於MAXDATAFILES但小於或等於DB_FILES的新檔案,則控制檔案將自動展開,以便資料檔案部分可以容納更多檔案。

確定 DB_FILES 初始化引數的值

啟動 Oracle Database 例項時,DB_FILES 初始化引數指示要為資料檔案資訊保留的 SGA 空間量,從而指示可以為例項建立的最大資料檔案數。此限制適用於例項的生命週期。您可以更改 DB_FILES 的值(透過更改初始化引數設定),但新值在您關閉並重新啟動例項之前不會生效。

在確定 DB_FILES 的值時,請考慮以下因素:

  • 如果 DB_FILES 的值太低,則在不先關閉資料庫的情況下,無法新增超出限制的資料檔案。

  • 如果 DB_FILES 的值太高,則不必要地消耗記憶體。

由此可見這個引數,主備庫均要修改且重啟生效,RAC 不能滾動重啟,需要全部重啟,ADG 備庫也要修改並重啟生效。那麼這個值既然依賴作業系統,改為多少合適呢?以前運維的系統中有遇到過 1000、2000、4000、5000、8000 大概這幾個值的,那麼本次我們來修改為 100000 試試呢?透過測試在 Linux 虛擬機器下可以看出 DB_FILES 引數最大支援 65534,則同一個庫下資料檔案最多有 65534 個。

SQL> show parameter spfile
SQL> create pfile='/tmp/pfile_20240229.ora' from spfile;
File created.

SQL> show parameter db_files;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_files                             integer     200
SQL> alter system set db_files=100000 scope=spfile;
System altered.
SQL> shu immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORA-01131: DB_FILES system parameter value 100000 exceeds limit of 65534
ORA-01078: failure in processing system parameters

既然已經知道了最大值,那麼生產環境則可以選擇一個適合的值,比如 2000、4000 等,也不能太大,不然和我上面測試一樣,當設定為 65534 時需要 750M 左右的 shared pool 才能啟動成功,設定為 10000 時需要 296M 的 shared pool 才能啟動成功,無奈則設定成 5000 時可以正常啟動。

SQL*Plus: Release 12.2.0.1.0 Production on Fri Mar 1 00:27:51 2024

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to an idle instance.

00:27:52 SYS@JiekeXu> startup pfile='/tmp/pfile_20240229.ora'
ORA-00371: not enough shared pool memory, should be at least 310153892 bytes
00:27:58 SYS@JiekeXu> !vi /tmp/pfile_20240229.ora

00:28:48 SYS@JiekeXu> startup pfile='/tmp/pfile_20240229.ora'
ORACLE instance started.

Total System Global Area 2147483648 bytes
Fixed Size                  8794848 bytes
Variable Size            2080378144 bytes
Database Buffers           50331648 bytes
Redo Buffers                7979008 bytes
Database mounted.
Database opened.
00:29:11 SYS@JiekeXu> show parameter db_files

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_files                             integer     5000
00:29:19 SYS@JiekeXu> 
00:31:06 SYS@JiekeXu> select 781994571/1024/1024/1024 from dual;

781994571/1024/1024/1024
------------------------
              .728289197

Elapsed: 00:00:00.00
00:31:35 SYS@JiekeXu> select 781994571/1024/1024 MB from dual;

        MB
----------
745.768138

Elapsed: 00:00:00.00
00:31:42 SYS@JiekeXu> show parameter sga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
allow_group_access_to_sga            boolean     FALSE
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     TRUE
sga_max_size                         big integer 2G
sga_min_size                         big integer 0
sga_target                           big integer 0
unified_audit_sga_queue_size         integer     1048576
00:31:50 SYS@JiekeXu> 
00:32:14 SYS@JiekeXu> show parameter share

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address             integer     0
max_shared_servers                   integer
shared_memory_address                integer     0
shared_pool_reserved_size            big integer 13421772
shared_pool_size                     big integer 256M
shared_server_sessions               integer
shared_servers                       integer     1
00:32:25 SYS@JiekeXu> select 310153892/1024/1024 MB from dual;

        MB
----------
295.785801

解決生產問題

透過上面的驗證測試我們已經知道了大概,接下來我們則需要對生產環境的引數進行修改和重啟了。如下表空間使用率已經超過 90% 了,需要擴容但是由於 DB_FILES 預設為 200,dba_data_files 也已經達到了 200,所以我忙需要修改此引數為 2048 然後先重啟備庫再同時重啟主庫 RAC。

SQL> SELECT a.tablespace_name,round(total/1024/1024/1024) "Total g",
  2  round(free/1024/1024/1024) "Free g",ROUND((total-free)/total,4)*100 "USED%"
  3  FROM (SELECT tablespace_name,SUM(bytes) free FROM
  4  DBA_FREE_SPACE
  5  GROUP BY tablespace_name ) a,
  6  (SELECT tablespace_name,SUM(bytes) total FROM DBA_DATA_FILES
  7  GROUP BY tablespace_name) b
  8  WHERE a.tablespace_name=b.tablespace_name and ROUND((total-free)/total,4)*100 >= 85
  9  ORDER BY 4;

TABLESPACE_NAME       Total g     Free g    USED%
------------------------------ ---------- ---------- ----------
EW_DATA          334          49    85.21
OS_DATA                2516          261    89.61
DD_DATA                 2195          176    91.98


SQL> alter tablespace DD_DATA add datafile '+DATA' size 30g;
alter tablespace DD_DATA add datafile '+DATA' size 30g
*
ERROR at line 1:
ORA-00059: maximum number of DB_FILES exceeded

SQL> show parameter DB_FILES

NAME             TYPE   VALUE
------------------------------------ ----------- ------------------------------
db_files           integer   200
SQL> select count(*) from dba_data_files;

  COUNT(*)
----------
       200


--後臺 alert 日誌告警資訊

2024-02-24T14:11:43.317617+08:00
alter tablespace DD_DATA add datafile '+DATA' size 30g
2024-02-24T14:12:31.614611+08:00
ORA-59 signalled during: alter tablespace DD_DATA add datafile '+DATA' size 30g...

--檢視應用登入總連線
ps -ef | grep -i local=no | grep -v grep | awk '{print $2}' | wc -l


$ sys 

SQL*Plus: Release 19.0.0.0.0 - Production on Sat Feb 24 14:08:14 2024
Version 19.15.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.15.0.0.0

SQL> 
SQL> alter system set db_files=2048 scope=spfile sid='*';

System altered.

SQL> shu immediate 
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> 
SQL> startup
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.

Total System Global Area 1.6106E+11 bytes
Fixed Size       37218432 bytes
Variable Size     9.3952E+10 bytes
Database Buffers   6.6572E+10 bytes
Redo Buffers      499650560 bytes
Database mounted.
Database opened.

如上啟動例項時報錯 ORA-32004,有過期的引數倒也沒有其他問題,可以忽略正常啟動,也可以去 alert 日誌中查詢 Deprecated 過期的引數將其刪除掉重啟也行,看個人意願了。

============================================
 _serial_direct_read      = "NEVER"
  _optim_peek_user_binds   = FALSE
  pga_aggregate_target     = 30G
  _optimizer_mjc_enabled   = FALSE
  deferred_segment_creation= FALSE
  parallel_force_local     = TRUE
  _optimizer_use_feedback  = FALSE
  _sql_plan_directive_mgmt_control= 0
  _optimizer_ads_use_result_cache= FALSE
  _optimizer_dsdir_usage_control= 0
  optimizer_adaptive_plans = FALSE
  _optimizer_gather_stats_on_load_index= FALSE
  _optimizer_gather_stats_on_conventional_dml= FALSE
  diagnostic_dest          = "/u01/app/oracle"
Deprecated system parameters with specified values:
  cluster_database_instances


SQL> show parameter cluster_database_instances

NAME             TYPE   VALUE
------------------------------------ ----------- ------------------------------
cluster_database_instances       integer   2

SQL> show parameter db_files

NAME             TYPE   VALUE
------------------------------------ ----------- ------------------------------
db_files           integer   2048
SQL>

表空間限制的坑

Oracle 資料庫將表空間中的資料在物理上儲存為資料檔案。

每個非分割槽模式物件和物件的每個分割槽都儲存在它自己的段中,它只屬於一個表空間。例如,非分割槽表的資料儲存在單個段中,最終也儲存在一個表空間中。表空間和資料檔案密切相關, 但又有重要區別:

  • 每個表空間包含一個或多個資料檔案, 這需要遵從執行 Oracle 資料庫的作業系統。

  • 資料庫資料被集中地儲存在位於每個資料庫表空間的資料檔案中。

  • 段可以跨越一個或多個資料檔案,但它不能跨多個表空間。

  • 資料庫必須有 SYSTEM 表空間和 SYSAUX 表空間。Oracle 資料庫自動在資料庫建立過程中為 SYSTEM 表空間分配資料庫的第一個資料檔案。

SYSTEM 表空間包含資料字典,它是包含資料庫後設資料的一組表。通常,資料庫也有一個 UNDO 表空間和臨時表空間 (通常稱為 TEMP)。

大檔案表空間擴容

對於大檔案表空間而言只有一個資料檔案,所以擴容就比較簡單,如果有空閒儲存空間的話,直接 resize 即可。
ALTER TABLESPACE ORCL_DAT RESIZE 11000G;

小檔案表空間擴容

對於小檔案表空間而言有一個或多個資料檔案,如果有空閒儲存空間的話,直接 resize 原有資料檔案到僅小於 32G 即可,也可以直接新增資料檔案。

alter tablespace ORCL_DATA add datafile  '/var/ora_data02/oradata/ORCL/ORCL_DataB_1025.dbf' size 30G;

如下是一個 10g 庫小檔案擴容示例,僅供參考。

1)、查詢資料庫基本資訊和塊大小

SQL*Plus: Release 10.2.0.4.0 - Production on Thu Nov 19 20:42:49 2023

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> set line 345 
 col instance_name for a15 
 col host_name for a30 
 select inst_id,INSTANCE_NAME,HOST_name,status,version,STARTUP_TIME  from gv$instance; 
SQL> SQL> SQL> 
   INST_ID INSTANCE_NAME   HOST_NAME                      STATUS       VERSION           STARTUP_TIME
---------- --------------- ------------------------------ ------------ ----------------- ------------
         1 ORCL             XF0000YX                       OPEN         10.2.0.4.0        06-NOV-21
SQL> show parameter db_block_size 

NAME                                 TYPE                             VALUE
------------------------------------ -------------------------------- ------------------------------
db_block_size                        integer                          8192
2)、檢視錶空間型別(是否為大檔案表空間)
select name,bigfile from v$tablespace where name='&name';

SQL> select name ,bigfile from v$tablespace where name='&name';
Enter value for name: ORCL_DATAB
old   1: select name ,bigfile from v$tablespace where name='&name'
new   1: select name ,bigfile from v$tablespace where name='ORCL_DATAB'

NAME                           BIG
------------------------------ ---
ORCL_DATAB                      NO

Elapsed: 00:00:00.01

3)、檢視資料檔案存放路徑,大小:

SQL> set line 9999 pages 9999
SQL> col file_name for a66
select file_id,tablespace_name,file_name,bytes/1024/1024 mb ,autoextensible from dba_data_files where tablespace_name='ORCL_DATAB' order by tablespace_name desc;

----省略部分顯示,總共 1023 行----
      2042 ORCL_DATAB                    /var/ora_data/oradata/ORCL/ORCL_DataB_1013.dbf                             4096 NO
      2043 ORCL_DATAB                    /var/ora_data/oradata/ORCL/ORCL_DataB_1014.dbf                             4096 NO
      2044 ORCL_DATAB                    /var/ora_data/oradata/ORCL/ORCL_DataB_1015.dbf                             4096 NO
      2045 ORCL_DATAB                    /var/ora_data/oradata/ORCL/ORCL_DataB_1016.dbf                             4096 NO
      2046 ORCL_DATAB                    /var/ora_data/oradata/ORCL/ORCL_DataB_1017.dbf                             4096 NO
      2047 ORCL_DATAB                    /var/ora_data/oradata/ORCL/ORCL_DataB_1018.dbf                             4096 NO
      2048 ORCL_DATAB                    /var/ora_data/oradata/ORCL/ORCL_DataB_1019.dbf                             4096 NO
      2049 ORCL_DATAB                    /var/ora_data/oradata/ORCL/ORCL_DataB_1020.dbf                             4096 NO
      2050 ORCL_DATAB                    /var/ora_data/oradata/ORCL/ORCL_DataB_1021.dbf                             4096 NO
      2051 ORCL_DATAB                    /var/ora_data/oradata/ORCL/ORCL_DataB_1022.dbf                             4096 NO
      2052 ORCL_DATAB                    /var/ora_data/oradata/ORCL/ORCL_DataB_1023.dbf                             4096 NO

1023 rows selected.

Elapsed: 00:00:01.09

4)、檢視引數及 dba_data_files 總大小

SQL> select count(file_name) from dba_data_files;

COUNT(FILE_NAME)
----------------
            2422

Elapsed: 00:00:00.28
SQL> show parameter db_files

NAME                                 TYPE                             VALUE
------------------------------------ -------------------------------- ------------------------------
db_files                             integer                          5000

5)、檢視錶空間使用率及儲存磁碟使用率

如下是以前的惠普 UNIX 系統

SQL> set pages 345 timing on  
 col TABLESPACE_NAME for a28  
 SELECT a.tablespace_name,round(total/1024/1024/1024) "Total g",round(free/1024/1024/1024) "Free g",ROUND((total-free)/total,4)*100 "USED%" 
FROM (SELECT tablespace_name,SUM(bytes) free FROM DBA_FREE_SPACE GROUP BY tablespace_name ) a,(SELECT tablespace_name,SUM(bytes) total FROM DBA_DATA_FILES 
 GROUP BY tablespace_name) b WHERE a.tablespace_name=b.tablespace_name ORDER BY 4; 
SQL> SQL>   2    3  
TABLESPACE_NAME                 Total g     Free g      USED%
---------------------------- ---------- ---------- ----------
ORCL_UNDO                            100        100          0
POWERCENTER                         219        218        .55
UNDOTBS1                           1002        981       2.18
SYSTEM                               33         32       2.72
ANTIF_TB                            192        183       4.46
USERS                                54         48       9.52
SYSAUX                                6          4      38.41
ORCL_DATAA                         13512       4352      67.79
ORCL_DATAC                          4140       1187      71.34
ORCL_INDEX                          2584        677       73.8
ORCL_DATAB                          6094       1467      75.92

11 rows selected.

Elapsed: 00:00:04.62

SQL> !bdf 
Filesystem          kbytes    used   avail %used Mounted on
/dev/vg00/lvol3    1048576  392632  651712   38% /
/dev/vg00/lvol1    1835008  562656 1262456   31% /stand
/dev/vg00/lvol8    8912896 3246256 5628640   37% /var
/dev/ORCLdatavg/ora_data_lv02
                   14410530816 11017427096 3366595912   77% /var/ora_data02
/dev/ORCLdatavg/ora_data_lv01
                   20955955200 20360127344 591174080   97% /var/ora_data
/dev/vg00/lvol7    7405568 3782936 3594384   51% /usr
/dev/vg00/lvol4    10485760 4700584 5740800   45% /tmp
/dev/vg00/lvol6    11599872 6659344 4901976   58% /opt
/dev/ORCLvg01/lvol_ORCL01
                   102400000 61129934 38696156   61% /opt/ORCL
/dev/vg00/lvinstall
                   10485760 4085065 6000758   41% /install
/dev/vg00/lvol5    2097152   35888 2045264    2% /home
/dev/ORCLvg01/lvol_ORCL02
                   102400000 15970491 81027767   16% /home/ORCL
/dev/archvg/archlv 5364776960 156564944 5167523472    3% /arch
附:UNIX 系統常用命令

bdf 以 KB 為單位檢視大小
以G為單位檢視資料夾/檔案大小
du -sk * | awk '{print $1/1024/1024,$2}'
du -sk *.dmp | awk '{print $1/1024/1024,$2}'

關機和重啟
關機: shutdown -hy 0
重啟: shutdown -ry 0  --如無法重啟,可使用reboot

檢視所有硬體資訊:#print_manifest
檢視CPU資訊:#ioscan -fnkC processor
檢視網路卡:# lanscan
檢視網路卡的ip地址:
# ifconfig lan0
# more /etc/rc.config.d/netconf

檢視介面IP及掩碼配置:# netstat -rnv
 
檢視作業系統版本和 license:#uname -a

檢視實體記憶體大小:# dmesg

檢視硬碟 # ioscan -fnC disk
硬碟的個數  #  ioscan -funC disk
硬碟的大小資訊   # diskinfo /dev/rdsk/c1t0d0

檢視掃描到的新磁碟:
# ioscan -fNnkC disk
# ioscan -m lun

HP-UX主要使用HFS和VXFS兩種檔案系統

insf -e -C disk 掃描新盤

格式化磁碟(一般不進行此操作)  #mediainit /dev/rdsk/c2t1d0

檢視是否同一塊盤  ## ioscan -m dsf

HP-UX 11i v3 作業系統預設開啟NMP,透過 scsimgr 命令進行確認:

# scsimgr get_attr -a leg_mpath_enable

檢視磁碟的wwid: scsimgr lun_map -D /dev/rdisk/disk41 |grep WWID

#ioscan -fnC disk
ioscan是掃描並列出所有裝置和發現的其他裝置,
-f表示顯示完整列表,
-C表示類別,
-k表示掃描核心的裝置檔案,預設是掃描機器實際有的,
-n表示只列出/dev/下的裝置檔案。

fc 口檢視
#ioscan -fnC fc
#fcmsutil /dev/fcoc0

檢視路由資訊 #netstat -an

6)、擴容表空間

SQL> alter tablespace ORCL_DATAB add datafile  '/var/ora_data02/oradata/ORCL/ORCL_DataB_1025.dbf' size 30G;
alter tablespace ORCL_DATAB add datafile  '/var/ora_data02/oradata/ORCL/ORCL_DataB_1025.dbf' size 30G
*
ERROR at line 1:
ORA-01686: max # files (1023) reached for the tablespace ORCL_DATAB

Elapsed: 00:02:10.89
SQL> 

SQL> select count(file_name) from dba_data_files where tablespace_name='ORCL_DATAB';

COUNT(FILE_NAME)
----------------
            1023

Elapsed: 00:00:00.18

--透過 oerr 也給出瞭解釋辦法,resize 已存在的資料檔案,或者遷移一些物件到其他表空間。
$ oerr ORA 01686
01686, 00000, "max # files (%s) reached for the tablespace %s"
// *Cause:  The number of files for a given tablespace has reached its maximum
//          value
// *Action: Resize existing files in the tablespace, or partition the objects
//          among multiple tablespaces, or move some objects to a different
//          tablespace.

-- 後臺 alert 日誌記錄如下:

Thu Nov 19 20:28:07 2023
alter tablespace ORCL_DATAB add datafile  '/var/ora_data02/oradata/ORCL/ORCL_DataB_1025.dbf' size 30G
Thu Nov 19 20:30:18 2023
ORA-1686 signalled during: alter tablespace ORCL_DATAB add datafile  '/var/ora_data02/oradata/ORCL/ORCL_DataB_1025.dbf' size 30G..

官方文件中也有對資料檔案的描述:資料檔案是作業系統的物理檔案,用於儲存資料庫中所有邏輯結構的資料。必須為每個表空間顯式地建立它們。Oracle 資料庫為每個資料檔案分配兩個相關的檔案號,一個是絕對檔案號,另一個是相對檔案號,用於唯一標識資料檔案。下面介紹了這些編號:

  • 絕對檔案號:此檔案號可用於許多引用資料檔案而不使用檔名的 SQL 語句。絕對檔案號可以在 VDATAFILE 或 VTEMPFILE 檢視的 file# 列中,或在 DBA_DATA_FILES 或 DBA_TEMP_FILES 檢視的 file_ID 列中找到。

  • 相對檔案號:對於中小型資料庫,相對檔案號通常與絕對檔案號具有相同的值。然而,當資料庫中的資料檔案數量超過閾值(通常為1023)時,相對檔案數量與絕對檔案數量不同。在 bigfile 表空間中,相對檔案號始終為 1024(在 OS/390 平臺上為 4096)。

總 結

最後總結記錄一下,對於 8k 大小的資料塊而言,普通單個表空間(非大檔案表空間)資料檔案個數不能大於等於 1024 個(即每個表空間最大 1023 個資料檔案),每個資料檔案大小也不能超過 32G(即每個資料檔案可以設定為 32767M),資料庫總的資料檔案最多有 65534 個,但也受作業系統和 shared pool 記憶體的限制,不能過大也不能過小,按照庫資料量大小可設定為 2000、4000、6000、8000 等值。

 

相關文章