My Opera is closing 3rd of March

Sổ tay SQL

Cứu dữ liệu SQL DB - Corrupt DB hoặc Suspect
Database bị Corrupt hoặc suspect do 2 nguyên nhân chính:
- Virus: đã có cảnh báo về con virus này http://www.fastsoftware.biz/forum/showthread.php?t=4538
=> Đối với con virus này cơ hội cứu DB hầu như bằng không. Virus này chèn 1 đoạn code làm vỡ cấu trúc DB

- Do hỏng phần cứng: DB có thể cứu được tùy theo độ hư hỏng của ổ cứng

=> Phải tư vấn cho khách hàng:
- Cập nhật chương trình diệt virus thường xuyên,
- Setup cho DB chạy cơ chế song song (Raid 0 - Lưu đồng thời 2 ổ cứng), nếu xịn hơn nữa thì cài thêm cơ chế phân tán (Raid 5 - truy xuất nhanh) để hạn chế rủi ro
- Có 2 server (1 chính 1 phụ) chạy cơ chế tạo bản sao (Replication). Tạo lịch cho server chính cập nhật về server phụ định kỳ
- Có kế hoạch sao lưu (Backup plan) định kỳ
- Hạn chế share full thư mục của server

--------------------------------------------

Cứu cơ sở dữ liệu bị Corrupt hoặc Suspect


Bước 1: Attach DB bị lỗi như là 1 suspect DB trong SQL Enterprise Manager

- Tạo 1 DB trắng trên máy chủ với tên file .mdf, kích cỡ giống với DB bị lỗi
- Stop Server (Stop service - ko cần tắt máy chủ)
- Copy file .mdf bị hư đè lên file DB trắng vừa tạo
- Khởi động lại Server ( Restart SQL Agent - ko cần tắt máy chủ)

Bước 2: Để máy chủ cố gắng sửa lỗi DB. Kiểm tra DB bị đánh dấu suspect

- sp_resetstatus 'DBname' hoặc
- update master..sysdatabases SET status = status ^ 256 where name = 'DBname'
- Khởi động lại server (Restart SQL Agent)

Bước 3: Nếu DB vẫn bị đánh dấu suspect thì chuyển DB sang trạng thái "emergency mode". Trong trường hợp bị lỗi "823 - Torn page detect" thì thực hiện thẳng bước này (bỏ qua bước 2)

- update master..sysdatabases set status = 32768 where name = 'DBname'

=> Bây giờ DB đang ở trạng thái "emergency mode" và cho phép truy xuất dữ liệu

Bước 4: Chuyển dữ liệu qua 1 DB mới thông qua DTS (Data Tranformation Service) or Queries.

Trong quá trình chuyển dữ liệu sẽ gặp 1 lỗi khi truy xuất vào vùng dữ liệu bị hỏng nhưng có thể truy xuất tất cả phần còn lại của dữ liệu. Sử dụng Indexes để truy xuất dữ liệu xung quanh vùng bị hỏng.

Ghi chú: Để thực hiện được các câu lệnh trên ta phải cho phép SQL cập nhật vào các bảng dữ liệu hệ thông bằng câu lệnh sau:
Sp_configure 'allow updates', 1
Reconfigure with override
=> Sau đó nhớ trả lại trạng thái ban đầu là 0

* cách khác để cứu db do bị hỏng ổ cứng
Các bước thực hiện như sau :

B1: Tạo database trắng cùng tên, cùng size


B2: STOP SQL Server đi, sau đó các bạn copy file Data mà chúng ta không attach được override lên file Data mà SQL mới tạo ra cho DB mới. Sau đó xóa đi file Log mà SQL sinh ra cho database này.

B3: START SQL Server lên, lúc này khi vào Enterprise Manager sẽ thấy database XYZ sẽ có màu xám xịt và status của nó hiện thời sẽ là Suspect Mode.

B4: Chúng ta vào Query Analyzer và gõ đoạn code sau và thực thi chúng. Đoạn code này cho phép update các system catalog:

use master
go
sp_configure 'allow updates',1
reconfigure with override
go

B5: Tiếp tục chúng ta sẽ thực thi đoạn code tiếp theo:
select * from sysdatabases
where name='XYZ'
khi thực thi xong đoạn code này, chúng ta hãy lấy giấy viết và ghi lại trường status của database này. VD ở đây status là 123456 đi nhé

Sau đó các bạn thực thi đoạn code này để chuyển Mode của datbase XYZ từ Suspect Mode trở thành Emergency Mode:
update sysdatabases
set status=32768
where name='XYZ'

B6: STOP SQL Sever và RESTART lại

B7: Thực thi đoạn code tiếp theo để hệ thống tự động phát sinh lại file Log cho database này

dbcc traceon (3604)
dbcc rebuild_log('XYZ,'Thu_Muc_Chua_Data_SQL\XYZ_log.LD F')
go

Ra ngoài đĩa bạn kiểm tra lại tại thư mục Thu_Muc_Chua_Data_SQL, có file XYZ_log.LDF không?

Nếu chưa có thì phải làm lại bước trên, nếu đã có thì chạy tiếp các dòng code sau :


B8: Thực thi đoạn code sau để reset lại status của database này
sp_resetstatus XYZ
go

B9: Thực thi đoạn code sau:
use master
go
sp_configure 'allow_updates',0
reconfigure with override
go

B10: Thực thi đoạn code sau để set lại status cho database XYZ
sp_configure 'allow updates',1
reconfigure with override
go
update sysdatabases
set status= gia_tri_status_ma_chung_ta_ghi_lai_luc_dau
where name='XYZ'
go
sp_configure 'allow updates',0
reconfigure with override
go

B11: Sau khi thực hiện đúng với những bước trên, các bạn vào lại Enterprise Manager tiến hành Detach database XYZ. Rồi lại attach lại database này. Khi đó bạn đã cứu được Database của bạn với các dữ liệu cho đến khi HDD bị sự cố.* cách khác để cứu db do bị hỏng ổ cứng

Sổ tay Visual foxproSử dụng Teamviewer

Comments

Unregistered user Saturday, January 21, 2012 1:46:59 PM

Anonymous writes: y8 game เกมส์

Write a comment

New comments have been disabled for this post.