YashanDB数据文件管理

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

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

$ cd $YASDB_DATA/dbfiles
$ ls -lrt
total 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:
    当数据库未开启归档时,必须指定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
<think>好的,我现在需要帮助用户了解如何使用Erupt框架搭建数据管理平台。首先,我得回顾一下用户提供的引用内容,确保回答准确。 用户提到了几个引用,主要关于YashanDB集成Erupt框架、Erupt基于Spring Boot无需前端代码、支持多种数据源等。这些信息是关键,需要整合到教程中。 首先,我应该概述Erupt框架的优势,比如零前端代码、基于注解开发,这些能吸引用户。然后分步骤讲解环境搭建、数据模型定义、配置管理、权限控制等。每个步骤需要具体操作示例,比如创建Spring Boot项目、添加依赖,以及如何用注解定义实体类。 接下来,用户可能需要知道如何连接数据库,比如配置MySQL,这部分在引用4中提到支持多种数据源,所以需要详细说明配置文件的写法。然后,数据管理部分需要展示如何通过注解生成CRUD界面,可能用代码示例说明。 权限管理是后台系统的重要部分,引用3提到了业务展示层使用Erupt,可能需要介绍如何通过注解实现权限控制。此外,扩展功能如多数据源和API集成也需要提及,引用4提到多数据源支持,这里可以强调。 最后,确保回答结构清晰,分步骤讲解,并引用相关资料。同时,用户要求生成相关问题,我需要根据内容提出相关的问题,比如环境搭建步骤或权限配置方法。检查所有LaTeX格式是否正确,虽然这里可能用不到数学公式,但如果有技术术语可能需要用行内格式。确保所有引用标记正确,比如[^2]、[^4]等。</think># 使用 Erupt 框架构建数据管理平台教程 ### 1. **环境准备与项目初始化** - **技术栈依赖** 基于 Spring Boot 2.x + Java 8+,无需前端代码[^2]。 - **创建 Spring Boot 项目** 使用 IDEA 或 Spring Initializr 初始化项目,添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>xyz.erupt</groupId> <artifactId>erupt-core</artifactId> <version>1.10.0</version> </dependency> ``` ### 2. **配置数据源** - **支持多数据库** 如 MySQL、Oracle、MongoDB 等[^4]。以 MySQL 为例,配置 `application.yml`: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/your_db username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver ``` ### 3. **定义数据模型** - **注解驱动开发** 使用 `@Erupt` 和 `@DataModel` 注解定义实体类。例如创建用户表: ```java @Erupt(name = "用户管理") @Table(name = "sys_user") @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @EruptField(show = false) private Long id; @EruptField(name = "用户名", input = @Input(required = true)) private String username; @EruptField(name = "角色", input = @Input(type = "select", options = "admin,user")) private String role; } ``` ### 4. **生成管理界面** - **自动渲染 CRUD** 启动项目后,访问 `http://localhost:8080`,Erupt 会根据注解自动生成增删改查界面,无需手动编写前端代码。 ### 5. **权限控制** - **基于角色的访问控制** 通过 `@EruptRole` 注解配置权限: ```java @EruptRole(name = "管理员", permissions = {PermissionType.ADD, PermissionType.DELETE}) public class AdminRoleConfig implements EruptRoleService { // 实现权限逻辑 } ``` ### 6. **扩展功能** - **多数据源集成** 支持同时连接 MySQL 和 MongoDB,通过 `@EruptDataSource` 注解切换。 - **API 集成** 通过 Restful 接口规范与其他系统交互,如调用 YashanDB 实现数据分析[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值