SQLServer之附加資料庫

来源:https://www.cnblogs.com/vuenote/archive/2019/01/20/10295509.html
-Advertisement-
Play Games

附加資料庫註意事項 必須首先分離資料庫。 嘗試附加未分離的資料庫將返回錯誤。 附加資料庫時,所有數據文件(MDF 文件和 LDF 文件)都必須可用。 如果任何數據文件的路徑不同於首次創建資料庫或上次附加資料庫時的路徑,則必須指定文件的當前路徑。 在附加資料庫時,如果 MDF 和 LDF 文件位於不同 ...


附加資料庫註意事項

必須首先分離資料庫。 嘗試附加未分離的資料庫將返回錯誤。 

附加資料庫時,所有數據文件(MDF 文件和 LDF 文件)都必須可用。 如果任何數據文件的路徑不同於首次創建資料庫或上次附加資料庫時的路徑,則必須指定文件的當前路徑。

在附加資料庫時,如果 MDF 和 LDF 文件位於不同目錄並且其中一條路徑包含 \\?\GlobalRoot,該操作將失敗。

需要 CREATE DATABASECREATE ANY DATABASE 或 ALTER ANY DATABASE 許可權。

分離再重新附加只讀資料庫後,會丟失有關當前差異基準的備份信息。 “差異基準” 是資料庫或其文件或文件組子集中所有數據的最新完整備份。 如果沒有基準備份信息,master 資料庫會變得與只讀資料庫不同步,這樣之後進行的差異備份可能會產生意外結果。 因此,如果對只讀資料庫使用差異備份,在重新附加資料庫後,應通過進行完整備份來建立新的差異基準。

附加時,資料庫會啟動。 通常,附加資料庫時會將資料庫重置為它分離或複製時的狀態。 但是,附加和分離操作都會禁用資料庫的跨資料庫所有權鏈接。

附加日誌文件的要求在某些方面取決於資料庫是讀寫的還是只讀的,如下所示:

  • 對於讀寫資料庫,通常可以附加新位置中的日誌文件。 不過,在某些情況下,重新附加資料庫需要使用其現有的日誌文件。 因此,請務必保留所有分離的日誌文件,直到在不需要這些日誌文件的情況下成功附加了資料庫。

    如果讀寫資料庫具有單個日誌文件,並且您沒有為該日誌文件指定新位置,附加操作將在舊位置中查找該文件。 如果找到了舊日誌文件,則無論資料庫上次是否完全關閉,都將使用該文件。 但是,如果未找到舊文件日誌,資料庫上次是完全關閉且現在沒有活動日誌鏈,則附加操作將嘗試為資料庫創建新的日誌文件。

  • 如果附加的主數據文件是只讀的,則 資料庫引擎 假定資料庫也是只讀的。 對於只讀資料庫,日誌文件在資料庫主文件中指定的位置上必須可用。 因為 SQL Server 無法更新主文件中存儲的日誌位置,所以無法生成新的日誌文件。

使用SSMS資料庫管理工具附加資料庫

1、連接伺服器-》在對象資源管理器視窗展開資料庫文件夾-》右鍵點擊資料庫文件夾-》選擇附加。

2、在附加資料庫彈出框-》點擊添加(查找必需的主資料庫文件。 當用戶選擇 .mdf 文件時,就會在 “要附加的資料庫” 網格的相應欄位中自動填充合適的信息。)。

3、在定位資料庫文件彈出框中-》選擇指定路徑下分離的資料庫文件-》點擊確定。

4、在附加資料庫彈出框-》要附加的資料庫窗格(顯示所選資料庫的有關信息。):MDF 文件位置(顯示選定 MDF 文件的路徑和文件名。);資料庫名稱(顯示資料庫的名稱。);附加為(根據需要,可以指定要附加資料庫的其他名稱。);“所有者”(提供資料庫可能所有者的下拉列表,您可以根據需要從其中選擇其他所有者。);“狀態”(顯示下表中相應的資料庫狀態。),狀態一圖標為無圖標,狀態文本為無文本,描述為此對象的附加操作尚未啟動或者可能掛起。 這是打開該對話框時的預設值;狀態二圖標為綠色的右向三角形,狀態文本為正在進行,描述為已啟動附加操作,但是該操作未完成;狀態三圖標為綠色的選中標記,狀態文本為成功,描述為已成功附加該對象;狀態四圖標為包含白色十字形的紅色圓圈,狀態文本為錯誤,描述為附加操作遇到錯誤,未成功完成;狀態五圖標為包含左、右兩個黑色象限和上、下兩個白色象限的圓圈,狀態文本為已停止,描述為由於用戶停止了附加操作,該操作未成功完成;狀態六圖標為包含一個指向逆時針方向的曲線箭頭的圓圈,狀態文本為已回滾,狀態描述為附加操作已成功,但已對其進行回滾,因為在附加其他對象的過程中出現了錯誤。-》刪除(從 “要附加的資料庫” 網格中刪除選定文件。)-》資料庫詳細信息窗格:原始文件名(顯示屬於資料庫的已附加文件的名稱。);文件類型(指示文件類型,即 “數據” 或 “日誌”。);當前文件路徑(顯示所選資料庫文件的路徑。 可以手動編輯該路徑。);消息(顯示空消息或 “找不到文件” 超鏈接。)-》點擊確定。


