Hiển thị các bài đăng có nhãn SQL. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn SQL. Hiển thị tất cả bài đăng

Thứ Năm, 18 tháng 5, 2023

Xóa nhanh toàn bộ dữ liệu trong tất cả Table có trong Database

 Để xóa toàn bộ dữ liệu trong tất cả các bảng có trong một cơ sở dữ liệu, bạn có thể sử dụng câu lệnh EXEC sp_MSforeachtable 'TRUNCATE TABLE ?'. Lệnh này sẽ thực thi lệnh TRUNCATE TABLE trên mỗi bảng trong cơ sở dữ liệu một cách tự động.

Vui lòng lưu ý rằng lệnh này sẽ xóa toàn bộ dữ liệu trong tất cả các bảng mà không thể khôi phục lại được. Hãy đảm bảo bạn đã sao lưu dữ liệu hoặc chắc chắn rằng bạn không cần giữ lại bất kỳ dữ liệu nào trong các bảng trước khi thực hiện lệnh này.

Thứ Sáu, 7 tháng 4, 2023

Cải thiện tốc độ khi update vào table có dữ liệu quá lớn.

Khi update một bảng có dữ liệu lớn, thường sẽ gặp phải vấn đề về hiệu suất và thời gian thực thi. Để cải thiện hiệu suất của câu lệnh UPDATE, bạn có thể thực hiện các cách sau:

  1. Sử dụng câu lệnh UPDATE với điều kiện WHERE cụ thể: Nếu bạn chỉ muốn cập nhật một phần nhỏ của bảng, hãy sử dụng điều kiện WHERE cụ thể để giới hạn số lượng dòng bị ảnh hưởng bởi câu lệnh UPDATE.
  2. Sử dụng index trên các cột được sử dụng trong điều kiện WHERE: Nếu bảng của bạn có một số lượng lớn các dòng và câu lệnh WHERE dựa trên một hoặc nhiều cột, bạn có thể tăng tốc độ câu lệnh UPDATE bằng cách tạo index trên các cột đó. Việc này sẽ giảm thời gian tìm kiếm trong bảng để tìm các dòng phù hợp với điều kiện WHERE.
  3. Sử dụng cú pháp MERGE: Nếu bạn muốn cập nhật bảng đích từ bảng nguồn, bạn có thể sử dụng câu lệnh MERGE thay vì câu lệnh UPDATE. Cú pháp MERGE cho phép bạn thực hiện nhiều thao tác (cập nhật, chèn, xóa) trong một câu lệnh, giảm thời gian thực thi.
  4. Chia nhỏ câu lệnh UPDATE thành nhiều phần: Nếu bảng của bạn quá lớn, bạn có thể chia câu lệnh UPDATE thành nhiều phần bằng cách sử dụng cấu trúc tập hợp và câu lệnh WHERE. Việc này sẽ giảm tác động lên bảng và giúp tăng tốc độ thực thi câu lệnh.
  5. Tăng kích thước bộ đệm: Nếu máy chủ SQL Server của bạn đang sử dụng bộ đệm có kích thước mặc định, bạn có thể tăng kích thước bộ đệm để giảm thời gian I/O và tăng hiệu suất của các câu lệnh UPDATE.
  6. Nâng cấp phần cứng hoặc thay đổi cấu trúc bảng: Nếu bảng của bạn quá lớn và máy chủ SQL Server của bạn không đủ khả năng để xử lý nó, bạn có thể cân nhắc nâng cấp phần cứng hoặc thay đổi cấu trúc bảng

 

Cú pháp MERGE được sử dụng để thực hiện các hoạt động chèn, cập nhật và xóa trên bảng đích dựa trên các dữ liệu được cung cấp từ bảng nguồn. Câu lệnh MERGE thường được sử dụng để cập nhật hoặc thêm mới các dữ liệu trong một bảng.

Ví dụ, giả sử bạn có hai bảng Sales và SalesUpdate. Bảng Sales chứa các thông tin về các đơn hàng đã được bán, trong khi bảng SalesUpdate chứa các thông tin về các đơn hàng mới nhất đã được cập nhật từ hệ thống bán hàng của bạn. Bạn muốn cập nhật bảng Sales với các thông tin mới nhất từ bảng SalesUpdate.

Câu lệnh MERGE sẽ được sử dụng để thực hiện việc này như sau:

sql
MERGE INTO Sales AS Target 
USING SalesUpdate AS Source 
ON (Target.SalesOrderID = Source.SalesOrderID) 
WHEN MATCHED THEN 
    UPDATE SET Target.ShipDate = Source.ShipDate, Target.TotalDue = Source.TotalDue WHEN NOT MATCHED BY TARGET THEN 
    INSERT (SalesOrderID, OrderDate, DueDate, ShipDate, TotalDue)
    VALUES (Source.SalesOrderID, Source.OrderDate, Source.DueDate, Source.ShipDate, Source.TotalDue);
Trong câu lệnh MERGE này:

