通过DBLINK能访问表的某一hive分区表表吗

2013年6月 Oracle大版内专家分月排行榜第二
2013年6月 Oracle大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。查看: 19681|回复: 12
请教一个用dblink查分区表某个分区的问题
论坛徽章:11
如果是在本地,可以使用select * from tablename partition(partname)这样来查询某个分区的数据。
但是如果我用dblink查询远程数据库。应该怎么办呢?
还有,分区表我能不能指定分区写入?
我想从远程的数据库是查询特定分区的数据,然后写到本地对应的分区中去。
论坛徽章:1
& && &from& &table1@dblink&&partition(partname);
论坛徽章:11
19:57 发表
& && &from& &table1@dblink&&partition(partname);
兄弟,你试过没有啊。这样不行。
论坛徽章:0
回复 #1 orain 的帖子
用select * from& &table1@dblink&&where part_column ... 通过查询条件来指定分区行不行啊,
写入分区表不需要指定吧,指定也没用啊
论坛徽章:112
建立一个同义词,然后用partition子句看看
论坛徽章:19
回复 #5 zergduan 的帖子
也遇到过这样的问题,可以试试同义词方法
论坛徽章:112
Connected to Oracle9i Enterprise Edition Release 9.2.0.8.0
Connected as TEST
SQL& SELECT COUNT(*) FROM TEST_PART@MYDB;
&&COUNT(*)
----------
& && &6254
SQL& SELECT COUNT(*) FROM TEST_PART@MYDB PARTITION (P1);
SELECT COUNT(*) FROM TEST_PART@MYDB PARTITION (P1)
ORA-14100: partition extended table name cannot refer to a remote object
SQL& create or replace synonym TEST_PART_MYDB
&&2& & for MYDB.TEST_PART@MYDB;
Synonym created
SQL& SELECT COUNT(*) FROM TEST_PART_MYDB PARTITION (P1);
&&COUNT(*)
----------
& && &6254
SQL& SELECT COUNT(*) FROM TEST_PART_MYDB PARTITION (P2);
&&COUNT(*)
----------
& && &6254
SQL& SELECT COUNT(*) FROM TEST_PART_MYDB
&&COUNT(*)
----------
& && &6254
。。。9i不成,lz若是9i放弃吧
论坛徽章:3
分区查询不能通过db link进行。
论坛徽章:11
原帖由 zergduan 于
22:43 发表
Connected to Oracle9i Enterprise Edition Release 9.2.0.8.0
Connected as TEST
SQL& SELECT COUNT(*) FROM TEST_PART@MYDB;
&&COUNT(*)
----------
& && &6254
SQL& SELECT COUNT(*) FROM TEST_PART@MYDB PARTITION (P1);
SELECT COUNT(*) FROM TEST_PART@MYDB PARTITION (P1)
ORA-14100: partition extended table name cannot refer to a remote object
SQL& create or replace synonym TEST_PART_MYDB
&&2& & for MYDB.TEST_PART@MYDB;
Synonym created
SQL& SELECT COUNT(*) FROM TEST_PART_MYDB PARTITION (P1);
&&COUNT(*)
----------
& && &6254
SQL& SELECT COUNT(*) FROM TEST_PART_MYDB PARTITION (P2);
&&COUNT(*)
----------
& && &6254
SQL& SELECT COUNT(*) FROM TEST_PART_MYDB
&&COUNT(*)
----------
& && &6254
。。。9i不成,lz若是9i放弃吧
你这办法不错。不过,我明明看你用的就是9i。
论坛徽章:112
。。。我只有9i ,测试了一下不成,oracle没有真正用到partition子句,结果是错误的。
你可以看看10g~
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号一般情况下,当我们直接truncate一个远程的表的时候,通常会返回如下的错误信息:ORA-02021: DDL operations are not allowed on aremote database.
比如下面的示例:先在数据库test上创建一个test表,并插入一些数据,如下:SQL& conn toms/toms已连接。
SQL& select instance_name from v$
INSTANCE_NAME
----------------
SQL& create table test(no int);
SQL& insert into test values(100);
已创建 1 行。
然后在另外一个数据库(study)上建一个 dblink,并尝试去truncate test数据库上
toms用户下的test表:
SQL& select instance_name from v$
INSTANCE_NAME
----------------
SQL& create database link from_test connect to toms
identified by toms using 'local_test';
数据库链接已创建。
SQL& select * from toms.test@from_
SQL& truncate table toms.test@from_
truncate table toms.test@from_test
ERROR 位于第 1 行:
ORA-02021: 不允许对远程数据库进行 DDL 操作
这时,我们得到了ORA-02021这样的错误,Oracle不允许这么做。那么如果确实有这样的需求,我们该怎么办呢。下面我介绍一个方法:
先在test数据库上,建立一个类似如下的procedure:
SQL& create or replace procedure proc_truncate_remote_tab(p_tname in varchar2) as
EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || p_
WHEN OTHERS THEN
raise_application_error(-20001,SQLERRM);
过程已创建。
然后在study数据库上调用test数据库上的这个procedure去完成这个truncate动作:
proc_truncate_remote_tab@db_link('remote_table_name');
下面测试验证一下:
SQL& select instance_name from v$
INSTANCE_NAME
----------------
SQL& select *from test@from_
----------
proc_truncate_remote_tab@from_test('test');
PL/SQL 过程已成功完成。
SQL& select *from test@from_
可以看到,远程test数据库上toms用户下的表test已经被truncate掉了。
阅读(...) 评论() &}

我要回帖

更多关于 易我分区表医生 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信