Tắt nhật ký giao dịch


79

Oracle có các lệnh SQL mà người ta có thể đưa ra để một giao dịch không được ghi lại. Có điều gì đó tương tự cho SQL Server 2008 không?

Kịch bản của tôi: Chúng tôi cần nhật ký Tx trên máy chủ (Dev, QA, Prod), nhưng có lẽ chúng tôi có thể làm được mà không cần chúng trên máy của nhà phát triển.


1
bạn đã thử sử dụng các lượt xem cho dữ liệu được tính toán của mình chưa?

Xin lỗi vì đã đánh cắp câu hỏi của bạn, nhưng làm thế nào để tắt đăng nhập giao dịch trong oracle cho một thủ tục / truy vấn cụ thể hơn? Cảm ơn bạn!
Victor

3
@Kaushik, bạn nên hỏi điều này vì nó là câu hỏi của chính nó.
Raj More

" để giao dịch không được ghi lại " điều này không đúng nếu bạn đang đề cập đến NOLOGGEDtùy chọn.
a_horse_with_no_name

@RajMore Bạn có học thêm được gì về chủ đề này không? Trong trường hợp của chúng tôi, chúng tôi đang thực hiện tải hàng loạt và thật ngạc nhiên khi thấy rất nhiều dữ liệu được chuyển vào đĩa bằng chế độ SIMPLE. Bây giờ tôi hiểu tại sao nhưng tôi tự hỏi hiệu suất có thể tăng lên bao nhiêu nếu việc ghi nhật ký giao dịch có thể bị loại bỏ.
D-Klotz

Câu trả lời:


124

Bạn không thể thực hiện mà không có nhật ký giao dịch trong SQL Server, trong bất kỳ trường hợp nào. Đơn giản là động cơ sẽ không hoạt động.

Bạn CÓ THỂ đặt mô hình khôi phục của mình thành ĐƠN GIẢN trên máy nhà phát triển của bạn - điều này sẽ ngăn chặn quá trình phình to nhật ký giao dịch khi không thực hiện sao lưu nhật ký tran.

ALTER DATABASE MyDB SET RECOVERY SIMPLE;

18
Chỉ cần lưu ý LỚN: Câu trả lời này đúng 100% về mặt kỹ thuật. Nhưng nó chỉ là thứ bạn muốn sử dụng trên máy DEVELOPER của mình hoặc khi bạn KHÔNG quan tâm đến việc có thể sao lưu dữ liệu của mình. Xem sqlservervideos.com/video/logging-essentialssqlservervideos.com/video/shrinking-log-files để biết thêm thông tin và thông tin cơ bản.
Michael K. Campbell

Hoặc đối với cơ sở dữ liệu trên RDS (hoặc các dịch vụ tương đương) trong đó chiến lược sao lưu sử dụng ảnh chụp nhanh thay vì nhật ký giao dịch.
nổ

hoặc db được xây dựng từ một nguồn khác, ví dụ như tìm nguồn cung ứng sự kiện để không có giao dịch và không cần ghi nhật ký
Anthony Johnston

45

SQL Server yêu cầu một bản ghi giao dịch để hoạt động.

Điều đó nói rằng có hai chế độ hoạt động cho nhật ký giao dịch:

  • Đơn giản
  • Đầy

Ở chế độ Đầy đủ , nhật ký giao dịch tiếp tục phát triển cho đến khi bạn sao lưu cơ sở dữ liệu. Ở chế độ Đơn giản : không gian trong nhật ký giao dịch được 'tái chế' mỗi Điểm kiểm tra .

Rất ít người có nhu cầu chạy cơ sở dữ liệu của họ trong mô hình Khôi phục hoàn toàn . Điểm duy nhất khi sử dụng mô hình Đầy đủ là nếu bạn muốn sao lưu cơ sở dữ liệu nhiều lần mỗi ngày và việc sao lưu toàn bộ cơ sở dữ liệu mất quá nhiều thời gian - vì vậy bạn chỉ cần sao lưu nhật ký giao dịch.

Nhật ký giao dịch liên tục phát triển cả ngày và bạn chỉ cần sao lưu nó. Đêm đó, bạn thực hiện sao lưu đầy đủ và sau đó SQL Server sẽ cắt bớt nhật ký giao dịch, bắt đầu sử dụng lại không gian được cấp trong tệp nhật ký giao dịch.

Nếu bạn chỉ thực hiện sao lưu toàn bộ cơ sở dữ liệu , bạn không muốn có chế độ Khôi phục hoàn toàn.


Điều này hơi sai: bạn cần sao lưu nhật ký để (hy vọng) ngăn nhật ký giao dịch phát triển. Tất nhiên, nếu bạn có một giao dịch đang mở hoặc một giao dịch lớn, thì nhật ký sẽ lớn lên vì phân bổ tệp nhật ký nội bộ (VLF) không thể được sử dụng lại hoặc bạn cần nhiều hơn. Đó là một cái nhìn tổng quát BTW, không chương và thơ
GBN

