'Làm sạch' một tệp cơ sở dữ liệu SQL Server được tạo khi bật Khởi tạo tệp tức thì?


8

Tôi đã bật Khởi tạo tệp tức thì trên Máy chủ SQL của chúng tôi, vì vậy phần 'trống' của tệp cơ sở dữ liệu không bị xóa trước khi được phân bổ. Tôi hiểu rằng điều này có nghĩa là tệp có thể chứa dữ liệu 'bị xóa.

Vì vậy, bây giờ tôi muốn gửi một bản sao của cơ sở dữ liệu (có thể là tệp sao lưu) bên ngoài công ty. Nhưng có tất cả những dữ liệu 'bị xóa' có khả năng nhạy cảm nằm xung quanh tập tin. Bây giờ tôi muốn zero phần không sử dụng của tập tin.

Điều đó có thể không? Tôi tưởng tượng rằng tôi có thể tạo một cơ sở dữ liệu mới và sao chép mọi thứ hoặc có thể khôi phục một bản sao của cơ sở dữ liệu sang một máy chủ khác mà không kích hoạt Khởi tạo tệp tức thì và sau đó tích cực với lệnh ShrinkFile để loại bỏ hầu hết hoặc tất cả phần không sử dụng của tệp cơ sở dữ liệu , nhưng có một phương pháp ít thủ công và tốn thời gian hơn? Lý tưởng là một lệnh để bảo SQL bằng không tệp như đã thực hiện nếu Khởi tạo tệp tức thì không được bật.


Để tham khảo chung, việc khởi tạo tệp dữ liệu tức thời có thể tạm thời bị vô hiệu hóa mà không gây rối với các quyền của tài khoản dịch vụ bằng cách sử dụng cờ theo dõi 1806 khi Paul Randal viết blog tại đây .
Jon Seigel

Câu trả lời:


5

Một SQL Server BACKUP chỉ sao lưu các mức độ đang được sử dụng để chứa dữ liệu. Các sử dụng mức độ đang tụt hậu so với các sao lưu. Khi một trang được sử dụng cho dữ liệu, nó sẽ được định dạng để sử dụng khi cần thiết, do đó trang đó sẽ không có dữ liệu cũ.

Do đó, tất cả những gì bạn cần làm là sao lưu cơ sở dữ liệu và khôi phục nó ở nơi khác. Các tệp được khôi phục sẽ có cùng kích thước với cơ sở dữ liệu gốc, nhưng các phạm vi không được sử dụng sẽ được tạo bằng các khả năng của máy chủ đích. Điều này có thể được khởi tạo đầy đủ hoặc khởi tạo ngay lập tức bằng cách sử dụng các khối đĩa trên máy chủ đích.

Tuy nhiên, vì mức độ là mức độ sao lưu xảy ra nên các trang không được sử dụng trong phạm vi vẫn có thể có khả năng lộ một số dữ liệu khi được khôi phục trên máy chủ khác. Không nhiều như có thể được hiển thị trên máy chủ nguồn, vì các phạm vi không sử dụng không được khôi phục.


1
Không sử dụng mức độ thực sự. Về mặt lý thuyết, ngay cả một số phạm vi được sử dụng vẫn có thể chứa không gian với 'dữ liệu cũ', đó là sự lừa bóng vô nghĩa đối với SQLServer nhưng có thể là một kho báu cho đối thủ cạnh tranh được trang bị trình soạn thảo hex và có nhiều thời gian rảnh rỗi. Nếu dữ liệu của bạn nhạy cảm như vậy, bạn sẽ không làm trống tất cả các tệp chứ?
John Alan

@JohnAlan - Được sửa đổi để xác nhận phơi nhiễm trong phạm vi.
RLF

Dữ liệu không chính xác là công cụ GCHQ - đó chỉ là dữ liệu khách hàng cơ bản và tương tự, vì vậy không có khả năng bất kỳ ai sẽ phải mất quá nhiều nỗ lực để truy xuất dữ liệu đó. Tôi đã không nhận ra rằng các bản sao lưu hoạt động như vậy, mặc dù nó có ý nghĩa rằng nó nên. Nếu không có giải pháp nhanh chóng và đơn giản nào khác thì có lẽ sẽ làm được.
paulH

1

Bạn đã xem xét khôi phục một bản sao của nó, cho phép TDE sẽ buộc nó về 0, sau đó vô hiệu hóa lại TDE? Tôi chưa thử nghiệm điều này nhưng tôi nghĩ nó sẽ hoạt động, mặc dù vậy chúng tôi sẽ phải kiểm tra nó.

Một cái gì đó khác nữa, bạn đã xem xét khôi phục một bản sao của nó với IFI bị vô hiệu hóa, tạo một nhóm mới với các tệp mới, đặt trước nó, xây dựng lại các cụm và các chỉ mục khác trên nhóm mới, sau đó bỏ tập tin chính hiện có (Nếu đó là nhóm chính bạn sẽ phải thu nhỏ nó vì bạn không thể bỏ chính)


Sử dụng TDE nghe có vẻ là một cách tiếp cận thú vị, mặc dù tôi không chắc liệu nó có xóa được bất kỳ dữ liệu không mong muốn nào hơn phương thức sao lưu và khôi phục hay không. Nếu có ai biết thêm thông tin về điều đó thì tôi sẽ muốn biết.
paulH
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.