Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

cách kiểm tra Cơ sở dữ liệu có nhất quán sau khi khôi phục không đầy đủ

Bạn có thể khôi phục cơ sở dữ liệu từ bản sao lưu và áp dụng nhiều kho lưu trữ để làm cho nó nhất quán. Bây giờ bạn muốn đảm bảo rằng nhật ký đặt lại mở vẫn diễn ra tốt đẹp.
Đây là cách kiểm tra Cơ sở dữ liệu có nhất quán sau khi khôi phục không đầy đủ

Câu lệnh dưới đây đặt định dạng ngày thành dạng mở rộng vì chúng tôi sẽ yêu cầu điều này nhiều lần trong phân tích của mình

 SQL> thay đổi bộ phiên nls_date_format ='DD-MON-YYYY HH24:MI:SS'; 

Kiểm tra 1:

Mục tiêu:Xác minh rằng các tệp dữ liệu được phục hồi đến thời điểm dự định (PIT) và chúng nhất quán (FUZZY =NO)
Truy vấn trạng thái hiện tại và PIT (P-oint I-n T-ime mà các tệp dữ liệu đã được được khôi phục) của các tệp dữ liệu bằng cách đọc trực tiếp tiêu đề tệp dữ liệu từ các tệp dữ liệu vật lý:

 SQL> chọn dim, status, error, recovery, checkpoint_change #, checkpoint_time, count (*) từ nhóm v $ datafile_header theo mờ, status, error, recovery, checkpoint_change #, checkpoint_time; 
  • Xác minh rằng checkpoint_time / checkpoint_change # phù hợp với dự định của bạn cho đến BẤT CỨ TIME / SCN. Nếu không, hãy khôi phục thêm cơ sở dữ liệu nếu bạn có thêm nhật ký được lưu trữ.
  • Nếu FUZZY =YES đối với một số tệp dữ liệu, điều đó có nghĩa là cần phải khôi phục nhiều hơn. Nếu không còn nhật ký được lưu trữ nào nữa, hãy xác định các tệp dữ liệu đó và xác định xem chúng tôi có thể đưa chúng ngoại tuyến hay không vì chúng tôi sẽ làm mất dữ liệu trong các tệp dữ liệu đó. Nếu các tệp dữ liệu thuộc không gian bảng SYSTEM hoặc UNDO, chúng ta có thể / PHẢI không đưa tệp dữ liệu đó vào ngoại tuyến mà không có phân tích thích hợp. Vui lòng tham khảo bộ phận Hỗ trợ của Oracle để biết các hành động khác.
 SQL> chọn tệp #, substr (tên, 1, 50), substr (không gian_bảng_tên, 1, 15), hoàn tác_opt_current_change # từ v $ datafile_header trong đó mờ ='YES'; 

Đôi khi, nếu tên vùng bảng không cho biết nó là vùng bảng UNDO, nếu chúng tôi thấy giá trị khác 0 trong cột UNDO_OPT_CURRENT_CHANGE #, điều đó cho biết rằng tệp dữ liệu có chứa các phân đoạn hoàn tác.

Để đưa tệp dữ liệu vào ngoại tuyến:

 SQL> thay đổi tệp dữ liệu cơ sở dữ liệu ngoại tuyến; 

Kiểm tra 1 có thể được coi là Đạt khi:
+ Đã xác minh rằng tất cả các tệp dữ liệu đã được phục hồi đến thời điểm dự định.
+ Mờ =KHÔNG đối với HỆ THỐNG, UNDO và tất cả các tệp dữ liệu dự định. Đối với các tệp dữ liệu có Fuzzy =YES, hãy khôi phục chúng thêm hoặc đưa chúng ra NGOẠI TUYẾN nếu không có nhật ký nào được lưu trữ thêm.

Kiểm tra 2:

Mục tiêu:Xác minh rằng các tệp có trạng thái =RECOVER không phải là NGOẠI TUYẾN vô tình

 SQL> chọn trạng thái, đã bật, đếm (*) từ nhóm tệp dữ liệu v $ theo trạng thái, đã bật; TÌNH TRẠNG ĐƯỢC BẬT ĐẾM (*) ------------- ------- HỆ THỐNG BỊ HÓA 1 TRỰC TUYẾN ĐỌC VIẾT 1114 KHÁM PHÁ HÓA 2 

Nếu các tệp ở trạng thái PHỤC HỒI, hãy xác minh xem chúng có phải là NGOẠI TUYẾN không:

 SQL> chọn tệp #, substr (tên, 1, 50), trạng thái, lỗi, khôi phục từ v $ datafile_header; 

