CREATE TABLE IF NOT EXISTS `dbms_connection` (
    `id` VARCHAR(64) NOT NULL COMMENT '主键',
    `connection_name` VARCHAR(100) NOT NULL COMMENT '连接名称',
    `db_type` VARCHAR(32) NOT NULL DEFAULT 'ORACLE' COMMENT '数据库类型：ORACLE，后续可扩展 MYSQL、INFLUXDB',
    `host` VARCHAR(255) NOT NULL COMMENT '数据库主机地址',
    `port` INT NOT NULL COMMENT '数据库端口',
    `connect_type` VARCHAR(32) NULL COMMENT '连接类型：SERVICE_NAME、SID，Oracle 使用',
    `service_name` VARCHAR(128) NULL COMMENT '服务名，Oracle SERVICE_NAME 模式使用',
    `sid` VARCHAR(128) NULL COMMENT 'SID，Oracle SID 模式使用',
    `database_name` VARCHAR(128) NULL COMMENT '数据库名或实例名，预留给 MySQL 等数据库使用',
    `schema_name` VARCHAR(128) NULL COMMENT '默认 Schema，Oracle 使用',
    `username` VARCHAR(128) NOT NULL COMMENT '用户名',
    `password_cipher` VARCHAR(1000) NULL COMMENT '保存的数据库密码；为空表示不保存密码，执行时临时输入',
    `save_password` TINYINT NOT NULL DEFAULT 1 COMMENT '是否保存密码：0-否，1-是',
    `directory_name` VARCHAR(128) NULL COMMENT '默认数据库目录对象名称，Oracle Data Pump 使用',
    `directory_path` VARCHAR(500) NULL COMMENT '目录对象对应物理路径，仅用于展示和校验',
    `extra_config_json` JSON NULL COMMENT '扩展配置 JSON，用于保存不同数据库的差异配置',
    `remark` VARCHAR(500) NULL COMMENT '备注',
    `last_test_status` VARCHAR(32) NULL COMMENT '最近连接测试状态：SUCCESS、FAIL',
    `last_test_message` VARCHAR(1000) NULL COMMENT '最近连接测试结果说明',
    `last_test_time` DATETIME NULL COMMENT '最近连接测试时间',
    `state` TINYINT NOT NULL DEFAULT 1 COMMENT '状态：0-删除，1-正常',
    `create_by` VARCHAR(64) NULL COMMENT '创建人',
    `create_time` DATETIME NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by` VARCHAR(64) NULL COMMENT '更新人',
    `update_time` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `idx_dbms_connection_state` (`state`),
    KEY `idx_dbms_connection_db_type` (`db_type`),
    KEY `idx_dbms_connection_name` (`connection_name`),
    KEY `idx_dbms_connection_schema` (`schema_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据库连接配置表';

CREATE TABLE IF NOT EXISTS `dbms_operation_task` (
    `id` VARCHAR(64) NOT NULL COMMENT '主键',
    `task_no` VARCHAR(64) NOT NULL COMMENT '任务编号',
    `connection_id` VARCHAR(64) NOT NULL COMMENT '数据库连接配置 ID',
    `db_type` VARCHAR(32) NOT NULL COMMENT '数据库类型：ORACLE，后续可扩展 MYSQL、INFLUXDB',
    `operation_type` VARCHAR(32) NOT NULL COMMENT '操作类型：BACKUP、RESTORE、DELETE',
    `backup_strategy` VARCHAR(32) NULL COMMENT '备份策略：DATA_PUMP、JDBC_EXPORT',
    `task_status` VARCHAR(32) NOT NULL DEFAULT 'WAITING' COMMENT '任务状态：WAITING、RUNNING、SUCCESS、FAIL、CANCELLED',
    `schema_name` VARCHAR(128) NULL COMMENT '操作 Schema',
    `target_names_json` JSON NULL COMMENT '操作对象名称列表 JSON，例如表名列表',
    `request_param_json` JSON NULL COMMENT '请求参数快照 JSON，不保存运行时密码',
    `result_message` VARCHAR(2000) NULL COMMENT '执行结果或失败原因',
    `progress_percent` DECIMAL(5,2) NOT NULL DEFAULT 0.00 COMMENT '任务进度百分比',
    `started_at` DATETIME NULL COMMENT '任务开始时间',
    `finished_at` DATETIME NULL COMMENT '任务结束时间',
    `state` TINYINT NOT NULL DEFAULT 1 COMMENT '状态：0-删除，1-正常',
    `create_by` VARCHAR(64) NULL COMMENT '创建人',
    `create_time` DATETIME NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by` VARCHAR(64) NULL COMMENT '更新人',
    `update_time` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_dbms_operation_task_no` (`task_no`),
    KEY `idx_dbms_operation_connection` (`connection_id`),
    KEY `idx_dbms_operation_db_type` (`db_type`),
    KEY `idx_dbms_operation_type_status` (`operation_type`, `task_status`),
    KEY `idx_dbms_operation_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据库运维任务表';

CREATE TABLE IF NOT EXISTS `dbms_backup_file` (
    `id` VARCHAR(64) NOT NULL COMMENT '主键',
    `task_id` VARCHAR(64) NOT NULL COMMENT '备份任务 ID',
    `connection_id` VARCHAR(64) NOT NULL COMMENT '数据库连接配置 ID',
    `db_type` VARCHAR(32) NOT NULL COMMENT '数据库类型：ORACLE，后续可扩展 MYSQL、INFLUXDB',
    `backup_strategy` VARCHAR(32) NOT NULL COMMENT '备份策略：DATA_PUMP、JDBC_EXPORT',
    `file_format` VARCHAR(32) NOT NULL COMMENT '文件格式：DMP、SQL、CSV',
    `schema_name` VARCHAR(128) NULL COMMENT '备份 Schema',
    `target_names_json` JSON NULL COMMENT '备份对象名称列表 JSON，例如表名列表',
    `backup_mode` VARCHAR(32) NOT NULL DEFAULT 'FULL_TABLE' COMMENT '备份模式：FULL_TABLE、TIME_RANGE、SIZE_SPLIT',
    `backup_start_time` DATETIME NULL COMMENT '按时间备份开始时间',
    `backup_end_time` DATETIME NULL COMMENT '按时间备份结束时间',
    `time_column` VARCHAR(128) NULL COMMENT '按时间备份使用的时间字段',
    `directory_name` VARCHAR(128) NULL COMMENT '数据库目录对象名称，Oracle Data Pump 使用',
    `dump_file_name` VARCHAR(255) NULL COMMENT 'Data Pump dump 文件名',
    `log_file_name` VARCHAR(255) NULL COMMENT 'Data Pump log 文件名',
    `file_name` VARCHAR(255) NOT NULL COMMENT '主备份文件名，需包含 _yyyyMMdd',
    `file_path` VARCHAR(1000) NOT NULL COMMENT '服务端记录的备份文件路径或目录对象映射路径',
    `log_file_path` VARCHAR(1000) NULL COMMENT '备份日志文件路径',
    `metadata_file_path` VARCHAR(1000) NULL COMMENT 'JDBC_EXPORT 元数据文件路径',
    `file_size` BIGINT NULL COMMENT '文件大小，单位字节',
    `checksum` VARCHAR(128) NULL COMMENT '文件校验值',
    `state` TINYINT NOT NULL DEFAULT 1 COMMENT '状态：0-删除，1-正常',
    `create_by` VARCHAR(64) NULL COMMENT '创建人',
    `create_time` DATETIME NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by` VARCHAR(64) NULL COMMENT '更新人',
    `update_time` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `idx_dbms_backup_task` (`task_id`),
    KEY `idx_dbms_backup_connection` (`connection_id`),
    KEY `idx_dbms_backup_db_type` (`db_type`),
    KEY `idx_dbms_backup_strategy` (`backup_strategy`),
    KEY `idx_dbms_backup_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据库备份文件记录表';

CREATE TABLE IF NOT EXISTS `dbms_restore_record` (
    `id` VARCHAR(64) NOT NULL COMMENT '主键',
    `task_id` VARCHAR(64) NOT NULL COMMENT '恢复任务 ID',
    `backup_file_id` VARCHAR(64) NOT NULL COMMENT '备份文件 ID',
    `connection_id` VARCHAR(64) NOT NULL COMMENT '目标数据库连接配置 ID',
    `db_type` VARCHAR(32) NOT NULL COMMENT '数据库类型：ORACLE，后续可扩展 MYSQL、INFLUXDB',
    `restore_mode` VARCHAR(32) NOT NULL DEFAULT 'SKIP' COMMENT '恢复模式：SKIP、APPEND、TRUNCATE、REPLACE',
    `target_schema_name` VARCHAR(128) NULL COMMENT '目标 Schema',
    `target_names_json` JSON NULL COMMENT '恢复对象名称列表 JSON，例如表名列表',
    `table_exists_action` VARCHAR(32) NULL COMMENT 'Data Pump TABLE_EXISTS_ACTION：SKIP、APPEND、TRUNCATE、REPLACE',
    `overwrite_confirmed` TINYINT NOT NULL DEFAULT 0 COMMENT '是否已确认覆盖类操作：0-否，1-是',
    `result_message` VARCHAR(2000) NULL COMMENT '恢复结果说明',
    `state` TINYINT NOT NULL DEFAULT 1 COMMENT '状态：0-删除，1-正常',
    `create_by` VARCHAR(64) NULL COMMENT '创建人',
    `create_time` DATETIME NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_by` VARCHAR(64) NULL COMMENT '更新人',
    `update_time` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `idx_dbms_restore_task` (`task_id`),
    KEY `idx_dbms_restore_backup_file` (`backup_file_id`),
    KEY `idx_dbms_restore_connection` (`connection_id`),
    KEY `idx_dbms_restore_db_type` (`db_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据库恢复记录表';
