1.關閉資料庫
shutdown immediate;
2.啟動資料庫至Mount狀態
startup mount;
3.設定資料庫為Archiving Mode
alter database archivelog;
4.開啟資料庫
alter database open;
5.最後建議作個完整備份
記錄我的學習歷程,雖然內容不豐富也懶的更新,但仍希望您能在這找到對您有用的東西!
1.關閉資料庫
shutdown immediate;
2.啟動資料庫至Mount狀態
startup mount;
3.設定資料庫為Archiving Mode
alter database archivelog;
4.開啟資料庫
alter database open;
5.最後建議作個完整備份
目前結論是不能設!!不管您是用Oledb或OracleClient都不行!
最近在寫一個Web Service讓廠商叫用,後端資料庫是ORACLE,用Oledb的方式連到資料庫抓資料。
當初規格是開10秒內要回應,昨天下班前廠商說要測試資料庫連不上的情形,所以我就把DB關掉,但是廠商反映Web Service都會超過10秒才回應不符規格要求,我在ConnectionString的後面加上Connect Timeout=5,測試一下!
嗯!!DataAdapter.SelectCommand.Connection.ConnectionTime如願的被改為5了,DataAdapter.Fill()時也會丟出exception,ex.Message怪怪的,什麼叫"多重步驟 OLE DB 操作發生錯誤。請檢查每一個可用的 OLE DB 狀態值",看不太懂...應該沒問題吧!所以我就下班讓廠商慢慢測囉!
今天快中午,廠商又打電話來,說他測完了叫我可以開DB!...咦!我不是一早就開DB了,追蹤程式才發現是只要Connection.Open()就會出這個exception,拿掉連線字串中的Connect Timeout=5就沒問題!所以就改一下讓廠商繼續測其他項目!
Google一下錯誤訊息,在微軟找到答案http://support.microsoft.com/kb/269495/zh-tw 應該是文中所說的但 ADO 連線字串有問題,後來又查了一堆資料,也作了一堆的測試....最後在MSDN文件中找到確定沒解的答案http://msdn2.microsoft.com/en-us/library/system.data.oracleclient.oracleconnection(vs.71).aspx
Note Unlike the Connection object in the other .NET Framework data providers (SQL Server, OLE DB, and ODBC), OracleConnection does not support a ConnectionTimeout property. Setting a connection timeout using a property or in the connection string has no effect and value returned is always zero. OracleConnection also does not support a Database property or a ChangeDatabase method.
微軟這邊沒支援,我想只好再找看看Oracle有沒有什麼方法可以作限制,試了半天改sqlnet.ora的參數names.request_retries、names.initial_retry_timeout、SQLNET.INBOUND_CONNECT_TIMEOUT、SQLNET.RECV_TIMEOUT、SQLNET.RECV_TIMEOUT都試過了都沒效!
明天上班再試試吧....
============2008/03/06 補充=====
時光飛逝,其實隔天我在MSDN就找到解決的方法了,他是一個VB6的範例,印象中他是用Timer去作計時,不過我現在忘記是用什麼關鍵字去搜尋到的,所以沒有辦法附原始範例的連結囉....
既然我們用的是.Net,所以當然不要用Timer這種方式來作,我的解法是用.Net多執行緒的方式來解,範例如下:
Imports System.Data.OracleClient
Public Class frmOracleClient
Dim StartTime, EndTime As DateTime
Dim Cn As New OracleConnection
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim th As Threading.Thread
th = New Threading.Thread(AddressOf CreateConnection)
Try
Dim i As Integer = 0
th.Start()
'判斷是否另一個執行緒是否執行完畢戓是超過5秒
While th.ThreadState <> Threading.ThreadState.Stopped And i < 5
i = DateDiff(DateInterval.Second, StartTime, Now)
End While
If th.ThreadState = Threading.ThreadState.Running Then
th.Abort()
End If
Catch ex As Exception
End Try
MessageBox.Show("Stop")
End Sub
Private Sub CreateConnection()
Try
Cn.ConnectionString = "Data Source=Your_DB_Name;User ID=Your_ID;Password=Your_Password"
StartTime = Now
Cn.Open()
Catch ex As Exception
EndTime = Now
MessageBox.Show(ex.Message & vbCrLf & _
"StartTime : " & StartTime.ToString & vbCrLf & _
"EndTime : " & EndTime.ToString)
End Try
End Sub
End Class
用.NET開發的Web Service,預設的設定是只有本機可以用瀏覽器作測試叫用,但是我們會用Web Service一定是用在不同平台、技術的整合上,所以在開發期間能讓別人作測試叫用,對我們開發人員而言是相當需要的功能。
廢話半天,那要怎麼作才能讓非本機也可以測試叫用.NET Web Service呢?說破不值錢,答案就在Web.config裡面。
在
<system.web>
......
......
</system.web>
的中間加入
<webServices>
<protocols>
<add name="HttpGet" />
<add name="HttpPost" />
</protocols>
</webServices>
SELECT segment_name,segment_type,extents,bytes,
ROUND(bytes/(1024*1024),1) MBytes
FROM user_segments
ORDER BY segment_name
今天同事Tad問我,他在FormView的EditItemTemplate中放入一個DropDownList,用來在頁面顯示代理人姓名資訊,以方便使用者編輯時可以直接選擇員工姓名而不是輸入員工代碼。
如果資料中有代理人資料時是都沒問題,但是如果一筆資料沒有代理人時按下編輯,就會出現"DropDownList擁有的 SelectedValue 無效,因為它不在項目清單中"錯誤訊息。
我的作法是:先在DropDownList的Items中加入一筆空白資料(Item的Text和Value都是空白),再將AppendDataBindItems屬性設為True,這樣作就會讓DropDownList的最上方多一筆空白資料,當某筆資料的代理人資訊是空白時,就會繫結到第一筆的空白資料,也就不會有錯誤訊息啦!
今天把一些服務停掉後,在使用Visual Studio 2005寫程式時,發現沒辦法Debug,出現錯誤訊息"無法開始偵錯 . 連結控制碼不正確"。
後來只好試著把停掉的服務一個個的開,最後終於發現是"Terminal Services"不可以停用。
昨天替NB換硬碟,先用Ghost 9.0將舊硬碟資料複製到新硬碟,換上新硬碟開機,卻發生奇怪的問題!
開機後,一路開到登入畫面都還很正常,還想說沒問題了咧,輸入帳號密碼後,顯示"系統載入個人資料"後立即 就顯示"正在登出",卡在這裡好幾分鐘後,最後又回到登入的畫面。
不死心再登入一次,狀況相同...
換用Administrator帳密再試一次,一樣沒辦法登出....
重開機進安全模式,兩個帳號都試了,還是沒用........
換回舊硬碟開機卻又可以正常登入,上Google搜尋吧!找到一堆負面的答案,無解啦!序號黑名單啦!重灌啦!刪掉Pagefile.sys啦!總之試了半天,都沒用..........
最後在PCZONE討論區看到一位hertw網友的Post,他建議在作Ghost之前先把Registry中 HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices 內的機碼都刪除掉,因為這個機碼紀錄了硬碟的相關訊息,清掉以後,Ghost 完系統重開機才會根據你所使用的硬碟重建那些機碼,我覺得還滿有道理的,就試試吧!
第一次測試是失敗的,因為我是先刪機碼,再插入USB外接式硬碟,然後才作Ghost,我想失敗的原因是在插入USB外接式硬碟時,系統又馬上重建了那些機碼。
第二次就成功了,這次是先插入USB外接式硬碟,再執行Ghost,把Source、Destination都選好後,才去刪機碼,這樣就沒問題囉!!!