Bảng Sales được đặt làm bảng đích (Target), và bảng SalesUpdate được đặt làm bảng nguồn (Source).

Dòng "ON" xác định điều kiện ghép nối giữa bảng đích và bảng nguồn. Trong ví dụ này, các đơn hàng trong Sales sẽ được ghép nối với các đơn hàng trong SalesUpdate dựa trên trường SalesOrderID.

Khi có bất kỳ đơn hàng nào được tìm thấy trong cả hai bảng (MATCHED), thì dòng "WHEN MATCHED" sẽ được thực hiện để cập nhật thông tin của đơn hàng trong bảng Sales với thông tin mới nhất từ bảng SalesUpdate.

Khi không có đơn hàng nào được tìm thấy trong bảng đích (NOT MATCHED BY TARGET), thì dòng "WHEN NOT MATCHED BY TARGET" sẽ được thực hiện để chèn các đơn hàng mới từ bảng SalesUpdate vào bảng Sales.

Lưu ý rằng cú pháp MERGE sẽ chỉ hoạt động trên các phiên bản SQL Server 2008 trở lên.

Chủ Nhật, 5 tháng 2, 2023

Cắt giảm dung lượng file log của database.ldf

 

  • Perform a full backup of your database. Don't skip this. Really.
  • Change the backup method of your database to "Simple"
  • Open a query window and enter "checkpoint" and execute
  • Perform another backup of the database
  • Change the backup method of your database back to "Full" (or whatever it was, if it wasn't already Simple)
  • Perform a final full backup of the database.
  • Run below queries one by one
    1. USE Database_Name
    2. select name,recovery_model_desc from sys.databases
    3. ALTER DATABASE Database_Name SET RECOVERY simple
    4. DBCC SHRINKFILE (Database_Name_log , 1)

Thứ Sáu, 3 tháng 2, 2023

Cannot detach a suspect or recovery pending database - Không thể Detach hoặc recovery database đang bị pending

 

Cannot detach a suspect or recovery pending database

Today once the connectivity to the data and log volume for SQL servers is lost and I received the following error:


Log Writer: Operating system error 2
(failed to retrieve text for this error. Reason: 15100) encountered.


This resulted in the database on that volume showing as being suspect.
I tried to detach the database, after connecting back to the Server, but got below error:


Cannot detach a suspect or recovery pending database.
It must be repaired or dropped. (Microsoft SQL Server, Error: 3707) 


To resolve above error i did the following:
ALTER DATABASE DemoData SET EMERGENCY;
GO


EMERGENCY mode sets the database as READ_ONLY, disabled logging, and access is limited to sysadmins. Marking the database in this mode is a first step for resolving log corruption.


ALTER DATABASE  DemoData set single_user
GO
DBCC CHECKDB ( DemoData, REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS;
GO
ALTER DATABASE  DemoData set multi_user
GO


This should resolve any corruption and bring the database online. The database will come out of EMEREGENCY mode automatically.

Thứ Tư, 14 tháng 8, 2019

Thứ Năm, 10 tháng 8, 2017

Recovering From SQL Server ‘recovery pending’ Status

Sau khi nới rộng phân vùng ổ C vì thiếu dung lượng lưu trữ (expanded partition C)
Toàn bộ database trong Microsoft SQL bị chuyển thành Recovery Pending.

Cách fix:
Chạy tuần tự các dòng lệnh bên dưới (đổi tên [DB_Name] = tên database của bạn)

ALTER DATABASE [DB_Name] SET  SINGLE_USER WITH NO_WAIT
ALTER DATABASE [DB_Name] SET EMERGENCY;
DBCC checkdb ([DB_Name], REPAIR_ALLOW_DATA_LOSS  )
ALTER DATABASE [DB_Name] SET online;
ALTER DATABASE [DB_Name] SET  Multi_USER WITH NO_WAIT

Thứ Sáu, 30 tháng 7, 2010

Converting Database Character Sets

The Solution

The solution is to ALTER all TEXT and related fields to their binary counterparts, then alter the character set and finally change the binary data type fields back to TEXT.

Example steps:

1. Place notice that blog is out of service
2. Backup database
3. ALTER TABLE wp_users MODIFY display_name BLOB;
4. ...ALTER TABLE commands for all other tables/columns...
5. ALTER DATABASE wordpress charset=utf8;
6. ALTER TABLE wp_users charset=utf8;
7. ...ALTER TABLE command for all other tables...
8. ALTER TABLE wp_users MODIFY display_name TEXT CHARACTER SET utf8;
9. ...ALTER TABLE for all other tables/columns...
10. Add DB_CHARSET and DB_COLLATE definitions to wp-config.php
11. Place blog back on-line

The string field types need to be converted to their binary field types counterparts. The list is as follows:

* CHAR -> BINARY
* VARCHAR -> VARBINARY
* TINYTEXT -> TINYBLOB
* TEXT -> BLOB
* MEDIUMTEXT -> MEDIUMBLOB
* LONGTEXT -> LONGBLOB

Tham khảo ở ĐÂY