Ngữ Cảnh Sử Dụng Linked Servers

Bạn là một SQL Server Admin trong công ty, quản lý nhiều hệ thống cơ sở dữ liệu trên các server khác nhau. Công ty cần bạn thực hiện các nhiệm vụ như:

  1. Tổng hợp dữ liệu từ nhiều nguồn SQL Server để tạo báo cáo kinh doanh tổng quan.
  2. Truy vấn chéo server để so sánh dữ liệu giữa các hệ thống.
  3. Cập nhật dữ liệu đồng bộ giữa các hệ thống cơ sở dữ liệu trong mạng nội bộ (hoặc qua VPN).

Kịch bản Thực Tế

  • Server A (LocalServer): Chứa dữ liệu đơn hàng (Orders).
  • Server B (RemoteServer): Chứa dữ liệu khách hàng (Customers).
  • Yêu cầu: Bạn cần tạo một báo cáo tổng hợp danh sách các khách hàng (Server B) đã đặt hàng trong tháng 12 (Server A).

Ứng Dụng Linked Server

Linked Server cho phép bạn truy cập dữ liệu từ RemoteServer ngay trên LocalServer, thay vì phải xuất/nhập dữ liệu thủ công hoặc sử dụng các công cụ ETL phức tạp. Các lý do sử dụng bao gồm:

  1. Tổng hợp dữ liệu: Kết hợp dữ liệu từ nhiều server để xây dựng báo cáo tổng quan.
  2. Truy vấn chéo server: Thực hiện các truy vấn JOIN giữa các server khác nhau để phân tích dữ liệu liên quan.
  3. Đồng bộ dữ liệu: Cập nhật hoặc chuyển đổi dữ liệu trực tiếp từ server nguồn sang server đích mà không cần qua bước trung gian.

Cách Thiết Lập Linked Server

Cách 1: Thiết lập trên giao diện SQL Server Management Studio (SSMS)

  1. Mở SQL Server Management Studio (SSMS).
  2. Trong Object Explorer, mở rộng mục Server Objects và nhấp chuột phải vào Linked Servers.
  3. Chọn New Linked Server.
  4. Trong cửa sổ New Linked Server:

Nhập thông tin kết nối remote user và password

Nhấp OK để hoàn tất và kiểm tra kết nối.

Cách 2: Sử dụng T-SQL

Bước 1: Tạo Linked Server

Giả sử bạn muốn liên kết Server A với Server B.

EXEC sp_addlinkedserver

    @server = N’RemoteServer’,

    @srvproduct = N’SQL Server’; — Server B

Bước 2: Thêm Tài Khoản Đăng Nhập

EXEC sp_addlinkedsrvlogin

    @rmtsrvname = N’RemoteServer’,

    @useself = ‘False’,

    @locallogin = NULL,

    @rmtuser = N’username’,

    @rmtpassword = N’password’;

Bước 3: Kiểm tra Kết Nối

Thực hiện một truy vấn đơn giản:

SELECT * FROM RemoteServer.DatabaseName.SchemaName.TableName;


Ví Dụ Ứng Dụng

Truy vấn Dữ Liệu

  • Truy vấn danh sách khách hàng từ Server B và đơn hàng từ Server A, sau đó JOIN để tạo báo cáo.

Tổng hợp Dữ liệu Báo Cáo

  • Chèn dữ liệu đã tổng hợp từ linked server vào một bảng báo cáo trên Server A để phục vụ cho BI (Business Intelligence).

Đồng bộ Dữ liệu

  • Cập nhật trạng thái khách hàng trên Server B dựa trên thông tin đơn hàng từ Server A.

Lợi Ích Khi Sử Dụng Linked Server

  1. Tiết kiệm thời gian: Không cần xuất/nhập dữ liệu giữa các server.
  2. Tự động hóa: Có thể tích hợp vào các stored procedure hoặc job.
  3. Tính toàn vẹn dữ liệu: Truy vấn hoặc cập nhật dữ liệu trực tiếp mà không cần lưu trữ tạm thời ở bên ngoài.

Linked Server là một giải pháp mạnh mẽ và linh hoạt để quản lý và tích hợp dữ liệu giữa nhiều hệ thống cơ sở dữ liệu, đặc biệt trong các môi trường doanh nghiệp phức tạp.

Phương Nguyễn

CÁCH FIX LỖI SQL SERVER DATABASE IN RECOVERY MODE

