一個開啓Oracle服務和更改主機名的腳本

    真不知道該起一個什麼題目,這是昨天數據庫老師提出的問題。因爲實驗室的機器都裝了還原卡,每次開機或重啓都會回到初始狀態,因此數庫的listener.ora、tnsnames.ora文件裏的host不是本機的計算機名,每次都須要手動修改,很麻煩。所須要寫一個腳原本自動化的完成這個任務。第一次寫技術博客,不知道問題描述清楚了沒有。 python

    我分是兩部分完成的,開啓服務和獲取主機名是用批處理命令,而後把主機名做爲參數傳入一個python腳原本完成對文件的修改。下面是批處理部分,文件名start.bat : shell

@echo off
rem 這是註釋

rem 獲取計算機名
python update.py %computername%

rem 開啓Oracle服務
net start OracleServiceORCL
net start OracleOraDb10g_home1TNSListener 

pause

update.py: 數據庫

#coding=utf-8
import sys

print u"計算機名:"
print sys.argv[1]

print u"見證奇蹟的時刻。。。"

#修改主機名
def update_file(path,old_name,new_name):
	"""
		python 不能直接修改文本的內容,嘗試了幾種方法,發現下面的方法比較好。
		先取出文件的內容,查找替換計算機名,重寫寫入覆蓋原來的文件。
		注意:用 w 或 w+ 方式打開文件時能夠寫入,若是文件名存在,會先清除原來的內容。
	"""
	file = open(path,'r+')
	content = file.read()
	content = content.replace(old_name, new_name)
	file.close()
	file = open(path,'w+')
	file.write(content)
	file.close()
	return

#三個文件的路徑
path1 = 'C:/oracle/product/10.2.0/db_1/NETWORK/ADMIN/listener.ora'
path2 = 'C:/oracle/product/10.2.0/db_1/NETWORK/ADMIN/tnsnames.ora'
path3 = 'C:/oracle/product/10.2.0/client_1/NETWORK/ADMIN/tnsnames.ora'

#文件裏的計算機名和本機的計算機名
old_name = 'sdwh119'
new_name = sys.argv[1]

update_file(path1, old_name, new_name)
update_file(path2, old_name, new_name)
update_file(path3, old_name, new_name)
    後來發現實驗室裏雖然都有python,可是環境變量沒有配置,因此每次開機還要先配置python的環境變量:「C:\Python27;」。兩個腳本都很簡單,可是也不是一下就寫出來的。批處理的內容都是現學現賣。

    下面是一個同窗徹底使用批處理的作法,如今仍是有幾個符號看不懂,也不想懂了: oracle

@echo off
setlocal enabledelayedexpansion
cd\
cd oracle\product\10.2.0\db_1\NETWORK\ADMIN
for /f "delims=" %%a in (tnsnames.ora) do (
    set aa=%%a
    set aa=!aa:sdwh119=%computername%!
    echo !aa!>>temp.txt
)
del tnsnames.ora
ren temp.txt tnsnames.ora
for /f "delims=" %%a in (listener.ora) do (
    set aa=%%a
    set aa=!aa:sdwh119=%computername%!
    echo !aa!>>temp.txt
)
del listener.ora
ren temp.txt listener.ora
cd\
cd oracle\product\10.2.0\client_1\NETWORK\ADMIN
for /f "delims=" %%a in (tnsnames.ora) do (
    set aa=%%a
    set aa=!aa:sdwh119=%computername%!
    echo !aa!>>temp.txt
)
del tnsnames.ora
ren temp.txt tnsnames.ora
net start OracleServiceORCL
net start OracleOraDb10g_home1TNSListener
相關文章
相關標籤/搜索