Xóa MSDB có ổn không?


9

Tôi không phải là một DBA, tôi chỉ biết về MSDB về cơ bản nó là DB của Tác nhân và Lịch sử SQL, Bây giờ tôi hết dung lượng trong máy chủ đám mây của mình và tôi có MSDB trị giá 1 năm 2017 , Có ổn không khi xóa cái này hay tôi giữ nó cho mục đích sao lưu?

MSDB của tôi là 93 GB trong ổ cứng 250 GB.

Câu trả lời:


14

Bạn không thể bỏ msdbcơ sở dữ liệu như đã nêu trong tài liệu (nhấn mạnh của tôi):

Những hạn chế

Các hoạt động sau đây không thể được thực hiện trên cơ sở dữ liệu msdb:

  • Thay đổi đối chiếu. Đối chiếu mặc định là đối chiếu máy chủ.

  • Đánh rơi cơ sở dữ liệu.

  • Thả người dùng khách khỏi cơ sở dữ liệu.

  • Cho phép chụp dữ liệu thay đổi.

  • Tham gia phản ánh cơ sở dữ liệu.

  • Xóa tệp chính, tệp dữ liệu chính hoặc tệp nhật ký.

  • Đổi tên cơ sở dữ liệu hoặc nhóm chính.

  • Đặt cơ sở dữ liệu thành OFFLINE.

  • Đặt nhóm chính thành READ_ONLY.

Việc giả mạo cơ sở dữ liệu hệ thống thường không phải là một ý tưởng tốt. Bạn nên kiểm tra xem vấn đề không gian của bạn ở đâu và xem xét mở rộng ổ đĩa của bạn.


