写点什么

YashanDB 数据文件管理

作者:YashanDB
  • 2025-03-14
    广东
  • 本文字数:3760 字

    阅读完需:约 12 分钟

本文内容来自 YashanDB 官网,原文内容请见 https://doc.yashandb.com/yashandb/23.3/zh/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%AE%A1%E7%90%86/%E6%96%87%E4%BB%B6%E7%AE%A1%E7%90%86/%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6%E7%AE%A1%E7%90%86.html


默认情况下,数据文件存放在$YASDB_DATA/dbfiles目录下(SCOL 数据默认存放在与 data 同级的 local_fs 目录下)。


共享集群部署模式下的数据文件存放在+DG0/dbfiles目录下,访问方式请参考YFS文件管理


$ cd $YASDB_DATA/dbfiles$ ls -lrttotal 1122904...-rw-r----- 1 yashan yashan 134217728 Oct 19 11:50 redo1-rw-r----- 1 yashan yashan 134217728 Oct 19 14:15 redo2-rw-r----- 1 yashan yashan 134217728 Oct 19 11:50 redo3-rw-r----- 1 yashan yashan 134217728 Oct 19 11:50 redo4-rw-r----- 1 yashan yashan  67108864 Oct 19 11:50 temp-rw-r----- 1 yashan yashan  67108864 Oct 19 11:50 swap-rw-r----- 1 yashan yashan  67108864 Oct 19 11:50 users-rw-r----- 1 yashan yashan  67108864 Oct 19 14:00 sysaux-rw-r----- 1 yashan yashan  67108864 Oct 19 14:15 system-rw-r----- 1 yashan yashan 134217728 Oct 19 14:15 undo-rw-r----- 1 yashan yashan  67108864 Oct 19 14:15 dwf-rw-r----- 1 yashan yashan  25370624 Oct 19 14:15 ctrl1-rw-r----- 1 yashan yashan  25370624 Oct 19 14:15 ctrl2-rw-r----- 1 yashan yashan  25370624 Oct 19 14:15 ctrl3...
复制代码


各类文件在不同部署形态中略有差异:


  • redo:redo 日志文件

  • temp、swap、users、sysaux、system、undo、users_aim-0(分布式部署独有):表空间数据文件;TSS_CHUNK_FILE_0(分布式部署独有):表空间集下包含了 chunk 的表空间的数据文件

  • dwf、double_write(分布式部署):双写文件

  • ctrl:控制文件

查看数据文件



除了直接在操作系统进入到数据文件存放的目录查看外,还可以通过数据库的 DBA_DATA_FILES 和 V$DATAFILE 视图查看,如下:


示例(单机部署)


SELECT file_name FROM DBA_DATA_FILES;
FILE_NAME
/data/yashan/yasdb_data/db-1-1/dbfiles/system /data/yashan/yasdb_data/db-1-1/dbfiles/sysaux /data/yashan/yasdb_data/db-1-1/dbfiles/undo /data/yashan/yasdb_data/db-1-1/dbfiles/temp /data/yashan/yasdb_data/db-1-1/dbfiles/swap /data/yashan/yasdb_data/db-1-1/dbfiles/users
SELECT name FROM V$DATAFILE;
NAME
/data/yashan/yasdb_data/db-1-1/dbfiles/system /data/yashan/yasdb_data/db-1-1/dbfiles/sysaux /data/yashan/yasdb_data/db-1-1/dbfiles/undo /data/yashan/yasdb_data/db-1-1/dbfiles/temp /data/yashan/yasdb_data/db-1-1/dbfiles/swap /data/yashan/yasdb_data/db-1-1/dbfiles/users
复制代码


示例(分布式部署)


SELECT file_name FROM DBA_DATA_FILES;
FILE_NAME
/data/yashan/yasdb_data/cn-2-1/dbfiles/system/data/yashan/yasdb_data/cn-2-1/dbfiles/sysaux/data/yashan/yasdb_data/cn-2-1/dbfiles/temp/data/yashan/yasdb_data/cn-2-1/dbfiles/swap/data/yashan/yasdb_data/cn-2-1/dbfiles/users/data/yashan/yasdb_data/cn-2-1/dbfiles/undo/data/yashan/yasdb_data/cn-2-1/dbfiles/users_aim-0
SELECT name FROM V$DATAFILE;
NAME
/data/yashan/yasdb_data/cn-2-1/dbfiles/system/data/yashan/yasdb_data/cn-2-1/dbfiles/sysaux/data/yashan/yasdb_data/cn-2-1/dbfiles/temp/data/yashan/yasdb_data/cn-2-1/dbfiles/swap/data/yashan/yasdb_data/cn-2-1/dbfiles/users/data/yashan/yasdb_data/cn-2-1/dbfiles/undo/data/yashan/yasdb_data/cn-2-1/dbfiles/users_aim-0
复制代码


示例(共享集群部署)