CÁCH FIX LỖI SQL DATABASE IN RECOVERY MODE

Ngữ cảnh lỗi.

Máy chủ đang chạy SQL Server bị ngắt điện đột ngột sẽ bị lỗi databases vì dữ liệu đang ghi log chưa checkpoint cho nên sẽ bị in recovery mode hoặc recovery pending.

Kết quả chúng ta không thể truy cập như hình.

Kiểm tra tình trạng hay trạng thái databases

SELECT name, state_desc from sys.databases

Dùng lệnh bên dưới để kiểm tra

Một số trạng thái của dữ liệu như sau:

  • ONLINE
  • RESTORING
  • RECOVERING
  • RECOVERY_PENDING
  • SUSPECT
  • EMERGENCY
  • OFFLINE
  • COPYING
  • OFFLINE_SECONDARY

Trạng thái chúng ta đang bị là Recovering

Nguyên nhân gây lỗi

Một số nguyên nhân sư sau:

  • Máy chủ SQL bị tắt do lỗi. Nó có thể là phần cứng, sức mạnh hoặc thứ gì khác.
  • Đĩa có thể bị thiếu.
  • Tệp MDF hoặc LDF có thể bị thiếu
  • Đĩa đầy
  • Quá trình nâng cấp SQL không diễn ra tốt đẹp hoặc bị gián đoạn.
  • Sự thay đổi lớn đang được đưa ra nhưng có điều gì đó đã thất bại giữa chừng, chẳng hạn như những thay đổi đối với tính năng FileStream.
  • Tệp LDF (nhật ký) bị hỏng.
  • Tệp MDF (dữ liệu) bị hỏng. Tệp db của tệp MDF có thể bị hỏng vì nhiều lý do như sự cố đĩa hoặc SAN, lỗi phần cứng, vi rút, v.v.
  • Máy chủ đã khởi động lại và có gì đó đã thay đổi, chẳng hạn như thiếu đĩa hoặc thư mục hoặc thiếu quyền.
  • Cryptoware đã mã hóa các tệp SQL của bạn.

Cách xử lý

Trường hợp 1: Set Database state to ONLINE

Lỗi do disk full thì không thể set online cũng như start chúng ta phải mở rộng disk trước khi thực hiện.

ALTER DATABASE ‘AdventureWorks2019’ SET ONLINE;

DBCC CHECKDB(‘AdventureWorks2019’) WITH NO_INFOMSGS;

Trường hợp 2: Rebuilding lại log file và detach và attach file

Nôm na là setup mode emergency, sau đó detach, attach lại.

ALTER DATABASE [AdventureWorks2019] SET EMERGENCY;

ALTER DATABASE [AdventureWorks2019] set MULTI_USER;

EXEC sp_detach_db '[AdventureWorks2019]';

EXEC sp_attach_single_file_db @DBName = '[AdventureWorks2019]', @physname = N'MDF_FILE_FULL_PATCH';

Trường hợp 3: Initiate DBCC CHECKDB with REPAIR option

  • Admin bị và xử lý theo cách 3 sẽ ok chúng ta có thể rơi vào từng trường hợp để test nhé.
  • Trường hợp này có thể bị mất dữ liệu, tốt nhất có thể chuẩn bị bản backup, trước khi thao tác.
  • Hãy chắc chắn rằng bạn có một bản sao lưu. Đừng làm điều này trên db DUY NHẤT mà bạn có, vì sau khi sửa chữa hoàn tất, bạn có thể mất dữ liệu và bạn có thể không thích những gì đã bị mất!
  • DBCC CHECKDB với tùy chọn SỬA CHỮA là một giao dịch được ghi lại và có thể phục hồi. Điều đó có ý nghĩa gì với bạn? Điều đó có nghĩa là nếu bạn gói DBCC CHECKDB với REPAIR vào một giao dịch (thực thi BEGIN TRANSACTION trước khi chạy lệnh) và bạn không thích kết quả cuối cùng, thì bạn có thể hoàn nguyên giao dịch và quay lại nơi bạn đã bắt đầu. Bằng cách đó, bạn sẽ có thể Khôi phục các thao tác sửa chữa nếu cần thiết.
  • 3.1. REPAIR_REBUILD
  • Có nhiều cấp độ sửa chữa khác nhau. Hãy thử bắt đầu với “REPAIR_REBUILD”, thực hiện sửa chữa mà không có khả năng mất dữ liệu:
    1. Đặt cơ sở dữ liệu ở chế độ một người dùng
    2. Chạy DBBC CHECKDB với “REPAIR_REBUILD”
    3. Đặt cơ sở dữ liệu thành “online” và kích hoạt lại chế độ nhiều người dùng

