非分区表与分区表相互转换

1.非分区表转分区表

(1)--普通表

 table T1
(
  OBJECT_ID   NUMBER not null,
  OBJECT_NAME VARCHAR2(128),
  OWNER       VARCHAR2(30),
  STATUS      VARCHAR2(7)


--分区表

create table PT1
(
  OBJECT_ID   NUMBER,
  OBJECT_NAME VARCHAR2(128),
  OWNER       VARCHAR2(30),
  STATUS      VARCHAR2(7)
)
partition by hash (OBJECT_ID)
(
  partition SYS_P105
    tablespace DATA
);

(2)-

SQL> select count(*) from t1;

  COUNT(*)
----------
  29218402

SQL> select count(*) from pt1;

  COUNT(*)
----------
0

(3)--在线检查是否符合分区的条件

SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(user, 'T1', DBMS_REDEFINITION.CONS_USE_PK);

(4)--开始在线定义SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER, 'T1','PT1');

执行完这个命令后可以看到后台变为(多了一份表的容量)

以及在当前schema表下可以看到多了两个表MLOG$_T1,RUPD$_T1;

SQL> select count(*) from t1;

  COUNT(*)
----------
  29218402

Elapsed: 00:00:00.60
SQL> select count(*) from pt1;

  COUNT(*)
----------
  29218402

(5)--在向t1表插入两行数据;

SQL> insert into t1
  2  select sequence1.nextval,object_name,owner,status from dba_objects
  3  where rownum<3;

2 rows created.

SQL> select count(*) from t1;

  COUNT(*)
----------
  29218404

Elapsed: 00:00:00.60
SQL> select count(*) from pt1;

  COUNT(*)
----------
  29218402

(5)执行两表数据同步--exec dbms_redefinition.sync_interim_table(USER, 'T1','PT1');

SQL> select count(*) from t1;

  COUNT(*)
----------
  29218404

Elapsed: 00:00:00.60
SQL> select count(*) from pt1;

  COUNT(*)
----------
  29218404

(6)结束--EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE(user,'T1','PT1');

再后台可以看到pt1与t1进行自动相互转换名字;

create table T1
(
  OBJECT_ID   NUMBER,
  OBJECT_NAME VARCHAR2(128),
  OWNER       VARCHAR2(30),
  STATUS      VARCHAR2(7)
)
partition by hash (OBJECT_ID)
(
  partition SYS_P105
    tablespace DATA
);



2--------------------------------------------------------------分区转非分区(exchange)------------------------------------------------------------

例子alter table pt1

exchange partition sys_p105 with table t1;--将t1的内容转化到PT1的单个分区sys_p105中

再次执行上面的命令,可将分区表的内容转回t1表;

注意:当出现分区表中有多个分区表含数据时

执行分区转分区按上面的命令会报错,这种 情况可以先将分区表进行coalesce到一个分区为止再进行转换;

ALTER TABLE pt1
COALESCE PARTITION


### 逻辑分区的概念表达方式 #### 1. **逻辑分区的基础概念** 逻辑分区是一种基于物理磁盘空间的虚拟化技术,它允许管理员将一块或多块物理磁盘划分为更大的存储单元——卷组(Volume Group),然后再从这些卷组中分配出更灵活的小单元——逻辑卷(Logical Volume)。这种机制使得存储管理更加高效和动态[^1]。 逻辑分区的主要特点如下: - 整合分散的空间:即使磁盘分布不连续,也可以通过逻辑卷的方式统一管理和使用。 - 动态调整容量:可以根据需求随时扩展或缩减逻辑卷大小而无需重新格式化整个磁盘。 - 提高利用率:避免因固定分区过大而导致浪费的情况发生。 然而也存在一些局限性: - 性能损失:由于引入了额外管理层级所以相比直接访问原始设备可能会稍微慢一点; - 单点故障风险增加:如果某个组成卷组中的成员出现问题那么可能会影响到所有依赖于此卷组的数据完整性[^1]。 --- #### 2. **逻辑分区的具体实现流程** 以下是创建逻辑分区的一般步骤: ##### (a) 创建物理卷(Physical Volumes) 这是第一步也是最基础的工作即将选定的目标磁盘或者其一部分标记成为可用于构建LVM结构的一部分。例如下面这条命令会把/dev/sdb整块硬盘转换成一个新建立起来供后续使用的PV对象: ```bash pvcreate /dev/sdb ``` ##### (b) 构建卷组(Volume Groups) 接着我们需要把这些已经准备好的PV组合在一起形成更大规模可供进一步细分利用的整体即VG。比如这里我们新建了一个叫做my_vg的新卷组并将刚才那个刚做好的PV加入进去: ```bash vgcreate my_vg /dev/sdb ``` ##### (c) 划分逻辑卷(Logical Volumes) 最后一步是从前面得到的那个整体里面切割出来若干个小份也就是LV作为最终实际要挂载文件系统并投入业务运作的对象。比如说我们现在想从中切下一个5G大小名叫data_lv的东西可以用这样的指令完成: ```bash lvcreate -n data_lv -L 5G my_vg ``` 以上三个阶段共同构成了完整的LVM体系搭建过程。 --- #### 3. **逻辑分区的应用场景举例** 为了更好地理解逻辑分区的实际用途,以下提供两个典型例子: ##### 示例一:服务器环境下的数据存储规划 在一个企业内部署Web服务时,通常需要单独隔离日志记录区域其他工作负载以免相互干扰同时也方便后期维护升级等工作开展。此时就可以借助LVM功能先准备好相应的底层设施然后分别针对不同目的设立专属路径如/var/www/html存放网站静态资源;/var/log/httpd专门保存HTTP请求响应历史等等。 ##### 示例二:数据库管理系统中的表分区设计 对于大规模关系型数据库而言,合理运用表分区同样能够带来显著效益。以MySQL为例,它可以按照时间戳字段自动拆解超大型事务流水账目清单从而降低单次扫描所需消耗的时间成本提升查询效率减少锁等待现象的发生几率等优势明显可见[^4]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值