跳过导航链接
退出打印视图
| Oracle Solaris Cluster 系统管理指南

搜索范围:

- 本文档
- 整个文档库

### 管理基于存储的复制设备

您可以对 Oracle Solaris Cluster 设备组进行配置，使之包含那些通过基于存储的复制被复制的设备。Oracle Solaris Cluster 软件支持使用 Hitachi TrueCopy 和 EMC Symmetrix Remote Data Facility 软件进行基于存储的复制。

在能够使用 Hitachi TrueCopy 或 EMC Symmetrix Remote Data Facility 软件复制数据之前，您必须熟悉基于存储的复制文档，并在系统上安装基于存储的复制产品和最新的修补程序。有关安装基于存储的复制软件的信息，请参见产品文档。

基于存储的复制软件可将一对设备配置为副本，一个作为主副本，另一个作为辅助副本。在任意给定时刻，与一组节点相连的设备将是主副本。与另一组节点相连的设备将是辅助副本。

在 Oracle Solaris Cluster 配置中，一旦主副本所属的 Oracle Solaris Cluster 设备组被移动，该主副本也会自动移动。因此，决不应在 Oracle Solaris Cluster 配置中直接移动主副本。正确的做法是：通过移动相关联的 Oracle Solaris Cluster 设备组来实现接管。

| 注意 - 您创建的 Oracle Solaris Cluster 设备组（Solaris Volume Manager、Veritas Volume Manager 或原始磁盘）必须与所复制的设备组同名。

本节包含以下过程：

- 管理 Hitachi TrueCopy 复制设备

- 管理 EMC Symmetrix Remote Data Facility 复制设备

#### 管理 Hitachi TrueCopy 复制设备

下表列出了为设置 Hitachi TrueCopy 基于存储的复制设备而必须执行的任务。

表 5-2 任务表：管理 Hitachi TrueCopy 基于存储的复制设备

任务 | 指导
--- | ---
在存储设备和节点上安装 TrueCopy 软件 | 请参见 Hitachi 存储设备附带的文档。
配置 Hitachi 复制组 | 如何配置 Hitachi TrueCopy 复制组
配置 DID 设备 | 如何配置 DID 设备以使用 Hitachi TrueCopy 进行复制
注册复制组 | 如何添加和注册设备组 (Solaris Volume Manager)或如何将磁盘组注册为设备组 (Veritas Volume Manager)
检验配置 | 如何检验 Hitachi TrueCopy 复制全局设备组配置

# 如何配置 Hitachi TrueCopy 复制组

###### 开始之前

首先，在主群集的共享磁盘上配置 Hitachi TrueCopy 设备组。此配置信息在每个可访问 Hitachi 阵列的群集节点上的 `/etc/horcm.conf` 文件中指定。有关如何配置 `/etc/horcm.conf` 文件的更多信息，请参见《Sun StorEdge SE 9900 V Series Command and Control Interface User and Reference Guide》。

| 注意 - 您创建的 Oracle Solaris Cluster 设备组（Solaris Volume Manager、Veritas Volume Manager、ZFS 或原始磁盘）必须与所复制的设备组同名。

1. 在与存储阵列相连的所有节点上，成为超级用户或成为可提供 `solaris.cluster.modify` RBAC 授权的角色。
2. 将 `horcm` 条目添加到 `/etc/services` 文件中。

       horcm  9970/udp

   为新条目指定一个端口号和协议名称。

3. 在 `/etc/horcm.conf` 文件中指定 Hitachi TrueCopy 设备组的配置信息。

   有关说明，请参阅 TrueCopy 软件附带的文档。

4. 在所有节点上运行 `horcmstart.sh` 命令以启动 TrueCopy CCI 守护进程。

       # /usr/bin/horcmstart.sh

5. 如果尚未创建副本对，请立即创建。

   使用 `paircreate` 命令创建具有所需隔离级别的副本对。有关创建副本对的说明，请参阅 TrueCopy 文档。

