ITPub博客

首页 > 数据库 > 国内数据库 > YashanDB数据文件管理

YashanDB数据文件管理

国内数据库 作者:崖山数据库系统YashanDB 时间:2025-03-13 18:12:38 0 删除 编辑

数据文件的存放位置

默认情况下,数据文件存放在 $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...
Copied!

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

  • 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
Copied!

示例(分布式部署)

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-0SELECT 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
Copied!

示例(共享集群部署)

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
Copied!

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

#数据文件的维护

#添加数据文件

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

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

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

CREATE TABLESPACE ts_yashan DATAFILE '?/data01' SIZE 100M AUTOEXTEND OFF;
Copied!

示例(共享集群部署)

CREATE TABLESPACE ts_yashan DATAFILE '+DG0/ts_yashan' SIZE 100M AUTOEXTEND OFF;
Copied!

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

示例

ALTER TABLESPACE yashan ADD DATAFILE;
Copied!

#离线数据文件

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

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

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

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

Warn:

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

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

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

ALTER DATABASE DATAFILE 'datafile' OFFLINE;-- 数据库未开启归档时,必须指定DROPALTER DATABASE DATAFILE 'datafile' OFFLINE DROP;
Copied!

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

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

#常见场景

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

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
Copied!

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

  1. 启动数据库到mount状态:
$ yasboot cluster restart -c yashandb -m mount
Copied!
  1. 将异常的数据文件offline:

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

ALTER DATABASE DATAFILE 'SALES0' OFFLINE DROP;
Copied!
  1. 此时可以正常打开数据库,数据文件对应表空间被offline:
ALTER DATABASE OPEN;
 SELECT tablespace_name, status FROM DBA_TABLESPACES WHERE tablespace_name='SALES'; TABLESPACE_NAME                                                  STATUS    ---------------------------------------------------------------- --------- SALES                                                            OFFLINE
Copied!
  1. 对于异常数据文件的读取提示错误:
SELECT * FROM area;YAS-02247 file 6 can not be read at this time


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70028812/viewspace-3075769/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
崖山数据库系统YashanDB是深圳计算科学研究院完全自主研发设计的新型数据库系统,融入原创理论,支持单机/主备、共享集群、分布式等多种部署方式,覆盖OLTP/HTAP/OLAP交易和分析混合负载场景,为客户提供一站式的企业级融合数据管理解决方案。

注册时间:2023-04-11

  • 博文量
    722
  • 访问量
    640237