Không thể bỏ UNDO TABLESPACE


7

Chúng tôi có Oracle 11gR1 RAC hai phiên bản trên hai máy chủ khác nhau, không gian bảng hoàn tác mới UNDOTBS20140508 đã tạo 30G, tôi muốn xóa phiên bản cũ UNDOTBSX02 , tôi đã làm như sau:

CREATE UNDO TABLESPACE UNDOTBS20140508  DATAFILE '+DATA/....../UNDOTBS20140508' SIZE 20G;
ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBS20140508;
DROP TABLESPACE UNDOTBSX02 INCLUDING CONTENTS AND DATAFILES;

Khi cố gắng thả UNDOTBSX02, nó hiển thị lỗi sau:

Error starting at line : 13 in command -
DROP TABLESPACE UNDOTBSX02 INCLUDING CONTENTS AND DATAFILES
Error report -
SQL Error: ORA-00604: error occurred at recursive SQL level 1
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at line 57
ORA-30013: undo tablespace 'UNDOTBSX02' is currently in use
00604. 00000 -  "error occurred at recursive SQL level %s"
*Cause:    An error occurred while processing a recursive SQL statement
           (a statement applying to internal dictionary tables).
*Action:   If the situation described in the next error on the stack
           can be corrected, do so; otherwise contact Oracle Support.

Tôi đã kiểm tra UNDOTBSX02 cho bất kỳ giao dịch đang chờ xử lý nào và nó trống. Vậy làm thế nào để thả nó?

Lưu ý : Tôi không phải là Oracle DBA, nhưng tôi phải thực hiện nhiệm vụ này.


Xin chào, Làm thế nào để bạn biết không có giao dịch sử dụng tbs cũ hoàn tác? Có lẽ bạn phải chờ đợi để hoàn tác. Bạn có thể làm khởi động lại cơ sở dữ liệu?
eliatou

Như @eliatou nói, có lẽ là một vấn đề duy trì. oracleflash.com/32/ từ đó tóm tắt lại
Philᵀᴹ

Không có bất kỳ phiên kết nối nào CHỌN a.name, b.status, d.username, d.sid, d.serial # TỪ v $ rollname a, v $ rollstat b, giao dịch c, v $ phiên d WHERE a.usn = b. usn VÀ a.usn = c.xidusn VÀ c.ses_addr = d.saddr VÀ a.name IN (CHỌN Seg_name TỪ dba_segments WHERE framespace_name = 'UNDOTBSX02');
Mohammad Jolani

ok, không giao dịch nữa. Thời gian lưu giữ nào? SQL> tham số sho UNDO_RETENTION. Bạn có thể khởi động lại cơ sở dữ liệu của bạn?
eliatou

Bạn có thể tắt db, khởi động nó trong chế độ hạn chế và sau đó thử bỏ không gian bảng cũ.
Raj

Câu trả lời:


3

Tôi đã thử các đề xuất ở trên, nhưng không hoạt động, chẳng hạn như chọn SQL không nhận được kết quả và tôi vẫn không thể bỏ không gian bảng hoàn tác. Vấn đề cơ bản là không gian bảng hoàn tác cũ vẫn được đăng ký trong Oracle dưới dạng hoàn tác, do đó chúng ta cần thay đổi nó thành không gian bảng hoàn tác mới.

Đây là những gì tôi đã làm và nó đã làm việc:

  1. tạo một không gian bảng UNDO mới:
CREATE SMALLFILE UNDO TABLESPACE "UNDO" 
DATAFILE '+DATA/t2/datafile/undo_01.dbf' SIZE 10G 
REUSE AUTOEXTEND ON NEXT 500M MAXSIZE 10G;
  1. Chuyển UNDO mới sang không gian bảng "chính thức":
alter system set undo_tablespace='UNDO' scope=both;
  1. thả không gian bảng hoàn tác cũ:
DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;

hi vọng điêu nay co ich.


Đây là giống như những gì người đăng ban đầu đã thử và có thể thất bại với cùng một lỗi miễn là có hoạt động hoàn tác trong không gian bảng gốc.
Balazs Papp

Không hẳn. Dave đã thêm tùy chọn scope=bothvào alter systemtuyên bố của mình , điều này có thể thay đổi cách mà nhà tiên tri phản ứng với sự thay đổi.
John aka hot2use

1
Phạm vi = cả hai không nên thay đổi hành vi như scope=bothmặc định. Bạn phải nói rõ scope=spfilehoặc scope=memorynếu bạn muốn thay đổi tham số chỉ trong một vị trí.
jmk

1

thông báo lỗi có nghĩa tablespacelà đang sử dụng và vì việc hoàn tác tablespacelà rất quan trọng, tablespacebạn cần tắt nó trước bằng cách sử dụng:

SELECT a.name,b.status , d.username , d.sid , d.serial#
FROM   v$rollname a,v$rollstat b, v$transaction c , v$session d
WHERE  a.usn = b.usn
AND    a.usn = c.xidusn
AND    c.ses_addr = d.saddr
AND    a.name IN ( 
          SELECT segment_name
          FROM dba_segments 
          WHERE tablespace_name = 'UNDOTBSX02'
         ); 

sau đó giết SID cho vùng bảng hoàn tác bằng cách sử dụng

alter system kill session 'SID,serial'; --change the values of sid and serial by the ones  that being retrived from the previouse command

bây giờ bạn sẽ có thể thả nó


Đối với câu lệnh chọn, nó trả về kết quả trống.
Mohammad Jolani