Câu lệnh bên dưới lưu ý thay databases của các bạn vào nhé:

ALTER DATABASE DATABASENAME SET SINGLE_USER;

DBCC CHECKDB (DATABASENAME, REPAIR_REBUILD) WITH NO_INFOMSGS, ALL_ERRORMSGS;

ALTER DATABASE [DATABASENAME] SET ONLINE;

ALTER DATABASE [DATABASENAME] SET MULTI_USER;

Nếu sửa chữa thành công, cơ sở dữ liệu có thể được đặt lại về chế độ nhiều người dùng. Nếu không, mức độ sửa chữa “REPAIR_ALLOW_DATA_LOSS” là tùy chọn tiếp theo.

  • 3.2. REPAIR_ALLOW_DATA_LOSS

Bước này có thể bị mất dữ liệu nhé 😊

  1. Đặt cơ sở dữ liệu ở chế độ Khẩn cấp
  2. Chạy DBBC CHECKDB với “REPAIR_ALLOW_DATA_LOSS”
  3. Đặt cơ sở dữ liệu thành “ONLINE” và kích hoạt lại chế độ nhiều người dùng

Code Sql:

ALTER DATABASE [DATABASENAME] SET EMERGENCY;

ALTER DATABASE [DATABASENAME] SET SINGLE_USER;

DBCC CHECKDB (DATABASENAME,REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS;

ALTER DATABASE [DATABASENAME] SET ONLINE;

ALTER DATABASE [DATABASENAME] SET MULTI_USER;

Check data

Kiểm tra lại trạng thái

Trường hợp 4: Restoring from Backup

Trường hợp này là sau cùng, các trường hợp trên không cứu được chúng ta buộc phải khôi phục từ backup.

Ngoài các công cụ sẵn có của MSSQL chúng ta có thể sử dụng áp thứ 3 trả tiền license để khôi phục hoặc sửa chữa:

  • SysInfo Tools MS SQL Database Recovery Software,
  • Stellar Repair for MS SQL,
  • DiskInternals MSSQL Recovery Software
  • DataNumen SQL Recovery
  • Recovery for SQL Server
    Aryson SQL Database Recovery Tool
  • ApexSQL Recover
  • Recoveryfix for SQL Database Recovery
  • Recovery Toolbox for SQL Server
  • SysTools SQL Recovery Software

Chúc các bạn thành công trong công việc cứu dữ liệu

Phương nguyễn viết

Tài liệu tham khảo:

https://red9.com/blog/how-to-fix-recovery-pending-state-in-sql-server/

HƯỚNG DẪN UGPRADE SQL SERVER 2008R2 RTM, SP1-SP3

Thông tin phiên bản

Download

SQL Server 2008R2 10.50.1617.0

Tham khảo tại đây

https://sqlserverbuilds.blogspot.com/2008/05/sql-server-2008-r2-versions.html

Chúng ta cần download source cài update RTM lên SQL Server 2008R2 SP3 tại đây

http://www.microsoft.com/en-us/download/details.aspx?id=44271

Cần update SP3 (10.50.6000.34)=> 10.50.6560 Bản vá

Tải về copy vào server

Double click vào chạy theo thứ tự nhé

Kiểm tra

Tiếp theo cập nhật bản vá mới nhất

Update tới bản vá mới nhất: 4057113 Description of the security update for SQL Server 2008 R2 SP3 GDR: January 6, 2018 – Security Advisory ADV180002  (2009.100.6560.0)

https://support.microsoft.com/en-us/help/4057113

Cũng tương tự

Như vậy là update thành công phiên bản mới nhất SQL 2008R2 SP3. Bản SQL Server 2008R2 này được xem là bản ổn định nhất trong các phiên bản SQL Server. Tuy nhiên MS đã ngưng hỗ trợ bản này chúng ta nên có kế hoạch cập nhật upgrade phiên Bản mơi nhất SQL Server 2012, 2014,2016,2017, 2019 nhé.

Chúc các bạn thành công

Phương nguyễn