1
@gbn Bạn không sao lưu nhật ký để ngăn nhật ký phát triển. ý tôi là bạn làm , nhưng đó không phải là điểm của tính năng. Microsoft đã không tạo nhật ký giao dịch để chơi trò chơi "ngốn toàn bộ ổ cứng của bạn vì bạn quên sao lưu nhật ký" . Các lý do các bản ghi không ngừng phát triển (và sau đó đòi hỏi phải sao lưu để ngăn chặn nó từ phát triển), là để bạn có thể sao lưu chỉ nhật ký.
Ian Boyd

44

Có một chế độ khôi phục thứ ba không được đề cập ở trên. Chế độ khôi phục cuối cùng xác định mức độ lớn của các tệp LDF và cách chúng được ghi vào. Trong trường hợp bạn định thực hiện bất kỳ loại chèn hàng loạt nào, bạn nên đặt DB thành "BULK / LOGGED". Điều này làm cho các hạt chèn số lượng lớn di chuyển nhanh chóng và có thể thay đổi nhanh chóng.

Làm như vậy,

USE master ;
ALTER DATABASE model SET RECOVERY BULK_LOGGED ;

Để thay đổi nó trở lại:

USE master ;
ALTER DATABASE model SET RECOVERY FULL ;

Trên tinh thần bổ sung vào cuộc trò chuyện về lý do tại sao ai đó không muốn có LDF, tôi thêm điều này: Chúng tôi làm mô hình đa chiều. Về cơ bản, chúng tôi sử dụng DB như một kho lưu trữ lớn các biến được xử lý hàng loạt bằng các chương trình bên ngoài. Chúng tôi không BAO GIỜ yêu cầu khôi phục. Nếu chúng tôi có thể tăng hiệu suất bằng cách chuyển TẤT CẢ ghi nhật ký, chúng tôi sẽ nhanh chóng nhận được điều đó.


1
Cám ơn vì cái này. Chúng tôi sử dụng DB theo cùng một cách. Chúng tôi không thể quan tâm hơn đến việc có thể quay trở lại. Biểu diễn thuần túy là tất cả chúng ta đang theo đuổi
Dan

Đối với trường hợp này, bạn có thể xem xét một cơ sở dữ liệu khác như Mongo (cho phép vô hiệu hóa nhật ký) hoặc trong bộ nhớ (redis và những người khác)
Tim

2

Vấn đề của bạn với nhật ký Tx là gì? Họ lớn lên? Sau đó, chỉ cần đặt cắt ngắn trên tùy chọn điểm kiểm tra.

Từ tài liệu của Microsoft:

Trong SQL Server 2000 hoặc SQL Server 2005, mô hình khôi phục "Đơn giản" tương đương với "cắt ngắn nhật ký trên trạm kiểm soát" trong các phiên bản trước của SQL Server. Nếu nhật ký giao dịch bị cắt ngắn mỗi khi một điểm kiểm tra được thực hiện trên máy chủ, điều này ngăn bạn sử dụng nhật ký để khôi phục cơ sở dữ liệu. Bạn chỉ có thể sử dụng các bản sao lưu cơ sở dữ liệu đầy đủ để khôi phục dữ liệu của mình. Sao lưu nhật ký giao dịch bị vô hiệu hóa khi sử dụng mô hình khôi phục "Đơn giản".


1
Chà, vấn đề về không gian - một số nhà phát triển có máy cũ hơn và chúng tôi có thể làm mà không cần. Thêm vào đó, tôi tò mò liệu điều này có thể xảy ra không! Tôi có ấn tượng rằng tùy chọn "Cắt ngắn nhật ký trên điểm kiểm tra" chỉ được đặt bằng cách sử dụng chế độ khôi phục Đơn giản trong SQL 2008. Có cách nào khác không?
Raj More

1
@Tapori, chúng giống nhau. Họ đã đổi tên nó vào năm 2000.
zvolkov

0

Nếu điều này chỉ dành cho các máy nhà phát triển để tiết kiệm dung lượng thì chỉ cần đi với chế độ khôi phục đơn giản và bạn sẽ ổn.

Trên các máy sản xuất, tôi thực sự khuyên bạn nên giữ cơ sở dữ liệu ở chế độ khôi phục hoàn toàn. Điều này sẽ đảm bảo bạn có thể khôi phục kịp thời nếu cần.

Ngoài ra - có cơ sở dữ liệu ở chế độ khôi phục hoàn toàn có thể giúp bạn hoàn tác các cập nhật và xóa tình cờ bằng cách đọc nhật ký giao dịch. Xem bên dưới hoặc chi tiết hơn.

Làm cách nào để khôi phục truy vấn CẬP NHẬT trong SQL server 2005?

Đọc tệp nhật ký (* .LDF) trong sql server 2008

Nếu không gian là một vấn đề trên máy sản xuất thì chỉ cần tạo bản sao lưu nhật ký giao dịch thường xuyê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.