Chú ý quan trọng khi sử dụng SQL Server

  1. Các loại sao chép trong SQL Server Sao chép theo hình ảnh: Máy chủ phát hành gửi bản sao dữ liệu theo lịch trình định kỳ cho máy chủ đăng ký.

Sao chép giao dịch: Sau khi nhận được bản sao ban đầu, máy chủ phát hành truyền giao dịch trực tiếp đến máy chủ đăng ký.

Sao chép đồng đẳng: Hỗ trợ sao chép nhiều máy chủ chính. Giao dịch được truyền đến tất cả các nút đồng đẳng trong cấu hình. Tất cả các nút đều có thể đọc và ghi dữ liệu, và thay đổi sẽ được lan truyền đến toàn bộ cấu hình.

Sao chép hợp nhất: Sau khi nhận bản sao ban đầu, máy chủ phát hành và máy chủ đăng ký có thể cập nhật độc lập. Thay đổi sẽ được hợp nhất định kỳ. Phiên bản SQL Server Compact Edition chỉ có thể đăng ký sao chép hợp nhất.

  1. Khắc phục sự cố khi thay đổi tên máy tính sau khi cài đặt SQL Server Kiểm tra tên máy chủ trong SQL Server và tên máy tính thực tế. Nếu đã thay đổi tên máy tính, hai giá trị này sẽ không khớp.
SELECT @@serverName, serverproperty('serverName')

Thay đổi tên máy chủ thành tên máy tính đúng:

EXEC sp_dropserver 'Tên máy chủ cũ';  
GO  
EXEC sp_addserver 'Tên máy tính mới', 'local';
GO

Khởi động lại SQL Server.

  1. Xác định chỉ mục không còn cần thiết
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED  
SELECT TOP 30  
        DB_NAME() AS DatabaseName ,  
        '[' + SCHEMA_NAME(o.Schema_ID) + ']' + '.' + '['  
        + OBJECT_NAME(s.[object_id]) + ']' AS TableName ,  
        i.name AS IndexName ,  
        i.type AS IndexType ,  
        s.user_updates ,  
        s.system_seeks + s.system_scans + s.system_lookups AS [System_usage]  
FROM    sys.dm_db_index_usage_stats s  
        INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id]  
                                    AND s.index_id = i.index_id  
        INNER JOIN sys.objects o ON i.object_id = O.object_id  
WHERE   s.database_id = DB_ID()  
        AND OBJECTPROPERTY(s.[object_id], 'IsMsShipped') = 0  
        AND s.user_seeks = 0  
        AND s.user_scans = 0  
        AND s.user_lookups = 0  
        AND i.name IS NOT NULL  
ORDER BY s.user_updates DESC
  1. Tìm chỉ mục bị thiếu
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED  
SELECT TOP 30  
        ROUND(s.avg_total_user_cost * s.avg_user_impact * ( s.user_seeks  
                                                            + s.user_scans ),  
              0) AS [Total Cost] ,  
        s.avg_total_user_cost * ( s.avg_user_impact / 100.0 ) * ( s.user_seeks  
                                                              + s.user_scans ) AS Improvement_Measure ,  
        DB_NAME() AS DatabaseName ,  
        d.[statement] AS [Table Name] ,  
        equality_columns ,  
        inequality_columns ,  
        included_columns  
FROM    sys.dm_db_missing_index_groups g  
        INNER JOIN sys.dm_db_missing_index_group_stats s ON s.group_handle = g.index_group_handle  
        INNER JOIN sys.dm_db_missing_index_details d ON d.index_handle = g.index_handle  
WHERE   s.avg_total_user_cost * ( s.avg_user_impact / 100.0 ) * ( s.user_seeks  
                                                            + s.user_scans ) > 10  
ORDER BY [Total Cost] DESC ,  
         s.avg_total_user_cost * s.avg_user_impact * ( s.user_seeks  
                                                       + s.user_scans ) DESC
  1. Chỉ mục có chi phí bảo trì cao