SELECT file_name FROM DBA_DATA_FILES;
FILE_NAME
+DG0/dbfiles/system +DG0/dbfiles/sysaux +DG0/dbfiles/temp +DG0/dbfiles/swap +DG0/dbfiles/users +DG0/dbfiles/undo1 +DG0/dbfiles/undo2 +DG0/dbfiles/undo3
SELECT name FROM V$DATAFILE;
NAME
+DG0/dbfiles/system +DG0/dbfiles/sysaux +DG0/dbfiles/temp +DG0/dbfiles/swap +DG0/dbfiles/users +DG0/dbfiles/undo1 +DG0/dbfiles/undo2 +DG0/dbfiles/undo3
复制代码


通过 DBA_DATA_FILES 和 V$DATAFILE 视图还可以查看数据文件的其他属性,例如文件号、文件大小、文件对应的表空间和文件状态等信息。

数据文件的维护


# 添加数据文件

一个表空间可以有多个数据文件组成,当表空间的空间使用完或者数据文件达到最大值时,可以通过给表空间扩容的方式添加数据文件。


新建表空间方式添加数据文件:


示例(单机、分布式部署)


CREATE TABLESPACE ts_yashan DATAFILE '?/data01' SIZE 100M AUTOEXTEND OFF;
复制代码


示例(共享集群部署)


CREATE TABLESPACE ts_yashan DATAFILE '+DG0/ts_yashan' SIZE 100M AUTOEXTEND OFF;
复制代码


表空间扩容方式添加数据文件:


示例


ALTER TABLESPACE yashan ADD DATAFILE;
复制代码


# 离线数据文件

某些场景下,例如数据文件损坏、不再使用或者需进行安全隔离,可能需要对指定的数据文件做离线(offline)处理(内置表空间的数据文件无法执行此操作)。


在文件正常使用的情况下,文件 offline 后其数据仍将被备份,不能对文件进行更名或外部删除等非法操作,否则会导致备份失败。


在文件损坏等异常情况,只能在数据库为 MOUNT 状态时 offline,其他情况建议在 OPEN 状态下进行 offline。


在主备环境中,建议在主库上执行 offline,备库会自动同步 offline 操作。若在备库上执行 offline 会导致备库出现 need repair 异常。


Warn:

生产系统上请谨慎操作,如果数据文件的 offline 时间过长,且在此期间生成的归档文件丢失,会导致该文件无法 online,后续无法正常使用。


单机部署和共享集群部署中可直接使用ALTER DATABASE语句,分布式部署中推荐使用yasboot运维工具。


示例(单机、共享集群部署)


ALTER DATABASE DATAFILE 'datafile' OFFLINE;

ALTER DATABASE DATAFILE 'datafile' OFFLINE DROP;
复制代码


数据文件损坏后的应急处理



数据文件损坏,通常可以通过恢复最新的可用备份集解决,若不存在备份集,则需参考本操作进行应急处理。

# 常见场景

数据库中表空间下的数据文件发生丢失、损坏等情况导致数据库无法正常启动,且无可用备份集。


Note

本文所述常见场景、解决措施及操作步骤不涵盖内置表空间的数据文件,当内置表空间的数据文件发生丢失或损坏且无可用备份集时,应使用物理恢复等其他手段。

# 解决措施

启用逃生通道,在数据库处于 mount 模式下将丢失或损坏的数据文件 offline,然后打开数据库。

# 操作步骤

在主备环境中,需在主库上执行相关操作,通过主备同步使备库上相应的数据文件也被 offline。若直接在备库上执行相关操作,会导致其状态被置为 need repair,无法正常使用。


  1. 通过数据库启动时的报错信息或日志,定位出异常的数据文件:


$ open file /home/yashan/YASDB_DATA/dbfiles/SALES0 failed, errno 2, error message "No such file or directory"Failed to start instance
复制代码


或者在发现数据库为 abnormal 状态时,查询 V$DIAG_INCIDENT 排查是否因某个文件损坏导致 abnormal。


  1. 启动数据库到 mount 状态:


$ yasboot cluster restart -c yashandb -m mount
复制代码


  1. 将异常的数据文件 offline:

  2. 当数据库未开启归档时,必须指定 DROP 选项,否则无须指定。


ALTER DATABASE DATAFILE 'SALES0' OFFLINE DROP;
复制代码


  1. 此时可以正常打开数据库,数据文件对应表空间被 offline:


ALTER DATABASE OPEN; SELECT tablespace_name, status FROM DBA_TABLESPACES WHERE tablespace_name='SALES'; TABLESPACE_NAME                                                  STATUS    
SALES OFFLINE
复制代码


  1. 对于异常数据文件的读取提示错误:


SELECT * FROM area;YAS-02247 file 6 can not be read at this time
复制代码


发布于: 刚刚阅读数: 2
用户头像

YashanDB

关注

全自研国产新型大数据管理系统 2022-02-15 加入

还未添加个人简介

评论

发布
暂无评论
YashanDB数据文件管理_数据库_YashanDB_InfoQ写作社区