邏輯導入主要使用dimp命令
四種級別的導入命令如下:
FULL: ./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dimp
OWNER: ./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log OWNER=USER01 DIRECTORY=/mnt/data/dimp
SCHEMAS: ./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log SCHEMAS=USER01 DIRECTORY=/mnt/data/dimp
TABLES: ./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log TABLES=table1,table2 DIRECTORY=/mnt/data/dimp
遠程導入文件命令:sshpass -p pwd scp -P 22 username@遠程ip:/opt/data/test1.dmp + 本地存放目錄
以tables級別為例:
在備份是已將備份文件名和等備份信息保存到數據庫,還原時通過記錄id查詢到備份信息拼接語句。
public String recover(Map<String, Object> param) { String result = ""; String copyType = param.get(“type”); Map<String, Object> map = new HashMap<>(); Connection conn = DMruntimeUtil.login(ip, userName, userPwd); String filename = param.getWjmc(); if (param.get(“tids”) == "") { //全部恢復 } else { //部分恢復 // 根據tids拼接表名 List<Bfb> bfbList = bfbMapper.getTables(param.getTids().toString().split(",")); if (bfbMapper == null || bfbList.size() == 0) { return null; } String tnames = param.get("tnames"); String dexpStr = ""; // 恢復命令./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log // DIRECTORY=/mnt/data/dimp dexpStr = DMruntimeUtil.dimpByTables(hostip, dbname, username, password, filename, tnames); if (copyType.equals("本地")) { String cmd = "cd /opt/dameng/dmdbms/bin;" + dexpStr; result = DMruntimeUtil.execute(conn, cmd); } else if (copyType.equals("異域")) { // sshpass -p pwd scp -P 22 root@ip:/opt/data/test1.dmp // /opt/dameng/dmdbms/dm7data/EVAL/dexp/ String cmd = "sshpass -p " + param.getRepassword() + " scp -P " + param.getPort() + " " + param.getUsername() + "@" + param.getIp() + ":" + param.getDir() + "/" + filename + " /opt/dameng/dmdbms/dm7data/EVAL/dexp/;cd /opt/dameng/dmdbms/bin;" + dexpStr; result = DMruntimeUtil.execute(conn, cmd); } } return result; }