【翻译自mos文章】为table 的partition 建立synonym

本文介绍如何通过两步法在Oracle表分区上创建同义词:首先创建视图来封装特定分区的数据,然后基于该视图创建同义词。此方法适用于希望简化对表分区访问的应用程序。

本文参考自:

How to Create a Synonym on a Table Partition (Doc ID 119805.1)

 

How to Create a Synonym on a Table Partition:
=============================================

You cannot directly create a synonym on a table partition by specifying the 
partition name and table name with the CREATE SYNONYM command.  You have 
to create a view on the partition, and then create a synonym on the view.  
This is a two-step method instead of a single-step method.

Follow the steps in this example to create the synonym:

 $ sqlplus scott/tiger

 SQL> create table emp_pt
      ( empno number primary key,
        ename varchar2(30))
      partition by range (empno)
      ( partition p8000 values less than (8001),
        partition p9000 values less than (9001),
        partition p10000 values less than (10001),
        partition pothers values less than (99999999));

 SQL> insert into emp_pt
      select empno, ename from emp;
 
       --- Populated the partition table EMP_PT with existing 
       --- data from the EMP table.

 SQL> commit;

 SQL> select * from emp_pt;

      EMPNO ENAME
      ----- -----------------
      7369  SMITH
      7499  ALLEN
      7521  WARD
      7566  JONES
      7654  MARTIN
      ...
      9999  ANDY


 SQL> select * from emp_pt partition (p8000);

      EMPNO ENAME
      ----- ---------------------
      7369  SMITH
      7499  ALLEN
      7521  WARD
      7566  JONES
      7654  MARTIN
       ...
      7934  MILLER

 SQL> create view emp_pt_p8000 as select * from emp_pt partition (p8000);

 SQL> desc emp_pt_p8000
 
      Name                                Null?    Type
      ----------------------------------- ------ -----------   
      EMPNO                                       NUMBER
      ENAME                                       VARCHAR2(30)

 SQL> create synonym p8000 for emp_pt_p8000;

 SQL> desc p8000
     
      Name                                Null?    Type
      ----------------------------------- ------ -----------   
      EMPNO                                       NUMBER
      ENAME                                       VARCHAR2(30)
    
SQL> select * from p8000;

     EMPNO ENAME
     ----- ------------------------------
     7369 SMITH
     7499 ALLEN
     7521 WARD
     7566 JONES
     7654 MARTIN
     ...
     7934 MILLER

 SQL>


 

### 数据库表分区的查询与管理方法 #### 查询数据库表分区信息 在MySQL中,可以通过查询系统表或使用`SHOW CREATE TABLE`命令来查看表是否被分区以及其分区方式。例如: ```sql SHOW CREATE TABLE your_table_name; ``` 这条命令会显示创建表时所使用的SQL语句,从中可以看到是否有`PARTITION BY`子句及其具体的分区策略[^2]。 对于Oracle数据库,可以查询`ALL_PART_TABLES`视图来获取所有分区表的信息。如果需要更详细的关于每个分区的数据分布情况,可以查询`ALL_TAB_PARTITIONS`视图: ```sql SELECT * FROM ALL_PART_TABLES WHERE owner = 'your_schema'; ``` 此外,还可以通过以下SQL查询来了解特定表的分区详情: ```sql SELECT partition_name, high_value, num_rows FROM all_tab_partitions WHERE table_name = 'YOUR_TABLE_NAME' AND table_owner = 'YOUR_SCHEMA'; ``` 这样的查询能够提供有关各个分区名称、上限值(用于范围分区)及行数等信息[^3]。 #### 管理数据库表分区 **添加新分区** 当现有分区不足以容纳新增数据时,可以在MySQL中为已有的分区表增加新的分区。以RANGE分区为例: ```sql ALTER TABLE your_table ADD PARTITION (PARTITION p_next VALUES LESS THAN (MAXVALUE)); ``` 此操作将向表中添加一个新的分区,并且该分区将会包含所有大于当前最大值的数据记录[^2]。 **删除分区** 如果某些分区不再需要或者想要批量清除其中的数据,可以直接删除这些分区。例如,在MySQL中执行如下命令: ```sql ALTER TABLE your_table DROP PARTITION partition_name; ``` 这将移除指定的分区及其内部的所有数据[^1]。 **合并与拆分分区** 有时可能需要调整分区结构以优化性能或存储效率。Oracle提供了在线重定义功能来重新组织分区,而MySQL则支持直接修改表结构来实现分区的合并或拆分。比如,在MySQL中进行分区拆分的操作如下: ```sql ALTER TABLE your_table REORGANIZE PARTITION old_partition INTO ( PARTITION new_partition1 VALUES LESS THAN (value), PARTITION new_partition2 VALUES LESS THAN (MAXVALUE) ); ``` 此命令允许用户根据实际需求重新划分数据到不同的分区中去[^2]。 **维护分区** 为了保持良好的性能和数据完整性,定期对分区表进行维护是必要的。包括但不限于重建索引、分析统计信息等。对于Oracle数据库,可以使用`DBMS_STATS`包来收集统计信息;而在MySQL中,则可以通过`ANALYZE TABLE`和`OPTIMIZE TABLE`命令来进行相关操作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值