6. 在每个配置了复制设备的节点上，使用 `pairdisplay` 命令检验数据复制的设置是否正确。 保护级别为 ASYNC 的 Hitachi TrueCopy 或 Hitachi Universal Replicator 设备组无法与系统上的任何其他设备组共享其 ctgid。

       # pairdisplay -g group-name
       Group PairVol(L/R) (Port#,TID,LU),Seq#,LDEV#,P/S,Status,Fence,Seq#,P-LDEV# M
       group-name pair1(L) (CL1-C , 0, 9) 54321   58..P-VOL PAIR NEVER ,12345 29   -
       group-name pair1(R) (CL1-A , 0, 29)12345   29..S-VOL PAIR NEVER ,----- 58   -

7. 检验所有节点是否均可对复制组进行控制。
   1. 使用 `pairdisplay` 命令确定包含主副本的节点和包含辅助副本的节点。

          # pairdisplay -g group-name
          Group PairVol(L/R) (Port#,TID,LU),Seq#,LDEV#,P/S,Status,Fence,Seq#,P-LDEV# M
          group-name pair1(L) (CL1-C , 0, 9) 54321   58..P-VOL PAIR NEVER ,12345 29   -
          group-name pair1(R) (CL1-A , 0, 29)12345   29..S-VOL PAIR NEVER ,----- 58   -

      具有处于 `P-VOL` 状态的本地 (L) 设备的节点包含主副本；具有处于 `S-VOL` 状态的本地 (L) 设备的节点包含辅助副本。

   2. 在包含辅助副本的节点上运行 `horctakeover` 命令，使辅助节点成为主节点。

          # horctakeover -g group-name

      请先等初始数据完成复制操作之后，再继续执行下一步骤。

   3. 检验已执行 `horctakeover` 的节点现在是否具有状态为 `P-VOL` 的本地 (L) 设备。

          # pairdisplay -g group-name
          Group PairVol(L/R) (Port#,TID,LU),Seq#,LDEV#,P/S,Status,Fence,Seq#,P-LDEV# M
          group-name pair1(L) (CL1-C , 0, 9) 54321   58..S-VOL PAIR NEVER ,12345 29   -
          group-name pair1(R) (CL1-A , 0, 29)12345   29..P-VOL PAIR NEVER ,----- 58   -

   4. 在最初包含主副本的节点上运行 `horctakeover` 命令。

          # horctakeover -g group-name

   5. 运行 `pairdisplay` 命令，检验主节点是否已改回初始配置。

          # pairdisplay -g group-name
          Group PairVol(L/R) (Port#,TID,LU),Seq#,LDEV#,P/S,Status,Fence,Seq#,P-LDEV# M
          group-name pair1(L) (CL1-C , 0, 9) 54321   58..P-VOL PAIR NEVER ,12345 29   -
          group-name pair1(R) (CL1-A , 0, 29)12345   29..S-VOL PAIR NEVER ,----- 58   -

###### 接下来的操作

按照如何配置 DID 设备以使用 Hitachi TrueCopy 进行复制中的说明，继续对复制设备进行配置。

# 如何配置 DID 设备以使用 Hitachi TrueCopy 进行复制

###### 开始之前

给复制设备配置了设备组之后，您必须配置该复制设备所使用的设备标识符 (Device Identifier, DID) 驱动程序。

`phys-schost#` 提示符表示全局群集提示符。此操作过程适用于全局群集。

此过程提供了 Oracle Solaris Cluster 命令的长格式。此外，大多数命令还有简短格式。这些命令除了名称长短的不同以外，其功能都是相同的。

1. 在群集的任意一个节点上，成为超级用户或成为可提供 `solaris.cluster.modify` RBAC 授权的角色。
2. 确认所有节点上正在运行 `horcmd` 守护进程。

   如果该守护进程未在运行，可使用以下命令来启动它。如果该守护进程已在运行，系统将显示一条消息。

       # /usr/bin/horcmstart.sh

3. 运行 `pairdisplay` 命令以确定包含辅助副本的节点。

       # pairdisplay -g group-name
       Group PairVol(L/R) (Port#,TID,LU),Seq#,LDEV#,P/S,Status,Fence,Seq#,P-LDEV# M
       group-name pair1(L) (CL1-C , 0, 9) 54321   58..P-VOL PAIR NEVER ,12345 29   -
       group-name pair1(R) (CL1-A , 0, 29)12345   29..S-VOL PAIR NEVER ,----- 58   -

   具有状态为 `S-VOL` 的本地 (L) 设备的节点包含辅助副本。

4. 在包含辅助副本（由上一步确定）的节点上，配置 DID 设备以用于基于存储的复制。

   此命令会将设备副本对的两个独立 DID 实例组合成单个逻辑 DID 实例。该单个实例使两端的卷管理软件都能够使用该设备。

   | 注意 - 如果有多个节点与辅助副本相连，请仅在这些节点中的一个节点上运行此命令。

       # cldevice replicate -D primary-replica-nodename -S secondary replica-nodename

   primary-replica-nodename

     指定包含主副本的远程节点的名称。

   `-S`

     指定源节点（非当前节点）。

   secondary replica-nodename

     指定包含辅助副本的远程节点的名称。

   注 - 默认情况下，当前节点就是源节点。使用 `-S` 选项指定其他源节点。

5. 检验是否已组合 DID 实例。

       # cldevice list -v logical_DID_device

6. 检验是否已设置 TrueCopy 复制。

       # cldevice show logical_DID_device

   该命令输出应指出 TrueCopy 是复制类型。

7. 如果 DID 重映射未能成功组合所有复制设备，请手动组合各个复制设备。

   | 注意 - 手动组合 DID 实例时要非常小心。重映射设备不当可导致数据受损。

   1. 在包含辅助副本的所有节点上运行 `cldevice combine` 命令。

          # cldevice combine -d destination-instance source-instance

      ``-d destination-instance

        与主副本相对应的远程 DID 实例。

      source-instance

        与辅助副本相对应的本地 DID 实例。

   2. 检验 DID 重映射是否成功。

          # cldevice list desination-instance source-instance

   屏幕上不应再列出其中一个 DID 实例。

8. 在所有节点上，检验所有组合 DID 实例所对应的 DID 设备是否均可访问。

       # cldevice list -v

###### 接下来的操作

要完成对复制设备组的配置，请执行以下过程中的步骤。

- 如何添加和注册设备组 (Solaris Volume Manager)或如何将磁盘组注册为设备组 (Veritas Volume Manager)

  注册设备组时，确保使它与 TrueCopy 复制组同名。

- 如何检验 Hitachi TrueCopy 复制全局设备组配置

# 如何检验 Hitachi TrueCopy 复制全局设备组配置

###### 开始之前

在检验全局设备组之前，必须先创建它。可使用 Solaris Volume Manager、Veritas Volume Manager、ZFS 或原始磁盘的设备组。有关更多信息，请参考以下内容：

- 如何添加和注册设备组 (Solaris Volume Manager)

- 如何添加并注册设备组（原始磁盘）

- 如何添加并注册复制设备组 (ZFS)

- 如何在初始化磁盘时创建新磁盘组 (Veritas Volume Manager)

| 注意 - 您创建的 Oracle Solaris Cluster 设备组（Solaris Volume Manager、Veritas Volume Manager 或原始磁盘）必须与所复制的设备组同名。

`phys-schost#` 提示符表示全局群集提示符。此操作过程适用于全局群集。

此过程提供了 Oracle Solaris Cluster 命令的长格式。此外，大多数命令还有简短格式。这些命令除了名称长短的不同以外，其功能都是相同的。

1. 检验主设备组是否对应于包含主副本的同一节点。

       # pairdisplay -g group-name
       # cldevicegroup status -n nodename group-name

2. 检验是否已为设备组设置复制属性。

       # cldevicegroup show -n nodename group-name

3. 检验是否已为设备设置复制属性。

       # usr/cluster/bin/cldevice status [-s state] [-n node[,?]] [+| [disk-device ]]

4. 尝试执行切换，确保设备组已正确配置，而且，副本可在节点之间移动。

   如果设备组处于脱机状态，请使其联机。

       # cldevicegroup switch -n nodename group-name

   `-n` nodename

     设备组被切换到的节点。该节点将成为新的主节点。

5. 通过比较以下命令的输出内容检验切换操作是否成功。

       # pairdisplay -g group-name
       # cldevicegroup status -n nodename group-name

##### 示例：为 Oracle Solaris Cluster 配置 TrueCopy 复制组

本示例用于完成在群集中设置 TrueCopy 复制所需执行的特定于 Oracle Solaris Cluster 的步骤。本示例假定您已执行以下任务：

- 设置了 Hitachi LUN

- 在存储设备和群集节点上安装了 TrueCopy 软件

- 在群集节点上配置了复制对

  有关配置复制对的说明，请参见如何配置 Hitachi TrueCopy 复制组。

本示例要用到一个使用 TrueCopy 的三节点群集。群集跨两个远程站点分布，一个站点有两个节点，另一站点有一个节点。每个站点都有自己的 Hitachi 存储设备。

以下示例显示了每个节点上的 TrueCopy `/etc/horcm.conf` 配置文件。

示例 5-1 节点 1 上的 TrueCopy 配置文件

    HORCM_DEV
    #dev_group     dev_name    port#       TargetID     LU#       MU#
    VG01           pair1       CL1-A         0          29
    VG01           pair2       CL1-A         0          30
    VG01           pair3       CL1-A         0          31
    HORCM_INST
    #dev_group     ip_address   service
    VG01           node-3       horcm

示例 5-2 节点 2 上的 TrueCopy 配置文件

    HORCM_DEV
    #dev_group        dev_name       port#       TargetID    LU#       MU#
    VG01              pair1          CL1-A         0         29
    VG01              pair2          CL1-A         0         30
    VG01              pair3          CL1-A         0         31
    HORCM_INST
    #dev_group        ip_address      service
    VG01              node-3          horcm

示例 5-3 节点 3 上的 TrueCopy 配置文件

    HORCM_DEV
    #dev_group        dev_name       port#       TargetID    LU#       MU#
    VG01              pair1          CL1-C         0         09
    VG01              pair2          CL1-C         0         10
    VG01              pair3          CL1-C         0         11
    HORCM_INST
    #dev_group        ip_address      service
    VG01              node-1          horcm
    VG01              node-2          horcm

在上面的示例中，两个站点间复制了三个 LUN。这些 LUN 都在名为 `VG01` 的复制组中。`pairdisplay` 命令检验此信息，并显示节点 3 包含的是主副本。

示例 5-4 `pairdisplay` 命令在节点 1 上的输出

    # pairdisplay -g VG01
    Group   PairVol(L/R) (Port#,TID,LU),Seq#,LDEV#.P/S,Status,Fence, Seq#,P-LDEV# M
    VG01    pair1(L)    (CL1-A , 0, 29)61114   29..S-VOL PAIR NEVER  ,-----    58  -
    VG01    pair1(R)    (CL1-C , 0,  9)20064   58..P-VOL PAIR NEVER  ,61114    29  -
    VG01    pair2(L)    (CL1-A , 0, 30)61114   30..S-VOL PAIR NEVER  ,-----    59  -
    VG01    pair2(R)    (CL1-C , 0, 10)20064   59..P-VOL PAIR NEVER  ,61114    30  -
    VG01    pair3(L)    (CL1-A , 0, 31)61114   31..S-VOL PAIR NEVER  ,-----    60  -
    VG01    pair3(R)    (CL1-C , 0, 11)20064   60..P-VOL PAIR NEVER  ,61114    31  -

示例 5-5 `pairdisplay` 命令在节点 2 上的输出

    # pairdisplay -g VG01
    Group   PairVol(L/R) (Port#,TID,LU),Seq#,LDEV#.P/S,Status,Fence, Seq#,P-LDEV# M
    VG01    pair1(L)    (CL1-A , 0, 29)61114   29..S-VOL PAIR NEVER  ,-----    58  -
    VG01    pair1(R)    (CL1-C , 0,  9)20064   58..P-VOL PAIR NEVER  ,61114    29  -
    VG01    pair2(L)    (CL1-A , 0, 30)61114   30..S-VOL PAIR NEVER  ,-----    59  -
    VG01    pair2(R)    (CL1-C , 0, 10)20064   59..P-VOL PAIR NEVER  ,61114    30  -
    VG01    pair3(L)    (CL1-A , 0, 31)61114   31..S-VOL PAIR NEVER  ,-----    60  -
    VG01    pair3(R)    (CL1-C , 0, 11)20064   60..P-VOL PAIR NEVER  ,61114    31  -

示例 5-6 `pairdisplay` 命令在节点 3 上的输出

    # pairdisplay -g VG01
    Group   PairVol(L/R) (Port#,TID,LU),Seq#,LDEV#.P/S,Status,Fence, Seq#,P-LDEV# M
    VG01    pair1(L)    (CL1-C , 0,  9)20064   58..P-VOL PAIR NEVER  ,61114    29  -
    VG01    pair1(R)    (CL1-A , 0, 29)61114   29..S-VOL PAIR NEVER  ,-----    58  -
    VG01    pair2(L)    (CL1-C , 0, 10)20064   59..P-VOL PAIR NEVER  ,61114    30  -
    VG01    pair2(R)    (CL1-A , 0, 30)61114   30..S-VOL PAIR NEVER  ,-----    59  -
    VG01    pair3(L)    (CL1-C , 0, 11)20064   60..P-VOL PAIR NEVER  ,61114    31  -
    VG01    pair3(R)    (CL1-A , 0, 31)61114   31..S-VOL PAIR NEVER  ,-----    60  -

要查看正在使用哪些磁盘，请使用 `pairdisplay` 命令的 `-fd` 选项，如以下示例所示。

示例 5-7 `pairdisplay` 命令在节点 1 上的输出，显示已用磁盘

    # pairdisplay -fd -g VG01
    Group PairVol(L/R) Device_File                       ,Seq#,LDEV#.P/S,Status,Fence,Seq#,P-LDEV# M
    VG01 pair1(L) c6t500060E8000000000000EEBA0000001Dd0s2 61114 29..S-VOL PAIR NEVER  ,-----    58  -
    VG01 pair1(R) c5t50060E800000000000004E600000003Ad0s2 20064 58..P-VOL PAIR NEVER  ,61114    29  -
    VG01 pair2(L) c6t500060E8000000000000EEBA0000001Ed0s2 61114 30..S-VOL PAIR NEVER  ,-----    59  -
    VG01 pair2(R) c5t50060E800000000000004E600000003Bd0s2 0064  59..P-VOL PAIR NEVER  ,61114    30  -
    VG01 pair3(L) c6t500060E8000000000000EEBA0000001Fd0s2 61114 31..S-VOL PAIR NEVER  ,-----    60  -
    VG01 pair3(R) c5t50060E800000000000004E600000003Cd0s2 20064 60..P-VOL PAIR NEVER  ,61114    31  -

示例 5-8 `pairdisplay` 命令在节点 2 上的输出，显示已用磁盘

    # pairdisplay -fd -g VG01
    Group PairVol(L/R) Device_File                       ,Seq#,LDEV#.P/S,Status,Fence,Seq#,P-LDEV# M
    VG01 pair1(L) c5t500060E8000000000000EEBA0000001Dd0s2 61114 29..S-VOL PAIR NEVER  ,-----    58  -
    VG01 pair1(R) c5t50060E800000000000004E600000003Ad0s2 20064 58..P-VOL PAIR NEVER  ,61114    29  -
    VG01 pair2(L) c5t500060E8000000000000EEBA0000001Ed0s2 61114 30..S-VOL PAIR NEVER  ,-----    59  -
    VG01 pair2(R) c5t50060E800000000000004E600000003Bd0s2 20064 59..P-VOL PAIR NEVER  ,61114    30  -
    VG01 pair3(L) c5t500060E8000000000000EEBA0000001Fd0s2 61114 31..S-VOL PAIR NEVER  ,-----    60  -
    VG01 pair3(R) c5t50060E800000000000004E600000003Cd0s2 20064 60..P-VOL PAIR NEVER  ,61114    31  -

示例 5-9 `pairdisplay` 命令在节点 3 上的输出，显示已用磁盘

    # pairdisplay -fd -g VG01
    Group PairVol(L/R) Device_File                       ,Seq#,LDEV#.P/S,Status,Fence ,Seq#,P-LDEV# M
    VG01 pair1(L) c5t50060E800000000000004E600000003Ad0s2 20064  58..P-VOL PAIR NEVER  ,61114    29  -
    VG01 pair1(R) c6t500060E8000000000000EEBA0000001Dd0s2 61114  29..S-VOL PAIR NEVER  ,-----    58  -
    VG01 pair2(L) c5t50060E800000000000004E600000003Bd0s2 20064  59..P-VOL PAIR NEVER  ,61114    30  -
    VG01 pair2(R) c6t500060E8000000000000EEBA0000001Ed0s2 61114  30..S-VOL PAIR NEVER  ,-----    59  -
    VG01 pair3(L) c5t50060E800000000000004E600000003Cd0s2 20064  60..P-VOL PAIR NEVER  ,61114    31  -
    VG01 pair3(R) c6t500060E8000000000000EEBA0000001Fd0s2 61114  31..S-VOL PAIR NEVER  ,-----    60  -

这些示例显示，系统正在使用以下磁盘：

- 在节点 1 上：

  - c6t500060E8000000000000EEBA0000001Dd0s2

  - c6t500060E8000000000000EEBA0000001Ed0s2

  - c6t500060E8000000000000EEBA0000001Fd0s

- 在节点 2 上：

  - c5t500060E8000000000000EEBA0000001Dd0s2

  - c5t500060E8000000000000EEBA0000001Ed0s2

  - c5t500060E8000000000000EEBA0000001Fd0s2

- 在节点 3 上：

  - c5t50060E800000000000004E600000003Ad0s2

  - c5t50060E800000000000004E600000003Bd0s2

  - c5t50060E800000000000004E600000003Cd0s2

要查看与这些磁盘相对应的 DID 设备，请使用 `cldevice list` 命令，如以下示例所示。

示例 5-10 显示与已用磁盘相对应的 DID

    # cldevice list -v

    DID Device  Full Device Path
    ----------  ----------------
    1           node-1:/dev/rdsk/c0t0d0  /dev/did/rdsk/d1
    2           node-1:/dev/rdsk/c0t6d0  /dev/did/rdsk/d2
    11          node-1:/dev/rdsk/c6t500060E8000000000000EEBA00000020d0 /dev/did/rdsk/d11
    11          node-2:/dev/rdsk/c5t500060E8000000000000EEBA00000020d0 /dev/did/rdsk/d11
    12              node-1:/dev/rdsk/c6t500060E8000000000000EEBA0000001Fd0 /dev/did/rdsk/d12
    12              node-2:/dev/rdsk/c5t500060E8000000000000EEBA0000001Fd0 /dev/did/rdsk/d12
    13              node-1:/dev/rdsk/c6t500060E8000000000000EEBA0000001Ed0 /dev/did/rdsk/d13
    13              node-2:/dev/rdsk/c5t500060E8000000000000EEBA0000001Ed0 /dev/did/rdsk/d13
    14              node-1:/dev/rdsk/c6t500060E8000000000000EEBA0000001Dd0 /dev/did/rdsk/d14
    14              node-2:/dev/rdsk/c5t500060E8000000000000EEBA0000001Dd0 /dev/did/rdsk/d14
    18          node-3:/dev/rdsk/c0t0d0  /dev/did/rdsk/d18
    19          node-3:/dev/rdsk/c0t6d0  /dev/did/rdsk/d19
    20          node-3:/dev/rdsk/c5t50060E800000000000004E6000000013d0 /dev/did/rdsk/d20
    21          node-3:/dev/rdsk/c5t50060E800000000000004E600000003Dd0 /dev/did/rdsk/d21
    22          node-3:/dev/rdsk/c5t50060E800000000000004E600000003Cd0 /dev/did/rdsk/d2223
    23              node-3:/dev/rdsk/c5t50060E800000000000004E600000003Bd0 /dev/did/rdsk/d23
    24              node-3:/dev/rdsk/c5t50060E800000000000004E600000003Ad0 /dev/did/rdsk/d24

在合并每对复制设备的 DID 实例时，`cldevice list` 应该将 DID 实例 12 与 22、实例 13 与 23 以及实例 14 与 24 分别进行合并。因为节点 3 具有主副本，所以请从节点 1 或节点 2 运行 `cldevice `-T`` 命令。应总是合并来自具有辅助副本的节点的实例。请仅从单个节点（而不是从两个节点）上运行该命令。

以下示例显示了在节点 1 上运行该命令以组合 DID 实例时的输出。

示例 5-11 组合 DID 实例

    # cldevice replicate -D node-3
    Remapping instances for devices replicated with node-3...
    VG01 pair1 L node-1:/dev/rdsk/c6t500060E8000000000000EEBA0000001Dd0
    VG01 pair1 R node-3:/dev/rdsk/c5t50060E800000000000004E600000003Ad0
    Combining instance 14 with 24
    VG01 pair2 L node-1:/dev/rdsk/c6t500060E8000000000000EEBA0000001Ed0
    VG01 pair2 R node-3:/dev/rdsk/c5t50060E800000000000004E600000003Bd0
    Combining instance 13 with 23
    VG01 pair3 L node-1:/dev/rdsk/c6t500060E8000000000000EEBA0000001Fd0
    VG01 pair3 R node-3:/dev/rdsk/c5t50060E800000000000004E600000003Cd0
    Combining instance 12 with 22

检查 `cldevice list` 的输出。现在，两个站点的 LUN 具有相同的 DID 实例。具相同的 DID 实例使每个副本对看起来像是单个 DID 设备，如下例所示。

示例 5-12 显示组合后的 DID

    # cldevice list -v
    DID Device  Full Device Path
    ----------  ----------------
    1           node-1:/dev/rdsk/c0t0d0  /dev/did/rdsk/d1
    2           node-1:/dev/rdsk/c0t6d0  /dev/did/rdsk/d2
    11          node-1:/dev/rdsk/c6t500060E8000000000000EEBA00000020d0 /dev/did/rdsk/d11
    11          node-2:/dev/rdsk/c5t500060E8000000000000EEBA00000020d0 /dev/did/rdsk/d11
    18          node-3:/dev/rdsk/c0t0d0  /dev/did/rdsk/d18
    19          node-3:/dev/rdsk/c0t6d0  /dev/did/rdsk/d19
    20          node-3:/dev/rdsk/c5t50060E800000000000004E6000000013d0 /dev/did/rdsk/d20
    21          node-3:/dev/rdsk/c5t50060E800000000000004E600000003Dd0 /dev/did/rdsk/d21
    22          node-1:/dev/rdsk/c6t500060E8000000000000EEBA0000001Fd0 /dev/did/rdsk/d1222
    22          node-2:/dev/rdsk/c5t500060E8000000000000EEBA0000001Fd0 /dev/did/rdsk/d12
    22          node-3:/dev/rdsk/c5t50060E800000000000004E600000003Cd0 /dev/did/rdsk/d22
    23          node-1:/dev/rdsk/c6t500060E8000000000000EEBA0000001Ed0 /dev/did/rdsk/d13
    23          node-2:/dev/rdsk/c5t500060E8000000000000EEBA0000001Ed0 /dev/did/rdsk/d13
    23          node-3:/dev/rdsk/c5t50060E800000000000004E600000003Bd0 /dev/did/rdsk/d23
    24          node-1:/dev/rdsk/c6t500060E8000000000000EEBA0000001Dd0 /dev/did/rdsk/d24
    24          node-2:/dev/rdsk/c5t500060E8000000000000EEBA0000001Dd0 /dev/did/rdsk/d24
    24          node-3:/dev/rdsk/c5t50060E800000000000004E600000003Ad0 /dev/did/rdsk/d24

下一步是创建卷管理器设备组。请从具有主副本的节点（在本示例中为节点 3）发出此命令。使设备组与副本组具有相同的名称，如以下示例所示。

示例 5-13 创建 Solaris Volume Manager 设备组

    # metaset -s VG01 -ah phys-deneb-3
    # metaset -s VG01 -ah phys-deneb-1
    # metaset -s VG01 -ah phys-deneb-2
    # metaset -s VG01 -a /dev/did/rdsk/d22
    # metaset -s VG01 -a /dev/did/rdsk/d23
    # metaset -s VG01 -a /dev/did/rdsk/d24
    # metaset
    Set name = VG01, Set number = 1

    Host                Owner
      phys-deneb-3       Yes
      phys-deneb-1
      phys-deneb-2

    Drive Dbase
    d22   Yes
    d23   Yes
    d24   Yes

此时，设备组可用，您可以创建元设备，还可以将设备组移至三个节点中的任意节点。但是，为使切换和故障转移更加有效，可运行 `cldevicegroup set` 命令在群集配置中将设备组标记为已复制。

示例 5-14 使切换和故障转移更有效

    # cldevicegroup sync VG01
    # cldevicegroup show VG01
    === Device Groups===

    Device Group Name                       VG01
      Type:                                   SVM
      failback:                               no
      Node List:                              phys-deneb-3, phys-deneb-1, phys-deneb-2
      preferenced:                            yes
      numsecondaries:                         1
      device names:                           VG01
      Replication type:                       truecopy

完成此步骤后，复制组的配置便已完成。要检验配置是否成功，请执行如何检验 Hitachi TrueCopy 复制全局设备组配置中的步骤。

#### 管理 EMC Symmetrix Remote Data Facility 复制设备

下表列出了为设置和管理 EMC Symmetrix Remote Data Facility (SRDF) 基于存储的复制设备而必须执行的任务。

表 5-3 任务表：管理 EMC SRDF 基于存储的复制设备

任务 | 指导
--- | ---
在存储设备和节点上安装 SRDF 软件 | EMC 存储设备附带的文档。
配置 EMC 复制组 | 如何配置 EMC SRDF 复制组
配置 DID 设备 | 如何使用 EMC SRDF 给复制配置 DID 设备
注册复制组 | 如何添加和注册设备组 (Solaris Volume Manager)或如何将磁盘组注册为设备组 (Veritas Volume Manager)
检验配置 | 如何检验 EMC SRDF 复制全局设备组配置
校园群集的主工作间彻底失败后，手动恢复数据 | 如何在主工作间彻底故障后恢复 EMC SRDF 数据

# 如何配置 EMC SRDF 复制组

###### 开始之前

在配置 EMC Symmetrix Remote Data Facility (SRDF) 复制组之前，必须在所有群集节点上安装 EMC Solutions Enabler 软件。首先，在群集的共享磁盘上配置 EMC SRDF 设备组。有关如何配置 EMC SRDF 设备组的更多信息，请参见 EMC SRDF 产品文档。

使用 EMC SRDF 时，请使用动态设备而非静态设备。静态设备更改复制主副本需要几分钟，而这会影响故障转移时间。

| 注意 - 您创建的 Oracle Solaris Cluster 设备组（Solaris Volume Manager、Veritas Volume Manager 或原始磁盘）必须与所复制的设备组同名。

1. 在与存储阵列相连的所有节点上，成为超级用户或成为可提供 `solaris.cluster.modify` RBAC 授权的角色。
2. 在配置有复制数据的每个节点上，搜索 Symmetrix 设备配置。

   此过程可能需要几分钟的时间。

       # /usr/symcli/bin/symcfg discover

3. 如果尚未创建副本对，请立即创建。

   使用 `symrdf` 命令创建副本对。有关创建副本对的说明，请参阅 SRDF 文档。

4. 在配置有复制设备的每个节点上，检验数据复制设置是否正确。

       # /usr/symcli/bin/symdg show group-name

5. 执行设备组交换。
   1. 检验主副本和辅助副本是否同步。

          # /usr/symcli/bin/symrdf -g group-name verify -synchronized

   2. 使用 `symdg show` 命令确定包含主副本的节点和包含辅助副本的节点。

          # /usr/symcli/bin/symdg show group-name

      具有 RDF1 设备的节点包含主副本，具有 RDF2 设备状态的节点包含辅助副本。

   3. 启用辅助副本。

          # /usr/symcli/bin/symrdf -g group-name failover

   4. 交换 RDF1 和 RDF2 设备。

          # /usr/symcli/bin/symrdf -g group-name swap -refresh R1

   5. 启用副本对。

          # /usr/symcli/bin/symrdf -g group-name establish

   6. 检验主节点和辅助副本是否同步。

          # /usr/symcli/bin/symrdf -g group-name verify -synchronized

6. 在原先具有主副本的节点上重复步骤 5 的所有内容。

###### 接下来的操作

给 EMC SRDF 复制设备配置了设备组之后，您必须配置该复制设备所使用的设备标识符 (device identifier, DID) 驱动程序。

# 如何使用 EMC SRDF 给复制配置 DID 设备

该过程将配置复制设备所使用的设备标识符 (device identifier, DID) 驱动程序。

###### 开始之前

`phys-schost#` 提示符表示全局群集提示符。此操作过程适用于全局群集。

此过程提供了 Oracle Solaris Cluster 命令的长格式。此外，大多数命令还有简短格式。这些命令除了名称长短的不同以外，其功能都是相同的。

1. 在群集的任意一个节点上，成为超级用户或成为可提供 `solaris.cluster.modify` RBAC 授权的角色。
2. 确定对应于已配置 RDF1 和 RDF2 设备的 DID 设备。

       # /usr/symcli/bin/symdg show group-name

   注 - 如果系统不显示整个 Oracle Solaris 设备修补程序，请将环境变量 `SYMCLI_FULL_PDEVNAME` 设置为 1，然后重新键入 `symdg -show` 命令。

3. 确定对应于 Oracle Solaris 设备的 DID 设备。

       # cldevice list -v

4. 对于每对匹配的 DID 设备，将实例组合到单个复制 DID 设备中。从 RDF2/辅助端运行以下命令。

       # cldevice combine -t srdf -g replication-device-group \ -d destination-instance source-instance

   注 - SRDF 数据复制设备不支持 `-T` 选项。

   -t replication-type

     指定复制类型。对于 EMC SRDF，键入 `SRDF`。

   -g replication-device-group

     指定设备组的名称，如 `symdg show` 命令中所示。

   -d destination-instance

     指定对应于 RDF1 设备的 DID 实例。

   source-instance

     指定对应于 RDF2 设备的 DID 实例。

   注 - 如果组合了错误的 DID 设备，请使用带有 `-b` 选项的 `scdidadm` 命令取消对两个 DID 设备的组合。

       # scdidadm -b device

   `-b` device

     组合实例时对应于 destination_device 的 DID 实例。

5. 如果复制设备组的名称发生更改，则对于 Hitachi TrueCopy 和 SRDF，需要执行其他步骤。在完成步骤 1 到 4 之后，请执行适当的附加步骤。

   项 | 描述
   --- | ---
   TrueCopy | 如果复制设备组（以及相应的全局设备组）的名称发生更改，必须重新运行 `cldevice replicate` 命令以更新复制的设备信息。
   SRDF | 如果复制设备组（以及相应的全局设备组）的名称发生更改，必须先使用 `scdidadm` `-b` 命令删除现有的信息来更新已复制的设备信息。最后一步是使用 `cldevice combine` 命令创建一个新的更新设备。

6. 检验是否已组合 DID 实例。

       # cldevice list -v device

7. 检验是否已设置 SRDF 复制。

       # cldevice show device

8. 在所有节点上，检验所有组合 DID 实例所对应的 DID 设备是否均可访问。

       # cldevice list -v

###### 接下来的操作

配置复制设备所使用的设备标识符 (device identifier, DID) 之后，必须检验 EMC SRDF 复制全局设备组配置。

# 如何检验 EMC SRDF 复制全局设备组配置

###### 开始之前

在检验全局设备组之前，必须先创建它。可使用 Solaris Volume Manager、Veritas Volume Manager、ZFS 或原始磁盘的设置组。有关更多信息，请参考以下内容：

- 如何添加和注册设备组 (Solaris Volume Manager)

- 如何添加并注册设备组（原始磁盘）

- 如何添加并注册复制设备组 (ZFS)

- 如何在初始化磁盘时创建新磁盘组 (Veritas Volume Manager)

| 注意 - 您创建的 Oracle Solaris Cluster 设备组（Solaris Volume Manager、Veritas Volume Manager 或原始磁盘）必须与所复制的设备组同名。

`phys-schost#` 提示符表示全局群集提示符。此操作过程适用于全局群集。

此过程提供了 Oracle Solaris Cluster 命令的长格式。此外，大多数命令还有简短格式。这些命令除了名称长短的不同以外，其功能都是相同的。

1. 检验主设备组是否对应于包含主副本的同一节点。

       # symdg -show group-name
       # cldevicegroup status -n nodename group-name

2. 尝试执行切换，确保设备组已正确配置，而且，副本可在节点之间移动。

   如果设备组处于脱机状态，请使其联机。

       # cldevicegroup switch -n nodename group-name

   `-n` nodename

     设备组被切换到的节点。该节点将成为新的主节点。

3. 通过比较以下命令的输出内容检验切换操作是否成功。

       # symdg -show group-name
       # cldevicegroup status -n nodename group-name

##### 示例：为 Oracle Solaris Cluster 配置 SRDF 复制组

本示例用于完成在群集中设置 SRDF 复制所需执行的特定于 Oracle Solaris Cluster 的步骤。本示例假定您已执行以下任务：

- 已针对阵列间的复制完成 LUN 配对。

- 在存储设备和群集节点上安装了 SRDF 软件。

本示例涉及一个四节点群集，其中两个节点连接到一个 symmetrix，另外两个节点连接到第二个 symmetrix。SRDF 设备组名为 `dg1`。

示例 5-15 创建副本对

在所有节点上运行以下命令。

    # symcfg discover
    ! This operation might take up to a few minutes.
    # symdev list pd

    Symmetrix ID: 000187990182

            Device Name          Directors                   Device
    --------------------------- ------------ --------------------------------------
                                                                               Cap
    Sym  Physical               SA :P DA :IT  Config        Attribute    Sts   (MB)
    --------------------------- ------------- -------------------------------------

    0067 c5t600604800001879901* 16D:0 02A:C1  RDF2+Mir      N/Grp'd      RW    4315
    0068 c5t600604800001879901* 16D:0 16B:C0  RDF1+Mir      N/Grp'd      RW    4315
    0069 c5t600604800001879901* 16D:0 01A:C0  RDF1+Mir      N/Grp'd      RW    4315
    ...

在 RDF1 端的所有节点上，键入：

    # symdg -type RDF1 create dg1
    # symld -g dg1 add dev 0067

在 RDF2 端的所有节点上，键入：

    # symdg -type RDF2 create dg1
    # symld -g dg1 add dev 0067

示例 5-16 检验数据复制设置

从群集中的一个节点上，键入：

    # symdg show dg1

    Group Name:  dg1

        Group Type                                   : RDF1     (RDFA)
        Device Group in GNS                          : No
        Valid                                        : Yes
        Symmetrix ID                                 : 000187900023
        Group Creation Time                          : Thu Sep 13 13:21:15 2007
        Vendor ID                                    : EMC Corp
        Application ID                               : SYMCLI

        Number of STD Devices in Group               :    1
        Number of Associated GK's                    :    0
        Number of Locally-associated BCV's           :    0
        Number of Locally-associated VDEV's          :    0
        Number of Remotely-associated BCV's (STD RDF):    0
        Number of Remotely-associated BCV's (BCV RDF):    0
        Number of Remotely-assoc'd RBCV's (RBCV RDF) :    0

        Standard (STD) Devices (1):
            {
            --------------------------------------------------------------------
                                                          Sym               Cap
            LdevName              PdevName                Dev  Att. Sts     (MB)
            --------------------------------------------------------------------
            DEV001                /dev/rdsk/c5t6006048000018790002353594D303637d0s2 0067      RW      4315
            }

        Device Group RDF Information
    ...
    # symrdf -g dg1 establish

    Execute an RDF 'Incremental Establish' operation for device
    group 'dg1' (y/[n]) ? y

    An RDF 'Incremental Establish' operation execution is
    in progress for device group 'dg1'. Please wait...

        Write Disable device(s) on RA at target (R2)..............Done.
        Suspend RDF link(s).......................................Done.
        Mark target (R2) devices to refresh from source (R1)......Started.
        Device: 0067 ............................................ Marked.
        Mark target (R2) devices to refresh from source (R1)......Done.
        Merge device track tables between source and target.......Started.
        Device: 0067 ............................................ Merged.
        Merge device track tables between source and target.......Done.
        Resume RDF link(s)........................................Started.
        Resume RDF link(s)........................................Done.

    The RDF 'Incremental Establish' operation successfully initiated for
    device group 'dg1'.

    #
    # symrdf -g dg1 query

    Device Group (DG) Name             : dg1
    DG's Type                          : RDF2
    DG's Symmetrix ID                  : 000187990182

           Target (R2) View                 Source (R1) View     MODES
    --------------------------------    ------------------------ ----- ------------
                 ST                  LI      ST
    Standard      A                   N       A
    Logical       T  R1 Inv   R2 Inv  K       T  R1 Inv   R2 Inv       RDF Pair
    Device  Dev   E  Tracks   Tracks  S Dev   E  Tracks   Tracks MDA   STATE
    -------------------------------- -- ------------------------ ----- ------------

    DEV001  0067 WD       0        0 RW 0067 RW       0        0 S..   Synchronized

    Total          -------- --------           -------- --------
      MB(s)             0.0      0.0                0.0      0.0

    Legend for MODES:

     M(ode of Operation): A = Async, S = Sync, E = Semi-sync, C = Adaptive Copy
     D(omino)           : X = Enabled, . = Disabled
     A(daptive Copy)    : D = Disk Mode, W = WP Mode, . = ACp off

    #

示例 5-17 显示与已用磁盘相对应的 DID

对 RDF1 和 RDF2 端执行相同的过程。

可以在 `dymdg show dg` 命令输出的 PdevName 字段下查看。

在 RDF1 端，键入：

    # symdg show dg1

    Group Name:  dg1

        Group Type                                   : RDF1     (RDFA)
    ...
        Standard (STD) Devices (1):
            {
            --------------------------------------------------------------------
                                                          Sym               Cap
            LdevName              PdevName                Dev  Att. Sts     (MB)
            --------------------------------------------------------------------
            DEV001                /dev/rdsk/c5t6006048000018790002353594D303637d0s2 0067      RW      4315
            }

        Device Group RDF Information
    ...

要获取对应的 DID，请键入：

    # scdidadm -L | grep c5t6006048000018790002353594D303637d0
    217      pmoney1:/dev/rdsk/c5t6006048000018790002353594D303637d0 /dev/did/rdsk/d217
    217      pmoney2:/dev/rdsk/c5t6006048000018790002353594D303637d0 /dev/did/rdsk/d217
    #

要列出对应的 DID，请键入：

    # cldevice show d217

    === DID Device Instances ===

    DID Device Name:                                /dev/did/rdsk/d217
      Full Device Path:                                pmoney2:/dev/rdsk/c5t6006048000018790002353594D303637d0
      Full Device Path:                                pmoney1:/dev/rdsk/c5t6006048000018790002353594D303637d0
      Replication:                                     none
      default_fencing:                                 global

    #

在 RDF2 端，键入：

可以在 `dymdg show dg` 命令输出的 PdevName 字段下查看。

    # symdg show dg1

    Group Name:  dg1

        Group Type                                   : RDF2     (RDFA)
    ...
        Standard (STD) Devices (1):
            {
            --------------------------------------------------------------------
                                                          Sym               Cap
            LdevName              PdevName                Dev  Att. Sts     (MB)
            --------------------------------------------------------------------
            DEV001                /dev/rdsk/c5t6006048000018799018253594D303637d0s2 0067      WD      4315
            }

        Device Group RDF Information
    ...

要获取对应的 DID，请键入：

    # scdidadm -L | grep c5t6006048000018799018253594D303637d0
    108      pmoney4:/dev/rdsk/c5t6006048000018799018253594D303637d0 /dev/did/rdsk/d108
    108      pmoney3:/dev/rdsk/c5t6006048000018799018253594D303637d0 /dev/did/rdsk/d108
    #

要列出对应的 DID，请键入：

    # cldevice show d108

    === DID Device Instances ===

    DID Device Name:            /dev/did/rdsk/d108
      Full Device Path:               pmoney3:/dev/rdsk/c5t6006048000018799018253594D303637d0
      Full Device Path:               pmoney4:/dev/rdsk/c5t6006048000018799018253594D303637d0
      Replication:                    none
      default_fencing:                global

    #

示例 5-18 组合 DID 实例

从 RDF2 端，键入：

    # cldevice combine -t srdf -g dg1 -d d217 d108
    #

示例 5-19 显示组合后的 DID

从群集中的任何节点上，键入：

    # cldevice show d217 d108
    cldevice:  (C727402) Could not locate instance "108".

    === DID Device Instances ===

    DID Device Name:                                /dev/did/rdsk/d217
      Full Device Path:                                pmoney1:/dev/rdsk/c5t6006048000018790002353594D303637d0
      Full Device Path:                                pmoney2:/dev/rdsk/c5t6006048000018790002353594D303637d0
      Full Device Path:                                pmoney4:/dev/rdsk/c5t6006048000018799018253594D303637d0
      Full Device Path:                                pmoney3:/dev/rdsk/c5t6006048000018799018253594D303637d0
      Replication:                                     srdf
      default_fencing:                                 global

    #

# 如何在主工作间彻底故障后恢复 EMC SRDF 数据

此过程可在校园群集的主工作间彻底失败、故障转移至辅助工作间并且主工作间重新联机后，执行数据恢复。校园群集的主工作间是主要节点和存储站点。工作间彻底故障是指该工作间内的主机和存储同时故障。如果主工作间发生故障，Oracle Solaris Cluster 会自动故障转移至辅助工作间，使辅助工作间的存储设备可读写，并启用相应设备组和资源组的故障转移。

主工作间重新联机后，可手动从 SRDF 设备组恢复被写入至辅助工作间的数据，并重新同步数据。此过程可通过将原辅助工作间（此过程使用 phys-campus-2 作为辅助工作间）中的数据同步至原主工作间 (phys-campus-1)，以恢复 SRDF 设备组。此过程还会将 phys-campus-2 和 phys-campus-1 上的 SRDF 设备组类型分别更改为 RDF1 和 RDF2。

###### 开始之前

在执行手动故障转移之前，必须先配置 EMC 复制组和 DID 设备，并注册 EMC 复制组。有关创建 Solaris Volume Manager 设备组的信息，请参见如何添加和注册设备组 (Solaris Volume Manager)。有关创建 Veritas Volume Manager 设备组的信息，请参见如何在封装磁盘时创建新磁盘组 (Veritas Volume Manager)。

注 - 这些说明演示了一种在主工作间完成故障转移并重新联机后手动恢复 SRDF 数据的方法。有关其他方法，请查阅 EMC 文档。

登录校园群集的主工作间以执行这些步骤。在上述过程中，dg1 为 SRDF 设备组名称。发生故障时，此过程中的主工作间为 phys-campus-1，辅助工作间为 phys-campus-2。

1. 登录校园群集的主工作间，并成为超级用户或成为可提供 `solaris.cluster.modify` RBAC 授权的角色。
2. 从主工作间中，使用 `symrdf` 命令查询 RDF 设备的复制状态并查看有关这些设备的信息。

       phys-campus-1# symrdf -g dg1 query

   提示 - 处于 `split` 状态的设备组未同步。

3. 如果 RDF 对的状态为 split，且设备组类型为 RDF1，则强制执行 SRDF 设备组的故障转移。

       phys-campus-1# symrdf -g dg1 -force failover

4. 查看 RDF 设备的状态。

       phys-campus-1# symrdf -g dg1 query

5. 故障转移完成后，可交换位于执行故障转移的设备上的数据。

       phys-campus-1# symrdf -g dg1 swap

6. 检验 RDF 设备的状态及其他相关信息。

       phys-campus-1# symrdf -g dg1 query

7. 在主工作间中建立 SRDF 设备组。

       phys-campus-1# symrdf -g dg1 establish

8. 确认设备组处于同步状态，且设备组类型为 RDF2。

       phys-campus-1# symrdf -g dg1 query

示例 5-20 主站点故障转移后手动恢复 EMC SRDF 数据

本示例提供在校园群集的主工作间发生故障转移、辅助工作间进行接管并记录数据，随后主工作间重新联机后，手动恢复 EMC SRDF 数据所必需的 Oracle Solaris Cluster 特定步骤。在本示例中，SRDF 设备组名为 dg1，标准逻辑设备为 DEV001。发生故障时，主工作间为 phys-campus-1，辅助工作间为 phys-campus-2。从校园群集的主工作间 phys-campus-1 中执行这些步骤。

    phys-campus-1# symrdf -g dg1 query | grep DEV
    DEV001 0012RW  0  0NR 0012RW  2031   O S.. Split

    phys-campus-1# symdg list | grep RDF
    dg1 RDF1  Yes  00187990182  1  0  0  0  0

    phys-campus-1# symrdf -g dg1 -force failover
    ...

    phys-campus-1# symrdf -g dg1 query | grep DEV
    DEV001  0012  WD  0  0 NR 0012 RW  2031  O S..  Failed Over

    phys-campus-1# symdg list | grep RDF
    dg1  RDF1  Yes  00187990182  1  0  0  0  0

    phys-campus-1# symrdf -g dg1 swap
    ...

    phys-campus-1# symrdf -g dg1 query | grep DEV
    DEV001  0012 WD  0  0 NR 0012 RW  0  2031 S.. Suspended

    phys-campus-1# symdg list | grep RDF
    dg1  RDF2  Yes  000187990182  1  0  0  0  0

    phys-campus-1# symrdf -g dg1 establish
    ...

    phys-campus-1# symrdf -g dg1 query | grep DEV
    DEV001  0012 WD  0  0 RW 0012 RW  0  0 S.. Synchronized

    phys-campus-1# symdg list | grep RDF
    dg1  RDF2  Yes  000187990182  1  0  0  0  0

版权所有 © 2000, 2010, Oracle 和/或其附属公司。 保留所有权利。 法律声明 |