Nếu bạn muốn dữ liệu của những tệp này có thể truy cập được, hãy mang chúng TRỰC TUYẾN:

 SQL> thay đổi tệp dữ liệu cơ sở dữ liệu ONLINE; 

Nếu tệp vẫn ở chế độ ngoại tuyến tại thời điểm MỞ TÁI LẬP LẠI, tệp dữ liệu có thể không trực tuyến trở lại trong cùng một cơ sở dữ liệu ĐÃ MỞ.
Kiểm tra 2 có thể được coi là Vượt qua khi:
a) Tất cả các tệp dữ liệu dự định đều không ngoại tuyến

Kiểm tra 3:

Mục tiêu:Kiểm tra mờ bổ sung (Kiểm tra mờ tuyệt đối)

Đôi khi, có thể thấy Fuzzy =NO và cùng một điểm kiểm tra_change # cho tất cả các tệp dữ liệu dự định; vẫn còn một số tệp dữ liệu có thể bị mờ và OPEN RESETLOGS sẽ trả về lỗi, ví dụ:

 SQL> chọn dim, status, error, recovery, checkpoint_change #, checkpoint_time, count (*) từ nhóm v $ datafile_header theo mờ, status, error, recovery, checkpoint_change #, checkpoint_time; FUZ STATUS ERROR REC CHECKPOINT_CHANGE # CHECKPOINT_TIME COUNT (*) --- --------------------------------- ------------------ - ------------------- ---------- KHÔNG TRỰC TUYẾN 5375858580 31-OCT-2011 23:10:14 7SQL> ALTER DATABASE OPEN RESETLOGS; ORA -01194:tệp 14 cần khôi phục nhiều hơn để nhất quánORA-01110:tệp dữ liệu 3:'/u01/app/oracle/oradata/TEST/undotbs02.dbf'Do đó, chúng ta nên thực hiện kiểm tra mờ bổ sung được gọi là Kiểm tra mờ tuyệt đối: 
 SQL> select hxfil file #, substr (hxfnm, 1, 50) name, fhscn checkpoint_change #, fhafs Absolute_Fuzzy_SCN, max (fhafs) over () Min_PIT_SCN from x $ kcvfh where fhafs! =0; 

Lưu ý:Cột Min_PIT_SCN sẽ trả về cùng một giá trị ngay cả cho nhiều hàng vì chúng tôi đã áp dụng hàm ANALYTICAL “MAX () OVER ()” trên đó.

Truy vấn trên chỉ ra rằng quá trình khôi phục phải được thực hiện ít nhất là CHO ĐẾN NỮA SCN 5311524 để làm cho các tệp dữ liệu nhất quán và sẵn sàng MỞ. Vì checkpoint_change # nhỏ hơn Min_PIT_SCN, các tệp dữ liệu sẽ yêu cầu khôi phục nhiều hơn.

Kiểm tra 3 có thể được coi là Đã vượt qua khi,
a) Không có hàng nào được chọn từ truy vấn trên (tức là Min_PIT_SCN là 0 (Zero) cho tất cả các tệp dữ liệu)
b) Min_PIT_SCN được trả về ít hơn Checkpoint_Change #

Kiểm tra 4:Yêu cầu Nhật ký Lưu trữ

Truy vấn tệp điều khiển để tìm tệp lưu trữ mới nhất được yêu cầu trước khi khôi phục. Giả sử quá trình sao lưu đã hoàn tất vào lúc 23:20:14 ngày 31 tháng 8 năm 2011:

 SQL> ALTER SESSION SET NLS_DATE_FORMAT ='DD-MON-RR HH24:MI:SS'; 
SQL> CHỌN THREAD #, SEQUENCE #, FIRST_TIME, NEXT_TIME TỪ V $ ARCHIVED_LOG
WHERE '31 -AUG-11 23:20:14 'GIỮA ĐẦU_TIME VÀ NEXT_TIME;

Nếu truy vấn trên không trả về bất kỳ hàng nào, có thể là thông tin đã cũ ngoài tệp điều khiển - hãy chạy truy vấn sau đối với v $ log_history.

 SQL> ALTER SESSION SET NLS_DATE_FORMAT ='DD-MON-RR HH24:MI:SS'; 
