假设我创建了下表:
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 partition1@country1
WHERE name = someName
是否要求数据库必须存储在多个服务器上以便能够执行此操作? 如果是这样,是否有其他方法可以做到这一点(在Oracle 11g上)?
答案 0 :(得分:1)
你想对表进行分区吗?也就是说,按列表分区(ProductType),按分区(国家)分区?
可以做到。
子分区生成的名称不能反映密钥的名称。因此,他们不能明确引用分区的方式select语句将在WHERE子句中引用该国家:
Route
在这种情况下,优化器仍然可以应用子分区修剪。
您可以通过在不同的模式中使用相同名称的不同表来伪造共享,无论是在同一个数据库中还是在不同的数据库中。您可以使用不同国家/地区的名称创建数据库链接。这将允许您使用select * from your_table partition (p_prodtype_0001)
where country = 'country1'
或其他。插入会很棘手。可能你必须拥有一个视图和一个INSTEAD OF触发器。