暂无图片
暂无图片
7
暂无图片
暂无图片
暂无图片

Oracle 12c bigfile表空间对象迁移

Oracle bigfile表空间中对象移动到普通表空间,由于bigfile对日常的维护,管理和备份带来一些不便,经过评估决定将bigfile中的对象移到普通表空间。

环境说明:数据库 Oracle 12c-12.1 OS:HP-UX

以下为操作步骤:

在操作之前确保数据库已完成rman备份,以便遇到问题时,可以及时进行恢复。

1、确定要移动的对象和对象大小

SQL>select object_name,object_type from dba_objects where tablespace_name=‘APP_TBS’;
SQL>select owner,TABLE_NAME,TABLESPACE_NAME from dba_tables where TABLESPACE_NAME=‘APP_TBS’;
SQL>SELECT owner, segment_name, segment_type, partition_name, ROUND(bytes/(1024*1024),2) SIZE_MB, tablespace_name
FROM DBA_SEGMENTS
WHERE
SEGMENT_TYPE IN (‘TABLE’, ‘TABLE PARTITION’, ‘TABLE SUBPARTITION’,‘INDEX’, ‘INDEX PARTITION’, ‘INDEX SUBPARTITION’, ‘TEMPORARY’, ‘LOBINDEX’, ‘LOBSEGMENT’, ‘LOB PARTITION’)
AND TABLESPACE_NAME=‘APP_TBS’
ORDER BY bytes DESC;
2、检查表的并行度

SQL>select owner,TABLE_NAMETABLESPACE_NAME from dba_tables where TABLESPACE_NAME=‘APP_TBS’;
3、检查索引并行度

SQL>select index_name, degree,status from dba_indexes where table_name=’&table’ ;
4、生成移动对象的脚本

(1)生成move table的脚本

SQL>select ‘ALTER TABLE ‘||owner||’.’||table_name||’ move tablespace '||‘APP_TBS_TBS;’ from dba_tables where tablespace_name=‘APP_TBS’;
如果表大于2G,可以使用parallel选项并并行移动表,

select ‘ALTER TABLE ‘||owner||’.’||table_name||’ move tablespace '||‘APP_TBS_TBS parallel 8;’ from dba_tables where tablespace_name=‘APP_TBS’;
(2)生成移动分区表的脚本

–生成移动空分区表的脚本

SQL>select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,‘ALTER TABLE ‘||TABLE_OWNER ||’.’||table_name||’ MOVE PARTITION ‘||partition_name||’ TABLESPACE APP_TBS_TBS ;’ SQLT from dba_tab_partitions where TABLESPACE_NAME=‘APP_TBS’
and
PARTITION_NAME not in(SELECT segment_name
FROM DBA_SEGMENTS
WHERE
SEGMENT_TYPE =‘TABLE PARTITION’ AND TABLESPACE_NAME=‘APP_TBS’);
–生成分区表的脚本

SQL>select ‘ALTER TABLE ‘||TABLE_OWNER ||’.’||table_name||’ MOVE PARTITION ‘||partition_name||’ TABLESPACE APP_TBS_TBS UPDATE INDEXES;’ from dba_tab_partitions where TABLESPACE_NAME = ‘APP_TBS’;
(3)生成移动子分区的脚本

SQL>SELECT ‘ALTER TABLE ’ ||TABLE_OWNER ||’.’ ||TABLE_NAME ||’ MOVE SUBPARTITION ’ ||SUBPARTITION_NAME ||’ TABLESPACE APP_TBS_TBS parallel 8 UPDATE INDEXES;’ FROM DBA_TAB_SUBPARTITIONS where TABLESPACE_NAME = ‘APP_TBS’;"
(4)生成修改分区表的默认表空间脚本

SELECT ‘ALTER TABLE ’ ||TABLE_OWNER ||’.’ ||TABLE_NAME ||’ MODIFY DEFAULT ATTRIBUTES FOR PARTITION ’ ||PARTITION_NAME ||’ TABLESPACE APP_TBS_TBS;’ FROM DBA_tab_partitions WHERE tablespace_name=‘APP_TBS’;
(5)生成移动lob字段的脚本

