我要做的是创建一个打开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。有任何想法吗?
答案 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'。