همانطور که می دانید اوراکل برای هر LOB segment یک نام خودکار با پیشوند SYS_LOB ایجاد می کند:
SQL> create table asnad( id number, doc clob); Table created SQL> select segment_name from dba_lobs where table_name='ASNAD'; SEGMENT_NAME ------------------------------ SYS_LOB0000136126C00002$$
در نسخه 21c برای تغییر نام SYS_LOBها می بایست LOB segment را move داد که این کار بسیار پرهزینه بود و چالشهایی نظیر بازسازی ایندکسهای جدول را به همراه داشت:
SQL> insert into ASNAD values(1,'my name is vahid'); 1 row inserted SQL> commit; Commit complete SQL> create index ind on asnad(id); Index created
SQL> alter table asnad move lob(doc) store as asnad_doc; Table altered SQL> select segment_name from dba_lobs where table_name='ASNAD'; SEGMENT_NAME ---------------- ASNAD_DOC SQL> select index_name from user_indexes where status='UNUSABLE'; INDEX_NAME --------------- IND
در نسخه 23c برای تغییر نام LOB segment نیازی به جابجا کردن دیتا نخواهد بود و صرفا با اجرای دستور alter table rename lob می توانیم نام آن را تغییر دهیم:
SQL> create table asnad( id number, doc clob); Table created SQL> create index ind on asnad(id); Index created SQL> insert into ASNAD values(1,'my name is vahid'); 1 row inserted SQL> commit; Commit complete SQL> select segment_name from dba_lobs where table_name='ASNAD'; SEGMENT_NAME --------------------------- SYS_LOB0000136139C00002$$
SQL> alter table asnad rename lob(doc) "SYS_LOB0000136139C00002$$" to asnad_doc; Table altered SQL> select segment_name from dba_lobs where table_name='ASNAD'; SEGMENT_NAME -------------- ASNAD_DOC SQL> select index_name from user_indexes where status='UNUSABLE'; no rows selected
برای جداول پارتشین شده هم می توان به روش زیر عمل کرد:
alter table table_name rename lob(column_name) partition old_segment_name to new_segment_name;