Trong trường hợp này, bạn cần đợi cho đến khi không có giao dịch đang chờ xử lý thì khởi động lại ngay lập tức. và thả nó
Ahmad Abuhasna

1

Bạn không muốn bắt đầu bỏ kết nối. Làm thế nào để bạn biết những kết nối đó đang làm gì và những gì có thể bị hỏng nếu những kết nối đó bị hủy.

Bạn nên chờ đợi các phiên để bắt đầu sử dụng không gian bảng mới. Cuối cùng, không gian bảng hoàn tác cũ sẽ không còn được sử dụng. Tại thời điểm đó bạn có thể thả nó. Nếu bạn cần dung lượng đĩa, bạn có thể thử thu nhỏ không gian bảng hoàn tác, nhưng điều đó có thể không hoạt động. Bạn cũng có thể nhận được thời gian chết để tắt cơ sở dữ liệu, đưa cơ sở dữ liệu vào chế độ hạn chế, sau đó thả không gian bảng hoàn tác cũ, tắt máy và khởi động cơ sở dữ liệu không bị hạn chế.


1

Các câu trả lời được cung cấp bởi các áp phích trước đều hoàn toàn chính xác về cú pháp để tạo một không gian bảng UNDO mới và để chuyển hệ thống sang không gian bảng UNDO mới.

Các tài liệu của Oracle khẳng định rằng tuyên bố sau đây sẽ chuyển sang tablespace UNDO mới:

ALTER SYSTEM SET UNDO_TABLESPACE = <name of new UNDO TS>;

ví dụ: @Mohammad Jolani:

ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBS20140508;

Tuy nhiên, có một số hạn chế với việc chuyển đổi này được ghi lại là:

Hoạt động chuyển đổi không chờ các giao dịch trong không gian bảng hoàn tác cũ được cam kết. Nếu có bất kỳ giao dịch đang chờ xử lý nào trong không gian bảng hoàn tác cũ, không gian bảng hoàn tác cũ sẽ chuyển sang chế độ PENDING OFFLINE (trạng thái). Trong chế độ này, các giao dịch hiện tại có thể tiếp tục thực hiện, nhưng hoàn tác các bản ghi cho các giao dịch người dùng mới không thể được lưu trữ trong không gian bảng hoàn tác này. Không gian bảng hoàn tác có thể tồn tại trong chế độ PENDING OFFLINE này, ngay cả sau khi thao tác chuyển đổi hoàn thành thành công. Một trường hợp khác PENDING OFFLINE hoàn tác không thể được sử dụng bởi một thể hiện khác, cũng không thể bỏ nó. Cuối cùng, sau khi tất cả các giao dịch hoạt động đã được cam kết, không gian bảng hoàn tác sẽ tự động chuyển từ chế độ PENDING OFFLINE sang chế độ OFFLINE. Từ đó trở đi, không gian bảng hoàn tác có sẵn cho các phiên bản khác (trong môi trường Oracle Real Application Cluster).

Vì vậy, theo A PENDING OFFLINE hoàn tác không gian bảng có thể được sử dụng bởi một thể hiện khác, cũng không thể bỏ nó. bạn sẽ phải đợi cho đến khi Oracle hoàn toàn chuyển đổi không gian bảng UNDO hiện tại.

Hãy thử truy vấn trạng thái của vùng bảng với:

select file#, ts#, status, bytes, substr(name, 0, 30) from v$datafile;

Bạn có thể thấy rằng không gian bảng UNDO cũ của bạn vẫn đang được sử dụng hoặc ở PENDING OFFLINEtrạng thái.

Bạn cũng có thể thử chuyển đổi không gian bảng UNDO qua lại với:

ALTER SYSTEM SET UNDO_TABLESPACE = '';
Không gian bảng hoàn tác có thể tồn tại trong chế độ PENDING OFFLINE này, ngay cả sau khi thao tác chuyển đổi hoàn thành thành công. Một trường hợp khác PENDING OFFLINE hoàn tác không thể được sử dụng bởi một thể hiện khác, cũng không thể bỏ nó. Cuối cùng, sau khi tất cả các giao dịch hoạt động đã được cam kết, không gian bảng hoàn tác sẽ tự động chuyển từ chế độ PENDING OFFLINE sang chế độ OFFLINE. Từ đó trở đi, không gian bảng hoàn tác có sẵn cho các phiên bản khác (trong môi trường Oracle Real Application Cluster). Nếu giá trị tham số cho UNDO TABLESPACE được đặt thành '' (hai dấu ngoặc đơn), thì không gian bảng hoàn tác hiện tại sẽ bị tắt và không gian bảng hoàn tác có sẵn tiếp theo được chuyển vào. Hãy sử dụng câu lệnh này một cách cẩn thận , phân đoạn rollback HỆ THỐNG được sử dụng.

Bạn không thể buộc chuyển đổi trừ khi bạn tắt cơ sở dữ liệu của bạn. Nếu Oracle nghĩ rằng họ vẫn cần UNDO TS cũ thì vậy thôi. Hệ thống của bạn sẽ được viết cho UNDO TS mới, do đó không cần phải ép buộc bất cứ điều gì trừ khi bạn có yêu cầu đặc biệt.


0

Nhìn thấy liên kết này cho giải pháp. Nó làm việc cho tôi!

Các phân đoạn rollback tương ứng cần phải ngoại tuyến trước khi bạn có thể loại bỏ vùng bảng.

Ngoài ra, khởi động lại cơ sở dữ liệu là bắt buộc trước khi các giá trị tham số mới có hiệu lực.

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.