

# 在 RDS for SQL Server 和 Amazon S3 之间传输文件
<a name="Appendix.SQLServer.Options.S3-integration.using"></a>

您可以使用 Amazon RDS 存储过程在 Amazon S3 和 RDS 数据库实例之间下载和上传文件。您还可以使用 Amazon RDS 存储过程来列出和删除 RDS 实例上的文件。

您从 S3 下载和上传到 S3 的文件存储在 `D:\S3` 文件夹中。这是可用于访问文件的唯一文件夹。您可以将文件组织到子文件夹中，这些子文件夹是您在下载过程中包含目标文件夹时为您创建的。

某些存储过程要求您向 &S3 存储桶和文件提供 Amazon Resource Name (ARN)。您的 ARN 的格式为 `arn:aws:s3:::amzn-s3-demo-bucket/file_name`。Amazon S3 不需要在 ARN 中使用账号或AWS区域。

S3 集成任务按顺序运行，并且与本机备份和还原任务共用同一队列。在此队列中，任何时候最多只能有两个正在进行的任务。任务可能需要长达五分钟时间才能开始处理。

## 将文件从 Amazon S3 存储桶下载到 SQL Server 数据库实例
<a name="Appendix.SQLServer.Options.S3-integration.using.download"></a>

要将文件从 S3 存储桶下载到 RDS for SQL Server 数据库实例，请使用具有以下参数的 Amazon RDS 存储过程 `msdb.dbo.rds_download_from_s3`。


| 参数名称 | 数据类型 | 默认值 | 必需 | 描述 | 
| --- | --- | --- | --- | --- | 
|  `@s3_arn_of_file`  |  NVARCHAR  |  –  |  必需  |  要下载的文件的 S3 ARN，例如：`arn:aws:s3:::amzn-s3-demo-bucket/mydata.csv`  | 
|  `@rds_file_path`  |  NVARCHAR  |  –  |  可选  |  RDS 实例的文件路径。如果未指定，则文件路径为 `D:\S3\<filename in s3>`。RDS 支持绝对路径和相对路径。如果要创建子文件夹，请将其包含在文件路径中。  | 
|  `@overwrite_file`  |  INT  |  0  |  可选  | 覆盖现有文件： 0 = 不覆盖 1 = 覆盖 | 

您可以下载不带文件扩展名的文件和具有以下文件扩展名的文件：.bcp、.csv、.dat、.fmt、.info、.lst、.tbl、.txt 和 .xml。

**注意**  
启用 SQL Server Integration Services 时，支持下载具有 .ispac 文件扩展名的文件。有关启用 SSIS 的更多信息，请参阅[SQL Server Integration Services](Appendix.SQLServer.Options.SSIS.md)。  
启用 SQL Server Analysis Services 时，支持下载具有以下文件扩展名的文件：.abf、.asdatabase、.configsettings、.deploymentoptions、.deploymenttargets 和 .xmla。有关启用 SSAS 的更多信息，请参阅[SQL Server Analysis Services](Appendix.SQLServer.Options.SSAS.md)。

以下示例显示了从 S3 下载文件的存储过程。

```
exec msdb.dbo.rds_download_from_s3
	    @s3_arn_of_file='arn:aws:s3:::amzn-s3-demo-bucket/bulk_data.csv',
	    @rds_file_path='D:\S3\seed_data\data.csv',
	    @overwrite_file=1;
```

示例 `rds_download_from_s3` 操作在 `seed_data` 中创建一个名为 `D:\S3\` 的文件夹（如果该文件夹尚不存在）。然后，该示例将源文件 `bulk_data.csv` 从 S3 下载到数据库实例上名为 `data.csv` 的新文件。如果以前存在此文件，则会覆盖它，因为 `@overwrite_file` 参数设置为 `1`。

## 将文件从 SQL Server 数据库实例上传到 Amazon S3 存储桶
<a name="Appendix.SQLServer.Options.S3-integration.using.upload"></a>

要将文件从 RDS for SQL Server 数据库实例上传到 S3 存储桶，请使用具有以下参数的 Amazon RDS 存储过程 `msdb.dbo.rds_upload_to_s3`。


| 参数名称 | 数据类型 | 默认值 | 必需 | 描述 | 
| --- | --- | --- | --- | --- | 
|  `@s3_arn_of_file`  |  NVARCHAR  |  –  |  必需  |  要在 S3 中创建的文件的 S3 ARN，例如：`arn:aws:s3:::amzn-s3-demo-bucket/mydata.csv`  | 
|  `@rds_file_path`  |  NVARCHAR  |  –  |  必需  | 要上传到 S3 的文件的文件路径。支持绝对路径和相对路径。 | 
|  `@overwrite_file`  |  INT  |  –  |  可选  |  覆盖现有文件： 0 = 不覆盖 1 = 覆盖  | 

以下示例将名为 `data.csv` 的文件从 `D:\S3\seed_data\` 中的指定位置上传到 ARN 指定的 S3 存储桶中的 `new_data.csv` 文件。

```
exec msdb.dbo.rds_upload_to_s3 
		@rds_file_path='D:\S3\seed_data\data.csv',
		@s3_arn_of_file='arn:aws:s3:::amzn-s3-demo-bucket/new_data.csv',
		@overwrite_file=1;
```

如果 S3 中以前存在此文件，则会覆盖它，因为 @overwrite\$1file 参数设置为 `1`。