我的sqlplus命令没有完成,它等待密码行,它不会给我错误。
当我打开新的cmd窗口并粘贴此代码时,此代码没有问题!一切都好, 但我不能使用process();
在c#上运行我的sqlplus命令文本:
Set ORACLE_SID=prod
Set ORACLE_HOME=C:\oracle\product\10.2.0\db_1
sqlplus -s
sys as sysdba
password
shutdown immediate
startup mount
recover standby database until cancel;
cancel
alter database open read only;
exit;
exit;
我试试这个:
C:\cmd.cmd
*********************************************
Set ORACLE_SID=prod
Set ORACLE_HOME=C:\oracle\product\10.2.0\db_1
sqlplus -s
sys as sysdba
manager
select * from dual;
exit;
*********************************************
Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = @"C:\cmd.cmd";
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardOutput = true;
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
process = Process.Start(startInfo);
//output
string BatProcessResult = process.StandardOutput.ReadToEnd();
输出:
D:\ AppPath \ bin \ Debug>设置ORACLE_SID = prod
D:\ AppPath \ bin \ Debug>设置ORACLE_HOME = C:\ oracle \ product \ 10.2.0 \ db_1
D:\ AppPath \ bin \ Debug> sqlplus -s
D:\ AppPath \ bin \ Debug> sys as sysdba;
答案 0 :(得分:0)
尝试
sqlplus -L username/pw@db @ fileWithCommands.sql
或
set ORACLE_SID=...
sqlplus -L / as sysdba
这不会等待用户名和密码,而是使用给定的凭据登录。如果它们错了,sqlplus将立即退出并显示错误。如果凭据正确,sqlplus将一个接一个地运行给定文件中的所有命令。
答案 1 :(得分:0)
您忘记将用户角色附加到您的命令。尝试使用这个
sqlplus <username>/<password>@<host>:<port>/<sid> <db_role> @<script>
例如:
sqlplus sys/oracle@localhost:1524/ORCL AS SYSDBA @myscript.sql