前 言
本文适用于普通的标准的 8k 块大小的 Oracle 企业版数据库,10g、11g、19c 均可适用,但对于 ODA 一体机可能有所区别,请慎重使用。
————————————————————————————
微信公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
腾讯云:https://cloud.tencent.com/developer/user/5645107
————————————————————————————
正 文
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 的值,则必须关闭并重新启动所有访问数据库的实例,新值才能生效,如果您有一个主库和备库,那么它们应该具有相同的此参数值。
考虑将数据文件添加到表空间时可能存在的限制
将数据文件添加到表空间时需要考虑一些限制。
-
您可以将数据文件添加到传统的小文件表空间,但要遵守以下限制:
-
操作系统通常对进程可以同时打开的文件数施加限制。当达到打开文件的操作系统限制时,无法创建更多数据文件。
-
操作系统对数据文件的数量和大小施加了限制。
-
该数据库对任何实例打开的任何 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 的值太高,则不必要地消耗内存。
参考官方文档:https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/managing-data-files-and-temp-files.html#GUID-CAC446B4-7E44-419B-9A4C-306677CD95E0
由此可见这个参数,主备库均要修改且重启生效,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 等值。
当然,对于大文件表空间文件只能有一个,如果为大文件表空间需要检查 asm 磁盘组的 compatible.rdbms 值,如果该值 10.1 大文件表空间最大 128TB。如果是其他非 8k 标准块大小,情况有所不同。
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.15.0.0.0
SQL> col name for a20
SQL> col value for a30
SQL> select name,value,GROUP_NUMBER from v$asm_attribute where name='compatible.rdbms';
NAME VALUE GROUP_NUMBER
-------------------- ------------------------------ ------------
compatible.rdbms 10.1.0.0.0 1
compatible.rdbms 10.1.0.0.0 2
compatible.rdbms 10.1.0.0.0 3
参考链接
https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/DB_FILES.html#GUID-DD8C2F18-F04D-43F7-A9C3-5EAAAB9E9DEE
https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/physical-storage-structures.html#GUID-A878011D-2E59-45F6-A529-F60383AAE945
https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/managing-data-files-and-temp-files.html#GUID-B1805034-94ED-4887-94B4-369FB8AAE416
————————————————————————————
微信公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
腾讯云:https://cloud.tencent.com/developer/user/5645107
————————————————————————————