A:内信息表结构更改
1.1. 创建站内信息表RANGE分区表
-- Create table
create table US_INTERNALINFO_BACK
(
MSGID NUMBER(19) not null,
RECMSISDN VARCHAR2(11) not null,
SENDMSISDN VARCHAR2(11) not null,
TYPE VARCHAR2(2) not null,
ISREAD VARCHAR2(1) not null,
SENDTIME DATE not null,
MESSAGE CLOB,
TITLE VARCHAR2(90),
DELTYPE VARCHAR2(1) default '0'
)
partition by range(SENDTIME)
interval(numtoyminterval(1,'month'))
(PARTITION P1 values LESS THAN(to_date('2009-01-01','yyyy-mm-dd'))
)
tablespace TBS_MREAD_DAT;
1.1.1. 更改会话中db_file_multiblock_read_count的值
Sql>Alter session set db_file_multiblock_read_count=128;
1.1.2. 往临时表中插入数据(测试环境34199648记录需26分钟)
insert /*+ append */
into US_INTERNALINFO_BACK
select *
from US_INTERNALINFO t;
Commit;
1.2. 更改站内信息表名称和索引名称
1.2.1. 更改站内信息表表名
sql> alter table US_INTERNALINFO rename to US_INTERNALINFO_BAK1108;
sql>alter table US_INTERNALINFO_BAK1108 rename constraint PK_US_INTERNALINFO to PK_US_INTERNALINFO_BAK1108;
1.2.2. 更改表索引名
sql> ALTER index IDX_US_INTERNALINFO_SENDMSISDN RENAME TO IDX_US_INTERNALINFO_SEND1108;
sql> ALTER index INDEX_US_INTERNALINFO RENAME TO INDEX_US_INTERNALINFO_BAK1108;
SQL> ALTER index PK_US_INTERNALINFO RENAME TO PK_US_INTERNALINFO_BAK1108;
1.3. 在临时表上创建索引(注意:操作时确保TBS_MREAD_IDX表空间大小够用)
1.3.1. 更改临时表表名
alter table US_INTERNALINFO_BACK rename to US_INTERNALINFO;
1.3.2. 创建主键
-- 创建主键和索引
alter table US_INTERNALINFO add constraint PK_US_INTERNALINFO primary key (MSGID) using index TABLESPACE tbs_mread_idx NOLOGGING;
1.3.3. 创建索引
sql> alter session set workarea_size_policy=manual;
sql> alter session set sort_area_size=1073741824;
sql> alter session set sort_area_retained_size=1073741824;
sql> alter session set db_file_multiblock_read_count=128;
create index IDX_US_INTERNALINFO_SENDMSISDN on US_INTERNALINFO (SENDMSISDN) local
tablespace TBS_MREAD_IDX NOLOGGING; --测试环境执行时间4分钟
create index INDEX_US_INTERNALINFO on US_INTERNALINFO (RECMSISDN) local
tablespace TBS_MREAD_IDX NOLOGGING; --测试环境执行时间4分钟
1.4. 统计信息收集(测试环境6分30秒)
BEGIN
dbms_stats.gather_table_stats(
ownname => 'mread',
tabname => 'US_INTERNALINFO',
estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,
cascade => true,
method_opt => 'FOR ALL COLUMNS SIZE 1',
granularity => 'all' );
END;
1.5. 验证执行计划
1.5.1. 创建存储过程
PRO_MESSAGE_DELETE.sql
B:内信息表结构回滚
1.6. 删除站内信息表RANGE分区表
-- Create table
sql>drop table US_INTERNALINFO
1.6.1. 还原更改站内信息表表名
sql>alter table US_INTERNALINFO_BAK1108 rename to US_INTERNALINFO;
sql>alter table US_INTERNALINFO rename constraint PK_US_INTERNALINFO_BAK1108 to PK_US_INTERNALINFO;
1.6.2. 还原更改表索引名
sql> ALTER index IDX_US_INTERNALINFO_SEND1108 RENAME TO IDX_US_INTERNALINFO_SENDMSISDN;
sql> ALTER index INDEX_US_INTERNALINFO_BAK1108 RENAME TO INDEX_US_INTERNALINFO;
sql> ALTER index PK_US_INTERNALINFO_BAK1108 RENAME TO PK_US_INTERNALINFO;
sql> DROP PROCEDURE PRO_MESSAGE_DELETE
分享到:
相关推荐
总的来说,Oracle的在线重定义功能提供了一种高效且低影响的方式将普通表转换为分区表,尤其适用于大型表,它可以显著提升数据管理效率和查询性能。在进行这种转换时,应根据具体的业务需求和数据规模选择合适的方法...
Oracle 普通表转分区表方式 Oracle 分区表(Partitioned Table)是一种特殊的表结构,可以根据不同的条件将数据分割成多个独立的分区,以提高查询效率和减少存储空间。本文将详细介绍将 Oracle 普通表转换为分区表...
考虑到Oracle分区表特殊且MySQL数据库复杂分区可能不支持,分区表统一认为普通表转换,但是reverse阶段日志中会打印警告【分区表】,若有要求,建议反向之后检查,需手工转换 支持自定义配置表分段类型规则转换(表-...
而将一个普通的数据库表转换为分区表,可以让数据库管理员对数据进行更精细化的管理。 从提供的文件内容可以看出,本文主要介绍的是如何将一个非分区表转换为分区表,其中涉及了四种不同的方法,并且强调了每种方法...
oracle数据库在生产上运行时,需要对表进行分区操作,不能停生产但还需要进行表分区,使用在线重定义方式进行操作即可,严格按照文档操作即可完成。
#### 六、普通表转换为分区表 如果现有的表不是分区表,可以通过以下步骤将其转换为分区表: 1. **创建临时分区表**:首先创建一个新的分区表结构,但不包含任何数据。 2. **导入数据**:使用 `INSERT INTO ... ...
Oracle分区表是Oracle数据库中的一种高级特性,它允许大型表和索引被划分为更小、更易于管理的部分,称为分区。这些分区可以在物理上存放在不同的表空间中,甚至可以分布在不同的磁盘上。Oracle数据库的分区技术,...
- `TABLEPARTITION`: 分区表。 - `NESTEDTABLE`: 嵌套表。 - `ROLLBACK`: 回滚段。 - `LOBPARTITION`: LOB分区。 - `LOBSEGMENT`: LOB段。 - `INDEX`: 普通索引。 - `TABLE`: 表。 - `CLUSTER`: 聚簇表。 - `TYPE2...
044.sql对象_表空间.mp4 045.sql对象_用户.mp4 046.sql对象_建表授权同义词.mp4 047.sql对象_序列.mp4 048.sql对象_普通视图.mp4 049.sql对象_物化视图.mp4 050.sql对象_索引介绍.mp4...058.sql对象_表分区的优缺点.mp4
2. **逻辑结构** : 数据库 -> 表空间 -> 段 -> 区 -> 块。这是Oracle内部管理数据库对象的方式。其中,段是数据逻辑存储的基本单位,包括表段、索引段、回滚段等;区是一组连续的块;块是数据库最小的物理存储单元。...
* 一个对象的数据存储在表空间的任意一个数据文件中,也可将同一个对象的数据分布在表空间的多个数据文件中,还可以将同一个对象分布在多个表空间中(如对表进行分区后的分区表)。 * 表空间与数据文件的关系:一个...
表可以按range、hash、list分区,表分区后,其上的索引和普通表上的索引有所不同,oracle对于分区表上的索引分为2类,即局部索引和全局索引,下面分别对这2种索引的特点和局限性做个总结。局部索引local index1.局部...
3. **物理设计**:选择合适的数据类型、索引、分区等物理存储策略,优化数据库性能。例如,读者ID可设为主键,使用整型;书籍名称使用变长字符串,便于存储不同长度的书名;借阅记录表中,读者ID和书籍ID可设为外键...
对于应用程序来说,分区是透明的,这意味着应用无需知道数据已被分区,其访问分区表的方式与普通表相同,Oracle查询优化器会自动处理分区。 在设计分区策略时,需要考虑的关键因素包括数据分布、I/O需求以及空间...
管理上,分区表并不比普通表复杂,反而在数据管理和维护上提供了更多的灵活性。 在油田勘探开发数据库中,例如“采油井日数据”表,由于涉及的数据量庞大,使用分区表尤为合适。通常情况下,创建这样一个表的SQL...
根据题目提供的描述,“Oracle9i以上版本把普通表通过在线冲定义变成分区表”,这里的“在线冲定义”可能是指“在线重新定义”(Online Redefinition)。这是一个强大的功能,允许用户在不中断现有应用程序的情况下...
#### 九、普通表转分区表方法 对于已存在的非分区表,可以通过以下步骤转换为分区表: 1. **创建一个新的分区表**:首先创建一个与原表结构相同的分区表。 2. **迁移数据**:将原表中的数据迁移到新创建的分区表中...
11 管理表 目标 11-2 储存用户数据 11-3 Oracle 数据类型 11-5 ROWID 格式 11-8 行的结构 11-10 创建一张表 11-11 创建临时表 11-13 创建表:指南 11-14 修改储存参数 11-15 手工分配片 11-16 重构非分区表 11-17 ...
从逻辑层面来看,这些函数可以在SELECT语句的FROM子句中出现,就像一个普通的表一样返回一系列行。 - **输入与输出**:除了能够返回一系列行之外,Pipeline Table Functions还可以接收一系列行作为输入。这意味着...