Sql-Server
附加數據庫 - 驗證 - 從腳本或批處理文件中分離
有一百個很好的理由……我保證至少有幾個是好的……我發現自己擁有由不同版本的 sql server 生成的近 200 個 SQL server 數據庫(mdf、ldf 文件),大多數是 2005 年。
我需要驗證每個人的完整性並跟進失敗的人。
畢竟….我的問題是:
是否可以使用批處理文件或簡單腳本附加-驗證-分離每個數據庫?
我已經將 sqlcmd 用於類似的工作,但是對於這本書,我想我會看看是否有更簡單的方法。
這個相當棘手。我不知道如何訪問 DBCC 消息,但正在研究它。無論如何,這個 Powershell 腳本附加數據庫,執行 DBCC CHECKDB 並分離 dbs。
# Get database files from where ever they are $databases = gci "C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data2\*.mdf" $sqlCmds = @() # Parse db names from file names somehow and generate attach/check/detach statements foreach($db in $databases) { $dbName = [regex]::Replace($db.Name, "(?i)\.mdf", "") $lgName = [regex]::Replace($db.FullName, "(?i)\.mdf", ".ldf") $sqlCmds += $("CREATE DATABASE {0} ON (FILENAME = '{1}') LOG ON (FILENAME = '{2}') FOR ATTACH;" -f $dbName, $db.FullName, $lgName) $sqlCmds += $("DBCC CHECKDB ({0});" -f $dbName) $sqlCmds += $("EXEC sp_detach_db @dbname='{0}';" -f $dbName) } [void][Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") $conn = new-object Microsoft.SqlServer.Management.Common.ServerConnection $conn.ConnectionString = "Server=SERVER\INSTANCE;Database=master;Integrated Security=True" $s = $sqlCmds[0] # Try and execute the statements try { foreach($s in $sqlCmds) { $ret = $conn.ExecuteNonQuery($s) $ret } } catch [system.exception] { $_.Exception.ToString() }