2017-04-18 40 views
1

分区数据库比方说,我创建了如下表:模拟和操作上的多个位置

CREATE TABLE TABLE1 
( 
id INT NOT NULL 
country VARCHAR(10) NOT NULL 
name VARCHAR(10) NOT NULL 
productType VARCHAR(10) NOT NULL 
) 

举例来说,如果我有不同的值producType(TYPE1,TYPE2 ..等) 和我做了基于这些类型的分区(例如partition1用于type1等)。 国家的可能值是:country1,country2和country3。 我如何执行或根据国家模拟横向分割,并能够使用类似的命令是:

SELECT * FROM [email protected] 
WHERE name = someName 

它是数据库必须存储在多个服务器上,以要求能够做到这一点? 如果是这样,是否有另一种方法可以做到这一点(在Oracle 11g上)?

+0

在12c之前不支持分片(物理分区)。但是如果你不想让这些国家驻留在多台服务器上,那么你就不会谈论分片了。所以你想要什么? – APC

+0

表分区不被视为分片?我正在做一个任务,我必须做一个水平碎片,也必须基于位置,所以我将不得不使用一些命令,我​​将不得不指定位置,如“@countryName”,我不要不知道在Oracle 11g中是否有可能在没有多个服务器但只有分区表的情况下执行此操作。 –

+0

编号共享是在多个数据库实例之间分割一个表。分区正在组织一个数据库中的表格布局。 – APC

回答

1

你想子表分区吗?也就是说,按列表(ProductType)分区,按列表分区(国家)?

可以这样做。

子分区产生的名称不能反映密钥的名称。因此,他们不适合自己,以明确引用的方式分区可以select语句将引用该国的WHERE子句中:

select * from your_table partition (p_prodtype_0001) 
where country = 'country1' 

优化器仍可以申请子分区修剪在这种情况下。

您可以通过在不同架构中具有相同名称的不同表格进行虚拟共享,无论是在相同的数据库中还是在不同的架构中。您可以使用不同国家/地区的名称创建数据库链接。这将允许你雇用@country1或其他什么。插入会很棘手。可能你必须有一个视图和一个INSTEAD OF触发器。