AlwaysOn--查看可用性組的首先備份節點

来源:http://www.cnblogs.com/TeyGao/archive/2016/03/04/5242587.html
-Advertisement-
Play Games

在Alwayson中,可以通過設置來將備份放到指定的節點上完成,微軟提供了函數用來判斷當前指定節點進行備份: DECLARE @database_name NVARCHAR(200) SET @database_name= 'DB5' SELECT CASE [master].[sys].[fn_h


在Alwayson中,可以通過設置來將備份放到指定的節點上完成,微軟提供了函數用來判斷當前指定節點進行備份:

DECLARE @database_name NVARCHAR(200)
SET @database_name= 'DB5'
SELECT
CASE [master].[sys].[fn_hadr_backup_is_preferred_replica](@database_name)
WHEN 1 THEN '可以在當前節點進行備份'
ELSE '不可以在當前節點進行備份'
END


當DBA登錄到主節點上時,如果希望查看當前可用性組下那個節點是首先備份節點,需要是打開Alwasyon的屬性界面進行查看,很是不方便,於是有了下麵這段代碼:

-------------------------------------------------------
--查看AG上首選備份節點

IF(OBJECT_ID('tempdb..#tb_replica_server')IS NOT NULL)
BEGIN
 DROP TABLE #tb_replica_server
END

CREATE TABLE #tb_replica_server
(replica_server_name NVARCHAR(200))

--查看AG上備份設置和AG組名
DECLARE @backup_preference INT
DECLARE @availability_group_name NVARCHAR(200)

SELECT 
@backup_preference =AG.[automated_backup_preference],
@availability_group_name= AG.[name]
FROM sys.availability_groups AG

IF(@availability_group_name IS NOT NULL)
BEGIN

    --查看AG上的節點數量
    DECLARE @replica_server_count INT
    SELECT @replica_server_count=COUNT(1) 
    FROM sys.availability_groups AG
    INNER JOIN sys.availability_replicas AR
    ON AR.group_id = AG.group_id
    WHERE  AG.[name]= @availability_group_name

    --@backup_preference= 1 僅主節點備份
    IF @backup_preference= 0
    BEGIN
        INSERT INTO #tb_replica_server(replica_server_name)
        SELECT AR.replica_server_name FROM sys.availability_groups AG
        INNER JOIN sys.availability_replicas AR
        ON AR.group_id = AG.group_id
        INNER JOIN sys.[dm_hadr_availability_replica_states] AGS
        ON AGS.group_id = AR.group_id
        AND AGS.replica_id = AR.replica_id
        WHERE AG.[name] = @availability_group_name
        AND AGS.role=1
    END


    --@backup_preference= 1 僅輔助備份
    --@backup_preference=2  首先輔助副本
    IF (@backup_preference= 1 
        OR(@backup_preference=2 AND @replica_server_count>1))
    BEGIN
        INSERT INTO #tb_replica_server(replica_server_name)
        SELECT T1.replica_server_name FROM (
        SELECT AR.replica_server_name,
        ROW_NUMBER()OVER(ORDER BY AR.backup_priority DESC) AS RID
        FROM sys.availability_groups AG
        INNER JOIN sys.availability_replicas AR
        ON AR.group_id = AG.group_id
        INNER JOIN sys.[dm_hadr_availability_replica_states] AGS
        ON AGS.group_id = AR.group_id
        AND AGS.replica_id = AR.replica_id
        WHERE AG.[name] = @availability_group_name
        AND AGS.role=2
        ) AS T1
        WHERE T1.RID=1
    END

    --首先輔助副本但只有主節點
    IF (@backup_preference=2 AND @replica_server_count=1)
    BEGIN
        INSERT INTO #tb_replica_server(replica_server_name)
        SELECT AR.replica_server_name FROM sys.availability_groups AG
        INNER JOIN sys.availability_replicas AR
        ON AR.group_id = AG.group_id
        INNER JOIN sys.[dm_hadr_availability_replica_states] AGS
        ON AGS.group_id = AR.group_id
        AND AGS.replica_id = AR.replica_id
        WHERE AG.[name] = @availability_group_name
        AND AGS.role=1
    END

    --任意備份節點
    IF (@backup_preference=3)
    BEGIN
        INSERT INTO #tb_replica_server(replica_server_name)
        SELECT T1.replica_server_name FROM (
        SELECT AR.replica_server_name,
        ROW_NUMBER()OVER(ORDER BY AR.backup_priority DESC) AS RID
        FROM sys.availability_groups AG
        INNER JOIN sys.availability_replicas AR
        ON AR.group_id = AG.group_id
        INNER JOIN sys.[dm_hadr_availability_replica_states] AGS
        ON AGS.group_id = AR.group_id
        AND AGS.replica_id = AR.replica_id
        WHERE AG.[name] = @availability_group_name
        ) AS T1
        WHERE T1.RID=1
    END

    SELECT '當前可用組為:'+@availability_group_name
    SELECT '首先備份節點為:',T1.replica_server_name
    FROM #tb_replica_server T1

END
ELSE
BEGIN
    SELECT '當前不存在可用性組'
END

有需要的朋友可以進行簡單封裝成函數來使用。

找到備份節點,下麵腳本可供您方便查看資料庫備份情況

查詢指定資料庫最近一天的備份歷史記錄:

--======================================
--查詢指定資料庫最近一天的備份歷史記錄
SELECT
CONVERT(CHAR(100),SERVERPROPERTY('Servername'))ASServer,
bs.database_name,
bs.backup_start_date,
bs.backup_finish_date,
bs.expiration_date,
CASE bs.type
WHEN 'D' THEN 'Database'
WHEN 'L' THEN 'Log'
END ASbackup_type,
bs.backup_size,
bmf.logical_device_name,
bmf.physical_device_name, 
bs.name AS backupset_name,
bs.description,
'RESTORE DATABASE [DatabaseName] FROM DISK=N'''
+bmf.physical_device_name+ '''WITH NORECOVERY;'
FROM msdb.dbo.backupmediafamily bmf
INNER JOIN msdb.dbo.backupset bs
ON bmf.media_set_id=bs.media_set_id
WHERE bs.database_name='DatabaseName'
AND bs.backup_start_date>DATEADD(DAY,-1,GETDATE())
ORDER BY bs.database_name,
bs.backup_finish_date
View Code

查看實例上各資料庫最後一次備份時間

--====================================
--查看資料庫最後一次備份時間
WITH T1 AS(
SELECT  B.[database_name] ,
        B.[type],
        B.[backup_finish_date] AS [LastBackupDate] ,
        BMS.[physical_device_name] ,
        ROW_NUMBER() OVER ( PARTITION BY B.[database_name], B.[type] 
        ORDER BY B.[backup_finish_date] DESC ) AS RID
FROM    [msdb]..[backupset] B WITH(NOLOCK)
        INNER JOIN [msdb]..[backupmediafamily] BMS WITH(NOLOCK)
        ON BMS.[media_set_id] = B.[media_set_id]
),T2 AS
(
    SELECT 
    [database_name],
    [type],
    [LastBackupDate],
    [physical_device_name] 
    FROM T1
    WHERE T1.RID=1
)
SELECT  DB.[name] AS [DatabaseName],
        DB.[recovery_model_desc] AS [RecoveryModel],
        F.[LastBackupDate] AS [LastFullBackupDate],
        F.[physical_device_name] AS [LastFullBackupFile],
        D.[LastBackupDate] AS [LastDiffBackupDate],
        D.[physical_device_name] AS [LastDiffBackupFile],
        L.[LastBackupDate] AS [LastLogBackupDate],
        L.[physical_device_name] AS [LastLogBackupFile]
FROM    SYS.databases DB WITH(NOLOCK)
LEFT JOIN (SELECT * FROM T2 
            WHERE  T2.[type]='D') AS F
ON F.[database_name]=DB.[name]
LEFT JOIN (SELECT * FROM T2 
            WHERE  T2.[type]='I') AS D
ON D.[database_name]=DB.[name]
LEFT JOIN (SELECT * FROM T2 
            WHERE  T2.[type]='L') AS L
ON L.[database_name]=DB.[name]
View Code

運行效果:

 

--=====================================

妹子壓貼

 


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

-Advertisement-
Play Games
更多相關文章
  • 廢話不多說,列幾個列子 (幾種情況下的做法): 情景一: 介紹:1. 在UIViewController 上加 UICollectionView (用代碼 創建 UICollectionView)。 2. UICollectionView上的cell為自定義的view,名字叫:MyDealCell,
  • 最開始,客戶反映說在用app的時候,來個電話,接完再點app,不是原來的界面,而是重啟了。數據都沒了,所以就在activity重寫onSaveInstanceState方法,將數據保存起來。後經測試發現並沒有用,當然,activity有數據的是有必要重寫onSaveInstanceState方法保存
  • 當前視頻直播非常火爆,手機端的視頻直播也非常火爆,PGC、UGC的視頻直播門檻都降低了很多。 本文介紹一個:IOS 客戶端直播的SDK,代碼完全開源。 直播時代:讓IOS普通開發者一天內做出一個RTMP直播客戶端,並且帶有美艷直播功能。(文章最下麵有github源碼地址)
  • 最近做一個項目,需要用到UIPanGestureRecognizer做一個側滑菜單,需求是不能向右側拖動(點擊按鈕右滑),但可以向左側手勢拖動收回;於是需要判斷拖動的方向,百度了一下,網上大部分的答案是這樣判斷的: CGPoint translation = [recognizer translat
  • 項目中一個列表子項中也需要用到列表,這就不由得使我想到ListView的嵌套,其實這個東西想想也只是複雜了一點,並沒有什麼難的地方,可是卻依然在這裡狠狠滴栽個跟頭。問題出在子列表動態展開的操作上。可能說一大堆,不如一張圖來的直接,無圖言X,好吧,上圖。 佈局結構: <LinearLayout> <l
  • 就職文博公司要為博物館做APP 涉及到瓦片地圖的編寫 在這裡總結一些開發中遇到的問題 (將會不斷更新 也是學習階段) 著急寫項目的同學 可以直接看code4上現成的瓦片地圖代碼:http://www.code4app.com/ios/Tiled-Scroll-View/4fba3fd66803fa8
  • 開始對liunx界面不熟悉,可能由於不小心,把root誤刪了,怎麼辦? 1. # killall mysqld 幹掉所有mysql進程 2. # mysqld_safe --skip-grant-tables & 進入mysql安全模式 3. 通過上一步進入mysql的console(控制台),輸入
  • package com.wdzj.redis.distributed.lock; import java.util.UUID; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.c
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...