首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 冲浪宝典 > 网络资源 > Oracle无法通过同义词访问远端分区表的某个分区
【标  题】:Oracle无法通过同义词访问远端分区表的某个分区
【关键字】:Oracle
【来  源】:http://blog.csdn.net/annicybc/archive/2006/06/29/852561.aspx

Oracle无法通过同义词访问远端分区表的某个分区

Oracle9i中访问远端数据库表的分区会报错ORA-14100。如果在本地建立远端数据库表的同义词,然后通过同义词进行分区的访问会得到错误的结果。

数据库版本9204


看下面这个例子,首先在远端数据库建立一个分区表:

SQL> CONN TEST/TEST@TEST2已连接。
SQL> CREATE TABLE T (ID NUMBER, START_DATE DATE)
2 PARTITION BY RANGE(START_DATE)
3 (
4 PARTITION P1 VALUES LESS THAN (TO_DATE('2006-05-01', 'YYYY-MM-DD')),
5 PARTITION P2 VALUES LESS THAN (TO_DATE('2006-06-01', 'YYYY-MM-DD')),
6 PARTITION P3 VALUES LESS THAN (MAXVALUE)
7 );

表已创建。

SQL> INSERT INTO T SELECT ROWNUM, SYSDATE - 30 + ROWNUM FROM DBA_TABLES;

已创建2541行。

SQL> COMMIT;

提交完成。

SQL> SELECT COUNT(*) FROM T PARTITION (P1);

COUNT(*)
----------
22

SQL> SELECT COUNT(*) FROM T PARTITION (P2);

COUNT(*)
----------
31

SQL> SELECT COUNT(*) FROM T PARTITION (P3);

COUNT(*)
----------
2488

下面在本地数据库建立一个连接到远端数据库的数据库链。

SQL> CONN YANGTK/YANGTK已连接。
SQL> CREATE DATABASE LINK TEST2 CONNECT TO TEST IDENTIFIED BY TEST USING 'TEST2';

数据库链接已创建。

SQL> SELECT COUNT(*) FROM T@TEST2;

COUNT(*)
----------
2541

SQL> SELECT COUNT(*) FROM T@TEST2 PARTITION (P1);
SELECT COUNT(*) FROM T@TEST2 PARTITION (P1)
*
1 行出现错误:
ORA-14100:
分区扩展表名不能指远程对象


SQL> CREATE SYNONYM S_T_TEST2 FOR T@TEST2;

同义词已创建。

SQL> SELECT COUNT(*) FROM S_T_TEST2;

COUNT(*)
----------
2541

SQL> SELECT COUNT(*) FROM S_T_TEST2 PARTITION (P1);

COUNT(*)
----------
2541

SQL> SELECT COUNT(*) FROM S_T_TEST2 PARTITION (P1234);

COUNT(*)
----------
2541

测试发现虽然通过建立远端对象同义词的方式可以使用PARTITION语句,但是PARTITION语句并没有起任何作用。而且在最后的查询中,指定了一个不存在的分区,但是并没有报错,说明Oracle忽略了PARTITION语句。

而建立本地对象的同义词则不存在这个问题:

SQL> CONN YANGTK/YANGTK已连接。
SQL> CREATE TABLE T (ID NUMBER, START_DATE DATE)
2 PARTITION BY RANGE(START_DATE)
3 (
4 PARTITION P1 VALUES LESS THAN (TO_DATE('2006-05-01', 'YYYY-MM-DD')),
5 PARTITION P2 VALUES LESS THAN (TO_DATE('2006-06-01', 'YYYY-MM-DD')),
6 PARTITION P3 VALUES LESS THAN (MAXVALUE)
7 );

表已创建。

SQL> INSERT INTO T SELECT ROWNUM, SYSDATE - 30 + ROWNUM FROM DBA_TABLES;

已创建1549行。

SQL> COMMIT;

提交完成。

SQL> SELECT COUNT(*) FROM T PARTITION (P1);

COUNT(*)
----------
22

SQL> SELECT COUNT(*) FROM T PARTITION (P2);

COUNT(*)
----------
31

SQL> SELECT COUNT(*) FROM T PARTITION (P3);

COUNT(*)
----------
1496

SQL> CREATE SYNONYM S_T FOR T;

同义词已创建。

SQL> SELECT COUNT(*) FROM S_T PARTITION (P1);

COUNT(*)
----------
22

说明Oracle还是不能通过数据库链进行PARTITION相关的操作,但是如果对同义词采用这种方式的查询,则Oracle没有进行相应的判断,而仅仅是忽略分区语句。

Oracle的同义词的问题相对比较多,类似的bug还有: 

SQLSERVER2000使用中遇到的一些小问题,不断更新中。。。:【上一篇】
Oracle的分区管理:【下一篇】
【相关文章】
  • 学习贯穿Oracle的25条基本知识
  • Oracle双机热备实战完全手册
  • 怎样利用组来保证Oracle安全
  • 本周技术关注:Oracle10G、MSSQL2005、MYSQL5: CLuster、Replication、Snapshot
  • 数据库技术 >>Oracle
  • Oracle在Windows和Linux上的备份方法
  • 如何统计ORACLE某用户的表的数据量
  • oracle中的锁机制
  • ORACLE 中查询表字段信息的方法
  • 用Oracle并行查询发挥多CPU的威力
  • 【随机文章】
  • Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍[转]
  • 装饰模式(Decorator pattern)应用----日志信息输出
  • 实现同网段VPN基本原理
  • PC安装OS X系统安装说明(G)
  • parameter & argument
  • Jumpstart服务器制作实例
  • 宽带无线接入网主流技术比较
  • 解决使用ASP无法连接ORACLE 9i数据库的问题
  • 网易社区被黑
  • 使用Web标准建站第12天:校验及常见错误
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.