如果更新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中,可以对分区进行添加、删除、合并和拆分等操作,这些操作通常比对完整表的操作更快。此外,分区还可以帮助简化备份和恢复,因为可以单独处理单个分区。 6. **分区维护**: 分区使得大型表的维护工作更...
在了解Oracle分区表在广播监测系统应用之前,我们需要对广播监测系统有一个基本的认识。广播监测系统是一个三层的体系架构,由数据处理中心、监测台和监测前端组成。监测台负责管理和维护监测前端,确保其正常运转,...
5. **表分区**:对于大表,分区可以显著提升查询速度,尤其对于范围查询。分区可以按时间、范围或其他逻辑标准进行。 6. **内存配置**:初始化参数文件init.ora(在新版本中是spfile)中的内存设置对性能有很大影响...
Oracle分区将一个大表或索引分成多个较小的部分,每个部分称为分区,每个分区都有自己的独立索引和维护机制。这样做的好处包括提高查询速度、简化管理、优化空间利用率以及增强数据安全性。 在Oracle中,有多种分区...
Oracle分区是Oracle数据库系统中的一个高级特性,它允许大型表和索引被分解为更小、更易管理的部分,称为分区。这种技术极大地提升了数据管理和查询性能,尤其在处理大量数据时。Oracle分区培训旨在帮助数据库管理员...
除了查询和DML操作,Oracle还支持并行DDL(Data Definition Language)操作,如并行创建索引、并行表重建等。这些并行DDL操作可以显著减少构建大型表结构所需的时间。 ### 并行性能优化 为了最大化并行处理的性能...
Oracle的基本操作包括创建表、插入数据、更新、删除和查询。SQL语句如CREATE TABLE、INSERT INTO、UPDATE、DELETE和SELECT是日常操作的关键。 6. **初始化参数优化**: 初始化参数调整对Oracle性能至关重要,如DB_...
### Oracle查询操作学习笔记知识点详解 #### 一、Oracle用户管理与权限分配 ...以上是关于Oracle查询操作的学习笔记中的核心知识点汇总,希望能够帮助初学者更好地理解和掌握Oracle数据库的基础知识。
这篇文档“Oracle语句优化规则汇总.pdf”很可能提供了关于如何提高Oracle数据库查询效率、减少资源消耗的关键信息。以下是一些可能涵盖在文档中的关键知识点: 1. **索引优化**: - 使用合适的索引类型,如B树索引...
- Oracle支持表分区,可以提高大数据量查询的性能。 - 索引的创建与管理也是优化查询速度的关键,如`CREATE INDEX 索引名 ON 表名 (列名);`。 8. 视图: - 视图是虚拟表,基于一个或多个表的查询结果,如`CREATE...
### Oracle服务器命令行工具汇总 #### 一、数据库管理相关 在Oracle服务器中,通过一系列命令行工具可以高效地管理数据库。以下是一些常用的数据库管理工具及其功能介绍: 1. **bbed.exe**:这是一个数据块浏览和...
17. **考虑分区**:对于大型表,分区可以将数据分散到多个物理段,提高查询和维护效率。 18. **避免过度优化**:不是所有的查询都需要极致的优化,要权衡优化带来的收益和增加的复杂性。 通过遵循这些Oracle语句...
2. **连接(JOIN)**:SQL中的连接操作用于合并来自两个或更多表的数据。常见的连接类型包括: - **内连接**:返回两个表中匹配的行。 - **左外连接**:返回左表的所有行,以及与右表匹配的行。如果右表中没有匹配...
Oracle性能优化涉及SQL调优、索引优化、表分区、物化视图和数据库参数调整等多个方面。通过 Explain Plan 和 SQL Trace 可以分析SQL执行计划,找出性能瓶颈。索引能加快查询速度,但过度使用可能导致插入和更新性能...
- 这个查询用于获取分区表的详细属性,如分区名、高值、所在表空间、使用率等。 - 对于分区表的管理来说,这些信息非常重要,有助于优化表的存储结构和提高查询性能。 以上SQL查询语句覆盖了Oracle数据库日常管理和...
6. **物化视图与 materialized view logs**:物化视图可以提供预计算的结果,加快查询速度,尤其在汇总数据或跨多个表的复杂查询中。书中详细介绍了如何创建和维护物化视图,以及如何利用物化视图日志来实现增量刷新...
12. **分区**:对于大型表,Oracle提供分区功能,将表分成较小、更易管理的部分,以提高查询性能和维护效率。 13. **PL/SQL**:Oracle的Procedural Language/SQL,是一种结合了SQL和过程编程的编程语言,用于编写...