2009-02-10 33 views
17

Hầu hết các bảng (nếu không phải tất cả) đều có một trường "blob" trong đó. Một trong những bảng lưu trữ Nhật ký tác vụ của người dùng hiện đã tăng lên 8 GB (khoảng 5 triệu bản ghi).Hiểu phân đoạn Lob (SYS_LOB) trong oracle?

Và DBA của chúng tôi đã thấy rằng lược đồ này hiện đang ăn không gian theo cấp số nhân. Chúng tôi đã nghiên cứu một chút và phát hiện ra rằng có một trong các bảng có (SYS_LOB) chiếm khoảng 116GB cơ sở dữ liệu 140GB.

DBA của chúng tôi đã nói với chúng tôi rằng bảng này có liên quan đến bảng mà tiết kiệm các bản ghi hoạt động người dùng (đó là 8GB)

Có ai biết điều này bảng SYS_LOB không? Là blob thực tế được lưu trong bảng chúng tôi tạo ra OR oracle thực sự lưu trữ các blob này trong một bảng khác nhau (nếu có, sau đó SYS_LOB sẽ là bảng đó)?

Trả lời

38

Không có bảng SYS_LOB trong cơ sở dữ liệu Oracle (ít nhất, không có bảng đó là một phần của cài đặt cơ sở dữ liệu cơ bản. Có một bảng DBA_LOBS hiển thị thông tin về tất cả các cột LOB trong cơ sở dữ liệu, nhưng không thực sự lưu trữ bất kỳ dữ liệu LOB nào, chỉ siêu dữ liệu. Các phân đoạn LOB thực tế trong cơ sở dữ liệu có các tên do hệ thống tạo ra có dạng SYS_LOB số nhận dạng $$. SYS_LOBsố nhận dạng $$ đó là tiêu thụ 116 GB không gian. Giả sử đó là chính xác, bạn có thể tìm hiểu cột nào của bảng gì Cột LOB ánh xạ tới sử dụng bảng DBA_LOBS, tức là

SELECT owner, table_name, column_name 
    FROM dba_lobs 
WHERE segment_name = 'SYS_LOB<<identifier>>$$' 
+2

Điều này là sâu sắc, cảm ơn bạn. Đây sẽ là câu trả lời được chấp nhận btw .. –

Các vấn đề liên quan