java实现数据库备份达梦数据库

前几天应用户需求,用户可以手动进行数据库的备份,并且需要适配达梦数据库。
因为需要调用数据库的驱动来进行数据库的备份以及还原,所以这里我是通过脚本的方式来操作,并且使用了ProcessBuilder processBuilder = new ProcessBuilder();
来执行脚本,
dm的备份语句为:D:\DM\bin\dexp.exe data/data@LOCALHOST:5236 DIRECTORY=E:\data\base FILE=full.dmp SCHEMAS="test"
        D:\DM\bin\是数据库所在的目录,
        data/data 是数据库的账号和密码,
        @LOCALHOST:5236 IP地址以及端口号
        DIRECTORY= 备份的路劲
        FILE= 备份文件的名称
        SCHEMAS= 备份的数据库名称

这里为了避免在Linux环境下,文件夹没有权限,所以这里通过这种方式来赋给文件访问权限。
详细代码如下,也希望大神们给我一些优化的建议嘿嘿嘿
dexp 逻辑导出 | 达梦技术文档 (dameng.com)

ProcessBuilder processBuilder = new ProcessBuilder();
            processBuilder.command("chmod","777",patch.get("fileBackupPath"));
            processBuilder.start().waitFor();
  StringBuilder stringBuilder = new StringBuilder();
        String scriptFile = null;
        String fileBackupPath = null;
        if (patch.get("osName").contains("Windows")) {
            scriptFile = stringBuilder.append(patch.get("databasePath"))
                    .append("dexp.exe ")
                    .append(hostUrl.get("userName"))
                    .append("/")
                    .append(hostUrl.get("password"))
                    .append("@")
                    .append(hostUrl.get("host"))
                    .append(":")
                    .append(hostUrl.get("port"))
                    .append(" DIRECTORY=")
                    .append(patch.get("fileBackupPath"))
                    .append(" FILE=")
                    .append(patch.get("FileBackupName"))
                    .append(" SCHEMAS=")
                    .append("\"")
                    .append(hostUrl.get("databaseName"))
                    .append("\"")
                    .toString();
            fileBackupPath=patch.get("fileBackupPath")+"/temporary/dexp.bat";
            patch.put("scriptFilePath",fileBackupPath);
            FileWriter script = new FileWriter(fileBackupPath);
            script.write(scriptFile);
            script.close();
        } else if (patch.get("osName").contains("Linux")) {
            // 防止没有权限先进行授权
            ProcessBuilder processBuilder = new ProcessBuilder();
            processBuilder.command("chmod","777",patch.get("fileBackupPath"));
            processBuilder.start().waitFor();
            scriptFile = stringBuilder.append(patch.get("databasePath"))
                    .append("dexp ")
                    .append(hostUrl.get("userName"))
                    .append("/")
                    .append(hostUrl.get("password"))
                    .append("@")
                    .append(hostUrl.get("host"))
                    .append(":")
                    .append(hostUrl.get("port"))
                    .append(" DIRECTORY=")
                    .append(patch.get("fileBackupPath"))
                    .append(" FILE=")
                    .append(patch.get("FileBackupName"))
                    .append(" SCHEMAS=")
                    .append("\"")
                    .append(hostUrl.get("databaseName"))
                    .append("\"")
                    .toString();
            fileBackupPath=patch.get("fileBackupPath")+"/temporary/dexp.sh";
            patch.put("scriptFilePath",fileBackupPath);
            FileWriter script = new FileWriter(fileBackupPath);
            script.write(scriptFile);
            script.close();
        } else {
            throw  new RuntimeException("其他版本没有进行适配");
         
        }
        System.out.println("开始执行备份命令");
        ProcessBuilder processBuilder = new ProcessBuilder(fileBackupPath);
        Process process = processBuilder.start();
        processBuilder.redirectErrorStream(true);
        processBuilder.inheritIO(); // 将输出流和错误流合并到当前Java进程
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line;
        StringBuilder errorOutput = new StringBuilder();
        while ((line = reader.readLine()) != null) {
            errorOutput.append(line).append("\n");
        }
        //启动进程并等待执行完成
        int execute = process.waitFor();
        if(execute!=0){
            throw new RuntimeException("数据库还原失败"+execute+"\nError output"+errorOutput.toString());
        }

  • 15
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,可以使用达梦数据库提供的备份和还原方法来进行数据库备份。根据引用\[1\]和引用\[2\]的内容,有以下几种备份和还原方法可供选择: 方法一:最简单最稳妥的数据备份还原方法 1. 停止"DmServiceDMSERVER"服务(即冷备)。 2. 复制生产库的"D:\dmdbms\data\DAMENG"文件夹。 3. 将复制的文件夹粘贴到备份服务器的"D:\dmdbms\data"目录下,覆盖原有的"DAMENG"文件夹。 方法二:常规使用的备份还原方法 1. 配置数据库的归档模式,确保数据库处于归档模式下。 2. 使用数据库管理员账户登录数据库,进行备份操作。 方法三:逻辑备份与还原 1. 创建用户。 2. 进行全库备份和还原,可以导入到自己的账户或其他账户。 3. 进行模式导出和导入。 4. 进行表的导出和导入。 方法四:联机备份与还原 1. 进行数据库级别备份和还原。 2. 进行表空间级别备份和还原。 3. 进行表级别备份和还原。 方法五:脱机备份与还原 1. 进行数据库级别备份和还原。 2. 进行表空间级别备份和还原。 3. 进行表级别备份和还原。 以上是一些常用的Java达梦数据库备份和还原方法,具体使用哪种方法取决于你的需求和环境。 #### 引用[.reference_title] - *1* [DM达梦数据库--备份与还原三种方法](https://blog.csdn.net/zfang9528/article/details/106202926)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [9、达梦数据库 备份 还原](https://blog.csdn.net/u013736117/article/details/127324317)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值