在大表上重命名列名有多昂贵?

dud*_*mar 5 oracle

假设我们在 Oracle 数据库中有数百万行的表 - 重命名它有多昂贵?我的猜测(并希望)只是元数据更改,因此表的大小没有影响,但我想验证一下(找不到任何有用的结果)。

Bal*_*app 6

是的,这只是元数据更新。

SQL> create table t1 as 
     with g as (select * from dual connect by level <= 1000)
     select 'HELLO' as c1 from g,g,g where rownum <= 1e7;

Table created.

SQL> select bytes/1024/1024 from user_segments where segment_name = 'T1';

BYTES/1024/1024
---------------
            128

SQL> select
       s.value/1024/1024 
     from v$mystat s 
     natural join v$statname sn 
     where sn.name = 'redo size';

S.VALUE/1024/1024
-----------------
       131.848621

SQL> alter table t1 rename column c1 to c2;

Table altered.

SQL> select
       s.value/1024/1024 
     from v$mystat s 
     natural join v$statname sn 
     where sn.name = 'redo size';

S.VALUE/1024/1024
-----------------
       131.851715
Run Code Online (Sandbox Code Playgroud)

上述语句只产生了少量的重做。

但还有其他方面:所需的锁和相关 PL/SQL 对象的失效。