使用进程在客户端服务器上执行utl_recomp

时间:2015-05-11 17:39:09

标签: c# oracle sqlplus

我要做的是创建一个打开sqlplus,连接到远程服务器并执行数据库重新编译的进程。

string arg =                  
         "\"conn " + myConnect + " as sysdba \""+
         "\"begin UTL_RECOMP.RECOMP_SERIAL('" + mySchema + "'); end;\"";

Process pro = new Process()  
pro.StartInfo.FileName = "sqlplus.exe";
pro.StartInfo.Arguments = arg;
pro.StartInfo.EnvironmentVariables["ORACLE_HOME"] = Srvr.OH;
pro.StartInfo.UseShellExecute = false;
pro.StartInfo.RedirectStandardOutput = true;
pro.StartInfo.RedirectStandardError = false;
pro.Start();
pro.WaitForExit();

进程运行但我的对象仍然无效。我已远程连接并从命令行成功运行此sql语句作为sysdba。有任何想法吗?

1 个答案:

答案 0 :(得分:0)

string mySqlPath = path + ".sql";
string mysql = "begin UTL_RECOMP.RECOMP_SERIAL('" + mySchema + "'); end;";

string arg =   
         " /c echo / | " + pathway +"sqlplus.exe"               
         " -silent " + myConnect + " as sysdba" +
         "@" + mysql;

StreamWriter strWr = new StreamWriter(mySqlPath);
strWr.WriteLine(mysql);
strWr.WriteLine("/");
strWr.Close();

Process pro = new Process()  
pro.StartInfo.FileName = "cmd";
pro.StartInfo.Arguments = arg;
pro.StartInfo.EnvironmentVariables["ORACLE_HOME"] = Srvr.OH;
pro.StartInfo.UseShellExecute = false;
pro.StartInfo.RedirectStandardOutput = true;
pro.StartInfo.RedirectStandardError = false;
pro.Start();
pro.WaitForExit();

这非常适合远程重新编译!是一个长期试图解决它,但不得不添加更多的代码,你可以看到。 " cmd"在filename中我需要关闭数据库,挂载数据库,更改数据库归档日志,更改数据库闪回,更改数据库打开,然后退出。重新编译成功完成,以及我的验证过程,该过程返回0行选择' INVALID'。