在多个位置模拟和操作分区数据库
Simulating and manipulating a partitioned database on multiple locations
假设我创建了以下 table :
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 等等。
country 的可能值为:country1、country2 和 country3。
我如何根据国家/地区执行或模拟水平分段,并能够使用与此类似的命令:
SELECT * FROM partition1@country1
WHERE name = someName
是否要求数据库必须存储在多个服务器上才能做到这一点?
如果是这样,是否有另一种不需要的方法(在 Oracle 11g 上)?
您要对表进行子分区吗?即按列表(ProductType)划分,按列表(国家)划分?
这是可以做到的。
子分区生成的名称不反映键的名称。因此,它们不会像分区那样显式引用 select 语句将在 WHERE 子句中引用国家/地区:
select * from your_table partition (p_prodtype_0001)
where country = 'country1'
在这种情况下,优化器仍然可以应用子分区修剪。
您可以通过在不同模式中使用同名的不同表来伪造共享,无论是在同一数据库还是不同数据库中。您可以使用不同国家/地区的名称创建数据库链接。这将允许您使用 @country1
或其他任何东西。插入会很棘手。可能您必须有一个视图和一个 INSTEAD OF 触发器。
假设我创建了以下 table :
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 等等。 country 的可能值为:country1、country2 和 country3。 我如何根据国家/地区执行或模拟水平分段,并能够使用与此类似的命令:
SELECT * FROM partition1@country1
WHERE name = someName
是否要求数据库必须存储在多个服务器上才能做到这一点? 如果是这样,是否有另一种不需要的方法(在 Oracle 11g 上)?
您要对表进行子分区吗?即按列表(ProductType)划分,按列表(国家)划分?
这是可以做到的。
子分区生成的名称不反映键的名称。因此,它们不会像分区那样显式引用 select 语句将在 WHERE 子句中引用国家/地区:
select * from your_table partition (p_prodtype_0001)
where country = 'country1'
在这种情况下,优化器仍然可以应用子分区修剪。
您可以通过在不同模式中使用同名的不同表来伪造共享,无论是在同一数据库还是不同数据库中。您可以使用不同国家/地区的名称创建数据库链接。这将允许您使用 @country1
或其他任何东西。插入会很棘手。可能您必须有一个视图和一个 INSTEAD OF 触发器。