1.快的(使用等级1,先)
操作方法1:直接增加表列并赋予默认值(NOVALIDATE是暂时抛开约束(这里是not null)加快执行)
按道理设置该参数(11g默认开启),添加列(只有一种语法)会只改数据字典,速度很快。
一定要的语法(加多列也行):
alter table xxx add column (xxxx not null default xxx);
alter table xxx add column (xxxx not null default xxx,xxxx not null default xxx);
设置参数
ALTER SESSION SET "_add_col_optim_enabled" = TRUE;
下面的因为没加not null,没符合特定语法要求,所以很慢。
SQL> alter table user_mark_result add name3 varchar2(10) default 'a';
Table altered
Executed in 45.86 seconds
2.在线重定义(我感觉稳妥,就是麻烦)(使用等级2,稳)
3.加速版(使用等级3)
操作方法2:先增加表列,再修改默认值
SQL> alter table user_mark_resultadd name2 varchar2(10) ;
Table altered
Executed in 0.047 seconds
SQL> alter table user_mark_result modify name2 default 'a';
Table altered
Executed in 0.063 seconds
改完后,后续的新行,该列值都自动有了,但是老的还是null的,如果想加not null约束,需要把老的null值全update掉。
方法一、
1.开启加速
alter session enable parallel dml;
2.切片分会话跑
3.跑
UPDATE user_mark_result SET name2 = 0 WHERE name2 IS NULL;
方法二、
1.rowid切片
2.查看表的并行度
SELECT TABLE_NAME, DEGREE FROM DBA_TABLES WHERE OWNER = 'YOUR_SCHEMA' AND TABLE_NAME = 'YOUR_TABLE_NAME';
3.每份/*+ PARALLEL(p,5) */开并行
UPDATE user_mark_result SET name2 = 0 WHERE name2 IS NULL;
4.改回原本的并行度
自己选
ALTER TABLE your_table_name PARALLEL DEGREE (n);
禁用
ALTER TABLE your_table_name NO PARALLEL;
自行判断并行度
ALTER TABLE your_table_name NO PARALLEL;
-----
最终再将列改为not null
alter table RADINFO.PACSSERIES modify SERIESCATEGORY not null;
查看约束
SELECT constraint_name, constraint_type, search_condition
FROM all_constraints
WHERE owner = 'YOUR_SCHEMA' -- 替换为你的模式名
AND table_name = 'YOUR_TABLE_NAME' -- 替换为你的表名
ORDER BY constraint_type, constraint_name;