Nếu bạn muốn xóa cơ sở dữ liệu, bạn sẽ gặp lỗi này nếu có phiên mở trên cơ sở dữ liệu
Đầu tiên, đặt cơ sở dữ liệu ở chế độ single_user. Sau đó, bạn có thể xóa nó
1
2
3
4
5
6
SỬ DỤNG [chính]
ĐI
ALTER DATABASE Thử nghiệm SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ĐI
DROP CƠ SỞ DỮ LIỆU [Thử nghiệm]
ĐI
Với đoạn script trên, chúng ta đóng các kết nối đang mở trong cơ sở dữ liệu và đặt cơ sở dữ liệu là single_user để chỉ chúng ta có thể sử dụng nó và sau đó xóa nó. Nếu cơ sở dữ liệu đã ở chế độ single_user, bạn sẽ gặp lỗi như sau
Msg 5064, Cấp 16, Trạng thái 1, Dòng 3
Thay đổi trạng thái hoặc tùy chọn của cơ sở dữ liệu ” không thể được thực hiện vào lúc này. Cơ sở dữ liệu ở chế độ một người dùng và một người dùng hiện được kết nối với nó
Msg 5069, Cấp 16, Trạng thái 1, Dòng 3
Câu lệnh ALTER DATABASE không thành công
Msg 3702, Cấp 16, Trạng thái 4, Dòng 5
Không thể bỏ cơ sở dữ liệu “” vì nó hiện đang được sử dụng
Để hủy thủ công tất cả các phiên sử dụng cơ sở dữ liệu ở chế độ một người dùng, bạn phải chạy truy vấn sau. Bạn nên viết tên cơ sở dữ liệu của riêng mình thay vì “Test”
1
chọn * từ sys. các quy trình hệ thống ở đâu dbid=DB_ID('Test')
Các bản ghi được trả về do kết quả của truy vấn là các quy trình trên cơ sở dữ liệu này. Bạn có thể tìm và hủy các session_id sử dụng cơ sở dữ liệu của mình. Sau đó, bạn có thể xóa cơ sở dữ liệu. Ví dụ kết quả là 55 thì đánh 55
Sẽ an toàn hơn nếu tìm và hỏi người gửi truy vấn trước khi tắt truy vấn. Nếu bạn nghĩ rằng mình không cần phải hỏi bất kỳ ai, bạn có thể tự động hủy tất cả các phiên trong cơ sở dữ liệu bằng đoạn mã sau
1
2
3
4
5
6
7
8
9
10
11
12
khai báo @Sql varchar(1000), @databasename varchar(100)
set @databasename = 'Bạn Phải Viết
đặt @Sql = ''
chọn @Sql = @Sql + 'kill ' + convert(char(10), spid) + ' '
từ sư phụ. dbo. quy trình hệ thống
ở đâu db_name(dbid) = @databasename
và
dbid 0
và
spid @@spid
exec(@Sql)
ĐI
Tác giả. dbtut
Chúng tôi là một nhóm có hơn 10 năm kinh nghiệm quản lý cơ sở dữ liệu và BI. chuyên môn của chúng tôi. Oracle, Máy chủ SQL, PostgreSQL, MySQL, MongoDB, Elaticsearch, Kibana, Grafana
Lỗi này xảy ra khi Máy chủ thích ứng cố gắng loại bỏ cơ sở dữ liệu, bảng người dùng, quy trình, quy tắc, mặc định, trình kích hoạt hoặc dạng xem hiện đang được sử dụng
Lỗi 3702 có thể xảy ra trong quá trình
Một lệnh thả như thả cơ sở dữ liệu, thả bảng, bỏ thủ tục hoặc bỏ quy tắc
Lệnh dbcc dbrepair (database_name, dropdb)
Lỗi 3702 có thể xảy ra vì những lý do sau
Đối tượng bạn đang cố loại bỏ đang được sử dụng
Quá trình sử dụng đối tượng bị chấm dứt bất thường
Tham nhũng dữ liệu đã xảy ra
Đã xảy ra sự cố Máy chủ thích ứng
Hoạt động
Sử dụng sp_who để xác định xem cơ sở dữ liệu hoặc tên đối tượng trong lệnh thả của bạn hiện đang được sử dụng. Nếu nó đang được sử dụng, hãy liên hệ với người dùng được hiển thị trong đầu ra sp_who
Nếu quá trình sử dụng đối tượng bị chấm dứt bất thường (ví dụ: với lệnh hủy hệ điều hành), đối tượng có thể chưa bị xóa hoàn toàn khỏi bảng hệ thống Máy chủ thích ứng. Quá trình sẽ vẫn vô hình trong khi giữ cho đối tượng mở và sử dụng. Điều này ngăn lệnh thả thành công. Trong trường hợp này, tắt và khởi động lại Adaptive Server sẽ xóa lỗi 3702. Sau khi bạn khởi động lại máy chủ thích ứng, hãy chạy dbcc checkcatalog để xác định xem có xảy ra hỏng hóc hay không
Nếu bạn đang cố xóa cơ sở dữ liệu chứa khóa hiện được dùng để mã hóa cột trong cơ sở dữ liệu khác, lệnh sẽ không thành công. Trước khi xóa cơ sở dữ liệu chứa các khóa mã hóa, trước tiên bạn phải xóa mã hóa hoặc xóa cơ sở dữ liệu chứa các cột được mã hóa
Nếu lỗi 3702 vẫn tiếp diễn, hãy gọi cho bộ phận Hỗ trợ Kỹ thuật của Sybase
Thông tin thêm
Trước khi gọi cho bộ phận Hỗ trợ Kỹ thuật của Sybase, hãy chuẩn bị sẵn thông tin được liệt kê trong "Báo cáo lỗi", bao gồm đầu ra của dbcc checkdb, dbcc checkcatalog và dbcc checkalloc cho cơ sở dữ liệu chứa đối tượng có tên trong thông báo lỗi