0

こんにちは、Java の rman を使用してバックアップを作成しようとしています。Java のランタイムを使用しようとしています。cmd を開いて rman にアクセスできますが、その後、送信しようとする他のクエリが実行されます。cmd ウィンドウと sqlplus ウィンドウから rman にアクセスできます。それがなければ、ここにコードがあります。助けてください:

public void execute(JobExecutionContext context) throws JobExecutionException {
         command[0] = "cmd";
         command[1] = "/c";
         command[2] = "rman target / catalog rman/rman@xe;";
         command[3] = "backup as backupset database plus archivelog;";
         command[4] = "exit;";
         command[5] = "sqlplus.exe;";
         try {  
         Process p = Runtime.getRuntime().exec(command);

         BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
         String line = reader.readLine();
         while (line != null) {
             System.out.println(line);
             line = reader.readLine();
         }

そして、これは出力です:

Recovery Manager: Release 11.2.0.2.0 - Production on Lun Nov 11 22:11:12 2013

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

connected to target database: XE (DBID=2711152663)
connected to recovery catalog database
4

2 に答える 2

0

Java での cmd コマンドの出力に関する問題を参照してください...具体的には、実行したいコマンドが複数ある場合はcmd、シンボルを使用して&それらを結合する必要があります。

于 2013-11-12T04:25:49.603 に答える
0

「対話型」セッションにいるかのようにコマンドを実行したい場合は、「cmd.exe」を生成しp.getOutputStream()てから、実行するコマンドを「書き込み」する必要があります。

何かのようなもの:

ProcessBuilder pb = new ProcessBuilder("cmd.exe");
pb.redirectErrorStream(true);
Process p = pb.start();
PrintWriter writer = new PrintWriter(p.getOutputStream());
writer.println("rman target / catalog rman/rman@xe;");
writer.println("backup as backupset database plus archivelog;");
writer.println("exit;");
writer.println("sqlplus.exe;");

注:コマンド間のコマンドを読まないと、p.getInputStream()ブロックされる可能性があります。

于 2013-11-12T04:46:10.707 に答える