Để kiểm tra vấn đề kích thước của bạn ở đâu:

  • Kiểm tra kích thước bảng và chỉ mục bên trong msdbcơ sở dữ liệu bằng truy vấn này:

    USE msdb
    GO
    
    SELECT 
        t.NAME AS TableName,
        s.Name AS SchemaName,
        p.rows AS RowCounts,
        SUM(a.total_pages) * 8 AS TotalSpaceKB, 
        CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,
        SUM(a.used_pages) * 8 AS UsedSpaceKB, 
        CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB, 
        (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB,
        CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB
    FROM 
        sys.tables t
    INNER JOIN      
        sys.indexes i ON t.OBJECT_ID = i.object_id
    INNER JOIN 
        sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
    INNER JOIN 
        sys.allocation_units a ON p.partition_id = a.container_id
    LEFT OUTER JOIN 
        sys.schemas s ON t.schema_id = s.schema_id
    GROUP BY 
        t.Name, s.Name, p.Rows
    ORDER BY 
        TotalSpaceMB DESC
    

    Nếu sysjobhistorybật lên trong không gian thì hãy xem lại chính sách thuê lịch sử công việc hiện tại của bạn và đảm bảo rằng lịch trình công việc của bạn được kiểm tra và không kích hoạt thường xuyên hơn mức cần thiết.

  • Kiểm tra dữ liệu cơ sở dữ liệu và kích thước tệp nhật ký với truy vấn này:

    ;with fs
    as
    (
        select database_id, type, size * 8.0 / 1024 size
        from sys.master_files
    )
    select
        name,
        (select sum(size) from fs where type = 0 and fs.database_id = db.database_id) DataFileSizeInMB,
        (select sum(size) from fs where type = 1 and fs.database_id = db.database_id) LogFileSizeInMB
    from 
        sys.databases db
    where
        db.name = 'msdb'
    

    Nếu kích thước tệp nhật ký cao, bạn cần tìm ra thao tác nào làm cho nó tăng kích thước và khắc phục sự cố. Thu hẹp tệp sẽ giải phóng một số dung lượng nhưng sẽ không giải quyết được vấn đề tiềm ẩn.


MSDB của tôi là 93GB trong ổ cứng 250 GB, có lẽ tôi đang cân nhắc việc mở rộng ổ cứng của mình nhưng hiện tại tôi đã xóa sạch các hồ sơ cũ Cảm ơn.
Terrence McGinnis

5

Như được đề cập trong các câu trả lời khác ở đây, không cố gắng xóa toàn bộ cơ sở dữ liệu msdb.

Bạn có thể muốn bỏ các bản ghi lịch sử nhất định được lưu trữ trong cơ sở dữ liệu msdb, sau đó thu nhỏ cơ sở dữ liệu nếu bạn cần tiết kiệm dung lượng. Xin lưu ý, tôi không khuyên bạn làm điều này vì cơ sở dữ liệu chắc chắn sẽ cần phải phát triển lại trừ khi bạn quản lý chặt chẽ không gian được sử dụng bởi msdb trên cơ sở liên tục.

Bạn có thể xóa lịch sử khỏi cơ sở dữ liệu msdb bằng các thủ tục được lưu trữ này:

USE msdb;
EXEC dbo.sp_delete_backuphistory @oldest_date = '2018-01-01T00:00:00';
EXEC dbo.sp_purge_jobhistory @job_name = NULL
    , @job_id = NULL
    , @oldest_date = '2018-01-01T00:00:00';

Để thu nhỏ msdb, bạn có thể sử dụng:

USE msdb;

DBCC SHRINKFILE (MSDBData, 0);
DBCC SHRINKFILE (MSDBLog, 0);

Các hoạt động trên sẽ cố gắng thu nhỏ dữ liệu msdb và tệp nhật ký đến kích thước nhỏ nhất có thể. Đối với tệp nhật ký, "kích thước nhỏ nhất có thể" bị giới hạn bởi tệp nhật ký ảo được phân bổ gần đây nhất.

FYI, bạn có thể thấy bao nhiêu không gian đang được sử dụng trong cơ sở dữ liệu bằng cách chạy mã sau đây:

USE <database_name>;

DECLARE @Schema sysname;
DECLARE @Table sysname;
DECLARE @DSName sysname;

--if you're interested in a subset of the objects in a database,
--specify that subset by modifying these variables.  @DSName is
--the name of a filegroup, or possibly a partition.
SET @Schema = NULL;
SET @Table = NULL;
SET @DSName = NULL;

SELECT DataSpace = ds.name
    , ObjectName = QUOTENAME(s.name) + '.' + QUOTENAME(o.name)
    , IndexName = i.name
    , IndexType = i.type_desc
    --, total_pages
    --, used_pages
    --, data_pages
    , TotalMB = CONVERT(INT, total_pages * 8192E0 / 1048576)
    , UsedMB = CONVERT(INT, used_pages * 8192E0 / 1048576)
    , DataMB = CONVERT(INT, data_pages * 8192E0 / 1048576)
    , [rows]
    --, i.*
FROM sys.allocation_units au
    INNER JOIN sys.data_spaces ds ON au.data_space_id = ds.data_space_id
    INNER JOIN sys.partitions p ON (au.container_id = p.hobt_id AND (au.type = 1 OR au.type = 3)) OR (au.container_id = p.partition_id AND au.type = 2)
    INNER JOIN sys.indexes i ON p.index_id = i.index_id AND p.object_id = i.object_id
    INNER JOIN sys.objects o ON p.object_id = o.object_id
    INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
WHERE /*o.is_ms_shipped = 0
    AND total_pages > 128
    AND */(ds.name = @DSName OR @DSName IS NULL)
    AND (s.name = @Schema OR @Schema IS NULL)
    AND (o.name = @Table OR @Table IS NULL)
ORDER BY ds.name, o.name, i.name

1

Theo tài liệu blog microsoft ở đây MSDB là một cơ sở dữ liệu hệ thống quan trọng trong máy chủ Microsoft SQL. Cơ sở dữ liệu msdb được sử dụng chủ yếu bởi SQL Server Agent để lưu trữ các hoạt động của hệ thống như công việc máy chủ sql, thư, môi giới dịch vụ, kế hoạch bảo trì, lịch sử sao lưu cơ sở dữ liệu người dùng và hệ thống, v.v. Nó cũng được sử dụng bởi công cụ cơ sở dữ liệu và phòng quản lý.

Có một số DMLDDLhoạt động mà không thể được thực hiện trong MSDBcơ sở dữ liệu như:

  1. Chúng tôi không thể bỏ bảng từ cơ sở dữ liệu này.
  2. We cannot drop this database.
  3. Chúng tôi không thể làm cho cơ sở dữ liệu hệ thống này để đi off-line.
  4. Chúng tôi không thể làm cơ sở dữ liệu mirroringtrên cơ sở dữ liệu này.
  5. Chúng tôi không thể renametên cơ sở dữ liệu này. Vân vân…
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.