همانطور که می دانید قابلیت in memory را می توان در سطح ستون فعال و یا غیرفعال کرد:
SQL> create table usef.tb(c1 number,c2 number,c3 number,c4 number,c5 number,c6 number); Table created. SQL> ALTER TABLE usef.tb INMEMORY NO INMEMORY (c1,c2); Table altered. SQL> SELECT TABLE_NAME, COLUMN_NAME, INMEMORY_COMPRESSION FROM V$IM_COLUMN_LEVEL WHERE TABLE_NAME = 'TB' ORDER BY COLUMN_NAME; TABLE_NAME COLUMN_NAME INMEMORY_COMPRESSION ---------- --------------- -------------------------- TB C1 NO INMEMORY TB C2 NO INMEMORY TB C3 DEFAULT TB C4 DEFAULT TB C5 DEFAULT TB C6 DEFAULT 6 rows selected. SQL> select inmemory from dba_tables where TABLE_NAME = 'TB'; INMEMORY -------- ENABLED
زمانی که تعداد ستونهای یک جدول زیاد باشد، متن دستور فوق می تواند طولانی شود بنابرین دستور فوق نیاز به انعطاف بیشتری دارد تا با تعریف لیست exclusion و inclusion، به راحتی تغییرات مدنظر را اعمال کرد.
این تغییر جزیی در اوراکل نسخه 23ai به وجود آمد در این نسخه می توان از عبارت INMEMORY (ALL) و NO INMEMORY (ALL) هم استفاده کرد که در مثالهای زیر مثالهایی از آن را مشاهده می کنید:
SQL> ALTER TABLE usef.tb INMEMORY(c2,c5) NO INMEMORY (ALL); Table altered. SQL> SELECT TABLE_NAME, COLUMN_NAME, INMEMORY_COMPRESSION FROM V$IM_COLUMN_LEVEL WHERE TABLE_NAME = 'TB' ORDER BY COLUMN_NAME; 2 3 4 TABLE_NAME COLUMN_NAME INMEMORY_COMPRESSION ---------- --------------- -------------------------- TB C1 NO INMEMORY TB C2 DEFAULT TB C3 NO INMEMORY TB C4 NO INMEMORY TB C5 DEFAULT TB C6 NO INMEMORY 6 rows selected.
SQL> ALTER TABLE usef.tb INMEMORY(ALL) NO INMEMORY (c4); Table altered. SQL> SELECT TABLE_NAME, COLUMN_NAME, INMEMORY_COMPRESSION FROM V$IM_COLUMN_LEVEL WHERE TABLE_NAME = 'TB' ORDER BY COLUMN_NAME; 2 3 4 TABLE_NAME COLUMN_NAME INMEMORY_COMPRESSION ---------- --------------- -------------------------- TB C1 DEFAULT TB C2 DEFAULT TB C3 DEFAULT TB C4 NO INMEMORY TB C5 DEFAULT TB C6 DEFAULT 6 rows selected.
SQL> ALTER TABLE usef.tb INMEMORY NO INMEMORY (ALL); Table altered. SQL> SELECT TABLE_NAME, COLUMN_NAME, INMEMORY_COMPRESSION FROM V$IM_COLUMN_LEVEL WHERE TABLE_NAME = 'TB' ORDER BY COLUMN_NAME; TABLE_NAME COLUMN_NAME INMEMORY_COMPRESSION ---------- --------------- -------------------------- TB C1 NO INMEMORY TB C2 NO INMEMORY TB C3 NO INMEMORY TB C4 NO INMEMORY TB C5 NO INMEMORY TB C6 NO INMEMORY 6 rows selected.
SQL> ALTER TABLE usef.tb INMEMORY INMEMORY (ALL); Table altered. SQL> SELECT TABLE_NAME, COLUMN_NAME, INMEMORY_COMPRESSION FROM V$IM_COLUMN_LEVEL WHERE TABLE_NAME = 'TB' ORDER BY COLUMN_NAME; TABLE_NAME COLUMN_NAME INMEMORY_COMPRESSION ---------- --------------- -------------------------- TB C1 DEFAULT TB C2 DEFAULT TB C3 DEFAULT TB C4 DEFAULT TB C5 DEFAULT TB C6 DEFAULT 6 rows selected.
در زمان ساخت جدول هم می توان از این عبارتها بهره گرفت:
SQL> create table usef.tb(c1 number,c2 number,c3 number,c4 number,c5 number,c6 number) INMEMORY(ALL) NO INMEMORY (c4); Table created.