SELECT TOP 20  
        DB_NAME() AS DatabaseName ,  
        '[' + SCHEMA_NAME(o.Schema_ID) + ']' + '.' + '['  
        + OBJECT_NAME(s.[object_id]) + ']' AS TableName ,  
        i.name AS IndexName ,  
        i.type AS IndexType ,  
        ( s.user_updates ) AS update_usage ,  
        ( s.user_seeks + s.user_scans + s.user_lookups ) AS retrieval_usage ,  
        ( s.user_updates ) - ( s.user_seeks + user_scans + s.user_lookups ) AS maintenance_cost ,  
        s.system_seeks + s.system_scans + s.system_lookups AS system_usage ,  
        s.last_user_seek ,  
        s.last_user_scan ,  
        s.last_user_lookup  
FROM    sys.dm_db_index_usage_stats s  
        INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id]  
                                    AND s.index_id = i.index_id  
        INNER JOIN sys.objects o ON i.object_id = O.object_id  
WHERE   s.database_id = DB_ID('{0}')  
        AND i.name IS NOT NULL  
        AND OBJECTPROPERTY(s.[object_id], 'IsMsShipped') = 0  
        AND ( s.user_seeks + s.user_scans + s.user_lookups ) > 0  
ORDER BY maintenance_cost DESC
  1. Kiểm tra chỉ mục thường được sử dụng
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED  
SELECT TOP 20  
DB_NAME() AS DatabaseName  
, '['+SCHEMA_NAME(o.Schema_ID)+']'+'.'+'['+OBJECT_NAME(s.[object_id]) +']'AS TableName  
, i.name AS IndexName  
, i.type as IndexType  
, (s.user_seeks + s.user_scans + s.user_lookups) AS Usage  
, s.user_updates  
FROM sys.dm_db_index_usage_stats s  
INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id]  
AND s.index_id = i.index_id  
INNER JOIN sys.objects o ON i.object_id = O.object_id  
WHERE s.database_id = DB_ID()  
AND i.name IS NOT NULL  
AND OBJECTPROPERTY(s.[object_id], 'IsMsShipped') = 0  
ORDER BY Usage DESC   
  1. Kích hoạt cơ sở dữ liệu dự phòng Cơ sở dữ liệu dự phòng bằng cách sao chép nhật ký là chế độ chỉ đọc. Để kích hoạt, sử dụng lệnh:
RESTORE DATABASE db_name WITH RECOVERY
  1. Nhập xuất dữ liệu SQL Server Sử dụng BCP để nhập xuất dữ liệu. Ví dụ:
bcp cs.dbo.lhxq_sq out c:\12.txt -U sa -P sa -S 192.168.0.122 -c -t
bcp cs2.dbo.lhxq_sq in c:\12.txt -U sa -P sa -S 192.168.0.122 -c -t
  1. Lấy nội dung stored procedure và xóa khoảng trắng
CREATE TABLE #temp_table([text] NVARCHAR(MAX))

INSERT INTO #temp_table([text]) EXEC sp_helptext 'p_oa_document_send_ins'

SELECT * FROM #temp_table WHERE LEN(TEXT) <> 2
  1. Gắn cơ sở dữ liệu SQL Server
EXEC SP_ATTACH_DB [ty_pmi_eo], 'F:\ty_data\ty_pmi_eo.mdf','F:\ty_data_log\ty_pmi_eo.ldf','F:\ty_data_idx\ty_pmi_eo.ndf'
  1. Xóa dữ liệu trùng lặp
DELETE FROM t_gps_pos_curr_status 
WHERE c_client_key IN (SELECT c_client_key FROM t_gps_pos_curr_status GROUP BY c_client_key HAVING COUNT(c_client_key) > 1)
AND fid NOT IN (SELECT MIN(fid) FROM t_gps_pos_curr_status GROUP BY c_client_key HAVING COUNT(c_client_key) > 1)
  1. Liệt kê đường dẫn tập tin dữ liệu
SELECT * FROM master.sys.master_files
  1. Xóa dữ liệu trùng lặp
DELETE T FROM (
    SELECT ROW_NUMBER() OVER(PARTITION BY [Name] ORDER BY [ID]) AS RowNumber,* FROM Student)T
WHERE T.RowNumber > 1

Thẻ: SQL Server index management database administration Query Optimization data import export

Đăng vào ngày 8 tháng 8 lúc 19:38