最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

通过在线重定义来增加大表列默认值

来源:动视网 责编:小采 时间:2020-11-09 12:43:35
文档

通过在线重定义来增加大表列默认值

通过在线重定义来增加大表列默认值:其中提到11G之前,可以通过在线重定义表的方式,来进行列的增加(且有默认值)。 之前的文章讨论过11G中关于大表增加列的新特性 , 其中提到11G之前,可以通过在线重定义表的方式,来进行列的增加(且有默认值)。 在线重定义权限需求: grant crea
推荐度:
导读通过在线重定义来增加大表列默认值:其中提到11G之前,可以通过在线重定义表的方式,来进行列的增加(且有默认值)。 之前的文章讨论过11G中关于大表增加列的新特性 , 其中提到11G之前,可以通过在线重定义表的方式,来进行列的增加(且有默认值)。 在线重定义权限需求: grant crea


其中提到11G之前,可以通过在线重定义表的方式,来进行列的增加(且有默认值)。

之前的文章讨论过11G中关于大表增加列的新特性 ,

其中提到11G之前,可以通过在线重定义表的方式,来进行列的增加(且有默认值)。

在线重定义权限需求:

grant create any table to 用户;
grant alter any table to 用户;
grant drop any table to 用户;
grant lock any table to 用户;
grant select any table to 用户;
grant create any trigger to 用户;
grant create any index to 用户;

1.SQL获取原始表的DDL

可通过如下设置,,将storage 子句去除,也可以不去执行

begin
Dbms_Metadata.Set_Transform_Param(Dbms_Metadata.Session_Transform,
'SQLTERMINATOR',
True);
Dbms_Metadata.Set_Transform_Param(Dbms_Metadata.Session_Transform,
'STORAGE',
False);
end;

获取原始表的DDL语句(这里例子为T)

set pagesize 5000
set long 50000
Select Dbms_Metadata.Get_Ddl(Object_Type => 'TABLE', Name => 'T') from dual
union all
select Dbms_Metadata.Get_Dependent_Ddl(Object_Type => 'CONSTRAINT',Base_Object_Name => 'T') from dual
union all
select Dbms_Metadata.Get_Dependent_Ddl(Object_Type => 'INDEX',Base_Object_Name => 'T') from dual
union all
select Dbms_Metadata.Get_Dependent_Ddl('OBJECT_GRANT', 'T', 'SCOTT') from dual;

2.将获取的语句中的 表名T,替换为T2,之后建立。

3.给t2表 增加字段(带有默认值)

alter table t2 add MrDai varchar2(10) default 'MrDai';

4.检查一下能否T表能否进行重定义,如果执行成功,则表示可以,否则将会报错显示为什么不可以

exec Dbms_Redefinition.Can_Redef_Table(USER, 'T');

5.开始重定义

注意:如原始表有未提交的事物,该过程会一直在等待,等待事件为enq: TX - row lock contention

exec dbms_redefinition.start_redef_table(uname => USER,orig_table => 'T',int_table => 'T2',options_flag => DBMS_REDEFINITION.cons_use_pk);

6.完成重定义

exec dbms_redefinition.finish_redef_table(uname=>USER,orig_table=>'T',int_table=>'T2');

查看重定义以后的t

SQL> desc t;
Name Null? Type
----------------------------------------- -------- ----------------------------
OWNER VARCHAR2(30)
OBJECT_NAME VARCHAR2(128)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NOT NULL NUMBER
.
.
.
MRDAI VARCHAR2(10)

已经添加列完成。

文档

通过在线重定义来增加大表列默认值

通过在线重定义来增加大表列默认值:其中提到11G之前,可以通过在线重定义表的方式,来进行列的增加(且有默认值)。 之前的文章讨论过11G中关于大表增加列的新特性 , 其中提到11G之前,可以通过在线重定义表的方式,来进行列的增加(且有默认值)。 在线重定义权限需求: grant crea
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top