如何从多个表空间的同结构表中查询数据

时间:2021-01-11 02:56:10
数据库名:test 
表空间: 
1、tbs1 
包含表:table1
2、tbs2 
包含表:table1

两个table1的结构一样。用户对这些表空间都有权限。比如,tbs1的table1中存储的数据是北京市的,tbs2的table1中存储的数据是上海市的。
我想使用一个语句,把tbs1的table1、tbs2的table1中符合条件的记录都查出来,如何做呢?

 假设,把上述情况推广到更多的表空间情况下,10个、20个,怎么处里呢?

16 个解决方案

#1


你的理解有问题,从你的描述上看估计你的table1是个分区表,按照地市分的区。
然后【北京市】的分区的数据存储在tbs1表空间上
    【上海市】的分区的数据存储在tbs2表空间上 

这仅仅是数据存储设计上的概念,并不影响你对数据的查询。

select * from table1 where 地市字段 in('北京','上海');

数据库会自己去找相应的数据的,至于数据存储在哪个表空间上你不用关心。

#2


同意1楼,你的表达有问题,呵呵。

一张表可以同时使用多个表空间,在同一个数据库内,不可能命名两个同名的table。

在查询的时候,你不用关心某些数据是放在什么表空间中,直接写查询条件就可以了。

#3


谢谢你的解答。
不过,分区存储技术是企业版的技术,我不能用这个技术,因为我使用的是oracle标准版。
这些表空间是我自己建立的。

我想,如果有办法实现帖子中的问题,在标准版下就能把不同单位的数据存储在不同表空间中,有利于提高效率。

#4


首先你这些表都是存储在一个test模式下,表是不能重名的。
不可能建一个table1 表空间为tbs1,再建一个table1表空间是tbs2的。
因此你的想法没有办法有问题。

除非 table1 存储北京的数据表空间为tbs1
     tblle2 存储上海的数据表空间为tbs2
     。。。。

然后建一个视图
create or replace view view_name as
select * from table1
union all
select * from table2
.....

但是这样无法保证查询效率。

引用 3 楼 bjhdy 的回复:
谢谢你的解答。
不过,分区存储技术是企业版的技术,我不能用这个技术,因为我使用的是oracle标准版。
这些表空间是我自己建立的。

我想,如果有办法实现帖子中的问题,在标准版下就能把不同单位的数据存储在不同表空间中,有利于提高效率。

#5


谢谢各位的回复。

假设:
表空间为tbs1的table1,table1的所有者是ow1,
表空间为tbs2的table1,table2的所有者是ow2。

是不是可以呢?

#6


在数据库用户:ow1或ow2都可以执行下面的程序:
select * from ow1.table1 
union 
select * from ow2.table1;
即可

注意,如果在ow1执行,需要在ow2为用户ow1授权可以查询ow2.table1,同理要在ow1查询,需要为用户ow2授权可以查询ow1.table1;
如在ow2上执行授权查询命令:
grant select to  ow1 on table1;

#7


补充一句:除非ow1 和ow2 用户都拥有DBA角色,可以不用授权,否则就必须要执行上面的授权命令

#8


lz

你需要先了解一下ts和schema的概念,

用union 或者union all实现你的要求

#9


在解答问题之前,楼主先学习一下表空间的知识,理解清楚自己数据库的环境。 之后,再完整无误的提出自己的问题吧。

#10


引用 9 楼 coolkisses 的回复:
在解答问题之前,楼主先学习一下表空间的知识,理解清楚自己数据库的环境。 之后,再完整无误的提出自己的问题吧。


对不起,没表达清楚。我的想法是:

总部要把各个分部的数据汇总起来,规划是:在总部的数据库中给每个分部建一个用户和一个表空间,分别存储各个分部的数据。但是这样一来,查询全公司(包括各个分部)的数据就出现问题了,不知道用什么语句好。为简化其间,举两个表空间的例子。

两个表空间的两个表同名,且结构相同,两个表的拥有者是两个用户。

即,

tbs1 包含表table1,拥有者是user1,

tbs2 包含表table1,拥有者是user2。

两个table1的结构相同。

现在有个user3,他有权查看两个表空间的table1。现在要使用一条语句查询出两个table1中的数据。如何查。

推而广之,如果20个表空间包含表table1,为实现查询目的,如何处理?

#11


在user3上建立视图。但不能保证效率。

create or replace view view_name as
select * from user1.table1
union all
select * from user2.table1
.....

#12


union 加上用户名

#13


引用 12 楼 huangdh12 的回复:
union 加上用户名


能再说细一点吗?

谢谢!

#14


哥哥 你有仔细看我的回复么,就我回复的详细你不看,一直还在问。

引用 13 楼 bjhdy 的回复:
引用 12 楼 huangdh12 的回复:
union 加上用户名


能再说细一点吗?

谢谢!

#15


引用 10 楼 bjhdy 的回复:
引用 9 楼 coolkisses 的回复:
在解答问题之前,楼主先学习一下表空间的知识,理解清楚自己数据库的环境。 之后,再完整无误的提出自己的问题吧。


对不起,没表达清楚。我的想法是:

总部要把各个分部的数据汇总起来,规划是:在总部的数据库中给每个分部建一个用户和一个表空间,分别存储各个分部的数据。但是这样一来,查询全公司(包括各个分部)的数据就出现问题了,不知道用什么语句好……


lz需要先了解一下schema和ts的概念。

