轉載連結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 等值。