SQL>select ‘ALTER TABLE’||owner||’.’||table_name||’ MOVE tablespace APP_TBS_tbs LOB(’||column_name||’) STORE AS (TABLESPACE APP_TBS_TBS);’ from dba_lobs where tablespace_name=‘APP_TBS’;
SQL>select ‘ALTER TABLE’||table_owner||’.’||table_name||‘MOVE partition’||Partition_name||‘lo b(’||column_name||’)’||'STORE AS (TABLESPACE APP_TBS_TBS) ;'from dba_lob_partitions
where TABLESPACE_NAME = ‘APP_TBS’;
(6)在新表空间rebuild索引

select ‘ALTER INDEX ‘||owner||’.’||index_name||’ REBUILD TABLESPACE '||‘APP_TBS_IDX online parallel 8;’ from dba_indexes where tablespace_name=‘APP_TBS’;
(7)在新的表空间rebuild分区索引

SQL>select
‘alter index ‘||owner||’.’||segment_name||’ rebuild partition ‘|| partition_name||’ tablespace APP_TBS_IDX;’
from dba_segments where tablespace_name=‘APP_TBS’ and segment_type=‘INDEX PARTITION’;
(8)在新的表空间rebuild子分区分区索引

SQL>select ‘alter index ‘||owner||’.’||segment_name||
’ rebuild subpartition ‘|| partition_name||’ tablespace APP_TBS_IDX online;’
from dba_segments where tablespace_name=‘APP_TBS’ and segment_type=‘INDEX SUBPARTITION’;
SQL>select ‘alter index ‘||index_owner||’.’||index_name||‘rebuild partition’||partition_name||‘tablespace APP_TBS_TBS;’ from dba_ind_partitions where tablespace_name=‘APP_TBS’;
5、按照第4步生成的脚本移动对象

6、检查表空间使用率

SQL>select * from (
Select a.tablespace_name,
to_char(a.bytes/1024/1024,‘99,999.999’) total_bytes,
to_char(b.bytes/1024/1024,‘99,999.999’) free_bytes,
to_char(a.bytes/1024/1024 - b.bytes/1024/1024,‘99,999.999’) use_bytes,
to_char((1 - b.bytes/a.bytes)100,‘99.99’) || ‘%’ use
from (select tablespace_name,
sum(bytes) bytes
from dba_data_files
group by tablespace_name) a,
(select tablespace_name,
sum(bytes) bytes
from dba_free_space
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name
union all
select c.tablespace_name,
to_char(c.bytes/1024/1024,‘99,999.999’) total_bytes,
to_char( (c.bytes-d.bytes_used)/1024/1024,‘99,999.999’) free_bytes,
to_char(d.bytes_used/1024/1024,‘99,999.999’) use_bytes,
to_char(d.bytes_used
100/c.bytes,‘99.99’) || ‘%’ use
from
(select tablespace_name,sum(bytes) bytes
from dba_temp_files group by tablespace_name) c,
(select tablespace_name,sum(bytes_cached) bytes_used
from v$temp_extent_pool group by tablespace_name) d
where c.tablespace_name = d.tablespace_name
7、检查对象和索引状态

SQL>select object_name,object_type from dba_objects where tablespace_name=‘APP_TBS’;
SQL>select owner,TABLE_NAME,TABLESPACE_NAME from dba_tables where TABLESPACE_NAME=‘APP_TBS’;
SQL>SELECT owner, segment_name, segment_type, partition_name, ROUND(bytes/(1024*1024),2) SIZE_MB, tablespace_name
FROM DBA_SEGMENTS
WHERE
SEGMENT_TYPE IN (‘TABLE’, ‘TABLE PARTITION’, ‘TABLE SUBPARTITION’,‘INDEX’, ‘INDEX PARTITION’, ‘INDEX SUBPARTITION’, ‘TEMPORARY’, ‘LOBINDEX’, ‘LOBSEGMENT’, ‘LOB PARTITION’)
AND TABLESPACE_NAME=‘APP_TBS’
ORDER BY bytes DESC;
8、修改索引和表的并行度

SQL>alter table tablename parallel 1;
SQL>alter index indexname noparallel;

-the end

最后修改时间:2021-09-02 10:00:06
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论