این مقاله نحوه تغییر نام یک بخشLOB را در Oracle 23c نشان می دهد.
برای مشاهده نحوه نصب و راه اندازی Oracle 23Cاینجا کلیک کنید.
آماده کردن محیط تست :
مثالهای این مقاله به جدول زیر نیاز دارند که شامل یک ستون LOBاست.
drop table if exists t1 purge;
create table t1 (
id number generated always as identity primary key,
blob_data blob);
مشکل (MOVE):
نام فعلی بخش LOB را برای ستون BLOB_DATAبررسی می کنیم.
column table_name format a15
column column_name format a15
column segment_name format a30
column tablespace_name format a15
select table_name,
column_name,
segment_name,
tablespace_name
from user_lobs
where table_name = 'T1';
TABLE_NAME COLUMN_NAME SEGMENT_NAME TABLESPACE_NAME
--------------- --------------- ------------------------------ ---------------
T1 BLOB_DATA SYS_LOB0000089326C00002$$ USERS
SQL>
در نسخه های قبلی پایگاه داده برای تغییر نام بخش lob مجبور بودیم آن را منتقل کنیم.
alter
table t1 move lob(blob_data) store as t1_blob_data_segment online;
می بینیم که lob segmentما به عنوان بخشی از عملیات حرکت تغییر نام داده است.
select table_
name,
column_name,
segment_name,
tablespace_name
from user_lobs
where table_name = 'T1';
TABLE_NAME COLUMN_NAME SEGMENT_NAME TABLESPACE_NAME
--------------- --------------- ------------------------------ ---------------
T1 BLOB_DATA T1_BLOB_DATA_SEGMENT USERS
SQL>
به خوبی انجام شد، اما برای یک segment LOBبزرگ می تواند کار زیادی را نشان دهد. برای رسیدن به این هدف، پایگاه داده باید نسخه جدیدی از segment LOBرا بسازد.
راه حل (RENAME):
در پایگاه داده Oracle 23c می توانیم یک segment LOB را تغییر نام دهیم.
alter table
t1 rename lob(blob_data) t1_blob_data_segment to t1_blob_data_new_segment;
همانطور که انتظار می رفت، segment LOBتغییر نام داده است.
select table_name,
column_name,
segment_name,
tablespace_name
from user_lobs
where table_name = 'T1';
TABLE_NAME COLUMN_NAME SEGMENT_NAME TABLESPACE_NAME
--------------- --------------- ------------------------------ ---------------
T1 BLOB_DATA T1_BLOB_DATA_NEW_SEGMENT USERS
SQL>
از آنجایی که این یک تغییر متا داده است، نیازی به بازسازی کل segment LOB ندارد و تغییر نام یک segment LOB را برای LOB های بزرگ ساده می کند.
عملیات تغییر نام برای Partition
ها و Subpartition
ها نیز امکان پذیر است.
-- Table
alter table table_name rename lob(column_name) old_segment_name to new_segment_nane;
-- Partition
alter table table_name rename lob(column_name) partition old_segment_name to new_segment_nane;
-- Subpartition
alter table table_name rename lob(column_name) subpartition old_segment_name to new_segment_nane;
جهت دریافت خدمات مشاوره، آموزش و نگهداری پایگاه داده اوراکل با ما در تماس باشید.