SQL> chọn a.THREAD #, a.SEQUENCE #, a.FIRST_TIME
từ V $ LOG_HISTORY a
trong đó FIRST_TIME =
(CHỌN TỐI ĐA (b.FIRST_TIME)
TỪ V $ LOG_HISTORY b
WHERE b.FIRST_TIME
Chuỗi # được trả về bởi truy vấn trên là chuỗi nhật ký hiện tại tại thời điểm sao lưu kết thúc - giả sử 530 chuỗi 1.

Để sử dụng khôi phục tối thiểu:(Số chuỗi được trả về là +1)

 RMAN> CHẠY 
{
ĐẶT LẠI CÂU HỎI 531 THỨ 1;
KHÔI PHỤC CƠ SỞ DỮ LIỆU;
}

Nếu đây là một triển khai RAC, hãy sử dụng SQL này thay thế để truy vấn tệp điều khiển:

 SQL> CHỌN THREAD #, SEQUENCE #, FIRST_CHANGE #, NEXT_CHANGE # FROM V $ ARCHIVED_LOG WHERE '31 -AUG-11 23:20:14 'GIỮA ĐẦU_TIME VÀ NEXT_TIME; 

Để khôi phục tối thiểu, hãy sử dụng chuỗi nhật ký và chuỗi có NEXT_CHANGE # thấp nhất được trả về bởi truy vấn trên.

Kiểm tra 4 có thể được coi là ĐÃ XÓA khi:

Tất cả các tệp lưu trữ từ thời điểm sao lưu đến khi kết thúc sao lưu đều có sẵn để sử dụng trong quá trình khôi phục

Kiểm tra 5 (Sau khi MỞ TÁI LẬP LẠI thành công):

Theo dõi alert.log về thời gian MỞ các hoạt động RESETLOGS. Bạn có thể thấy một số thông báo như bên dưới khi tra từ điển:

Tạo tệp OFFLINE ‘MISSING00004’ trong tệp điều khiển

nếu bạn tìm thấy tệp, hãy thử đổi tên chúng. Nếu không, chúng tôi có thể ngoại tuyến tệp dữ liệu hoặc bỏ vùng bảng được liên kết:

 SQL> chọn tệp #, trạng thái, đã kích hoạt, substr (tên, 1, 50) từ v $ datafile trong đó tên như '% MISSING%'; FILE # STATUS ĐÃ BẬT SUBSTR (NAME, 1,50) ---- ---- ---------- ----------------------------- --------------------- 4 NGOẠI TUYẾN /  / MISSING000 7 NGOẠI TUYẾN /  / MISSING000SQL> thay đổi tệp dữ liệu cơ sở dữ liệu 4 trực tuyến; thay đổi tệp dữ liệu cơ sở dữ liệu 4 trực tuyến * LỖI tại dòng 1:ORA-01157:không thể xác định / khóa tệp dữ liệu 4 - xem tệp theo dõi DBWR> / dbs / MISSING00004'SQL> thay đổi tên tệp 'MISSING00004' thành '/  /users01.dbf'; Cơ sở dữ liệu đã thay đổi.SQL> thay đổi tên tệp 'MISSING00007' thành '/  /users02.dbf'; Cơ sở dữ liệu đã thay đổi.SQL> chọn không gian_bảng, trạng thái từ dba_tablespaces nơi tên_bảng trong_tên (chọn không gian_bảng từ dba_data_files nơi tập_tin trong (4, 7)); TABLESPACE_NAME TRẠNG THÁI ------------------ ---------- - --------- NGƯỜI DÙNG OFFLINESQL> ALTER TABLESPACE NGƯỜI DÙNG TRỰC TUYẾN; Vùng bảng đã thay đổi. 

Hy vọng điều này sẽ giúp về cách kiểm tra Cơ sở dữ liệu là nhất quán sau khi khôi phục không đầy đủ. Vui lòng cung cấp phản hồi

Cũng đã đọc
cách tìm số thứ tự nhật ký lưu trữ trong oracle
lệnh sao lưu RMAN
Lệnh sao lưu danh sách RMAN
Cách khôi phục cơ sở dữ liệu bằng RMAN


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle.DataAccess.Client Dependencies

  2. Quản lý việc xử lý lỗi trong khi chạy sqlplus từ các tập lệnh shell

  3. Cách xuất kết quả truy vấn sang tệp CSV trong SQL Developer (Oracle)

  4. Truy vấn LISTAGG ORA-00937:không phải là một hàm nhóm đơn

  5. Định cấu hình sao chép cơ sở dữ liệu không đồng nhất - SQL Server sang Oracle