5、查看附加結果(不需要刷新即可在對象資源管理器視窗查看)。

使用T-SQL腳本附加資料庫

語法

--語法一
--聲明資料庫引用
use other_database_name;
go

--附加資料庫
create database database_name
on (filename='mdf_path'),
(filename='ldf_path')
for attach
go

--語法二
--聲明資料庫引用
use other_database_name;
go

--附加資料庫
create database database_name
on (
name='logical_file_name'
,filename='filestream_path'
,size= size_number [ KB | MB | GB | TB ]
,maxsize= { max_size_number [ KB | MB | GB | TB ] | unlimited  }
,filegrowth= growth_increment [ KB | MB | GB | TB | % ]
),
(
name='logical_log_file_name'
filename='log_filestream_path'
,size= size_number [ KB | MB | GB | TB ]
,maxsize= { max_size_number [ KB | MB | GB | TB ] | unlimited }
,filegrowth= growth_increment [ KB | MB | GB | TB | % ]
)
for { attach with
[ enable_broker | new_broker | error_broker_conversations ]
[,restricted_user]
[,filestream ( directory_name={ 'directory_name' | NULL })]
 | attach_rebuild_log }
go

語法解析

--語法解析
--other_database_name
--其它資料庫,不能使用要附加的資料庫進行附加。

--database_name
--新資料庫的名稱。資料庫名稱在SQL Server的實例中必須唯一,並且必須符合標識符規則。

--mdf_path
--資料庫分離的數據文件完整路徑。

--ldf_path
--資料庫分離的日誌文件完整路徑。

--name
--指定文件的邏輯名稱。 指定filename時,
--需要使用name,除非指定for attach子句之一。 無法將filestream文件組命名為primary。

--logical_file_name
--在SQL Server中引用文件時所用的邏輯名稱。 Logical_file_name在資料庫中必須唯一,並且必須符合標識符規則。
--名稱可以是字元或Unicode常量,也可以是常規標識符或分隔標識符。

--filename
--指定操作系統(物理)文件名稱。

--filestream_path
--資料庫數據文件完整路徑

--logical_log_file_name
--資料庫日誌名稱。

--log_filestream_path
--資料庫日誌文件完整路徑

--size
--指定文件的大小。
--將 os_file_name 指定為UNC路徑時,不能指定SIZE。 SIZE不適用於FILESTREAM文件組。

--size_number
--文件的初始大小。

--maxsize
--指定文件可增大到的最大大小。將os_file_name指定為UNC路徑時,不能指定maxsize。

--max_size_number
--最大的文件大小。可以使用 KB、MB、GB 和 TB 尾碼。預設值為 MB。指定一個整數,不包含小數位。
--如果未指定 max_size,文件將一直增長到磁碟變滿為止。Max_size 是一個整數值。對於大於2147483647的值,使用更大的單位。

--unlimited
--指定文件將增長到磁碟充滿。在SQL Server中,指定為不限制增長的日誌文件的最大大小為2TB,而數據文件的最大大小為16TB。

--filegrowth
--指定文件的自動增量。文件的filegrowth設置不能超過max_size_number設置。將os_file_name指定為UNC路徑時,不能指定filegrowth。
--filegrowth不適用於filestream文件組。

--growth_increment
--每次需要新空間時為文件添加的空間量。
--該值可以MB、KB、GB、TB 或百分比 (%)為單位指定。
--如果未在數量後面指定MB、KB 或%,則預設值為MB。
--如果指定%,則增量大小為發生增長時文件大小的指定百分比。 定的大小舍入為最接近的64KB的倍數,最小值為64KB。
--值為0時表明自動增長被設置為關閉,不允許增加空間。

--enable_broker
--指定對指定的資料庫啟用Service Broker。 也就是說,啟動了消息傳遞,
--並且在sys.databases 目錄視圖中將is_broker_enabled設置為true。資料庫保留現有的Service Broker標識符。

--new_broker
--在sys.databases和還原資料庫中都創建一個新的service_broker_guid值,並通過清除結束所有會話端點。
--Broker已啟用,但未向遠程會話端點發送消息。必須使用新標識符重新創建任何引用舊Service Broker標識符的路由。

--error_broker_conversations
--結束所有會話,並產生一個錯誤指出資料庫已附加或還原。
--Broker一直處於禁用狀態直到此操作完成,然後再將其啟用。資料庫保留現有的Service Broker標識符。

