`
jiangshaolin
  • 浏览: 57555 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

oracle表分区操作汇总

 
阅读更多
如果更新oracle分区字段,则会报如下错误:




解决办法:
alter table XXXXX enable row movement;


不知道对于性能会有什么样的影响。

查看用户表、索引、分区表占用空间
select segment_name, sum(bytes)/1024/1024 Mbytese from user_segments group by segment_name;

查询表占用空间的大小:
select segment_name, sum(bytes)/1024/1024 Mbytese from user_segments where segment_type='TABLE' group by segment_name;

索引占用空间
select segment_name ,sum(bytes)/1024/1024 from user_segments where segment_type ='INDEX' group by segment_name;

分区表TABLE PARTITION占用空间
select segment_name,sum(bytes)/1024/1024 Mbytes from user_segments where segment_type='TABLE PARTITION' group by segment_name;



查看各个表空间使用情况
select dbf.tablespace_name,
       dbf.totalspace "总量(M)",
       dbf.totalblocks as 总块数,
       dfs.freespace "剩余总量(M)",
       dfs.freeblocks "剩余块数",
       (dfs.freespace / dbf.totalspace) * 100 "空闲比例"
  from (select t.tablespace_name,
               sum(t.bytes) / 1024 / 1024 totalspace,
               sum(t.blocks) totalblocks
          from dba_data_files t
         group by t.tablespace_name) dbf,
       (select tt.tablespace_name,
               sum(tt.bytes) / 1024 / 1024 freespace,
               sum(tt.blocks) freeblocks
          from dba_free_space tt
         group by tt.tablespace_name) dfs
 where trim(dbf.tablespace_name) = trim(dfs.tablespace_name);

////////////////////////////////////////////////////////////

SELECT Total.name "Tablespace Name",
       Free_space,
       (total_space - Free_space) Used_space,
       total_space
  FROM (select tablespace_name, sum(bytes / 1024 / 1024) Free_Space
          from sys.dba_free_space
         group by tablespace_name) Free,
       (select b.name, sum(bytes / 1024 / 1024) TOTAL_SPACE
          from sys.v_$datafile a, sys.v_$tablespace B
         where a.ts# = b.ts#
         group by b.name) Total
 WHERE Free.Tablespace_name = Total.name




增加表空间大小
1:找出该表空间对应的数据文件及路径
select * from dba_data_files t
 where t.tablespace_name = 'USERS'

2:增大数据文件
alter database datafile '全路径的数据文件名称' resize ***M    (M或者G)

3:增加数据文件
alter tablespace 表空间名称
add datafile '全路径的数据文件名称' size ***M    (M或者G)
注解:表空间尽量让free百分比保持在10%以上,如果低于10%就增加datafile或者resizedatafile,一般数据文件不要超过2G

4:检查tablespace的free空间能不能满足最大的next_extent,不能则扩展tablespace
select s.owner,s.segment_name,s.segment_type,s.tablespace_name, s.next_extent
from dba_segments s
where s.next_extent > (select MAX(f.bytes)
from dba_free_space f
where f.tablespace_name = s.tablespace_name)
order by s.tablespace_name

 设置自动扩展:
alter database datafile 'D:\oradata\orcl\PERFSTAT.DBF' autoextend on; 




将分区表的数据和索引分开,分别放在另外两个表空间
1:创建表空间
CREATE  TABLESPACE xxx_data
LOGGING
DATAFILE  '/home/oracle/oradata/oratuank/xxx_data01.dbf'
SIZE 5120M 
AUTOEXTEND  ON  
NEXT  5120M MAXSIZE 25600M
EXTENT MANAGEMENT LOCAL;

CREATE  TABLESPACE xxx_index
LOGGING
DATAFILE  '/home/oracle/oradata/oratuank/xxx_index01.dbf'
SIZE 5120M 
AUTOEXTEND  ON  
NEXT  5120M MAXSIZE 25600M
EXTENT MANAGEMENT LOCAL;


2:将各个分区数据依次迁移至数据表空间
alter table xxx move partition P0 tablespace sms_data;
alter table xxx move partition P1 tablespace sms_data;
...

如果使用以下操作会报错:
alter table sp_sms_list1 move tablespace xxx_data;

ORA-14511: cannot perform operation on a partitioned object


3:如果某个表分区p0是空的,但查询很慢,则用以下语句truncate一下
ALTER TABLE xxxxxx  TRUNCATE PARTITION p0



4:依次创建索引(注意:分区数必须与表的分区数一致,否则报错ORA-14024)
create index index_xxx_columnname on xxx_table(columnname) local (   
partition p0 tablespace xxx_index,   
partition p1 tablespace xxx_index,   
partition p2 tablespace xxx_index,   
partition p3 tablespace xxx_index,   
partition p4 tablespace xxx_index,   
partition p5 tablespace xxx_index,   
partition p6 tablespace xxx_index,   
partition p7 tablespace xxx_index,   
partition p8 tablespace xxx_index,   
partition p9 tablespace xxx_index,   
partition p10 tablespace xxx_index,   
partition p11 tablespace xxx_index,   
partition p12 tablespace xxx_index
);


碰到的问题:
一:
修改0分区数据,直接把数据移至其它分区时报错:oracle ORA-01502
解决办法:alter index PK_XXX_ID rebuild ; (重建主键索引)
原因:以前move过分区到其它表空间

二:
迁移数据至其它分区800多万条,耗时差不多半小时,建议分批处理:
update xxxxx partition(p0) 
   set p_month = to_number(to_char(post_time, 'MM'))


三:
创建表空间时,大小会有限制,否则会报错:

分享到:
评论

相关推荐

    Oracle的分区是怎么回事Oracle的分区是怎么回事

    在Oracle中,可以对分区进行添加、删除、合并和拆分等操作,这些操作通常比对完整表的操作更快。此外,分区还可以帮助简化备份和恢复,因为可以单独处理单个分区。 6. **分区维护**: 分区使得大型表的维护工作更...

    Oracle分区表在广播监测系统的应用探索.pdf

    在了解Oracle分区表在广播监测系统应用之前,我们需要对广播监测系统有一个基本的认识。广播监测系统是一个三层的体系架构,由数据处理中心、监测台和监测前端组成。监测台负责管理和维护监测前端,确保其正常运转,...

    oracle优化规则总汇

    5. **表分区**:对于大表,分区可以显著提升查询速度,尤其对于范围查询。分区可以按时间、范围或其他逻辑标准进行。 6. **内存配置**:初始化参数文件init.ora(在新版本中是spfile)中的内存设置对性能有很大影响...

    oracle分区

    Oracle分区将一个大表或索引分成多个较小的部分,每个部分称为分区,每个分区都有自己的独立索引和维护机制。这样做的好处包括提高查询速度、简化管理、优化空间利用率以及增强数据安全性。 在Oracle中,有多种分区...

    oracle分区培训

    Oracle分区是Oracle数据库系统中的一个高级特性,它允许大型表和索引被分解为更小、更易管理的部分,称为分区。这种技术极大地提升了数据管理和查询性能,尤其在处理大量数据时。Oracle分区培训旨在帮助数据库管理员...

    Oracle Parallel 并行处理

    除了查询和DML操作,Oracle还支持并行DDL(Data Definition Language)操作,如并行创建索引、并行表重建等。这些并行DDL操作可以显著减少构建大型表结构所需的时间。 ### 并行性能优化 为了最大化并行处理的性能...

    高性能动态SQL Oracle数据安全 Oracle 数据库的聚簇技术 等等

    Oracle的基本操作包括创建表、插入数据、更新、删除和查询。SQL语句如CREATE TABLE、INSERT INTO、UPDATE、DELETE和SELECT是日常操作的关键。 6. **初始化参数优化**: 初始化参数调整对Oracle性能至关重要,如DB_...

    Oracle查询操作的学习笔记

    ### Oracle查询操作学习笔记知识点详解 #### 一、Oracle用户管理与权限分配 ...以上是关于Oracle查询操作的学习笔记中的核心知识点汇总,希望能够帮助初学者更好地理解和掌握Oracle数据库的基础知识。

    Oracle语句优化规则汇总.pdf

    这篇文档“Oracle语句优化规则汇总.pdf”很可能提供了关于如何提高Oracle数据库查询效率、减少资源消耗的关键信息。以下是一些可能涵盖在文档中的关键知识点: 1. **索引优化**: - 使用合适的索引类型,如B树索引...

    oracle常用SQL语句(汇总版).zip

    - Oracle支持表分区,可以提高大数据量查询的性能。 - 索引的创建与管理也是优化查询速度的关键,如`CREATE INDEX 索引名 ON 表名 (列名);`。 8. 视图: - 视图是虚拟表,基于一个或多个表的查询结果,如`CREATE...

    Oracle服务器命令行工具汇总

    ### Oracle服务器命令行工具汇总 #### 一、数据库管理相关 在Oracle服务器中,通过一系列命令行工具可以高效地管理数据库。以下是一些常用的数据库管理工具及其功能介绍: 1. **bbed.exe**:这是一个数据块浏览和...

    Oracle语句优化规则汇总

    17. **考虑分区**:对于大型表,分区可以将数据分散到多个物理段,提高查询和维护效率。 18. **避免过度优化**:不是所有的查询都需要极致的优化,要权衡优化带来的收益和增加的复杂性。 通过遵循这些Oracle语句...

    Oracle内部培训汇总

    2. **连接(JOIN)**:SQL中的连接操作用于合并来自两个或更多表的数据。常见的连接类型包括: - **内连接**:返回两个表中匹配的行。 - **左外连接**:返回左表的所有行,以及与右表匹配的行。如果右表中没有匹配...

    学习分区表,索引,物化视图的使用

    #### ORACLE分区表分类及应用场景 在Oracle数据库中,分区技术是一项重要的优化手段,主要用于处理大型表以提高查询性能和管理效率。分区表根据数据分布的不同特性分为几种类型: - **范围分区(Range Partitioning...

    ORACLE 10 知识汇总

    还包括用户权限管理、锁机制(行级锁和表级锁)、表分区(范围、散列、列表和复合分区)、数据库对象(如同义词、序列、视图和索引)、PL/SQL的动态SQL、异常处理、游标管理、子程序和程序包、触发器、备份与恢复...

    oracle操作员管理资料、常用知识汇总

    Oracle性能优化涉及SQL调优、索引优化、表分区、物化视图和数据库参数调整等多个方面。通过 Explain Plan 和 SQL Trace 可以分析SQL执行计划,找出性能瓶颈。索引能加快查询速度,但过度使用可能导致插入和更新性能...

    Oracle维护常用SQL语句汇总

    - 这个查询用于获取分区表的详细属性,如分区名、高值、所在表空间、使用率等。 - 对于分区表的管理来说,这些信息非常重要,有助于优化表的存储结构和提高查询性能。 以上SQL查询语句覆盖了Oracle数据库日常管理和...

    Effective Oracle By Design

    6. **物化视图与 materialized view logs**:物化视图可以提供预计算的结果,加快查询速度,尤其在汇总数据或跨多个表的复杂查询中。书中详细介绍了如何创建和维护物化视图,以及如何利用物化视图日志来实现增量刷新...

    OracleSQL必备参考

    12. **分区**:对于大型表,Oracle提供分区功能,将表分成较小、更易管理的部分,以提高查询性能和维护效率。 13. **PL/SQL**:Oracle的Procedural Language/SQL,是一种结合了SQL和过程编程的编程语言,用于编写...

Global site tag (gtag.js) - Google Analytics