你这里的描述把这些东东给混淆了,倒是很不大让人明白你的意思。

对于你的需求,不同的用户建立的表,即使名字一样,也是不同的对象。

不同的对象的结果集合并,要用union和union all实现。

#16


表空间 + 表名 或者 用户名+表名

#1


你的理解有问题,从你的描述上看估计你的table1是个分区表,按照地市分的区。
然后【北京市】的分区的数据存储在tbs1表空间上
    【上海市】的分区的数据存储在tbs2表空间上 

这仅仅是数据存储设计上的概念,并不影响你对数据的查询。

select * from table1 where 地市字段 in('北京','上海');

数据库会自己去找相应的数据的,至于数据存储在哪个表空间上你不用关心。

#2


同意1楼,你的表达有问题,呵呵。

一张表可以同时使用多个表空间,在同一个数据库内,不可能命名两个同名的table。

在查询的时候,你不用关心某些数据是放在什么表空间中,直接写查询条件就可以了。

#3


谢谢你的解答。
不过,分区存储技术是企业版的技术,我不能用这个技术,因为我使用的是oracle标准版。
这些表空间是我自己建立的。

我想,如果有办法实现帖子中的问题,在标准版下就能把不同单位的数据存储在不同表空间中,有利于提高效率。

#4


首先你这些表都是存储在一个test模式下,表是不能重名的。
不可能建一个table1 表空间为tbs1,再建一个table1表空间是tbs2的。
因此你的想法没有办法有问题。

除非 table1 存储北京的数据表空间为tbs1
     tblle2 存储上海的数据表空间为tbs2
     。。。。

然后建一个视图
create or replace view view_name as
select * from table1
union all
select * from table2
.....

但是这样无法保证查询效率。

引用 3 楼 bjhdy 的回复:
谢谢你的解答。
不过,分区存储技术是企业版的技术,我不能用这个技术,因为我使用的是oracle标准版。
这些表空间是我自己建立的。

我想,如果有办法实现帖子中的问题,在标准版下就能把不同单位的数据存储在不同表空间中,有利于提高效率。

#5


谢谢各位的回复。

假设:
表空间为tbs1的table1,table1的所有者是ow1,
表空间为tbs2的table1,table2的所有者是ow2。

是不是可以呢?

#6


在数据库用户:ow1或ow2都可以执行下面的程序:
select * from ow1.table1 
union 
select * from ow2.table1;
即可

注意,如果在ow1执行,需要在ow2为用户ow1授权可以查询ow2.table1,同理要在ow1查询,需要为用户ow2授权可以查询ow1.table1;
如在ow2上执行授权查询命令:
grant select to  ow1 on table1;

#7


补充一句:除非ow1 和ow2 用户都拥有DBA角色,可以不用授权,否则就必须要执行上面的授权命令

#8


lz

你需要先了解一下ts和schema的概念,

用union 或者union all实现你的要求

#9


在解答问题之前,楼主先学习一下表空间的知识,理解清楚自己数据库的环境。 之后,再完整无误的提出自己的问题吧。

#10


引用 9 楼 coolkisses 的回复:
在解答问题之前,楼主先学习一下表空间的知识,理解清楚自己数据库的环境。 之后,再完整无误的提出自己的问题吧。


对不起,没表达清楚。我的想法是:

总部要把各个分部的数据汇总起来,规划是:在总部的数据库中给每个分部建一个用户和一个表空间,分别存储各个分部的数据。但是这样一来,查询全公司(包括各个分部)的数据就出现问题了,不知道用什么语句好。为简化其间,举两个表空间的例子。

两个表空间的两个表同名,且结构相同,两个表的拥有者是两个用户。

即,

tbs1 包含表table1,拥有者是user1,

tbs2 包含表table1,拥有者是user2。

两个table1的结构相同。

现在有个user3,他有权查看两个表空间的table1。现在要使用一条语句查询出两个table1中的数据。如何查。

推而广之,如果20个表空间包含表table1,为实现查询目的,如何处理?

#11


在user3上建立视图。但不能保证效率。

create or replace view view_name as
select * from user1.table1
union all
select * from user2.table1
.....

#12


union 加上用户名

#13


引用 12 楼 huangdh12 的回复:
union 加上用户名


能再说细一点吗?

谢谢!

#14


哥哥 你有仔细看我的回复么,就我回复的详细你不看,一直还在问。

引用 13 楼 bjhdy 的回复:
引用 12 楼 huangdh12 的回复:
union 加上用户名


能再说细一点吗?

谢谢!

#15


引用 10 楼 bjhdy 的回复:
引用 9 楼 coolkisses 的回复:
在解答问题之前,楼主先学习一下表空间的知识,理解清楚自己数据库的环境。 之后,再完整无误的提出自己的问题吧。


对不起,没表达清楚。我的想法是:

总部要把各个分部的数据汇总起来,规划是:在总部的数据库中给每个分部建一个用户和一个表空间,分别存储各个分部的数据。但是这样一来,查询全公司(包括各个分部)的数据就出现问题了,不知道用什么语句好……


lz需要先了解一下schema和ts的概念。

你这里的描述把这些东东给混淆了,倒是很不大让人明白你的意思。

对于你的需求,不同的用户建立的表,即使名字一样,也是不同的对象。

不同的对象的结果集合并,要用union和union all实现。

#16


表空间 + 表名 或者 用户名+表名