要升级地理数据库功能,您可以先创建一个 ArcGIS Server 10.4.1 for Amazon Web Services (AWS) 实例,将数据移至新的地理数据库,再重新发布服务,或者您可以先更新现有 AWS 实例上的 ArcGIS 软件,再升级地理数据库。
以下部分介绍有关如何将地理数据库升级至最新可用状态的方法以及何时使用每种方法。
创建一个 ArcGIS 10.4.1 for AWS 实例,并移动旧实例中的数据
获取所有 ArcGIS 和 PostgreSQL 最新版本的最简单方法是先在最新的 Amazon 机器映像 (AMI) 中创建一个 ArcGIS Server for AWS 实例,移动数据,再重新发布服务。有关在最新的 ArcGIS Server AMI 中有哪些软件和操作系统版本的信息,请参阅 ArcGIS Server AMI。
有关移动数据的信息,请参阅向 Amazon Web Services 传输数据的策略中的“用于将数据传输到云中的选项”。
如果使用的是带有 PostgreSQL 数据的 ArcGIS Server 10 AWS 实例,则必须使用此方法升级地理数据库。同样,如果您想要将数据移动到 Amazon Relational Database Service (RDS) for PostgreSQL 实例,必须创建新的实例,移动数据并重新发布服务。
从 10 实例移动到 10.4.1 实例
在 ArcGIS 10 中,有一个单独的企业级地理数据库 AMI,它包含了 Windows 上的 PostgreSQL 8.3.8 数据库集群。在 ArcGIS 10.4.1 中,ArcGIS Server (Linux) with PostgreSQL AMI 运行 Ubuntu Linux,并可以选择包含 PostgreSQL 9.3.10 数据库集群。不能从 Windows 上的 PostgreSQL 数据库直接移动到 Linux 上的数据库。您也不能将 ArcGIS 10 Server 升级至 ArcGIS 10.4.1 for Server,因此,如果要从 ArcGIS 10 Server for AWS 迁移到 ArcGIS 10.4.1 Server for AWS,则必须移动或重新加载数据并重新发布。
从 10.1、10.2.x、10.3.x 实例移动到 10.4.1 实例
ArcGIS Server AMI 所包含的 PostgreSQL 版本随着时间的推移而发生变化。下表列出了每个 Linux AMI 所包含的 PostgreSQL 版本:
含 PostgreSQL AMI 的 ArcGIS Server (Linux) | 包括 PostgreSQL 版本 |
---|---|
ArcGIS 10.1 | 9.0.5 |
ArcGIS 10.2 | 9.0.13 |
ArcGIS 10.2.1 和 10.2.2 | 9.2.4 |
ArcGIS 10.3 | 9.3.4 |
ArcGIS 10.3.1 | 9.3.6 |
ArcGIS 10.4.x | 9.3.10 |
如果想使用 PostgreSQL 9.3.10,则可将您的数据移至 ArcGIS Server 10.4.x for AWS。请注意 PostgreSQL 不再支持其数据库管理系统的 9.0.x 版本,因此您应该启动较新的实例并移动数据,或在现有实例上升级 PostgreSQL。请遵照 PostgreSQL 文档中的说明来升级 PostgreSQL。
更新现有 AWS 实例上的 ArcGIS 软件并升级地理数据库
如果您所安装的 ArcGIS Server 版本与实例上的 PostgreSQL 版本兼容,则可先在现有实例上安装最新版本的 ArcGIS Server,升级 PostgreSQL 中的地理数据库,再继续使用现有的数据和服务。但请注意,这意味着实例上的操作系统和所有其他软件仍为创建实例时的版本。例如,如果是在 ArcGIS Server 10.2.2 for AWS AMI 中创建的实例,则将继续使用 Ubuntu 12.04 操作系统上的 PostgreSQL 9.2.4 数据库。
如果实例上的现有 PostgreSQL 版本与 ArcGIS Server 的新版本不兼容,您还需要将 PostgreSQL 升级到支持的版本。例如,如果您启动了 ArcGIS 10.2 实例,并希望在该实例上升级到 ArcGIS 10.4.1 for Server,则您必须同时将 PostgreSQL 升级到受支持的版本。
下面两节介绍如何在现有 ArcGIS Server AWS 实例中升级 PostgreSQL 中的地理数据库。(这些说明不适用于 Amazon RDS for PostgreSQL 中的地理数据库。)
更新现有 ArcGIS Server for AWS 实例中的 ArcGIS Server 并升级 SITEHOST 上的地理数据库
如果您想要更新 ArcGIS Server for AWS 实例,请按照本部分中的步骤升级与 ArcGIS Server (SITEHOST) 位于同一实例上的 PostgreSQL 中的地理数据库。
更新 ArcGIS for Server,将新的 st_geometry.so 文件移至 PostgreSQL lib 目录,停止 ArcGIS Server,运行 Python 脚本升级每个地理数据库,然后重新启动 ArcGIS Server。
- 在 AWS 实例上安装最新版本的 ArcGIS for Server。
如果尚未安装此软件,请参阅将 ArcGIS 更新应用于单机站点或将 ArcGIS 更新应用于 Ubuntu 多机站点了解相关说明。
- 在升级地理数据库之前,请对其进行备份。最简单的备份方法是创建 Cloud Builder 站点备份(如果您使用了 Cloud Builder 创建站点),或创建包含数据的 EBS 卷的快照。如果您想要创建 EBS 卷快照,请参阅 Amazon Web Services 文档以获取相关说明。
- 同样,升级前您必须将 st_geometry.so 文件从 /arcgis/server/DatabaseSupport/PostgreSQL/Linux64 复制到 /usr/lib/postgresql/<postgresql version>/lib。
- st_geometry.so 文件为根用户所拥有;因此,以 ubuntu 身份连接到 Amazon Web Services SITEHOST 实例之后,将用户转换到根用户:
sudo su -
注:
请注意,您不能以 arcgis 用户身份连接及切换为根用户。
- 复制新文件之前,重命名旧文件。
mv /usr/lib/postgresql/<postgresql version>/lib/st_geometry.so /usr/lib/postgresql/<postgresql version>/lib/st_geometryOLD.so
- 复制新的 st_geometry.so 文件。
cp /arcgis/server/DatabaseSupport/PostgreSQL/Linux64/st_geometry.so /usr/lib/postgresql/<postgresql version>/lib
- 更改 st_geometry.so 文件的权限,以允许其他用户读取和执行该文件。
chmod 755 /usr/lib/postgresql/<postgresql version>/lib/st_geometry.so
- st_geometry.so 文件为根用户所拥有;因此,以 ubuntu 身份连接到 Amazon Web Services SITEHOST 实例之后,将用户转换到根用户:
- 切换到 arcgis 用户。
su - arcgis
- 打开文本编辑器,创建升级 Python 脚本。
vi upgrade.py
- 将以下脚本复制到文本编辑器中。
将脚本更改为使用特定于您站点的信息,包括实例名称、sde 密码、连接文件名称和位置以及数据库名称。
#Import arcpy module import arcpy # Create connection file arcpy.CreateDatabaseConnection_management("/tmp","egdb_connection.sde","POSTGRESQL","ec2-123-456-789-100.compute-1.amazonaws.com","DATABASE_AUTH", "sde", "E$ri3774", "SAVE_USERNAME", "egdb") # Upgrade geodatabase arcpy.UpgradeGDB_management("/tmp/egdb_connection.sde", "PREREQUISITE_CHECK", "UPGRADE")
- 保存文件并关闭文本编辑器。
- 停止 ArcGIS Server。
/arcgis/server/stopserver.sh
- 在 Python 中运行脚本。
/arcgis/server/tools/python <path to the file>/upgrade.py
您可能会看到多个有关类型引用的通知。您可以忽略这些通知,它们并不表示升级失败。
如果升级失败,则信息将写入 /arcgis/server/framework/runtime/.wine/drive_c/users/arcgis/LocalAppData/ESRI/Server<#> 中的 GDBUpgrade.log。
- 运行 Python 中的以下步骤以确保更新地理数据库。使用您的连接文件位置和名称替换 /tmp/egdb_connection.sde。
首先,打开 arcpy 提示符。
cd /arcgis/server/tools ./python
使用 isCurrent 确定地理数据库是否已升级到当前版本。
import arcpy isCurrent = arcpy.Describe('/tmp/egdb_connection.sde').currentRelease print isCurrent
如果 print isCurrent 返回 True,则地理数据库已升级。
- 要退出 arcpy 提示符,输入 quit()。
- 更改脚本并再次为需要升级的每个地理数据库运行该脚本。
- 如果需要将 PostgreSQL 升级到支持的版本,请创建数据库备份,然后继续升级 PostgreSQL。如何升级 PostgreSQL 取决于 PostgreSQL 的当前版本和要升级到的版本。有关说明,请参阅 PostgreSQL 文档。
- 升级完所有地理数据库后(以及数据库,如有必要),重新启动 ArcGIS Server。
/arcgis/server/startserver.sh
如果是多机站点,请继续执行将 ArcGIS 更新应用于 Ubuntu 多机站点中的步骤 11。
更新现有 ArcGIS Server for AWS 实例中的 ArcGIS Server 并升级其自身 AWS 实例 (EGDBHOST) 上的地理数据库
如果您想要更新 ArcGIS Server for AWS 实例,请按照本部分中的步骤升级其自身专用的 AWS 实例 (EGDBHOST) 上的 PostgreSQL 中的地理数据库。
更新 SITEHOST 上的 ArcGIS for Server,将新的 st_geometry.so 文件从 SITEHOST 移至 EGDBHOST 上的 PostgreSQL lib 目录,停止 ArcGIS Server,从 SITEHOST 运行 Python 脚本升级每个地理数据库,然后重新启动 ArcGIS Server。
- 在 AWS 实例上安装新版本的 ArcGIS for Server。
了解相关说明,请参阅将 ArcGIS 更新应用于单机站点或将 ArcGIS 更新应用于 Ubuntu 多机站点。
- 在升级地理数据库之前,请对其进行备份。执行此操作的最简单方法是创建包含数据的 EBS 卷的快照。有关创建 EBS 卷快照的操作说明,请参阅 Amazon Web Services 文档。
- 同样,升级前您必须将 st_geometry.so 文件从 /arcgis/server/DatabaseSupport/PostgreSQL/Linux64 复制到 /usr/lib/postgresql/<postgresql version>/lib。
- 复制新文件之前,请重命名 EGDBHOST 上的旧文件。由于 st_geometry.so 文件为根用户所拥有,因此以 ubuntu 身份登录到 EGDBHOST,然后切换为根用户。
sudo su - mv /usr/lib/postgresql/<postgresql version>/lib/st_geometry.so /usr/lib/postgresql/<postgresql version>/lib/st_geometryOLD.so
- 您必须将 st_geometry.so 文件从 SITEHOST 上的 /arcgis/server/DatabaseSupport/PostgreSQL/Linux64 移至 EGDBHOST 上的 /usr/lib/postgresql/<postgresql version>/lib。
由于这两个位于不同实例上的源和目标目录无法由同一用户访问,因此以 arcgis 用户身份登录到 SITEHOST,然后将文件复制到 EGDBHOST 上的 gisdata 目录中。
cp /arcgis/server/DatabaseSupport/PostgreSQL/Linux64/st_geometry.so /net/EGDBHOST/gisdata/st_geometry.so
- 以 ubuntu 身份登录到 EGDBHOST。
- 切换为根用户。
sudo su -
- 将 st_geometry.so 文件从 gisdata 复制到 /usr/lib/postgresql/<postgresql version>/lib。
cp /gisdata/st_geometry.so /usr/lib/postgresql/<postgresql version>/lib/st_geometry.so
- 更改 st_geometry.so 文件的权限,以允许其他用户读取和执行该文件。
chmod 755 /usr/lib/postgresql/<postgresql version>/lib/st_geometry.so
- 复制新文件之前,请重命名 EGDBHOST 上的旧文件。由于 st_geometry.so 文件为根用户所拥有,因此以 ubuntu 身份登录到 EGDBHOST,然后切换为根用户。
- 以 arcgis 用户身份登录到 SITEHOST。
- 打开文本编辑器,创建升级 Python 脚本。
例如:
vi upgrade.py
- 将以下脚本复制到文本编辑器中。
将脚本更改为使用特定于您站点的信息,包括实例名称、sde 密码、连接文件名称和位置以及数据库名称。
#Import arcpy module import arcpy # Create connection file arcpy.CreateDatabaseConnection_management("/tmp","egdb_connection.sde","POSTGRESQL","ec2-123-456-789-100.compute-1.amazonaws.com","DATABASE_AUTH", "sde", "E$ri3774", "SAVE_USERNAME", "egdb") # Upgrade geodatabase arcpy.UpgradeGDB_management("/tmp/egdb_connection.sde", "PREREQUISITE_CHECK", "UPGRADE")
- 保存文件并关闭文本编辑器。
- 停止 ArcGIS Server。
/arcgis/server/stopserver.sh
- 在 Python 中运行脚本。
/arcgis/server/tools/python <path to the file>/upgrade.py
您可能会看到多个有关类型引用的通知。您可以忽略这些消息。
如果升级失败,则信息将写入 /arcgis/server/framework/runtime/.wine/drive_c/users/arcgis/LocalAppData/ESRI/Server<#> 中的 GDBUpgrade.log。
- 为确保地理数据库的升级,请打开 Python 并运行以下内容,同时将 /tmp/egdb_connection.sde 替换为您的连接文件的位置和名称。
首先,打开 arcpy 提示符。
cd /arcgis/server/tools ./python
使用 isCurrent 确定地理数据库是否已升级到当前版本。
import arcpy isCurrent = arcpy.Describe('/tmp/egdb_connection.sde').currentRelease print isCurrent
如果 print isCurrent 返回 True,则地理数据库已升级。
- 要退出 arcpy 提示符,输入 quit()。
- 更改 upgrade.py 脚本并再次为需要升级的每个地理数据库运行该脚本。
- 如果需要将 PostgreSQL 升级到支持的版本,请创建数据库备份,然后继续升级 PostgreSQL。如何升级 PostgreSQL 取决于 PostgreSQL 的当前版本和要升级到的版本。有关说明,请参阅 PostgreSQL 的文档。
- 升级完所有地理数据库后(以及数据库,如有必要),重新启动 ArcGIS Server。
/arcgis/server/startserver.sh
如果是多机站点,请继续执行将 ArcGIS 更新应用于 Ubuntu 多机站点中的步骤 11。