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

Làm thế nào để thu nhỏ không gian bảng tạm thời trong oracle?

Ôi Chúa ơi! Hãy xem kích thước của vùng bảng tạm thời của tôi! Hoặc ... cách thu nhỏ vùng bảng tạm thời trong Oracle.

Có, tôi đã chạy một truy vấn để xem không gian bảng tạm thời của tôi lớn như thế nào:

SQL> SELECT tablespace_name, file_name, bytes
2  FROM dba_temp_files WHERE tablespace_name like 'TEMP%';

TABLESPACE_NAME   FILE_NAME                                 BYTES
----------------- -------------------------------- --------------
TEMP              /the/full/path/to/temp01.dbf     13,917,200,000

Câu hỏi đầu tiên bạn phải hỏi là tại sao không gian bảng tạm thời lại quá lớn. Bạn có thể biết câu trả lời cho điều này ngay từ đầu. Có thể do truy vấn báo động mà bạn vừa chạy với một loại bị nhầm lẫn (tôi đã thực hiện điều đó nhiều hơn một lần.) Có thể do một số trường hợp ngoại lệ khác. Nếu đúng như vậy thì tất cả những gì bạn cần làm để dọn dẹp là thu nhỏ vùng chứa tạm thời và tiếp tục cuộc sống.

Nhưng nếu bạn không biết thì sao? Trước khi quyết định thu nhỏ, bạn có thể cần thực hiện một số điều tra về nguyên nhân của không gian bảng lớn. Nếu điều này xảy ra trên cơ sở bình thường thì có thể cơ sở dữ liệu của bạn chỉ cần nhiều dung lượng như vậy.

Chế độ xem hiệu suất động

V$TEMPSEG_USAGE

có thể rất hữu ích trong việc xác định nguyên nhân.

Có thể bạn chỉ không quan tâm đến nguyên nhân và bạn chỉ cần thu gọn nó lại. Đây là ngày thứ ba của bạn trong công việc. Dữ liệu trong cơ sở dữ liệu chỉ là dữ liệu 200MiBif và không gian bảng tạm thời là 13GiB - Chỉ cần thu nhỏ nó và tiếp tục. Nếu nó phát triển trở lại thì chúng ta sẽ xem xét nguyên nhân. Trong thời gian bình thường, tôi lấy hết dung lượng trên ổ đĩa đó và tôi chỉ cần dung lượng lại.

Chúng ta hãy nhìn vào việc thu nhỏ nó. Nó sẽ phụ thuộc một chút vào phiên bản Oracle bạn đang chạy và cách không gian bảng tạm thời được thiết lập.
Oracle sẽ làm tốt nhất để giúp bạn không mắc phải bất kỳ sai lầm kinh khủng nào vì chúng tôi sẽ chỉ thử các lệnh và nếu chúng không làm việc, chúng tôi sẽ thu nhỏ theo một cách mới.

Đầu tiên, hãy thử thu nhỏ datafile. Nếu chúng ta có thể làm được điều đó thì chúng ta sẽ lấy lại không gian và chúng ta có thể lo lắng về lý do tại sao nó lại phát triển vào ngày mai.

SQL>
SQL> alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M; 
alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M
*   
ERROR at line 1:
ORA-03297: file contains used data beyond requested RESIZE value

Tùy thuộc vào thông báo lỗi, bạn có thể muốn thử điều này với các sizestest khác nhau nhỏ hơn trang web hiện tại của tệp. Tôi đã không thành công với điều này. Oracle sẽ chỉ thu nhỏ tệp nếu vùng bảng tạm thời nằm ở đầu tệp và nếu nó nhỏ hơn kích thước youspecify. Một số tài liệu cũ của Oracle (họ đã sửa lỗi này) cho biết rằng bạn có thể đưa ra lệnh và thông báo lỗi sẽ cho bạn biết kích thước bạn có thể thu nhỏ là bao nhiêu. Vào thời điểm tôi bắt đầu làm việc với tư cách là một DBA, điều này không đúng. Bạn chỉ cần đoán và chạy lại lệnh nhiều lần và xem nó có hoạt động không.

Ổn thỏa. Điều đó đã không hoạt động. Còn điều này thì sao.

SQL> alter tablespace YOUR_TEMP_TABLESPACE_NAME shrink space keep 256M;

Đây là nó! Nếu nó hoạt động, bạn có thể muốn quay lại lệnh trước đó và thử thêm một số lần nữa.

Nhưng nếu điều đó không thành công thì sao. Nếu vùng bảng tạm thời là vùng tạm thời mặc định được thiết lập khi cơ sở dữ liệu được cài đặt thì bạn có thể cần thực hiện nhiều công việc hơn. Tại thời điểm này, tôi thường đánh giá lại nếu tôi thực sự cần khoảng trống đó trở lại. Sau khi tất cả dung lượng ổ đĩa chỉ tốn $ X.XX một GiB. Thường thì tôi không muốn thực hiện những thay đổi như thế này trong giờ sản xuất. Điều đó có nghĩa là làm việc tại 2AMAGAIN! (Không phải tôi thực sự phản đối việc làm việc lúc 2 giờ sáng - chỉ là ... Tôi cũng thích ngủ. Và tôi rất thích có tôi ở nhà lúc 2 giờ sáng ... không lang thang trên các con phố trung tâm thành phố lúc 4 giờ sáng để cố nhớ xem tôi đã đỗ xe ở đâu ô tô 3 giờ trước đó. Tôi đã nghe nói về điều "viễn thông" đó. Tôi chỉ lo lắng rằng tôi sẽ đi được một nửa và kết nối internet của tôi sẽ bị lỗi - sau đó tôi phải chạy ngay vào trung tâm thành phố để sửa chữa tất cả trước khi mọi người xuất hiện vào buổi sáng để sử dụng cơ sở dữ liệu.)

Ok ... Quay lại vấn đề nghiêm túc ... Nếu không gian bảng tạm thời mà bạn muốn thu nhỏ là không gian bảng tạm thời mặc định của bạn, trước tiên bạn sẽ phải tạo một không gian bảng tạm thời mới, đặt nó làm không gian bảng tạm thời mặc định, sau đó thả không gian bảng tạm thời mặc định cũ của bạn và tạo lại nó. Afterwordsdrop bảng tạm thời thứ hai được tạo.

SQL> CREATE TEMPORARY TABLESPACE temp2
2  TEMPFILE '/the/full/path/to/temp2_01.dbf' SIZE 5M REUSE
3  AUTOEXTEND ON NEXT 1M MAXSIZE unlimited
4  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

Tablespace created.

SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2;

Database altered.

SQL> DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES;

Tablespace dropped.


SQL> CREATE TEMPORARY TABLESPACE temp
2  TEMPFILE '/the/full/path/to/temp01.dbf' SIZE 256M REUSE
3  AUTOEXTEND ON NEXT 128M MAXSIZE unlimited
4  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

Tablespace created.

SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;

Database altered.

SQL> DROP TABLESPACE temp2 INCLUDING CONTENTS AND DATAFILES;

Tablespace dropped.

Hy vọng rằng một trong những điều này sẽ hữu ích!



  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 ORA-30004 khi sử dụng hàm SYS_CONNECT_BY_PATH,

  2. Kiểm tra xem một mục không tồn tại trong bảng khác hay không

  3. Cách cài đặt SQLcl trên máy Mac

  4. Đặc vụ bị chặn

  5. Nhà cung cấp ADO.NET 'Oracle.ManagedDataAccess.Client' không được đăng ký trong tệp cấu hình máy hoặc ứng dụng hoặc không thể tải được