--restricted_user
--對於attach,可以指定restricted_user選項。
--restricted_user只允許db_owner固定資料庫角色成員以及dbcreator和sysadmin固定伺服器角色成員連接到資料庫,
--不過對連接數沒有限制。無資格用戶的嘗試將被拒絕。

--filestream
--將包含filestream選項“目錄名稱”的資料庫附加到SQL Server實例中將提示SQL Server驗證Database_Directory名稱是否唯一。

--directory_name={ 'directory_name' | NULL }
--適用於: SQL Server 2012 (11.x) 到 SQL Server 2017
--與Windows相容的目錄名稱。此名稱應在SQL Server實例的所有Database_Directory名稱中唯一。
--無論SQL Server排序規則設置如何,唯一性比較都不區分大小寫。在此資料庫中創建FileTable之前,應設置此選項。
--僅在將containment設置為partial之後,才允許使用以下選項。如果將containment設置為none,將發生錯誤。

--for attach_rebuild_log
--指定通過附加一組現有的操作系統文件來創建資料庫。該選項只限於讀/寫資料庫。
--必須有一個指定主文件的 <filespec> 項。如果缺少一個或多個事務日誌文件,將重新生成日誌文件。
--attach_rebuild_log自動創建一個新的1MB的日誌文件。此文件放置於預設的日誌文件位置。
--for attach_rebuild_log具有以下要求:完全關閉資料庫。所有數據文件(MDF 和 NDF)都必須可用。
--通常,FOR ATTACH_REBUILD_LOG 用於將具有大型日誌的可讀/寫資料庫複製到另一臺伺服器,
--在這台伺服器上,資料庫副本頻繁使用,或僅用於讀操作,因而所需的日誌空間少於原始資料庫。
--不能對資料庫快照指定for attach_rebuild_log。

示例

--示例一
--聲明資料庫引用
use master;
go

--附加資料庫
create database testss
on (filename='D:\SQLServer\tests.mdf'),
(filename='D:\SQLServer\testslog.ldf')
for attach
go

--示例二
--聲明資料庫引用
use master;
go

--附加資料庫
create database testss
on (
name='testss'
,filename='D:\SQLServer\tests.mdf'
,size=1021KB
,maxsize=1024MB
,filegrowth=1024MB
),
(
name='testsslog'
,filename='D:\SQLServer\testslog.ldf'
,size=1021KB
,maxsize=1024MB
,filegrowth=1024MB
)
for attach 
with 
enable_broker
,restricted_user
--,filestream ( directory_name='D:\SQLServer\')
go

示例結果:使用T-SQL腳本附加資料庫成功後需要刷新資料庫文件夾才能查看結果。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 參考 https://www.jianshu.com/p/99eea4db21c4 註:操作前最好先備份個 config.txt 文件 防止悲劇 防止悲劇 防止悲劇 終端下 進入boot/config.txt sudo nano /boot/config.txt 找到並把#hdmi_group=1改 ...
  • 原文:https://www.raspberrypi.org/documentation/configuration/config-txt.md譯文:http://my.oschina.net/funnky/blog/132885 概述 在啟動過程中, 樹莓派會從SD里讀取一些配置參數. 這些參數儲 ...
  • 內核自帶的驅動LCD,drivers/video/Fbmem.c LCD驅動程式 假設app: open("/dev/fb0", ...) 主設備號: 29, 次設備號: 0 kernel: fb_open int fbidx = iminor(inode); struct fb_info *inf ...
  • 在一般網頁里,date命令減時間方法為: 我的需求是,在指定時間上減8小時。按一般理解來看,命令寫成如下樣子(有異常錯誤的寫法): 期望結果是:23-11-2014 08:08:08 實際結果是:23-11-2014 17:08:08 所以,結果異常錯誤。同理減分鐘減小時,同樣錯誤,比如: 實際結果 ...
  • 下麵以一個按鍵的實驗作為驅動分離時間簡單學習: 1 #include <linux/module.h> 2 #include <linux/version.h> 3 4 #include <linux/init.h> 5 6 #include <linux/kernel.h> 7 #include ...
  • java調用存儲過程,java調運oracle存儲過程,java連接oracle資料庫實例,oracle中的plsql塊入門講解 ...
  • 結構化查詢語言pls/ql的基本單位是塊,結構由三部分組成,聲明部分、執行部分和異常處理部分。 例如: 表info(id,name,price) 1.定義變數與常量 type類型 record類型 --%ROWPYTE 2.條件控制語句 IF..ELSE.. CASE 3.迴圈控制語句 loop f ...
  • 在阿裡雲上搭建MySql8.0資料庫服務,在阿裡雲上可以成功連接登陸使用,但用自己的電腦遠程連接時卻無法成功連接 經過資料查找,找出原因如下: 1、首先通過查看MySQL的的用戶信息 可以看到host欄位均為localhost,意思是只允許本地IP訪問 執行 update mysql.user se ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...