欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

oracle 啟動(dòng)bat

<不管是企業(yè)級(jí)應(yīng)用還是小型網(wǎng)站,Oracle數(shù)據(jù)庫(kù)都是其中重要的一環(huán)。在運(yùn)行Oracle數(shù)據(jù)庫(kù)時(shí),啟動(dòng)bat文件是一個(gè)不可避免的過(guò)程,本文討論如何啟動(dòng)Oracle數(shù)據(jù)庫(kù)的bat文件以及可能遇到的一些問(wèn)題。>作為開(kāi)發(fā)人員,我們很清楚無(wú)法通過(guò)鼠標(biāo)點(diǎn)擊才能啟動(dòng)Oracle數(shù)據(jù)庫(kù),在Windows下需要打開(kāi)命令行窗口,進(jìn)入Oracle安裝目錄下的bin目錄,并輸入啟動(dòng)數(shù)據(jù)庫(kù)的命令。此命令通常如下所示:
sqlplus /nolog
conn / as sysdba
startup
當(dāng)然這只是最基礎(chǔ)的啟動(dòng)Oracle數(shù)據(jù)庫(kù)的命令,實(shí)際情況更為復(fù)雜。 首先,Oracle數(shù)據(jù)庫(kù)啟動(dòng)需要許多環(huán)境變量的支持,在啟動(dòng)之前,需要將Oracle安裝目錄下的環(huán)境變量文件(如oraenv.bat)運(yùn)行一次,將所需的環(huán)境變量寫入到當(dāng)前終端的環(huán)境變量中。
@echo off
echo. 
echo Set Oracle Environment for windows platform 
echo Version 11.2.0.1.0 - Production 
echo Copyright (c) 2001, 2009, Oracle. All rights reserved. 
echo. 
set ORACLE_SID=orcl
set ORACLE_HOME=D:\oracle\product\11.2.0\dbhome_1
set PATH=%ORACLE_HOME%\bin;%PATH%
echo ORACLE_SID=%ORACLE_SID%
echo ORACLE_HOME=%ORACLE_HOME%
echo PATH=%PATH%
echo.
這樣,我們就可以啟動(dòng)Oracle數(shù)據(jù)庫(kù),但是在實(shí)際的生產(chǎn)環(huán)境中,Oracle數(shù)據(jù)庫(kù)經(jīng)常還會(huì)被集成到其他應(yīng)用程序中。例如,我們?cè)谝粋€(gè)J2EE應(yīng)用程序中使用了JDBC連接Oracle,如何保證Oracle服務(wù)的正常工作呢? 此時(shí)我們可以通過(guò)Java ProcessBuilder來(lái)啟動(dòng)BAT腳本,在后臺(tái)啟動(dòng)Oracle數(shù)據(jù)庫(kù)。
public static void startOracleServer() throws IOException {
String[] cmd = { "cmd", "/c", "start", "startOracle.bat" };
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.directory(new File("D:\\oracle\\product\\11.2.0\\dbhome_1\\bin"));
Process p = pb.start();
}
public static void stopOracleServer() throws IOException {
String[] cmd = { "cmd", "/c", "start", "stopOracle.bat" };
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.directory(new File("D:\\oracle\\product\\11.2.0\\dbhome_1\\bin"));
Process p = pb.start();
}
需要注意的是,為了在后臺(tái)運(yùn)行Oracle,可以通過(guò)Windows的“start”命令來(lái)啟動(dòng)BAT文件(如上例中的“startOracle.bat”和“stopOracle.bat”)。同時(shí)在Java ProcessBuilder中要設(shè)置BAT文件所在的目錄,避免出現(xiàn)找不到文件的錯(cuò)誤。 在使用ProcessBuilder啟動(dòng)BAT文件后,由于Oracle需要時(shí)間來(lái)完成啟動(dòng)過(guò)程,我們不能在啟動(dòng)Oracle數(shù)據(jù)庫(kù)后立即嘗試JDBC連接。實(shí)際上,Oracle提供了一個(gè)狀態(tài)文件“ORACLE_HOME/startup.log”,記錄了Oracle服務(wù)啟動(dòng)進(jìn)度。只有當(dāng)該文件存在且最新的一行是“Database opened”時(shí),Oracle服務(wù)才是完全開(kāi)啟的。我們可以借助Java WatchService API定期檢查狀態(tài)文件,一旦“Database opened”出現(xiàn)在最新一行,則說(shuō)明Oracle數(shù)據(jù)庫(kù)已經(jīng)完全開(kāi)啟,程序可以正常使用JDBC來(lái)連接Oracle。
public static void monitorOracleServer() throws InterruptedException {
try {
Path path = Paths.get(ORACLE_HOME + "/startup.log");
WatchService watchService = FileSystems.getDefault().newWatchService();
path.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY);
while (true) {
WatchKey key = watchService.take();
for (WatchEventevent : key.pollEvents()) {
if (event.context().toString().equals("startup.log")) {
String lastLine = getLastLineOfFile(event.context().toString());
if (lastLine.contains("Database opened.")) {
System.out.println("Oracle has started");
return;
}
}
}
boolean valid = key.reset();
if (!valid) {
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
以上方法僅供參考,實(shí)際應(yīng)用中可能還需要一些調(diào)整或改進(jìn),例如兼容Oracle RAC環(huán)境。總之,啟動(dòng)Oracle數(shù)據(jù)庫(kù)BAT文件的過(guò)程并不困難,但需要開(kāi)發(fā)人員對(duì)Oracle數(shù)據(jù)庫(kù)的啟動(dòng)和運(yùn)作有一定的了解,以避免出現(xiàn)不必要的錯(cuò)誤。