

# Características adicionales para Microsoft SQL Server en Amazon RDS
<a name="User.SQLServer.AdditionalFeatures"></a>

En las secciones siguientes, puede encontrar información acerca de cómo aumentar las instancias de Amazon RDS que ejecutan el motor de base de datos de Microsoft SQL Server.

**Topics**
+ [Uso de la política de contraseñas para inicios de sesión de SQL Server en RDS para SQL Server](SQLServer.Concepts.General.PasswordPolicy.Using.md)
+ [Integración de una instancia de base de datos de Amazon RDS for SQL Server con Amazon S3](User.SQLServer.Options.S3-integration.md)
+ [Uso de Database Mail en Amazon RDS for SQL Server](SQLServer.DBMail.md)
+ [Soporte del almacén de instancias para la base de datos tempdb en Amazon RDS for SQL Server](SQLServer.InstanceStore.md)
+ [Uso de eventos extendidos con Amazon RDS for Microsoft SQL Server](SQLServer.ExtendedEvents.md)
+ [Acceso a las copias de seguridad del registro de transacciones con RDS para SQL Server](USER.SQLServer.AddlFeat.TransactionLogAccess.md)

# Uso de la política de contraseñas para inicios de sesión de SQL Server en RDS para SQL Server
<a name="SQLServer.Concepts.General.PasswordPolicy.Using"></a>

Amazon RDS le permite configurar la política de contraseñas de su instancia de base de datos de Amazon RDS en la que se ejecuta Microsoft SQL Server. Utilícela para establecer los requisitos de complejidad, longitud y bloqueo para los inicios de sesión que utilizan la autenticación de SQL Server para autenticarse en su instancia de base de datos.

## Términos clave
<a name="SQLServer.Concepts.General.PasswordPolicy.Using.KT"></a>

**Login (Iniciar sesión)**  
En SQL Server, una entidad principal de servidor que puede autenticarse en una instancia de base de datos se denomina **inicio de sesión**. Otros motores de bases de datos pueden denominar esta entidad principal como *usuario*. En RDS para SQL Server, un inicio de sesión puede autenticarse mediante la autenticación de SQL Server o la autenticación de Windows.

**Inicio de sesión de SQL Server**  
Un inicio de sesión que utiliza un nombre de usuario y una contraseña para autenticarse mediante la autenticación de SQL Server es un inicio de sesión de SQL Server. La política de contraseñas que se configura mediante los parámetros de base de datos solo se aplica a los inicios de sesión de SQL Server.

**Inicio de sesión de Windows**  
Un inicio de sesión que se basa en una entidad principal de Windows y se autentica mediante la autenticación de Windows es un inicio de sesión de Windows. Puede configurar la política de contraseñas para los inicios de sesión de Windows en Active Directory. Para obtener más información, consulte [Uso de Active Directory con RDS para SQL Server](User.SQLServer.ActiveDirectoryWindowsAuth.md).

## Habilitación y deshabilitación de política para cada inicio de sesión
<a name="SQLServer.Concepts.General.PasswordPolicy.EnableDisable"></a>

 Cada inicio de sesión de SQL Server tiene marcadores para `CHECK_POLICY` y `CHECK_EXPIRATION`. De forma predeterminada, los nuevos inicios de sesión se crean con `CHECK_POLICY` establecido en `ON` y `CHECK_EXPIRATION` establecido en `OFF`. 

Si `CHECK_POLICY` está habilitada para un inicio de sesión, RDS para SQL Server valida la contraseña comparándola con los requisitos de complejidad y longitud mínima. También se aplican políticas de bloqueo. Un ejemplo de una instrucción de T-SQL para habilitar `CHECK_POLICY` y `CHECK_EXPIRATION`: 

```
ALTER LOGIN [master_user] WITH CHECK_POLICY = ON, CHECK_EXPIRATION = ON;
```

Si `CHECK_EXPIRATION` está habilitada, las contraseñas están sujetas a las políticas de antigüedad de las contraseñas. La instrucción de T-SQL para comprobar si `CHECK_POLICY` y `CHECK_EXPIRATION` están configuradas:

```
SELECT name, is_policy_checked, is_expiration_checked FROM sys.sql_logins;
```

## Parámetros de las políticas de contraseñas
<a name="SQLServer.Concepts.General.PasswordPolicy.PWDPolicyParams"></a>

Todos los parámetros de la política de contraseñas son dinámicos y no requieren que se reinicie la base de datos para que surtan efecto. La siguiente tabla muestra los parámetros de base de datos que puede configurar para modificar la política de contraseñas para los inicios de sesión de SQL Server:


****  

| Parámetro de base de datos | Descripción | Valores permitidos | Valor predeterminado | 
| --- | --- | --- | --- | 
| rds.password\$1complexity\$1enabled | Se deben cumplir los requisitos de complejidad de las contraseñas al crear o cambiar las contraseñas para los inicios de sesión de SQL Server. Se deben cumplir las siguientes restricciones: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/SQLServer.Concepts.General.PasswordPolicy.Using.html)  | 0,1 | 0 | 
| rds.password\$1min\$1length | El número mínimo de caracteres que debe tener una contraseña para un inicio de sesión de SQL Server. | 0-14 | 0 | 
| rds.password\$1min\$1age | El número mínimo de días que debe utilizarse una contraseña de inicio de sesión de SQL Server antes de que el usuario pueda cambiarla. Las contraseñas se pueden cambiar inmediatamente si se establece en 0. | 0-998 | 0 | 
| rds.password\$1max\$1age | El número máximo de días que se puede usar una contraseña de inicio de sesión de SQL Server tras los cuales el usuario debe cambiarla. Las contraseñas nunca caducan cuando se establece en 0. | 0-999 | 42 | 
| rds.password\$1lockout\$1threshold | El número de intentos de inicio de sesión fallidos consecutivos que provocan el bloqueo de un inicio de sesión de SQL Server. | 0-999 | 0 | 
| rds.password\$1lockout\$1duration | El número de minutos que debe esperar un inicio de sesión de SQL Server bloqueado antes de desbloquearse. | 1-60 | 10 | 
| rds.password\$1lockout\$1reset\$1counter\$1after | El número de minutos que deben transcurrir después de un intento de inicio de sesión fallido antes de que el contador de intentos de inicio de sesión fallidos se restablezca a 0. | 1-60 | 10 | 

**nota**  
Para obtener más información sobre la política de contraseñas de SQL Server, consulte [Política de contraseñas](https://learn.microsoft.com/en-us/sql/relational-databases/security/password-policy).   
Las políticas de complejidad y longitud mínima de las contraseñas también se aplican a los usuarios de bases de datos en bases de datos independientes. Para obtener más información, consulte [Bases de datos independientes](https://learn.microsoft.com/en-us/sql/relational-databases/databases/contained-databases).

Se aplican las siguientes limitaciones a los parámetros de las políticas de contraseñas:
+ El parámetro `rds.password_min_age` debe ser menor que `rds.password_max_age parameter`, a menos que `rds.password_max_age` esté establecido en 0
+ El parámetro `rds.password_lockout_reset_counter_after` debe ser igual o menor que el parámetro `rds.password_lockout_duration`.
+ Si `rds.password_lockout_threshold` está establecido en 0, `rds.password_lockout_duration` y `rds.password_lockout_reset_counter_after` no se aplican.

### Consideraciones sobre inicios de sesión existentes
<a name="SQLServer.Concepts.General.PasswordPolicy.ExistingLogins"></a>

Tras modificar la política de contraseñas en una instancia, las contraseñas existentes para los inicios de sesión **no** se evalúan retroactivamente en función de los nuevos requisitos de complejidad y longitud de las contraseñas. Solo las contraseñas nuevas se validan según la nueva política. 

SQL Server **evalúa** las contraseñas existentes en función de los requisitos de antigüedad.

Es posible que las contraseñas caduquen inmediatamente una vez que se modifique la política de contraseñas. Por ejemplo, si un inicio de sesión tiene habilitado `CHECK_EXPIRATION` y su contraseña se modificó por última vez hace 100 días, y establece el parámetro `rds.password_max_age` en 5 días, la contraseña caducará inmediatamente y el inicio de sesión tendrá que cambiar la contraseña la próxima vez que intente iniciar sesión.

**nota**  
RDS para SQL Server no admite políticas de historial de contraseñas. Las políticas de historial impiden que los inicios de sesión reutilicen las contraseñas que ya han utilizado anteriormente.

### Consideraciones para implementaciones Multi-AZ
<a name="SQLServer.Concepts.General.PasswordPolicy.MAZPasswords"></a>

El contador de intentos de inicio de sesión fallidos y el estado de bloqueo de las instancias multi-AZ no se replican entre nodos. En caso de que se bloquee un inicio de sesión debido a una conmutación por error en una instancia multi-AZ, es posible que el inicio de sesión ya esté desbloqueado en el nuevo nodo.

# Consideraciones sobre la contraseña para el inicio de sesión maestro
<a name="SQLServer.Concepts.General.PasswordPolicy.MasterLogin"></a>

Cuando se crea una instancia de base de datos de RDS para SQL Server, la contraseña del usuario maestro no se evalúa con respecto a la política sobre contraseñas. Una nueva contraseña maestra tampoco se evalúa con respecto a la contraseña al realizar operaciones con el usuario maestro, específicamente al configurar `MasterUserPassword` en el comando `ModifyDBInstance`. En ambos casos, puede establecer una contraseña para el usuario maestro que no cumpla su política de contraseñas y la operación seguirá realizándose correctamente. Si no se cumple la política, RDS intenta generar un evento de RDS con la recomendación de establecer una contraseña segura. Tenga cuidado y use solo contraseñas seguras para el usuario maestro. 

RDS intenta generar los siguientes mensajes de eventos cuando la contraseña del usuario maestro no cumple los requisitos de la política de contraseñas:
+ Se creó el usuario maestro, pero la contraseña no cumple el requisito de longitud mínima de su política de contraseñas. Plantéese utilizar una contraseña más segura.
+ Se creó el usuario maestro, pero la contraseña no cumple el requisito de complejidad de su política de contraseñas. Plantéese utilizar una contraseña más segura.
+ Se restableció el usuario maestro, pero la contraseña no cumple el requisito de longitud mínima de su política de contraseñas. Plantéese utilizar una contraseña más segura.
+ Se restableció el usuario maestro, pero la contraseña no cumple con el requisito de complejidad de su política de contraseñas. Plantéese utilizar una contraseña más segura.

De forma predeterminada, el usuario maestro se crea con `CHECK_POLICY` y `CHECK_EXPIRATION` ajustado en `OFF`. Para aplicar la política de contraseñas al usuario maestro, debe habilitar manualmente estos marcadores para el usuario maestro tras la creación de la instancia de base de datos. Tras habilitar estos marcadores, modifique la contraseña del usuario maestro directamente en SQL Server (por ejemplo, mediante instrucciones T-SQL o SSMS) para validar la nueva contraseña con respecto a la política de contraseñas.

**nota**  
Si el usuario maestro queda bloqueado, puede desbloquearlo restableciendo su contraseña mediante el comando `ModifyDBInstance`.

## Modificación de la contraseña del usuario principal
<a name="SQLServer.Concepts.General.PasswordPolicy.MasterLogin.Reset"></a>

Puede modificar la contraseña del usuario maestro mediante el comando [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html).

**nota**  
Al restablecer la contraseña del usuario maestro, RDS restablece varios permisos para el usuario maestro y este puede perder algunos permisos. Si se restablece la contraseña del usuario maestro, también se desbloquea al usuario maestro si estaba bloqueado.

RDS valida la nueva contraseña del usuario maestro e intenta emitir un evento de RDS si la contraseña no cumple la política. RDS establece la contraseña incluso si no cumple la política de contraseñas. 

# Integración de una instancia de base de datos de Amazon RDS for SQL Server con Amazon S3
<a name="User.SQLServer.Options.S3-integration"></a>

Puede transferir archivos entre una instancia de base de datos que se ejecuta en Amazon RDS for SQL Server y un bucket de Amazon S3. Al hacer esto, puede utilizar Amazon S3 con las características de SQL Server, por ejemplo, INSERCIÓN MASIVA. Por ejemplo, puede descargar archivos .csv, .xml, .txt y de otro tipo desde Amazon S3 al host de la instancia de base de datos e importar los datos desde `D:\S3\` a la base de datos. Todos los archivos se almacenan en `D:\S3\` en la instancia de base de datos.

Se aplican las siguientes restricciones:

**nota**  
El tráfico entre el host de RDS y S3 se enruta a través de los puntos de conexión de VPC en las VPC internas de RDS para todas las características de SQL Server que utilizan S3. Este tráfico no utiliza el ENI del punto de conexión de la instancia de RDS. Las políticas de bucket de S3 no pueden restringir el tráfico de RDS según las condiciones de la red.
+ Los archivos de la carpeta `D:\S3` se eliminan en la réplica en espera después de una conmutación por error en instancias multi-AZ. Para obtener más información, consulte [Limitaciones multi-AZ para la integración S3](#S3-MAZ).
+ La instancia de base de datos y el bucket de S3 deben estar en la misma región de AWS.
+ Si ejecuta más de una tarea de integración de S3 a la vez, las tareas se ejecutan secuencialmente, no en paralelo.
**nota**  
Las tareas de integración de S3 comparten la misma cola que las tareas nativas de copia de seguridad y restauración. Como máximo, solo puede tener dos tareas en curso en cualquier momento en esta cola. Por lo tanto, dos tareas nativas de copia de seguridad y restauración bloquearán cualquier tarea de integración de S3.
+ Tiene que volver a habilitar la característica de integración de S3 en las instancias restauradas. La integración de S3 no se propaga desde la instancia de origen a la instancia restaurada. Los archivos en `D:\S3` se eliminan en una instancia restaurada.
+ Las descargas a la instancia de base de datos tienen un límite de 100 archivos. En otras palabras, no puede haber más de 100 archivos en `D:\S3\`.
+ Sólo se admiten archivos sin extensiones de archivo o con las siguientes extensiones de archivo: .abf, .asdatabase, .bcp, .configsettings, .csv, .dat, .deploymentoptions, .deploymenttargets, .fmt, .info, .ispac, .lst, .tbl, .txt, .xml y .xmla.
+ El propietario del bucket de S3 debe ser el mismo que el del rol relacionado de AWS Identity and Access Management (IAM). Por lo tanto, no se admite la integración de S3 entre cuentas.
+ Además, el bucket de S3 no puede estar abierto al público.
+ El tamaño de archivo para cargas de RDS a S3 está limitado a 50 GB por archivo.
+ El tamaño de archivo para las descargas de S3 a RDS está limitado al máximo admitido por S3.

**Topics**
+ [Requisitos previos para la integración de RDS for SQL Server con S3](Appendix.SQLServer.Options.S3-integration.preparing.md)
+ [Habilitación de la integración de RDS for SQL Server con S3](Appendix.SQLServer.Options.S3-integration.enabling.md)
+ [Transferencia de archivos entre RDS for SQL Server y Amazon S3](Appendix.SQLServer.Options.S3-integration.using.md)
+ [Descripción de los archivos de la instancia de base de datos de RDS](Appendix.SQLServer.Options.S3-integration.using.listing-files.md)
+ [Eliminación de los archivos de la instancia de base de datos de RDS](Appendix.SQLServer.Options.S3-integration.using.deleting-files.md)
+ [Monitoreo del estado de una tarea de transferencia de archivos](Appendix.SQLServer.Options.S3-integration.using.monitortasks.md)
+ [Cancelación de una tarea](Appendix.SQLServer.Options.S3-integration.canceltasks.md)
+ [Limitaciones multi-AZ para la integración S3](#S3-MAZ)
+ [Desactivación de la integración de RDS for SQL Server con S3](Appendix.SQLServer.Options.S3-integration.disabling.md)

Para obtener más información sobre cómo trabajar con archivos en Amazon S3, consulte [Introducción a Amazon Simple Storage Service](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3).

# Requisitos previos para la integración de RDS for SQL Server con S3
<a name="Appendix.SQLServer.Options.S3-integration.preparing"></a>

Antes de comenzar, busque o cree el bucket de S3 que desea utilizar. También tiene que añadir los permisos para que la instancia de base de datos de RDS pueda acceder al bucket de S3. Para configurar este acceso, cree una política de IAM y un rol de IAM.

## Consola
<a name="Appendix.SQLServer.Options.S3-integration.preparing.console"></a>

**Para crear una política de IAM para acceder a Amazon S3**

1. En la [IAM Management Console](https://console.aws.amazon.com/iam/home?#home), seleccione **Policies (Políticas)** en el panel de navegación.

1. Cree una nueva política y utilice la pestaña **Visual editor (Editor visual)** para los siguientes pasos.

1. En **Service (Servicio)**, introduzca **S3** y, a continuación, seleccione el servicio de **S3**.

1. En **Actions (Acciones)**, seleccione los siguientes elementos para conceder el acceso que requiere la instancia de base de datos:
   + `ListAllMyBuckets`: obligatorio
   + `ListBucket`: obligatorio
   + `GetBucketAcl`: obligatorio
   + `GetBucketLocation`: obligatorio
   + `GetObject` – obligatorio para descargar archivos desde S3 a `D:\S3\`
   + `PutObject`: obligatorio para cargar archivos desde `D:\S3\` a S3
   + `ListMultipartUploadParts`: obligatorio para cargar archivos desde `D:\S3\` a S3
   + `AbortMultipartUpload`: obligatorio para cargar archivos desde `D:\S3\` a S3

1. En **Resources (Recursos)**, las opciones que aparecen varían en función de las acciones que seleccione en el paso anterior. Es posible que vea opciones para **bucket**, **object (objeto)** o para ambos. En cada una de ellas, añada el nombre de recurso de Amazon (ARN) adecuado.

   En **bucket**, añada el ARN del bucket que desea utilizar. Por ejemplo, si el bucket se denomina *amzn-s3-demo-bucket*, establezca el ARN en `arn:aws:s3:::amzn-s3-demo-bucket`.

   En **object (objeto)**, introduzca el ARN del bucket y, a continuación, seleccione una de las siguientes opciones:
   + Para conceder acceso a todos los archivos del bucket especificado, seleccione **Any (Cualquiera)** en **Bucket name (Nombre de bucket)** y **Object name (Nombre de objeto)**.
   + Para conceder acceso a carpetas o archivos específicos del bucket, facilite los ARN de los objetos y buckets específicos a los que desea que SQL Server acceda. 

1. Siga las instrucciones de la consola hasta que termine de crear la política.

   Se trata de una guía resumida para configurar una política. Para obtener instrucciones más detalladas acerca de la creación de políticas de IAM, consulte [Creación de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) en la *Guía del usuario de IAM.*

**Para crear un rol de IAM que utiliza la política de IAM del procedimiento anterior**

1. En la [IAM Management Console](https://console.aws.amazon.com/iam/home?#home), seleccione **Roles** en el panel de navegación.

1. Cree un rol de IAM nuevo y seleccione las siguientes opciones a medida que aparecen en la consola:
   + **AWS Servicio de**
   + **RDS**
   + **RDS – Add Role to Database (RDS: Añadir rol a la base de datos**

   A continuación, seleccione **Next:Permissions (Siguiente:Permisos)** en la parte inferior.

1. En **Attach permissions policies (Asociar políticas de permisos)**, introduzca el nombre de la política de IAM que ha creado previamente. A continuación, seleccione la política de la lista.

1. Siga las instrucciones de la consola hasta que termine de crear el rol.

   Se trata de una guía resumida para configurar un rol. Si desea obtener instrucciones más detalladas acerca de la creación de roles, consulte [Roles de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) en la *Guía del usuario de IAM.*

## AWS CLI
<a name="Appendix.SQLServer.Options.S3-integration.preparing.CLI"></a>

Para conceder a Amazon RDS acceso a un bucket de Simple Storage Service (Amazon S3), utilice el siguiente proceso:

1. Cree una política de IAM que conceda a Amazon RDS acceso a un bucket de S3.

1. Cree un rol de IAM que Amazon RDS pueda asumir en su nombre para acceder a los buckets de S3.

   Para obtener más información, vea [Crear un rol para delegar permisos a un usuario de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) en *Guía del usuario de IAM. *

1. Asocie la política de IAM que creó al rol de IAM creado.

**Creación de la política de IAM**

Incluya las acciones adecuadas para conceder el acceso que requiere la instancia de base de datos:
+ `ListAllMyBuckets`: obligatorio
+ `ListBucket`: obligatorio
+ `GetBucketAcl`: obligatorio
+ `GetBucketLocation`: obligatorio
+ `GetObject` – obligatorio para descargar archivos desde S3 a `D:\S3\`
+ `PutObject`: obligatorio para cargar archivos desde `D:\S3\` a S3
+ `ListMultipartUploadParts`: obligatorio para cargar archivos desde `D:\S3\` a S3
+ `AbortMultipartUpload`: obligatorio para cargar archivos desde `D:\S3\` a S3

1. El siguiente comando de la AWS CLI crea una política de IAM denominada `rds-s3-integration-policy` con estas opciones. Otorga acceso a un bucket denominado *amzn-s3-demo-bucket*.  
**Example**  

   Para Linux, macOS o Unix:

   ```
   aws iam create-policy \
   	 --policy-name rds-s3-integration-policy \
   	 --policy-document '{
   	        "Version": "2012-10-17",		 	 	 
   	        "Statement": [
   	            {
   	                "Effect": "Allow",
   	                "Action": "s3:ListAllMyBuckets",
   	                "Resource": "*"
   	            },
   	            {
   	                "Effect": "Allow",
   	                "Action": [
   	                    "s3:ListBucket",
   	                    "s3:GetBucketAcl",
   	                    "s3:GetBucketLocation"
   	                ],
   	                "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
   	            },
   	            {
   	                "Effect": "Allow",
   	                "Action": [
   	                    "s3:GetObject",
   	                    "s3:PutObject",
   	                    "s3:ListMultipartUploadParts",
   	                    "s3:AbortMultipartUpload"
   	                ],
   	                "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*"
   	            }
   	        ]
   	    }'
   ```

   Para Windows:

   Asegúrese de cambiar las terminaciones de las líneas a las que son compatibles con la interfaz (`^` en lugar de `\`). Además, en Windows, tiene que escapar todas las comillas dobles con `\`. Para evitar tener que escapar las comillas del JSON, puede guardarlo en un archivo y transferirlo como un parámetro. 

   En primer lugar, cree el archivo `policy.json` con la siguiente política de permisos:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "s3:ListAllMyBuckets",
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetBucketACL",
                   "s3:GetBucketLocation"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:PutObject",
                   "s3:ListMultipartUploadParts",
                   "s3:AbortMultipartUpload"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*"
           }
       ]
   }
   ```

------

   A continuación, utilice el siguiente comando para crear la política:

   ```
   aws iam create-policy ^
        --policy-name rds-s3-integration-policy ^
        --policy-document file://file_path/assume_role_policy.json
   ```

1. Después de crear la política, anote el Nombre de recurso de Amazon (ARN) de la política. Necesita el ARN para un paso posterior.

**Creación del rol de IAM**
+ El siguiente comando de la AWS CLI crea el rol de IAM `rds-s3-integration-role` con este fin.  
**Example**  

  Para Linux, macOS o Unix:

  ```
  aws iam create-role \
  	   --role-name rds-s3-integration-role \
  	   --assume-role-policy-document '{
  	     "Version": "2012-10-17",		 	 	 
  	     "Statement": [
  	       {
  	         "Effect": "Allow",
  	         "Principal": {
  	            "Service": "rds.amazonaws.com"
  	          },
  	         "Action": "sts:AssumeRole"
  	       }
  	     ]
  	   }'
  ```

  Para Windows:

  Asegúrese de cambiar las terminaciones de las líneas a las que son compatibles con la interfaz (`^` en lugar de `\`). Además, en Windows, tiene que escapar todas las comillas dobles con `\`. Para evitar tener que escapar las comillas del JSON, puede guardarlo en un archivo y transferirlo como un parámetro. 

  En primer lugar, cree el archivo `assume_role_policy.json` con la siguiente política:

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Principal": {
                  "Service": [
                      "rds.amazonaws.com"
                  ]
              },
              "Action": "sts:AssumeRole"
          }
      ]
  }
  ```

------

  A continuación, utilice el siguiente comando para crear el rol de IAM:

  ```
  aws iam create-role ^
       --role-name rds-s3-integration-role ^
       --assume-role-policy-document file://file_path/assume_role_policy.json
  ```  
**Example de utilizar la clave de contexto de condición global para crear el rol de IAM**  

  Le recomendamos que utilice las claves de contexto de condición globales [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) y [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) en las políticas basadas en recursos para limitar los permisos del servicio a un recurso específico. Esta es la forma más eficaz de protegerse contra el [problema del suplente confuso](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html).

  Puede utilizar claves de contexto de condición globales y hacer que el valor de `aws:SourceArn` contenga el ID de cuenta. En estos casos, el valor de `aws:SourceAccount` y la cuenta del valor de `aws:SourceArn` deben utilizar el mismo ID de cuenta cuando se utilizan en la misma instrucción de política.
  + Use `aws:SourceArn` si quiere acceso entre servicios para un único recurso.
  + Use `aws:SourceAccount` si quiere permitir que cualquier recurso de esa cuenta se asocie al uso entre servicios.

  En la política, asegúrese de utilizar la clave de contexto de condición global `aws:SourceArn` con el nombre de recurso de Amazon (ARN) completo de los recursos que acceden al rol. Para la integración de S3, asegúrese de incluir los ARN de la instancia de base de datos, tal y como se muestra en el siguiente ejemplo.

  Para Linux, macOS o Unix:

  ```
  aws iam create-role \
  	   --role-name rds-s3-integration-role \
  	   --assume-role-policy-document '{
  	     "Version": "2012-10-17",		 	 	 
  	     "Statement": [
  	       {
  	         "Effect": "Allow",
  	         "Principal": {
  	            "Service": "rds.amazonaws.com"
  	          },
  	         "Action": "sts:AssumeRole",
                  "Condition": {
                      "StringEquals": {
                          "aws:SourceArn":"arn:aws:rds:Region:my_account_ID:db:db_instance_identifier"
                      }
                  }
  	       }
  	     ]
  	   }'
  ```

  Para Windows:

  Agregue la clave de contexto de condición global a `assume_role_policy.json`.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Principal": {
                  "Service": [
                      "rds.amazonaws.com"
                  ]
              },
              "Action": "sts:AssumeRole",
              "Condition": {
                  "StringEquals": {
                      "aws:SourceArn":"arn:aws:rds:Region:my_account_ID:db:db_instance_identifier"
                  }
              }
          }
      ]
  }
  ```

------

**Para adjuntar la política de IAM al rol de IAM**
+ El siguiente comando de la AWS CLI asocia la política al rol denominado `rds-s3-integration-role`. Sustituya `your-policy-arn` por el ARN de la política anotado en el paso anterior.  
**Example**  

  Para Linux, macOS o Unix:

  ```
  aws iam attach-role-policy \
  	   --policy-arn your-policy-arn \
  	   --role-name rds-s3-integration-role
  ```

  Para Windows:

  ```
  aws iam attach-role-policy ^
  	   --policy-arn your-policy-arn ^
  	   --role-name rds-s3-integration-role
  ```

# Habilitación de la integración de RDS for SQL Server con S3
<a name="Appendix.SQLServer.Options.S3-integration.enabling"></a>

En la siguiente sección, puede encontrar cómo habilitar la integración de Amazon S3 con Amazon RDS for SQL Server. Para trabajar con la integración de S3, la instancia de base de datos debe estar asociada al rol de IAM que ha creado previamente antes de utilizar el parámetro feature-name de `S3_INTEGRATION`.

**nota**  
Para añadir un rol de IAM a una instancia de base de datos, el estado de la instancia de base de datos debe ser **available (disponible)**.

## Consola
<a name="Appendix.SQLServer.Options.S3-integration.enabling.console"></a>

**Para asociar su rol de IAM a su instancia de base de datos**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon RDS en [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Seleccione el nombre de la instancia de base de datos de RDS for SQL Server para mostrar los detalles.

1. En la pestaña **Connectivity & security (Conectividad y seguridad)**, en la sección **Manage IAM roles (Administrar roles de IAM)**, seleccione el rol de IAM que desea añadir en **Add IAM roles to this instance (Añadir roles de IAM a esta instancia)**.

1. En **Feature (Característica)**, elija **S3\$1INTEGRATION**.  
![\[Agregue el rol S3_INTEGRATION\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/ora-s3-integration-role.png)

1. Seleccione **Add role (Añadir rol)**.

## AWS CLI
<a name="Appendix.SQLServer.Options.S3-integration.enabling.cli"></a>

**Para añadir el rol de IAM a la instancia de base de datos de RDS for SQL Server**
+ El siguiente comando AWS CLI agrega el rol de IAM a una instancia de base de datos de RDS for SQL Server denominada `mydbinstance`.  
**Example**  

  Para Linux, macOS o:Unix

  ```
  aws rds add-role-to-db-instance \
  	   --db-instance-identifier mydbinstance \
  	   --feature-name S3_INTEGRATION \
  	   --role-arn your-role-arn
  ```

  En:Windows

  ```
  aws rds add-role-to-db-instance ^
  	   --db-instance-identifier mydbinstance ^
  	   --feature-name S3_INTEGRATION ^
  	   --role-arn your-role-arn
  ```

  Sustituya `your-role-arn` por el ARN del rol anotado en el paso anterior. `S3_INTEGRATION` debe especificarse para la opción `--feature-name`.

# Transferencia de archivos entre RDS for SQL Server y Amazon S3
<a name="Appendix.SQLServer.Options.S3-integration.using"></a>

Puede utilizar los procedimientos almacenados de Amazon RDS para descargar y cargar archivos entre Amazon S3 y su instancia de base de datos de RDS. También puede utilizar los procedimientos almacenados de Amazon RDS para visualizar y eliminar los archivos de la instancia de RDS.

Los archivos que descarga desde y carga a S3 se almacenan en la carpeta `D:\S3`. Esta es la única carpeta que puede utilizar para acceder a los archivos. Puede organizar los archivos en subcarpetas, que se crean cuando incluye la carpeta de destino durante la descarga.

Algunos procedimientos almacenados necesitan que asigne un nombre de recurso de Amazon (ARN) al bucket de S3 y al archivo. El formato del ARN es `arn:aws:s3:::amzn-s3-demo-bucket/file_name`. Amazon S3 no requiere un número de cuenta ni una región de AWS en los ARN.

Las tareas de integración de S3 se ejecutan de forma secuencial y comparten la misma cola que las tareas de restauración y copia de seguridad nativas. Como máximo, solo puede tener dos tareas en curso en cualquier momento en esta cola. La tarea puede tardar hasta cinco minutos en comenzar a procesarse.

## Descarga de archivos desde un bucket de Amazon S3 a una instancia de base de datos de SQL Server
<a name="Appendix.SQLServer.Options.S3-integration.using.download"></a>

Para descargar archivos desde un bucket de S3 a una instancia de base de datos de RDS for SQL Server, utilice el Amazon RDS procedimiento almacenado `msdb.dbo.rds_download_from_s3` con los siguientes parámetros.


| Nombre del parámetro | Tipo de datos | Valor predeterminado | Obligatorio | Descripción | 
| --- | --- | --- | --- | --- | 
|  `@s3_arn_of_file`  |  NVARCHAR  |  –  |  Obligatorio  |  El ARN de S3 del archivo que desea descargar, por ejemplo: `arn:aws:s3:::amzn-s3-demo-bucket/mydata.csv`  | 
|  `@rds_file_path`  |  NVARCHAR  |  –  |  Opcional  |  La ruta del archivo de la instancia de RDS. Si no se especifica, la ruta del archivo es `D:\S3\<filename in s3>`. RDS admite rutas absolutas y relativas. Si desea crear una subcarpeta, inclúyala en la ruta del archivo.  | 
|  `@overwrite_file`  |  INT  |  0  |  Opcional  | Sobrescribir el archivo existente:  0 = No sobrescribir 1 = Sobrescribir | 

Puede descargar archivos sin una extensión de archivo y archivos con las siguientes extensiones de archivo: .bcp, .csv, .dat, .fmt, .info, .lst, .tbl, .txt y .xml.

**nota**  
Los archivos con la extensión de archivo .ispac se pueden descargar cuando SQL Server Integration Services está habilitado. Para obtener más información sobre la habilitación de SSIS, consulte [SQL Server Integration Services](Appendix.SQLServer.Options.SSIS.md).  
Los archivos con las siguientes extensiones de archivo se pueden descargar cuando SQL Server Analysis Services está habilitado: .abf, .asdatabase, .configsettings, .deploymentoptions, .deploymenttargets y .xmla. Para obtener más información sobre cómo habilitar SSAS, consulte [SQL Server Analysis Services](Appendix.SQLServer.Options.SSAS.md).

En el siguiente ejemplo se muestra el procedimiento almacenado para descargar archivos desde 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;
```

La operación de ejemplo `rds_download_from_s3` crea una carpeta denominada `seed_data` en `D:\S3\`, si la carpeta no existe. A continuación, el ejemplo descarga el archivo de origen `bulk_data.csv` desde S3 a un nuevo archivo denominado `data.csv` en la instancia de base de datos. Si el archivo existía previamente, se sobrescribe porque el parámetro `@overwrite_file` está establecido en `1`.

## Carga de archivos desde una instancia de base de datos de SQL Server a un bucket de Amazon S3
<a name="Appendix.SQLServer.Options.S3-integration.using.upload"></a>

Para cargar archivos desde una instancia de base de datos de RDS for SQL Server en un bucket de S3, utilice el el Amazon RDS procedimiento almacenado `msdb.dbo.rds_upload_to_s3` con los siguientes parámetros.


| Nombre del parámetro | Tipo de datos | Valor predeterminado | Obligatorio | Descripción | 
| --- | --- | --- | --- | --- | 
|  `@s3_arn_of_file`  |  NVARCHAR  |  –  |  Obligatorio  |  El ARN de S3 del archivo que desea crear en S3, por ejemplo: `arn:aws:s3:::amzn-s3-demo-bucket/mydata.csv`  | 
|  `@rds_file_path`  |  NVARCHAR  |  –  |  Obligatorio  | La ruta del archivo que desea cargar en S3. Se admiten rutas relativas y absolutas. | 
|  `@overwrite_file`  |  INT  |  –  |  Opcional  |  Sobrescribir el archivo existente:  0 = No sobrescribir 1 = Sobrescribir  | 

En el siguiente ejemplo se carga el archivo denominado `data.csv` desde la ubicación especificada en `D:\S3\seed_data\` al archivo `new_data.csv` del bucket de S3 que especifica el ARN.

```
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;
```

Si el archivo existía previamente en S3, se sobrescribe porque el parámetro @overwrite\$1file está establecido en `1`.

# Descripción de los archivos de la instancia de base de datos de RDS
<a name="Appendix.SQLServer.Options.S3-integration.using.listing-files"></a>

Para visualizar los archivos disponibles en la instancia de base de datos, utilice una función y un procedimiento almacenado. En primer lugar, ejecute el siguiente procedimiento almacenado para recopilar los detalles de los archivos que se encuentran en `D:\S3\`. 

```
exec msdb.dbo.rds_gather_file_details;
```

El procedimiento almacenado devuelve el ID de la tarea. Al igual que con las otras tareas, este procedimiento almacenado se ejecuta de forma asíncrona. Cuando el estado de la tarea sea `SUCCESS`, puede utilizar el ID de la tarea en la función `rds_fn_list_file_details` para visualizar los directorios y los archivos existentes que se encuentran en D:\$1S3\$1, como se muestra a continuación.

```
SELECT * FROM msdb.dbo.rds_fn_list_file_details(TASK_ID);
```

La función `rds_fn_list_file_details` devuelve una tabla con las siguientes columnas.


| Parámetro de salida | Descripción | 
| --- | --- | 
| filepath | Ruta absoluta del archivo (por ejemplo, D:\$1S3\$1mydata.csv) | 
| size\$1in\$1bytes | Tamaño del archivo (en bytes) | 
| last\$1modified\$1utc | Fecha y hora en formato UTC de la última modificación | 
| is\$1directory | Opción que indica si el elemento es un directorio (true/false) | 

# Eliminación de los archivos de la instancia de base de datos de RDS
<a name="Appendix.SQLServer.Options.S3-integration.using.deleting-files"></a>

Para eliminar los archivos disponibles en la instancia de base de datos, utilice el procedimiento almacenado de Amazon RDS `msdb.dbo.rds_delete_from_filesystem` con los siguientes parámetros. 


| Nombre del parámetro | Tipo de datos | Valor predeterminado | Obligatorio | Descripción | 
| --- | --- | --- | --- | --- | 
|  `@rds_file_path`  |  NVARCHAR  |  –  |  Obligatorio  | La ruta del archivo que desea eliminar. Se admiten rutas relativas y absolutas.  | 
|  `@force_delete`  |  INT  | 0 |  Opcional  |  Para eliminar un directorio, se debe incluir este indicador y establecerlo en `1`. `1` = Eliminar directorio Este parámetro se ignora si va a eliminar un archivo.  | 

Para eliminar un directorio, `@rds_file_path` debe terminar con una barra invertida (`\`) y `@force_delete` se debe establecer en `1`.

En el siguiente ejemplo se elimina el archivo `D:\S3\delete_me.txt`.

```
exec msdb.dbo.rds_delete_from_filesystem
    @rds_file_path='D:\S3\delete_me.txt';
```

En el siguiente archivo se elimina el directorio `D:\S3\example_folder\`.

```
exec msdb.dbo.rds_delete_from_filesystem
    @rds_file_path='D:\S3\example_folder\',
    @force_delete=1;
```

# Monitoreo del estado de una tarea de transferencia de archivos
<a name="Appendix.SQLServer.Options.S3-integration.using.monitortasks"></a>

Para realizar un seguimiento del estado de la tarea de integración de S3, llame a la función `rds_fn_task_status`. Tiene dos parámetros. El primer parámetro siempre debe ser `NULL` porque no se aplica a la integración de S3. El segundo parámetro acepta un ID de tarea.

Para obtener una lista de todas las tareas, establezca el primer parámetro en `NULL` y el segundo en `0`, como se muestra en el siguiente ejemplo.

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,0);
```

Para obtener una tarea específica, establezca el primer parámetro en `NULL` y el segundo en el ID de la tarea, como se muestra en el siguiente ejemplo.

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,42);
```

La función `rds_fn_task_status` devuelve la siguiente información.


|  Parámetro de salida  |  Descripción  | 
| --- | --- | 
|  `task_id`  |  El ID de la tarea.  | 
|  `task_type`  |  En la integración de S3, las tareas pueden ser de los siguientes tipos: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.S3-integration.using.monitortasks.html)  | 
|  `database_name`  | No se aplica a las tareas de integración de S3. | 
|  `% complete`  |  El porcentaje de progreso de la tarea.  | 
|  `duration(mins)`  |  El tiempo empleado en la tarea, en minutos.  | 
|  `lifecycle`  |  El estado de la tarea. Los posibles estados son los siguientes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.S3-integration.using.monitortasks.html)  | 
|  `task_info`  |  Información adicional acerca de la tarea. Si se produce un error durante el procesamiento, esta columna contiene información acerca del error.   | 
|  `last_updated`  |  La fecha y hora en que se actualizó por última vez el estado de la tarea.   | 
|  `created_at`  |  La fecha y hora en que se creó la tarea.  | 
|  `S3_object_arn`  |  El ARN del objeto de S3 desde el que se descarga o al que se carga.  | 
|  `overwrite_S3_backup_file`  |  No se aplica a las tareas de integración de S3.  | 
|  `KMS_master_key_arn`  |  No se aplica a las tareas de integración de S3.  | 
|  `filepath`  |  La ruta del archivo de la instancia de base de datos de RDS.  | 
|  `overwrite_file`  |  Una opción que indica si un archivo existente se sobrescribe.  | 
|  `task_metadata`  |  No se aplica a las tareas de integración de S3.  | 

# Cancelación de una tarea
<a name="Appendix.SQLServer.Options.S3-integration.canceltasks"></a>

Para cancelar las tareas de integración de S3, utilice el procedimiento almacenado `msdb.dbo.rds_cancel_task` con el parámetro `task_id`. La eliminación y la visualización de las tareas que están en curso no se pueden cancelar. En el siguiente ejemplo se muestra una solicitud para cancelar una tarea. 

```
exec msdb.dbo.rds_cancel_task @task_id = 1234;
```

Para obtener información general acerca de todas las tareas y sus ID de tarea, utilice la función `rds_fn_task_status` como se describe en [Monitoreo del estado de una tarea de transferencia de archivos](Appendix.SQLServer.Options.S3-integration.using.monitortasks.md).

## Limitaciones multi-AZ para la integración S3
<a name="S3-MAZ"></a>

En las instancias multi-AZ, los archivos de la carpeta `D:\S3` se eliminan en la réplica en espera después de una conmutación por error. Se puede planificar una conmutación por error, por ejemplo, durante las modificaciones de instancia de base de datos, como cambiar la clase de instancia o actualizar la versión del motor. O una conmutación por error puede no estar planificada, durante una interrupción del servicio principal.

**nota**  
No recomendamos usar la carpeta `D:\S3` para el almacenamiento de archivos. La práctica recomendada consiste en cargar archivos creados en Amazon S3 para hacerlos duraderos y descargar archivos cuando tenga que importar datos.

Para determinar la hora de la última conmutación por error, puede utilizar el procedimiento almacenado `msdb.dbo.rds_failover_time`. Para obtener más información, consulte [Determinación de la hora de la última conmutación por error de Amazon RDS para SQL Server](Appendix.SQLServer.CommonDBATasks.LastFailover.md).

**Example de No hay conmutación por error reciente**  
Este ejemplo muestra el resultado cuando no hay conmutación por error reciente en los registros de errores. No se ha producido ninguna conmutación por error desde 2020-04-29 23:59:00 .01.  
Por lo tanto, todos los archivos descargados después de esa hora que no se hayan eliminado mediante el procedimiento almacenado `rds_delete_from_filesystem` siguen siendo accesibles en el alojamiento actual. Los archivos descargados antes de esa hora también pueden estar disponibles.  


| errorlog\$1available\$1from | recent\$1failover\$1time | 
| --- | --- | 
|  2020-04-29 23:59:00.0100000  |  null  | 

**Example de Conmutación por error reciente**  
Este ejemplo muestra el resultado cuando hay una conmutación por error en los registros de errores. La conmutación por error más reciente fue en 2020-05-05 18:57:51 .89.  
Todos los archivos descargados después de esa hora que no se hayan eliminado mediante el procedimiento almacenado `rds_delete_from_filesystem` siguen siendo accesibles en el alojamiento actual.  


| errorlog\$1available\$1from | recent\$1failover\$1time | 
| --- | --- | 
|  2020-04-29 23:59:00.0100000  |  2020-05-05 18:57:51.8900000  | 

# Desactivación de la integración de RDS for SQL Server con S3
<a name="Appendix.SQLServer.Options.S3-integration.disabling"></a>

A continuación puede encontrar cómo deshabilitar la integración de Amazon S3 con Amazon RDS for SQL Server. Los archivos de `D:\S3\` no se eliminan al deshabilitar la integración de S3.

**nota**  
Para eliminar un rol de IAM de una instancia de base de datos, el estado de la instancia de base de datos debe ser `available`.

## Consola
<a name="Appendix.SQLServer.Options.S3-integration.disabling.console"></a>

**Para desvincular el rol de IAM de la instancia de base de datos**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon RDS en [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Seleccione el nombre de la instancia de base de datos de RDS for SQL Server para mostrar los detalles.

1. En la pestaña **Connectivity & security (Conectividad y seguridad)**, en la sección **Manage IAM roles (Administrar roles de IAM)**, seleccione el rol de IAM que desea eliminar.

1. Elija **Eliminar**.

## AWS CLI
<a name="Appendix.SQLServer.Options.S3-integration.disabling.cli"></a>

**Para eliminar el rol de IAM de la instancia de base de datos de RDS for SQL Server**
+ El siguiente comando AWS CLI elimina el rol de IAM de una instancia de base de datos RDS for SQL Server denominada `mydbinstance`.  
**Example**  

  Para Linux, macOS o:Unix

  ```
  aws rds remove-role-from-db-instance \
  	   --db-instance-identifier mydbinstance \
  	   --feature-name S3_INTEGRATION \
  	   --role-arn your-role-arn
  ```

  En:Windows

  ```
  aws rds remove-role-from-db-instance ^
  	   --db-instance-identifier mydbinstance ^
  	   --feature-name S3_INTEGRATION ^
  	   --role-arn your-role-arn
  ```

  Sustituya `your-role-arn` por el ARN del rol de IAM adecuado en la opción `--feature-name`.

# Uso de Database Mail en Amazon RDS for SQL Server
<a name="SQLServer.DBMail"></a>

Puede utilizar Database Mail para enviar mensajes de correo electrónico a los usuarios desde su instancia de base de datos Amazon RDS en SQL Server. Los mensajes pueden contener archivos y resultados de consulta. Database Mail incluye los siguientes componentes:
+ **Objetos de configuración y seguridad** – Estos objetos crean perfiles y cuentas y se almacenan en la base de datos `msdb`.
+ **Objetos de mensajería** – Estos objetos incluyen el procedimiento almacenado [sp\$1send\$1dbmail](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-send-dbmail-transact-sql) utilizado para enviar mensajes y estructuras de datos que contienen información sobre los mensajes. Están almacenados en la base de datos `msdb`.
+ **Objetos de registro y auditoría** – Database Mail escribe información de registro en la base de datos `msdb` y en el registro de eventos de aplicación de Microsoft Windows.
+ **El ejecutable de Database Mail** – `DatabaseMail.exe` lee desde una cola en la base de datos `msdb` y envía mensajes de correo electrónico.

RDS es compatible con Database Mail para todas las versiones de SQL Server en las ediciones Web, Estándar y Enterprise.

## Limitaciones
<a name="SQLServer.DBMail.Limitations"></a>

Las siguientes limitaciones se aplican al uso de Database Mail en su instancia de base de datos de SQL Server:
+ Database Mail no es compatible con la edición SQL Server Express.
+ La modificación de los parámetros de la configuración de Database Mail no es compatible. Para ver los valores preestablecidos (predeterminados), utilice el procedimiento almacenado [sysmail\$1help\$1configure\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-help-configure-sp-transact-sql).
+ Los archivos adjuntos no son totalmente compatibles. Para obtener más información, consulte [Trabajar con archivos adjuntos](#SQLServer.DBMail.Files).
+ El tamaño máximo del archivo adjunto es de 1 MB.
+ Database Mail requiere configuración adicional en las instancias de base de datos Multi-AZ. Para obtener más información, consulte [Consideraciones para implementaciones Multi-AZ](#SQLServer.DBMail.MAZ).
+ La configuración del Agente SQL Server para enviar mensajes de correo electrónico a operadores predefinidos no es compatible.

# Habilitación de Database Mail
<a name="SQLServer.DBMail.Enable"></a>

Utilice el siguiente proceso para habilitar Database Mail para su instancia de base de datos:

1. Cree un nuevo grupo de parámetros.

1. Modifique el grupo de parámetros para establecer el parámetro `database mail xps` en 1.

1. Asocie el nuevo grupo de parámetros a la instancia de base de datos.

## Creación del grupo de parámetros para Database Mail
<a name="DBMail.CreateParamGroup"></a>

Cree un grupo de parámetros para el parámetro `database mail xps` que corresponde a la edición y versión de SQL Server de su instancia de base de datos.

**nota**  
También puede modificar un grupo de parámetros existente. Siga el procedimiento indicado en [Modificación del parámetro que habilita Database Mail](#DBMail.ModifyParamGroup).

### Consola
<a name="DBMail.CreateParamGroup.Console"></a>

En el ejemplo siguiente se crea un grupo de parámetros para SQL Server Standard Edition 2016.

**Para crear el grupo de parámetros**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon RDS en [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. En el panel de navegación, seleccione **Parameter groups** (Grupos de parámetros).

1. Elija **Create parameter group**.

1. En el panel **Create parameter group (Crear grupo de parámetros)**, haga lo siguiente:

   1. En **Familia de grupos de parámetros**, elija **sqlserver-se-13.0**.

   1. En **Nombre de grupo**, escriba un identificador para el grupo de parámetros, como **dbmail-sqlserver-se-13**.

   1. En **Descripción**, escriba **Database Mail XPs**.

1. Seleccione **Create (Crear)**.

### CLI
<a name="DBMail.CreateParamGroup.CLI"></a>

En el ejemplo siguiente se crea un grupo de parámetros para SQL Server Standard Edition 2016.

**Para crear el grupo de parámetros**
+ Utilice uno de los siguientes comandos.  
**Example**  

  Para Linux, macOS o Unix:

  ```
  aws rds create-db-parameter-group \
      --db-parameter-group-name dbmail-sqlserver-se-13 \
      --db-parameter-group-family "sqlserver-se-13.0" \
      --description "Database Mail XPs"
  ```

  Para Windows:

  ```
  aws rds create-db-parameter-group ^
      --db-parameter-group-name dbmail-sqlserver-se-13 ^
      --db-parameter-group-family "sqlserver-se-13.0" ^
      --description "Database Mail XPs"
  ```

## Modificación del parámetro que habilita Database Mail
<a name="DBMail.ModifyParamGroup"></a>

Modifique el parámetro `database mail xps` en el grupo de parámetros que corresponde a la edición y la versión de SQL Server de su instancia de base de datos.

Para habilitar Database Mail, establezca el parámetro `database mail xps` en 1.

### Consola
<a name="DBMail.ModifyParamGroup.Console"></a>

En el ejemplo siguiente se modifica el grupo de parámetros que ha creado para SQL Server Standard Edition 2016.

**Para modificar el grupo de parámetros**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon RDS en [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. En el panel de navegación, seleccione **Parameter groups** (Grupos de parámetros).

1. Elija el grupo de parámetros, como **ssis-sqlserver-se-13**.

1. En **Parámetros**, filtre la lista de parámetros para **mail**.

1. Elija **database mail xps** (procedimientos almacenados extendidos [XP] de Database Mail).

1. Elija **Edit parameters (Editar parámetros)**.

1. Escriba **1**.

1. Elija **Save changes**.

### CLI
<a name="DBMail.ModifyParamGroup.CLI"></a>

En el ejemplo siguiente se modifica el grupo de parámetros que ha creado para SQL Server Standard Edition 2016.

**Para modificar el grupo de parámetros**
+ Utilice uno de los siguientes comandos.  
**Example**  

  Para Linux, macOS o Unix:

  ```
  aws rds modify-db-parameter-group \
      --db-parameter-group-name dbmail-sqlserver-se-13 \
      --parameters "ParameterName='database mail xps',ParameterValue=1,ApplyMethod=immediate"
  ```

  Para Windows:

  ```
  aws rds modify-db-parameter-group ^
      --db-parameter-group-name dbmail-sqlserver-se-13 ^
      --parameters "ParameterName='database mail xps',ParameterValue=1,ApplyMethod=immediate"
  ```

## Asociación del grupo de parámetros con la instancia de base de datos
<a name="DBMail.AssocParamGroup"></a>

Puede utilizar la Consola de administración de AWS o la AWS CLI para asociar el grupo de parámetros de Database Mail con la instancia de base de datos.

### Consola
<a name="DBMail.AssocParamGroup.Console"></a>

Puede asociar el grupo de parámetros de Database Mail con una instancia de base de datos nueva o existente.
+ Para una nueva instancia de base de datos, asóciela cuando lance la instancia. Para obtener más información, consulte [Creación de una instancia de base de datos de Amazon RDS](USER_CreateDBInstance.md).
+ Para una instancia de base de datos existente, asóciela modificando la instancia. Para obtener más información, consulte [Modificación de una instancia de base de datos de Amazon RDS](Overview.DBInstance.Modifying.md).

### CLI
<a name="DBMail.AssocParamGroup.CLI"></a>

Puede asociar el grupo de parámetros de Database Mail con una instancia de base de datos nueva o existente.

**Para crear una instancia de base de datos con el grupo de parámetros de Database Mail**
+ Especifique el mismo tipo de motor de base de datos y la misma versión principal que ha utilizado al crear el grupo de parámetros.  
**Example**  

  Para Linux, macOS o Unix:

  ```
  aws rds create-db-instance \
      --db-instance-identifier mydbinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 13.00.5426.0.v1 \
      --allocated-storage 100 \
      --manage-master-user-password \
      --master-username admin \
      --storage-type gp2 \
      --license-model li
      --db-parameter-group-name dbmail-sqlserver-se-13
  ```

  Para Windows:

  ```
  aws rds create-db-instance ^
      --db-instance-identifier mydbinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 13.00.5426.0.v1 ^
      --allocated-storage 100 ^
      --manage-master-user-password ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --db-parameter-group-name dbmail-sqlserver-se-13
  ```

**Para modificar una instancia de base de datos y asociar el grupo de parámetros de Database Mail**
+ Utilice uno de los siguientes comandos.  
**Example**  

  Para Linux, macOS o Unix:

  ```
  aws rds modify-db-instance \
      --db-instance-identifier mydbinstance \
      --db-parameter-group-name dbmail-sqlserver-se-13 \
      --apply-immediately
  ```

  Para Windows:

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier mydbinstance ^
      --db-parameter-group-name dbmail-sqlserver-se-13 ^
      --apply-immediately
  ```

# Configuración de Database Mail
<a name="SQLServer.DBMail.Configure"></a>

Realice las siguientes tareas para configurar Database Mail:

1. Cree el perfil de Database Mail.

1. Cree la cuenta de Database Mail.

1. Agregue la cuenta de Database Mail al perfil de Database Mail.

1. Agregue usuarios al perfil de Database Mail.

**nota**  
Para configurar Database Mail, asegúrese de que tenga permiso `execute` sobre los procedimientos almacenados en la base de datos `msdb`.

## Creación del perfil de Database Mail
<a name="SQLServer.DBMail.Configure.Profile"></a>

Para crear el perfil de Database Mail, utilice el procedimiento almacenado [sysmail\$1add\$1profile\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-profile-sp-transact-sql). En el ejemplo siguiente se crea un perfil denominado `Notifications`.

**Para crear el perfil**
+ Utilice la siguiente instrucción SQL.

  ```
  USE msdb
  GO
  
  EXECUTE msdb.dbo.sysmail_add_profile_sp  
      @profile_name         = 'Notifications',  
      @description          = 'Profile used for sending outgoing notifications using Amazon SES.';
  GO
  ```

## Creación de la cuenta de Database Mail
<a name="SQLServer.DBMail.Configure.Account"></a>

Para crear la cuenta de Database Mail, utilice el procedimiento almacenado [sysmail\$1add\$1account\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-account-sp-transact-sql). En el ejemplo siguiente, se crea una cuenta denominada `SES` en una instancia de base de datos de RDS para SQL Server en una VPC privada mediante Amazon Simple Email Service.

Para utilizar Amazon SES se requieren los siguientes parámetros:
+ `@email_address`: Una identidad verificada de Amazon SES. Para obtener más información, consulte [Verificación de identidades en Amazon SES](https://docs.aws.amazon.com/ses/latest/dg/verify-addresses-and-domains.html).
+ `@mailserver_name`: Un punto de enlace SMTP de Amazon SES. Para obtener más información, consulte [Conexión a un punto de enlace SMTP de Amazon SES](https://docs.aws.amazon.com/ses/latest/dg/smtp-connect.html).
+ `@username`: Un nombre de usuario de SMTP de Amazon SES. Para obtener más información, consulte [Obtención de las credenciales SMTP de Amazon SES](https://docs.aws.amazon.com/ses/latest/dg/smtp-credentials.html).

  No utilice un nombre de usuario AWS Identity and Access Management.
+ `@password`: Una contraseña SMTP de Amazon SES. Para obtener más información, consulte [Obtención de las credenciales SMTP de Amazon SES](https://docs.aws.amazon.com/ses/latest/dg/smtp-credentials.html).

**Para crear la cuenta**
+ Utilice la siguiente instrucción SQL.

  ```
  USE msdb
  GO
  
  EXECUTE msdb.dbo.sysmail_add_account_sp
      @account_name        = 'SES',
      @description         = 'Mail account for sending outgoing notifications.',
      @email_address       = 'nobody@example.com',
      @display_name        = 'Automated Mailer',
      @mailserver_name     = 'vpce-0a1b2c3d4e5f-01234567.email-smtp.us-west-2.vpce.amazonaws.com',
      @port                = 587,
      @enable_ssl          = 1,
      @username            = 'Smtp_Username',
      @password            = 'Smtp_Password';
  GO
  ```
**nota**  
Especifique credenciales distintas de las que se muestran aquí como práctica recomendada de seguridad.

## Adición de la cuenta de Database Mail al perfil de Database Mail
<a name="SQLServer.DBMail.Configure.AddAccount"></a>

Para agregar la cuenta de Database Mail al perfil de Database Mail, utilice el procedimiento almacenado [sysmail\$1add\$1profileaccount\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-profileaccount-sp-transact-sql). En el ejemplo siguiente se agrega la cuenta `SES` al perfil `Notifications`.

**Para agregar la cuenta al perfil**
+ Utilice la siguiente instrucción SQL.

  ```
  USE msdb
  GO
  
  EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
      @profile_name        = 'Notifications',
      @account_name        = 'SES',
      @sequence_number     = 1;
  GO
  ```

## Adición de usuarios al perfil de Database Mail
<a name="SQLServer.DBMail.Configure.AddUser"></a>

Para conceder permiso a una entidad principal de base de datos `msdb` para utilizar un perfil de Database Mail, utilice el procedimiento almacenado [sysmail\$1add\$1principalprofile\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-principalprofile-sp-transact-sql). Una *entidad principal* es una entidad que puede solicitar recursos de SQL Server. La entidad principal de base de datos debe asignarse a un usuario de autenticación de SQL Server, un usuario de autenticación de Windows o un grupo de autenticación de Windows.

En el ejemplo siguiente se concede acceso público al perfil `Notifications`.

**Para agregar un usuario al perfil**
+ Utilice la siguiente instrucción SQL.

  ```
  USE msdb
  GO
  
  EXECUTE msdb.dbo.sysmail_add_principalprofile_sp  
      @profile_name       = 'Notifications',  
      @principal_name     = 'public',  
      @is_default         = 1;
  GO
  ```

## Procedimientos y funciones almacenados de Amazon RDS para Database Mail
<a name="SQLServer.DBMail.StoredProc"></a>

Microsoft proporciona [procedimientos almacenados](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/database-mail-stored-procedures-transact-sql) para usar Database Mail, como crear, enumerar, actualizar y eliminar cuentas y perfiles. Además, RDS provee los procedimientos almacenados y las funciones almacenadas para Database Mail que se muestran en la tabla siguiente.


| Procedimiento/Función | Descripción | 
| --- | --- | 
| rds\$1fn\$1sysmail\$1allitems | Muestra los mensajes enviados, incluidos los enviados por otros usuarios. | 
| rds\$1fn\$1sysmail\$1event\$1log | Muestra eventos, incluidos los de mensajes enviados por otros usuarios. | 
| rds\$1fn\$1sysmail\$1mailattachments | Muestra archivos adjuntos, incluidos los de los mensajes enviados por otros usuarios. | 
| rds\$1sysmail\$1control | Inicia y detiene la cola de correo (proceso DatabaseMail.exe). | 
| rds\$1sysmail\$1delete\$1mailitems\$1sp | Elimina los mensajes de correo electrónico enviados por todos los usuarios de las tablas internas de Database Mail. | 

# Envío de mensajes de correo electrónico con Database Mail
<a name="SQLServer.DBMail.Send"></a>

Utilice el procedimiento almacenado [sp\$1send\$1dbmail](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-send-dbmail-transact-sql) para enviar mensajes de correo electrónico mediante Database Mail.

## Uso
<a name="SQLServer.DBMail.Send.Usage"></a>

```
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'profile_name',
@recipients = 'recipient1@example.com[; recipient2; ... recipientn]',
@subject = 'subject',
@body = 'message_body',
[@body_format = 'HTML'],
[@file_attachments = 'file_path1; file_path2; ... file_pathn'],
[@query = 'SQL_query'],
[@attach_query_result_as_file = 0|1]';
```

Se requieren los siguientes parámetros:
+ `@profile_name` – El nombre del perfil de Database Mail desde el que se va a enviar el mensaje.
+ `@recipients` – La lista delimitada por punto y coma de direcciones de correo electrónico a las que enviar el mensaje.
+ `@subject` – El asunto del mensaje.
+ `@body` – El cuerpo del mensaje. También puede usar una variable declarada como cuerpo.

Los siguientes parámetros son opcionales:
+ `@body_format` – Este parámetro se utiliza con una variable declarada para enviar un correo electrónico en formato HTML.
+ `@file_attachments` – La lista delimitada por punto y coma de archivos adjuntos de mensajes. Las rutas de archivo deben ser rutas absolutas.
+ `@query` – Una consulta SQL que se va a ejecutar. Los resultados de la consulta se pueden adjuntar como un archivo o incluirse en el cuerpo del mensaje.
+ `@attach_query_result_as_file` – Si se debe adjuntar el resultado de la consulta como un archivo. Establezca en 0 para no, 1 para sí. El valor predeterminado es 0.

## Ejemplos
<a name="SQLServer.DBMail.Send.Examples"></a>

Los ejemplos siguientes muestran cómo enviar mensajes de correo electrónico.

**Example de enviar un mensaje a un único destinatario**  

```
USE msdb
GO

EXEC msdb.dbo.sp_send_dbmail
     @profile_name       = 'Notifications',
     @recipients         = 'nobody@example.com',
     @subject            = 'Automated DBMail message - 1',
     @body               = 'Database Mail configuration was successful.';
GO
```

**Example de enviar un mensaje a varios destinatarios**  

```
USE msdb
GO

EXEC msdb.dbo.sp_send_dbmail
     @profile_name       = 'Notifications',
     @recipients         = 'recipient1@example.com;recipient2@example.com',
     @subject            = 'Automated DBMail message - 2',
     @body               = 'This is a message.';
GO
```

**Example de enviar un resultado de consulta SQL como un archivo adjunto**  

```
USE msdb
GO

EXEC msdb.dbo.sp_send_dbmail
     @profile_name       = 'Notifications',
     @recipients         = 'nobody@example.com',
     @subject            = 'Test SQL query',
     @body               = 'This is a SQL query test.',
     @query              = 'SELECT * FROM abc.dbo.test',
     @attach_query_result_as_file = 1;
GO
```

**Example de enviar un mensaje en formato HTML**  

```
USE msdb
GO

DECLARE @HTML_Body as NVARCHAR(500) = 'Hi, <h4> Heading </h4> </br> See the report. <b> Regards </b>';

EXEC msdb.dbo.sp_send_dbmail
     @profile_name       = 'Notifications',
     @recipients         = 'nobody@example.com',
     @subject            = 'Test HTML message',
     @body               = @HTML_Body,
     @body_format        = 'HTML';
GO
```

**Example de enviar un mensaje mediante un desencadenador cuando se produce un evento específico en la base de datos**  

```
USE AdventureWorks2017
GO
IF OBJECT_ID ('Production.iProductNotification', 'TR') IS NOT NULL
DROP TRIGGER Purchasing.iProductNotification
GO

CREATE TRIGGER iProductNotification ON Production.Product
   FOR INSERT
   AS
   DECLARE @ProductInformation nvarchar(255);
   SELECT
   @ProductInformation = 'A new product, ' + Name + ', is now available for $' + CAST(StandardCost AS nvarchar(20)) + '!'
   FROM INSERTED i;

EXEC msdb.dbo.sp_send_dbmail
     @profile_name       = 'Notifications',
     @recipients         = 'nobody@example.com',
     @subject            = 'New product information',
     @body               = @ProductInformation;
GO
```

# Visualización de mensajes, registros y archivos adjuntos
<a name="SQLServer.DBMail.View"></a>

Utilice procedimientos almacenados de RDS para ver mensajes, registros de eventos y archivos adjuntos.

**Para ver todos los mensajes de correo electrónico**
+ Utilice la siguiente consulta SQL.

  ```
  SELECT * FROM msdb.dbo.rds_fn_sysmail_allitems(); --WHERE sent_status='sent' or 'failed' or 'unsent'
  ```

**Para ver todos los registros de eventos de correo electrónico**
+ Utilice la siguiente consulta SQL.

  ```
  SELECT * FROM msdb.dbo.rds_fn_sysmail_event_log();
  ```

**Para ver todos los archivos adjuntos de correo electrónico**
+ Utilice la siguiente consulta SQL.

  ```
  SELECT * FROM msdb.dbo.rds_fn_sysmail_mailattachments();
  ```

# Eliminación de mensajes
<a name="SQLServer.DBMail.Delete"></a>

Utilice el procedimiento almacenado `rds_sysmail_delete_mailitems_sp` para eliminar mensajes.

**nota**  
RDS elimina automáticamente los elementos de la tabla de correo cuando los datos del historial de DBMail alcanzan un tamaño de 1 GB, con un periodo de retención de al menos 24 horas.  
Si desea conservar los elementos de correo durante un periodo más largo, puede archivarlos. Para obtener más información, consulte [Crear un trabajo de agente SQL Server para archivar mensajes y registros de eventos de Database Mail ](https://docs.microsoft.com/en-us/sql/relational-databases/database-mail/create-a-sql-server-agent-job-to-archive-database-mail-messages-and-event-logs) en la documentación de Microsoft.

**Para eliminar todos los mensajes de correo electrónico**
+ Utilice la siguiente instrucción SQL.

  ```
  DECLARE @GETDATE datetime
  SET @GETDATE = GETDATE();
  EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_before = @GETDATE;
  GO
  ```

**Para eliminar todos los mensajes de correo electrónico con un estado determinado**
+ Utilice la siguiente instrucción SQL para eliminar todos los mensajes fallidos.

  ```
  DECLARE @GETDATE datetime
  SET @GETDATE = GETDATE();
  EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_status = 'failed';
  GO
  ```

# Inicio y detención de la cola de correo
<a name="SQLServer.DBMail.StartStop"></a>

Siga las instrucciones que se indican a continuación para iniciar y detener la cola de correo de la base de datos:

**Topics**
+ [Inicio de la cola de correo](#SQLServer.DBMail.Start)
+ [Detención de la cola de correo](#SQLServer.DBMail.Stop)

## Inicio de la cola de correo
<a name="SQLServer.DBMail.Start"></a>

Utilice el procedimiento almacenado `rds_sysmail_control` para iniciar el proceso de Database Mail.

**nota**  
Al habilitar Database Mail, se inicia automáticamente la cola de correo.

**Para iniciar la cola de correo**
+ Utilice la siguiente instrucción SQL.

  ```
  EXECUTE msdb.dbo.rds_sysmail_control start;
  GO
  ```

## Detención de la cola de correo
<a name="SQLServer.DBMail.Stop"></a>

Utilice el procedimiento almacenado `rds_sysmail_control` para detener el proceso de Database Mail.

**Para detener la cola de correo**
+ Utilice la siguiente instrucción SQL.

  ```
  EXECUTE msdb.dbo.rds_sysmail_control stop;
  GO
  ```

## Trabajar con archivos adjuntos
<a name="SQLServer.DBMail.Files"></a>

Las siguientes extensiones de archivos adjuntos no son compatibles con los mensajes de Database Mail de RDS en SQL Server: .ade, .adp, .apk, .appx, .appxbundle, .bat, .bak, .cab, .chm, .cmd, .com, .cpl, .dll, .dmg, .exe, .hta, .inf1, .ins, .isp, .iso, .jar, .job, .js, .jse, .ldf, .lib, .lnk, .mde, .mdf, .msc, .msi, .msix, .msixbundle, .msp, .mst, .nsh, .pif, .ps, .ps1, .psc1, .reg, .rgs, .scr, .sct, .shb, .shs, .svg, .sys, .u3p, .vb, .vbe, .vbs, .vbscript, .vxd, .ws, .wsc, .wsf y .wsh.

Database Mail utiliza el contexto de seguridad de Microsoft Windows del usuario actual para controlar el acceso a los archivos. Los usuarios que inician sesión con la autenticación de SQL Server no pueden adjuntar archivos mediante el parámetro `@file_attachments` con el procedimiento almacenado `sp_send_dbmail`. Windows no permite que SQL Server proporcione credenciales de un equipo remoto a otro equipo remoto. Por lo tanto, Database Mail no puede adjuntar archivos desde un recurso compartido de red cuando el comando se ejecuta desde un equipo distinto del equipo que ejecuta SQL Server.

Sin embargo, usted puede utilizar trabajos del agente SQL Server para adjuntar archivos. Para obtener más información sobre el Agente SQL Server, consulte [Uso del Agente SQL Server para Amazon RDS](Appendix.SQLServer.CommonDBATasks.Agent.md) y [Agente SQL Server](https://docs.microsoft.com/en-us/sql/ssms/agent/sql-server-agent) en la documentación de Microsoft.

## Consideraciones para implementaciones Multi-AZ
<a name="SQLServer.DBMail.MAZ"></a>

Al configurar Database Mail en una instancia de base de datos Multi-AZ, la configuración no se propaga automáticamente a la secundaria. Se recomienda convertir la instancia Multi-AZ en una instancia Single-AZ, configurar Database Mail y, a continuación, convertir la instancia de base de datos de nuevo a Multi-AZ. Entonces, tanto el nodo primario como el secundario tienen la configuración de Database Mail.

Si crea una réplica de lectura desde su instancia Multi-AZ que tiene Database Mail configurado, la réplica hereda la configuración, pero sin la contraseña del servidor de protocolo simple de transferencia de correo (SMTP). Actualice la cuenta de Database Mail con la contraseña.

## Eliminar la restricción SMTP (puerto 25)
<a name="SQLServer.DBMail.SMTP"></a>

De forma predeterminada, AWS bloquea el tráfico saliente en SMTP (puerto 25) para las instancias de base de datos de RDS para SQL Server. Esto se hace para evitar el spam según las políticas del propietario de la interfaz de red elástica. Puede eliminar esta restricción si es necesario. Para obtener más información, consulte [¿Cómo puedo eliminar la restricción en el puerto 25 de mi instancia de Amazon EC2 o de la función de Lambda?](https://repost.aws/knowledge-center/ec2-port-25-throttle). 

# Soporte del almacén de instancias para la base de datos tempdb en Amazon RDS for SQL Server
<a name="SQLServer.InstanceStore"></a>

El *almacén de instancias* ofrece un almacenamiento de nivel de bloques temporal para la instancia de base de datos. Este almacenamiento se encuentra en discos que están conectados físicamente al equipo host. Estos discos tienen almacenamiento de instancias de memoria rápida no volátil (NVMe) basado en unidades de estado sólido (SSD). Este almacenamiento está optimizado para una latencia baja, un rendimiento de E/S aleatorio muy alto y un alto rendimiento de lectura secuencial.

Al colocar archivos de datos `tempdb` y archivos de registro `tempdb` en el almacén de instancias, se pueden lograr latencias de lectura y escritura inferiores en comparación con el almacenamiento estándar basado en Amazon EBS.

**nota**  
Los archivos de base de datos de SQL Server y los archivos de registro de base de datos no se colocan en el almacén de instancias.

## Habilitación del almacén de instancias
<a name="SQLServer.InstanceStore.Enable"></a>

Cuando RDS aprovisiona instancias de base de datos con una de las siguientes clases de instancia, la base de datos `tempdb` se coloca automáticamente en el almacén de instancias:
+ db.m5d
+ db.r5d
+ db.x2iedn

Para habilitar el almacén de instancias, realice una de las acciones siguientes:
+ Cree una instancia de base de datos de SQL Server con uno de estos tipos de instancia. Para obtener más información, consulte [Creación de una instancia de base de datos de Amazon RDS](USER_CreateDBInstance.md).
+ Modifique una instancia de base de datos de SQL Server existente para utilizar una de ellas. Para obtener más información, consulte [Modificación de una instancia de base de datos de Amazon RDS](Overview.DBInstance.Modifying.md).

El almacén de instancias está disponible en todas las regiones de AWS donde se admite uno o más de estos tipos de instancia. Para obtener más información sobre las clases de instancia `db.m5d` y `db.r5d`, consulte [Clases de instancia de base de datos de ](Concepts.DBInstanceClass.md). Para obtener más información sobre las clases de instancia admitidas por Amazon RDS for SQL Server, consulte [Compatibilidad con clases de instancia de base de datos para Microsoft SQL Server](SQLServer.Concepts.General.InstanceClasses.md).

## Consideraciones sobre la ubicación y el tamaño de los archivos
<a name="SQLServer.InstanceStore.Files"></a>

En instancias sin un almacén de instancias, RDS almacena los datos `tempdb` y archivos de registros en el directorio `D:\rdsdbdata\DATA`. Ambos archivos comienzan en 8 MB de forma predeterminada.

En instancias con un almacén de instancias, RDS almacena los datos `tempdb` y archivos de registros en el directorio `T:\rdsdbdata\DATA`.

Cuando `tempdb` tiene solo un archivo de datos (`tempdb.mdf`) y un archivo de registro (`templog.ldf`), `templog.ldf` comienza en 8 MB de forma predeterminada y `tempdb.mdf` comienza al 80 % o más de la capacidad de almacenamiento de la instancia. El veinte por ciento de la capacidad de almacenamiento o 200 GB, lo que sea menor, se mantiene libre para comenzar. Múltiples archivos de datos `tempdb` dividen el 80 % de espacio en disco de manera uniforme, mientras que los archivos de registro siempre poseen un tamaño inicial de 8 MB.

Por ejemplo, si se modifica la clase de instancia de base de datos de `db.m5.2xlarge` a `db.m5d.2xlarge`, el tamaño de los archivos de datos `tempdb` aumentan de 8 MB cada uno a un total de 234 GB.

**nota**  
Además de los datos y archivos de registro `tempdb` en el almacén de instancias (`T:\rdsdbdata\DATA`), aún se pueden crear datos y archivos de registro `tempdb` adicionales en el volumen de datos (`D:\rdsdbdata\DATA`). Esos archivos siempre tienen un tamaño inicial de 8 MB.

## Consideraciones sobre copias de seguridad
<a name="SQLServer.InstanceStore.Backups"></a>

Es posible que deba retener las copias de seguridad durante largos periodos, lo que hará que incurra en costos a lo largo del tiempo. Los bloques de registros y datos `tempdb` pueden cambiar muy a menudo en función de la carga de trabajo. Esto puede aumentar considerablemente el tamaño de la instantánea de base de datos.

Cuando `tempdb` se encuentra en el almacén de instancias, las instantáneas no incluyen archivos temporales. Esto significa que los tamaños de instantáneas son más pequeños y consumen menos de la asignación de copia de seguridad gratuita en comparación con el almacenamiento solo para EBS.

## Errores de disco lleno
<a name="SQLServer.InstanceStore.DiskFull"></a>

Si utiliza todo el espacio disponible en el almacén de instancias, es posible que reciba errores como el siguiente:
+  The transaction log for database 'tempdb' is full due to 'ACTIVE\$1TRANSACTION' (El registro de transacciones para la base de datos 'tempdb' está lleno debido a 'ACTIVE\$1TRANSACTION'). 
+ No se pudo asignar espacio para el objeto "dbo.SORT temporary run storage: 140738941419520" en la base de datos "tempdb" porque el grupo de archivos "PRIMARY" está lleno. Cree espacio en el disco al eliminar archivos innecesarios, borrar objetos en el grupo de archivos, agregar archivos adicionales al grupo de archivos o configurar el crecimiento automático para los archivos existentes en el grupo de archivos.

Puede realizar una o varias de las siguientes acciones cuando el almacén de instancias está lleno:
+ Ajuste la carga de trabajo o la forma en que utiliza `tempdb`.
+ Escale verticalmente para usar una clase de instancia de base de datos con más almacenamiento NVMe.
+ Deje de usar el almacén de instancias y utilice una clase de instancia con almacenamiento solo para EBS.
+ Utilice un modo combinado al agregar datos secundarios o archivos de registro para `tempdb` en el volumen de EBS.

## Eliminación del almacén de instancias
<a name="SQLServer.InstanceStore.Disable"></a>

Para quitar el almacén de instancias, modifique la instancia de base de datos de SQL Server para utilizar un tipo de instancia que no admita el almacén de instancias, como as db.m5, db.r5 o db.x1e.

**nota**  
Al quitar el almacén de instancias, los archivos temporales se mueven al directorio `D:\rdsdbdata\DATA` y reducen su tamaño a 8 MB.

# Uso de eventos extendidos con Amazon RDS for Microsoft SQL Server
<a name="SQLServer.ExtendedEvents"></a>

Puede utilizar eventos extendidos en Microsoft SQL Server para capturar información de depuración y solución de problemas para Amazon RDS for SQL Server. Los eventos extendidos reemplazan SQL Trace y Server Profiler, los cuales Microsoft ha dado de baja. Los eventos extendidos son similares a los trazados del generador de perfiles, pero con un control más granular sobre los eventos que se rastrean. Los eventos extendidos son compatibles con las versiones de SQL Server 2016 y posteriores en Amazon RDS. Para obtener más información, consulte [Información general de eventos extendidos](https://docs.microsoft.com/en-us/sql/relational-databases/extended-events/extended-events) en la documentación de Microsoft.

Los eventos extendidos se activan automáticamente para los usuarios con privilegios de usuario maestro en Amazon RDS for SQL Server.

**Topics**
+ [Limitaciones y recomendaciones](#SQLServer.ExtendedEvents.Limits)
+ [Configuración de eventos extendidos en RDS for SQL Server](#SQLServer.ExtendedEvents.Config)
+ [Consideraciones para implementaciones Multi-AZ](#SQLServer.ExtendedEvents.MAZ)
+ [Consultar archivos de eventos extendidos](#SQLServer.ExtendedEvents.Querying)

## Limitaciones y recomendaciones
<a name="SQLServer.ExtendedEvents.Limits"></a>

Al utilizar eventos extendidos en RDS for SQL Server, se aplican las siguientes limitaciones:
+ Los eventos extendidos solo se admiten para las ediciones Enterprise y Standard.
+ No puede modificar las sesiones de eventos extendidos predeterminadas.
+ Asegúrese de establecer el modo de partición de memoria de sesión en `NONE`.
+ El modo de retención de eventos de sesión puede ser `ALLOW_SINGLE_EVENT_LOSS` o `ALLOW_MULTIPLE_EVENT_LOSS`.
+ No se admiten los destinos de seguimiento de eventos para Windows (ETW).
+ Asegúrese de que los destinos de los archivos estén en el directorio `D:\rdsdbdata\log`.
+ Para destinos coincidentes de pares, establezca la propiedad `respond_to_memory_pressure` en `1`.
+ La memoria de destino del búfer de anillo no puede ser superior a 4 MB.
+ No se admiten las siguientes acciones:
  + `debug_break`
  + `create_dump_all_threads`
  + `create_dump_single_threads`
+ El evento `rpc_completed` se admite en las siguientes versiones y versiones posteriores: 15.0.4083.2, 14.0.3370.1, 13.0.5865.1, 12.0.6433.1, 11.0.7507.2.

## Configuración de eventos extendidos en RDS for SQL Server
<a name="SQLServer.ExtendedEvents.Config"></a>

En RDS for SQL Server, puede configurar los valores de ciertos parámetros de sesiones de eventos extendidos. En la siguiente tabla, se describen los parámetros configurables.


| Nombre del parámetro | Descripción | Valor predeterminado de RDS | Valor mínimo | Valor máximo | 
| --- | --- | --- | --- | --- | 
| xe\$1session\$1max\$1memory | Especifica la cantidad máxima de memoria que se asignará a la sesión para el almacenamiento en búfer de eventos. Este valor corresponde a la configuración max\$1memory de la sesión de evento. | 4 MB | 4 MB | 8 MB | 
| xe\$1session\$1max\$1event\$1size | Especifica el tamaño máximo de memoria permitido para eventos grandes. Este valor corresponde a la configuración max\$1event\$1size de la sesión de evento. | 4 MB | 4 MB | 8 MB | 
| xe\$1session\$1max\$1dispatch\$1latency | Especifica la cantidad de tiempo que los eventos se almacenan en búfer en la memoria antes de que se distribuyan a destinos de sesión de eventos extendidos. Este valor corresponde a la configuración max\$1dispatch\$1latency de la sesión de evento. | 30 segundos | 1 segundo | 30 segundos | 
| xe\$1file\$1target\$1size | Especifica el tamaño máximo del destino del archivo. Este valor corresponde a la configuración max\$1file\$1size del destino del archivo. | 100 MB | 10 MB | 1 GB | 
| xe\$1file\$1retention | Especifica el tiempo de retención en días para los archivos generados por los destinos de archivo de las sesiones de eventos. | 7 días | 0 días | 7 días | 

**nota**  
Si `xe_file_retention` se establece en cero, los archivos.xel se quitarán automáticamente después de que SQL Server libere el bloqueo de estos archivos. El bloqueo se libera cada vez que un archivo.xel alcanza el límite de tamaño establecido en `xe_file_target_size`.

Puede utilizar el procedimiento `rdsadmin.dbo.rds_show_configuration` almacenado para mostrar los valores actuales de estos parámetros. Por ejemplo, utilice la siguiente instrucción SQL para ver la configuración actual de `xe_session_max_memory`.

```
exec rdsadmin.dbo.rds_show_configuration 'xe_session_max_memory'
```

Puede utilizar el procedimiento `rdsadmin.dbo.rds_set_configuration` almacenado para modificarlos. Por ejemplo, utilice la siguiente instrucción SQL para establecer `xe_session_max_memory` en 4 MB.

```
exec rdsadmin.dbo.rds_set_configuration 'xe_session_max_memory', 4
```

## Consideraciones para implementaciones Multi-AZ
<a name="SQLServer.ExtendedEvents.MAZ"></a>

Cuando crea una sesión de evento extendida en una instancia de base de datos principal, no se propaga a la réplica en espera. Puede conmutar por error y crear la sesión de evento extendida en la nueva instancia de base de datos principal. También puede quitar y volver a agregar la configuración Multi-AZ para propagar la sesión de eventos extendida a la réplica en espera. RDS detiene todas las sesiones de eventos extendidos no predeterminadas en la réplica en espera, de modo que estas sesiones no consumen recursos en el modo de espera. Debido a esto, después de que una réplica en espera se convierta en la instancia de base de datos principal, asegúrese de iniciar manualmente las sesiones de evento extendidas en la nueva instancia primaria.

**nota**  
Este enfoque se aplica tanto a los grupos de disponibilidad siempre activa como a la creación de reflejo de bases de datos.

También puede utilizar un trabajo de SQL Server Agent para realizar un seguimiento de la réplica en espera e iniciar las sesiones si el modo en espera se convierte en el principal. Por ejemplo, utilice la siguiente consulta en el paso de trabajo del Agente SQL Server para reiniciar sesiones de eventos en una instancia de base de datos principal.

```
BEGIN
    IF (DATABASEPROPERTYEX('rdsadmin','Updateability')='READ_WRITE'
    AND DATABASEPROPERTYEX('rdsadmin','status')='ONLINE'
    AND (DATABASEPROPERTYEX('rdsadmin','Collation') IS NOT NULL OR DATABASEPROPERTYEX('rdsadmin','IsAutoClose')=1)
    )
    BEGIN
        IF NOT EXISTS (SELECT 1 FROM sys.dm_xe_sessions WHERE name='xe1')
            ALTER EVENT SESSION xe1 ON SERVER STATE=START
        IF NOT EXISTS (SELECT 1 FROM sys.dm_xe_sessions WHERE name='xe2')
            ALTER EVENT SESSION xe2 ON SERVER STATE=START
    END
END
```

Esta consulta reinicia las sesiones de eventos `xe1` y `xe2` en una instancia de base de datos principal si estas sesiones están en un estado detenido. También puede agregar una programación con un intervalo conveniente a esta consulta.

## Consultar archivos de eventos extendidos
<a name="SQLServer.ExtendedEvents.Querying"></a>

Puede utilizar SQL Server Management Studio o la función `sys.fn_xe_file_target_read_file` para ver datos de eventos extendidos que utilizan destinos de archivo. Para obtener más información sobre esta función, consulte [sys.fn\$1xe\$1file\$1target\$1read\$1file (Transact-SQL)](https://docs.microsoft.com/en-us/sql/relational-databases/system-functions/sys-fn-xe-file-target-read-file-transact-sql) en la documentación de Microsoft.

Los destinos de archivos de eventos extendidos solo pueden escribir archivos en el directorio `D:\rdsdbdata\log` en RDS for SQL Server.

Como ejemplo, utilice la siguiente consulta SQL para enumerar el contenido de todos los archivos de sesiones de eventos extendidos cuyos nombres comiencen por `xe`.

```
SELECT * FROM sys.fn_xe_file_target_read_file('d:\rdsdbdata\log\xe*', null,null,null);
```

# Acceso a las copias de seguridad del registro de transacciones con RDS para SQL Server
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess"></a>

Al tener acceso a las copias de seguridad del registro de transacciones para RDS para SQL Server, puede enumerar los archivos de copia de seguridad del registro de transacciones para una base de datos y copiarlos en un bucket de Amazon S3 de destino. Al copiar las copias de seguridad del registro de transacciones en un bucket de Amazon S3, puede utilizarlas en combinación con copias de seguridad de bases de datos completas y diferenciadas para realizar restauraciones puntuales de bases de datos. Utiliza los procedimientos almacenados de RDS para configurar el acceso a las copias de seguridad del registro de transacciones, enumera las copias de seguridad del registro de transacciones disponibles y las copia en su bucket de Amazon S3.

El acceso a las copias de seguridad del registro de transacciones ofrece las siguientes capacidades y beneficios:
+ Puede enumerar y ver los metadatos de las copias de seguridad del registro de transacciones disponibles para una base de datos en una instancia de base de datos de RDS para SQL Server.
+ Puede copiar las copias de seguridad del registro de transacciones disponibles de RDS para SQL Server en un bucket de Amazon S3 de destino.
+ Puede realizar restauraciones puntuales de bases de datos sin necesidad de restaurar una instancia de base de datos completa. Para obtener más información acerca la restauración de una instancia de base de datos a un momento determinado, consulte [Restauración de una instancia de base de datos a un momento especificado para Amazon RDS](USER_PIT.md).

## Disponibilidad y soporte
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Availability"></a>

Se puede acceder a las copias de seguridad del registro de transacciones dese todas las regiones de AWS. El acceso a las copias de seguridad del registro de transacciones está disponible para todas las ediciones y versiones de Microsoft SQL Server compatibles con Amazon RDS. 

## Requisitos
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Requirements"></a>

Se deben cumplir los siguientes requisitos antes de permitir el acceso a las copias de seguridad del registro de transacciones: 
+  Las copias de seguridad automatizadas deben estar habilitadas en la instancia de base de datos y la retención de las copias de seguridad debe establecerse en un valor de uno o más días. Para obtener más información sobre cómo habilitar las copias de seguridad automatizadas y configurar una política de retención, consulte [Habilitar las copias de seguridad automatizadas](USER_WorkingWithAutomatedBackups.Enabling.md). 
+ Debe existir un bucket de Amazon S3 en la misma cuenta y región que la instancia de base de datos de origen. Antes de habilitar el acceso a las copias de seguridad del registro de transacciones, elija un bucket de Amazon S3 existente o [cree uno nuevo](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingaBucket.html) para usarlo en los archivos de copia de seguridad del registro de transacciones.
+ Se debe configurar una política de permisos de bucket de Amazon S3 de la siguiente manera para permitir que Amazon RDS copie los archivos de registro de transacciones en ella:

  1. Establezca la propiedad de la titularidad de la cuenta del objeto en el bucket **Bucket Owner Preferred** (Propietario del bucket preferido).

  1. Añada la política siguiente. No habrá ninguna política de forma predeterminada, así que utilice las listas de control de acceso (ACL) del bucket para editar la política de bucket y agregarla.

  

  En el siguiente ejemplo se utiliza un ARN para especificar un recurso. Le recomendamos que utilice las claves de contexto de condición globales de `SourceArn` y `SourceAccount` en las relaciones de confianza basadas en recursos para limitar los permisos del servicio a un recurso específico. Para obtener más información sobre cómo trabajar con ARN, consulte [Nombres de recursos de Amazon (ARN) ](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) y [Nombres de recursos de Amazon (ARN) en Amazon RDS](USER_Tagging.ARN.md).

    
**Example de una política de permisos de Amazon S3 para acceder a las copias de seguridad del registro de transacciones**  

------
#### [ JSON ]

****  

  ```
      {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Only allow writes to my bucket with bucket owner full control",
              "Effect": "Allow",
              "Principal": {
                  "Service": "backups.rds.amazonaws.com"
              },
              "Action": "s3:PutObject",
              "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/{customer_path}/*",
              "Condition": {
                  "StringEquals": {
                      "s3:x-amz-acl": "bucket-owner-full-control",
                      "aws:sourceAccount": "{customer_account}",
                      "aws:sourceArn": "{db_instance_arn}"
                  }
              }
          }
      ]
  }
  ```

------
+ Un rol de (IAM) AWS Identity and Access Management para acceder al bucket de Amazon S3. Si ya tiene un rol de IAM, puede utilizarlo. También puede elegir que un nuevo rol de IAM se cree en su nombre cuando se agregue la opción `SQLSERVER_BACKUP_RESTORE` mediante la Consola de administración de AWS. Si lo desea, puede crear uno nuevo manualmente. Para obtener más información sobre cómo crear y configurar un rol de IAM con `SQLSERVER_BACKUP_RESTORE`, consulte [Creación manual de un rol de IAM para la copia de seguridad y la restauración nativas](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM).
+ La opción `SQLSERVER_BACKUP_RESTORE` debe añadirse a un grupo de opciones en la instancia de base de datos. Para obtener más información sobre cómo añadir la opción `SQLSERVER_BACKUP_RESTORE`, consulte [Compatibilidad con copia de seguridad y restauración nativas en SQL Server](Appendix.SQLServer.Options.BackupRestore.md).
**nota**  
Si la instancia de base de datos tiene habilitado el cifrado de almacenamiento, la clave y las acciones (KMS) de AWS KMS deben proporcionarse en el rol de IAM indicado en el grupo de opciones de copia de seguridad y restauración nativo.

  Si lo desea, si va a utilizar el procedimiento almacenado `rds_restore_log` para realizar restauraciones puntuales de bases de datos, le recomendamos que utilice la misma ruta de Amazon S3 para el grupo de opciones de copia de seguridad y restauración nativas y para acceder a las copias de seguridad del registro de transacciones. Este método garantiza que, cuando Amazon RDS asuma la función del grupo de opciones para realizar las funciones de registro de restauración, tenga acceso para recuperar las copias de seguridad del registro de transacciones desde la misma ruta de Amazon S3.
+ Si la instancia de base de datos está cifrada, independientemente del tipo de cifrado (clave administrada por AWS o clave administrada por el cliente), debe proporcionar una clave de KMS administrada por el cliente en el rol de IAM y en el procedimiento almacenado `rds_tlog_backup_copy_to_S3`. 

## Limitaciones y recomendaciones
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Limitations"></a>

El acceso a las copias de seguridad del registro de transacciones tiene las siguientes limitaciones y recomendaciones:
+  Puede enumerar y copiar las copias de seguridad del registro de transacciones de los últimos siete días de cualquier instancia de base de datos que tenga configurada la retención de copias de seguridad entre uno y 35 días. 
+  Debe existir el bucket de Amazon S3 que se usa para acceder a las copias de seguridad del registro de transacciones en la misma cuenta y región que la instancia de base de datos de origen. No se admite la copia entre cuentas ni entre regiones. 
+  Solo se puede configurar un bucket de Amazon S3 como destino para copiar las copias de seguridad del registro de transacciones. Puede elegir un nuevo bucket de Amazon S3 de destino con el procedimiento `rds_tlog_copy_setup` almacenado. Para obtener más información sobre cómo elegir un nuevo bucket de Amazon S3 de destino, consulte [Configuración del acceso a las copias de seguridad del registro de transacciones](USER.SQLServer.AddlFeat.TransactionLogAccess.Enabling.md).
+  No puede especificar la clave KMS cuando utilice el procedimiento `rds_tlog_backup_copy_to_S3` almacenado si la instancia de RDS no está habilitada para el cifrado de almacenamiento. 
+  No se admite la copia de varias cuentas. El rol de IAM utilizado para copiar solo permitirá el acceso de escritura a los buckets de Amazon S3 dentro de la cuenta del propietario de la instancia de base de datos. 
+  Solo se pueden ejecutar dos tareas simultáneas de cualquier tipo en una instancia de base de datos de RDS para SQL Server. 
+  Solo se puede ejecutar una tarea de copia para una única base de datos en un momento dado. Si desea copiar las copias de seguridad del registro de transacciones de varias bases de datos de la instancia de base de datos, utilice una tarea de copia independiente para cada base de datos. 
+  Si copia una copia de seguridad del registro de transacciones que ya existe con el mismo nombre en el bucket de Amazon S3, se sobrescribirá la copia de seguridad del registro de transacciones existente. 
+  Solo puede ejecutar los procedimientos almacenados que se proporcionan con acceso a las copias de seguridad del registro de transacciones en la instancia de base de datos principal. No puede ejecutar estos procedimientos almacenados en una réplica de lectura de RDS para SQL Server ni en una instancia secundaria de un clúster de base de datos Multi-AZ. 
+  Si la instancia de base de datos de RDS para SQL Server se reinicia mientras se ejecuta el procedimiento`rds_tlog_backup_copy_to_S3` almacenado, la tarea se reiniciará automáticamente desde el principio cuando la instancia de base de datos vuelva a estar en línea. Se sobrescribirán todas las copias de seguridad del registro de transacciones que se hayan copiado al bucket de Amazon S3 mientras se ejecutaba la tarea antes del reinicio. 
+ Las bases de datos del sistema Microsoft SQL Server y la base de datos `RDSAdmin` no se pueden configurar para acceder a las copias de seguridad del registro de transacciones.
+  No se admite la copia a buckets cifrados por SSE-KMS. 

# Configuración del acceso a las copias de seguridad del registro de transacciones
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Enabling"></a>

Para configurar el acceso a las copias de seguridad del registro de transacciones, complete la lista de requisitos de la sección [Requisitos](USER.SQLServer.AddlFeat.TransactionLogAccess.md#USER.SQLServer.AddlFeat.TransactionLogAccess.Requirements) y, a continuación, ejecute el procedimiento `rds_tlog_copy_setup` almacenado. El procedimiento habilitará el acceso a la función de copias de seguridad del registro de transacciones en el nivel de instancia de base de datos. No tiene que ejecutarlo para cada base de datos individual de la instancia de base de datos. 

**importante**  
Se debe conceder al usuario de la base de datos el rol `db_owner` dentro de SQL Server en cada base de datos para configurar y utilizar la función de acceso a las copias de seguridad del registro de transacciones.

**Example de uso:**  

```
exec msdb.dbo.rds_tlog_copy_setup
@target_s3_arn='arn:aws:s3:::amzn-s3-demo-bucket/myfolder';
```

El siguiente parámetro es obligatorio:
+ `@target_s3_arn`: ARN del bucket de Amazon S3 de destino en el que se copian los archivos de copias de seguridad del registro de transacciones.

**Example de configuración de un bucket de destino de Amazon S3:**  

```
exec msdb.dbo.rds_tlog_copy_setup @target_s3_arn='arn:aws:s3:::amzn-s3-demo-logging-bucket/mytestdb1';
```

Para validar la configuración, ejecute el procedimiento`rds_show_configuration` almacenado.

**Example de validación de la configuración:**  

```
exec rdsadmin.dbo.rds_show_configuration @name='target_s3_arn_for_tlog_copy';
```

Para modificar el acceso a las copias de seguridad del registro de transacciones para que apunten a un bucket de Amazon S3 diferente, puede ver el valor actual del bucket de Amazon S3 y volver a ejecutar el procedimiento `rds_tlog_copy_setup` almacenado con un nuevo valor para `@target_s3_arn`.

**Example de visualización del bucket de Amazon S3 existente configurado para acceder a las copias de seguridad del registro de transacciones**  

```
exec rdsadmin.dbo.rds_show_configuration @name='target_s3_arn_for_tlog_copy';
```

**Example de actualización de un nuevo bucket de Amazon S3 de destino**  

```
exec msdb.dbo.rds_tlog_copy_setup @target_s3_arn='arn:aws:s3:::amzn-s3-demo-logging-bucket1/mynewfolder';
```

# Publicación de las copias de seguridad del registro de transacciones disponibles
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Listing"></a>

Con RDS para SQL Server, las bases de datos configuradas para utilizar el modelo de recuperación completo y una retención de copias de seguridad de instancias de base de datos establecida en uno o más días tienen habilitadas automáticamente las copias de seguridad del registro de transacciones. Al habilitar el acceso a las copias de seguridad del registro de transacciones, tendrá a su disposición durante siete días esas copias de seguridad del registro de transacciones para que pueda copiarlas en su bucket de Amazon S3.

Una vez que haya habilitado el acceso a las copias de seguridad del registro de transacciones, puede empezar a utilizarlas para enumerar y copiar los archivos de copia de seguridad del registro de transacciones disponibles.

**Enumerar las copias de seguridad del registro de transacciones**

Para mostrar todas las copias de seguridad del registro de transacciones disponibles para una base de datos individual, llame a la función `rds_fn_list_tlog_backup_metadata`. Puede utilizar una cláusula `ORDER BY` o `WHERE` para llamar a la función.

**Example de listado y filtrado de los archivos de copia de seguridad del registro de transacciones disponibles**  

```
SELECT * from msdb.dbo.rds_fn_list_tlog_backup_metadata('mydatabasename');
SELECT * from msdb.dbo.rds_fn_list_tlog_backup_metadata('mydatabasename') WHERE rds_backup_seq_id = 3507;
SELECT * from msdb.dbo.rds_fn_list_tlog_backup_metadata('mydatabasename') WHERE backup_file_time_utc > '2022-09-15 20:44:01' ORDER BY backup_file_time_utc DESC;
```

![\[Resultado de rds_fn_list_tlog_backup_metadata\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/sql_accesstransactionlogs_func.png)


La función `rds_fn_list_tlog_backup_metadata` devuelve lo siguiente:


****  

| Nombre de la columna | Tipo de datos: | Descripción | 
| --- | --- | --- | 
| `db_name` | sysname | Nombre de la base de datos proporcionado para enumerar las copias de seguridad del registro de transacciones. | 
| `db_id` | int | Identificador interno de la base de datos para el parámetro de entrada `db_name`. | 
| `family_guid` | uniqueidentifier | Identificador único de la base de datos original en el momento de la creación. Este valor no cambia cuando se restaura la base de datos, incluso con un nombre de base de datos diferente. | 
| `rds_backup_seq_id` | int | Identificador que RDS utiliza internamente para mantener un número de secuencia para cada archivo de copia de seguridad del registro de transacciones. | 
| `backup_file_epoch` | bigint | Época en que se generó un archivo de copia de seguridad de transacciones. | 
| `backup_file_time_utc` | datetime | Valor convertido en hora UTC para el valor `backup_file_epoch`. | 
| `starting_lsn` | numeric(25,0) | Número de secuencia de registro del primer registro o del más antiguo de un archivo de copia de seguridad del registro de transacciones. | 
| `ending_lsn` | numeric(25,0) | Número de secuencia de registro del último registro o del siguiente de un archivo de copia de seguridad del registro de transacciones. | 
| `is_log_chain_broken` | bit | Valor booleano que indica si la cadena de registro está interrumpida entre el archivo de copia de seguridad del registro de transacciones actual y el archivo de copia de seguridad del registro de transacciones anterior. | 
| `file_size_bytes` | bigint | Tamaño del conjunto de copias de seguridad transaccional en bytes. | 
| `Error` | varchar(4000) | Mensaje de error si la función `rds_fn_list_tlog_backup_metadata` lanza una excepción. NULL si no hay excepciones. | 

# Copia de las copias de seguridad del registro de transacciones
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Copying"></a>

Para copiar un conjunto de copias de seguridad del registro de transacciones disponibles para una base de datos individual en su bucket de Amazon S3, ejecute el procedimiento `rds_tlog_backup_copy_to_S3` almacenado. El procedimiento `rds_tlog_backup_copy_to_S3` almacenado iniciará una nueva tarea para copiar las copias de seguridad del registro de transacciones. 

**nota**  
El procedimiento `rds_tlog_backup_copy_to_S3` almacenado copiará las copias de seguridad del registro de transacciones sin validarlas con el atributo `is_log_chain_broken`. Por este motivo, debe confirmar manualmente una cadena de registros ininterrumpida antes de ejecutar el procedimiento almacenado `rds_tlog_backup_copy_to_S3`. Para obtener más información, consulte [Validación de la cadena de registros de copias de seguridad del registro de transacciones](#USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.LogChain).

**Example de uso del procedimiento `rds_tlog_backup_copy_to_S3` almacenado**  

```
exec msdb.dbo.rds_tlog_backup_copy_to_S3
	@db_name='mydatabasename',
	[@kms_key_arn='arn:aws:kms:region:account-id:key/key-id'],	
	[@backup_file_start_time='2022-09-01 01:00:15'],
	[@backup_file_end_time='2022-09-01 21:30:45'],
	[@starting_lsn=149000000112100001],
	[@ending_lsn=149000000120400001],
	[@rds_backup_starting_seq_id=5],
	[@rds_backup_ending_seq_id=10];
```

Están disponibles los siguientes parámetros de entrada:


****  

| Parámetro | Descripción | 
| --- | --- | 
| `@db_name` | Nombre de la base de datos proporcionado para copiar las copias de seguridad del registro de transacciones. | 
| `@kms_key_arn` |  Una clave de KMS administrada por el cliente. Si cifra su instancia de base de datos con una clave de KMS administrada de AWS, debe crear una clave administrada por el cliente. Si cifra la instancia de base de datos con una clave administrada por el cliente, puede utilizar el mismo ARN de clave de KMS. | 
| `@backup_file_start_time` | La marca de tiempo UTC proporcionada en la columna `[backup_file_time_utc]` de la función `rds_fn_list_tlog_backup_metadata`. | 
| `@backup_file_end_time` | La marca de tiempo UTC proporcionada en la columna `[backup_file_time_utc]` de la función `rds_fn_list_tlog_backup_metadata`. | 
| `@starting_lsn` | Número de secuencia de registro (LSN) proporcionado en la columna `[starting_lsn]` de la función `rds_fn_list_tlog_backup_metadata`. | 
| `@ending_lsn` | Número de secuencia de registro (LSN) proporcionado en la columna `[ending_lsn]` de la función `rds_fn_list_tlog_backup_metadata`. | 
| `@rds_backup_starting_seq_id` | ID de secuencia proporcionado en la columna `[rds_backup_seq_id]` de la función `rds_fn_list_tlog_backup_metadata`. | 
| `@rds_backup_ending_seq_id` | ID de secuencia proporcionado en la columna `[rds_backup_seq_id]` de la función `rds_fn_list_tlog_backup_metadata`. | 

Puede especificar un conjunto de parámetros de tiempo, LSN o ID de secuencia. Solo se requiere un conjunto de parámetros.

También puede especificar un único parámetro en cualquiera de los conjuntos. Por ejemplo, al proporcionar un valor únicamente para el parámetro `backup_file_end_time`, todos los archivos de copia de seguridad del registro de transacciones disponibles antes de esa fecha dentro del límite de siete días se copiarán a su bucket de Amazon S3. 

A continuación se muestran las combinaciones de parámetros de entrada válidas para el procedimiento `rds_tlog_backup_copy_to_S3` almacenado.


****  

| Parámetros proporcionados | Resultado esperado | 
| --- | --- | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3  <br />	@db_name = 'testdb1',<br />            @backup_file_start_time='2022-08-23 00:00:00',<br />            @backup_file_end_time='2022-08-30 00:00:00';</pre>  | Copia las copias de seguridad del registro de transacciones de los últimos siete días y se encuentra en el rango proporcionado entre `backup_file_start_time` y `backup_file_end_time`. En este ejemplo, el procedimiento almacenado copiará las copias de seguridad del registro de transacciones que se generaron entre «2021-08-23 00:00:00» y «2021-08-30 00:00:00».  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />           @db_name = 'testdb1',<br />           @backup_file_start_time='2022-08-23 00:00:00';</pre>  | Copia las copias de seguridad del registro de transacciones de los últimos siete días empezando por la `backup_file_start_time` proporcionada. En este ejemplo, el procedimiento almacenado copiará las copias de seguridad del registro de transacciones desde «2021-08-23 00:00:00» hasta la última copia de seguridad del registro de transacciones.  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />          @db_name = 'testdb1',<br />          @backup_file_end_time='2022-08-30 00:00:00';</pre>  | Copia las copias de seguridad del registro de transacciones de los últimos siete días hasta la `backup_file_end_time` proporcionada. En este ejemplo, el procedimiento almacenado copiará las copias de seguridad del registro de transacciones entre «2021-08-23 00:00:00» y «2021-08-30 00:00:00».  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />         @db_name='testdb1',<br />         @starting_lsn =1490000000040007,<br />         @ending_lsn =  1490000000050009;</pre>  | Copia las copias de seguridad del registro de transacciones disponibles en los últimos siete días y que se encuentran en el rango proporcionado entre `starting_lsn` y `ending_lsn`. En este ejemplo, el procedimiento almacenado copiará las copias de seguridad del registro de transacciones de los últimos siete días con un intervalo de LSN comprendido entre 1490000000040007 y 1490000000050009.   | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />        @db_name='testdb1',<br />        @starting_lsn =1490000000040007;</pre>  |  Copia las copias de seguridad del registro de transacciones disponibles en los últimos siete días empezando por la `starting_lsn`. En este ejemplo, el procedimiento almacenado copiará las copias de seguridad del registro de transacciones desde el LSN 1490000000040007 hasta la última copia de seguridad del registro de transacciones.   | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />        @db_name='testdb1',<br />        @ending_lsn  =1490000000050009;</pre>  |  Copia las copias de seguridad del registro de transacciones disponibles en los últimos siete días hasta la `ending_lsn` proporcionada. En este ejemplo, el procedimiento almacenado copiará las copias de seguridad del registro de transacciones empezando por los últimos siete días hasta el LSN 1490000000050009.   | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />       @db_name='testdb1',<br />       @rds_backup_starting_seq_id= 2000,<br />       @rds_backup_ending_seq_id= 5000;</pre>  |  Copia las copias de seguridad del registro de transacciones disponibles en los últimos siete días y que se encuentran en el rango proporcionado entre `rds_backup_starting_seq_id` y `rds_backup_ending_seq_id`. En este ejemplo, el procedimiento almacenado copiará las copias de seguridad del registro de transacciones de los últimos siete días y dentro del rango de ID de secuencia de copia de seguridad de RDS proporcionado, empezando por seq\$1id 2000 y hasta seq\$1id 5000.   | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />       @db_name='testdb1',<br />       @rds_backup_starting_seq_id= 2000;</pre>  |  Copia las copias de seguridad del registro de transacciones disponibles en los últimos siete días empezando por la `rds_backup_starting_seq_id`. En este ejemplo, el procedimiento almacenado copiará las copias de seguridad del registro de transacciones desde el seq\$1id 2000 hasta la última copia de seguridad del registro de transacciones.   | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />      @db_name='testdb1',<br />      @rds_backup_ending_seq_id= 5000;</pre>  |  Copia las copias de seguridad del registro de transacciones disponibles en los últimos siete días hasta la `rds_backup_ending_seq_id` proporcionada. En este ejemplo, el procedimiento almacenado copiará las copias de seguridad del registro de transacciones empezando por los últimos siete días hasta el seq\$1id 5000.   | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />      @db_name='testdb1',<br />      @rds_backup_starting_seq_id= 2000;<br />      @rds_backup_ending_seq_id= 2000;</pre>  |  Copia una única copia de seguridad del registro de transacciones con el `rds_backup_starting_seq_id` proporcionado, si está disponible en los últimos siete días. En este ejemplo, el procedimiento almacenado copiará una única copia de seguridad del registro de transacciones que tenga un seq\$1id de 2000, si existe en los últimos siete días.   | 

## Validación de la cadena de registros de copias de seguridad del registro de transacciones
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.LogChain"></a>

 Las bases de datos configuradas para acceder a las copias de seguridad del registro de transacciones deben tener habilitada la retención automática de copias de seguridad. La retención automática de copias de seguridad establece las bases de datos de la instancia de base de datos en el modelo de recuperación `FULL`. Para permitir la restauración puntual de una base de datos, evite cambiar el modelo de recuperación de la base de datos, ya que puede provocar la interrupción de la cadena de registros. Se recomienda mantener la base de datos configurada en el modelo de recuperación `FULL`.

Para validar manualmente la cadena de registros antes de copiar las copias de seguridad del registro de transacciones, llame a la función `rds_fn_list_tlog_backup_metadata` y revise los valores de la columna `is_log_chain_broken`. Un valor de 1 indica que la cadena de registro se interrumpió entre la copia de seguridad del registro actual y la copia de seguridad del registro anterior.

El siguiente ejemplo muestra una cadena de registros rota en la salida del procedimiento almacenado `rds_fn_list_tlog_backup_metadata`. 

![\[Resultado de rds_fn_list_tlog_backup_metadata que muestra una cadena de registros rota.\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/sql_accesstransactionlogs_logchain_error.png)


En una cadena de registros normal, el valor del número de secuencia de registro (LSN) de first\$1lsn para un un rds\$1sequence\$1id determinado debe coincidir con el valor de last\$1lsn del rds\$1sequence\$1id anterior. En la imagen, el rds\$1sequence\$1id de 45 tiene un valor first\$1lsn de 90987, que no coincide con el valor last\$1lsn de 90985 del rds\$1sequence\$1id anterior de 44.

Para obtener más información sobre la arquitectura del registro de transacciones de SQL Server y los números de secuencia de registro, consulte la [Arquitectura lógica del registro de transacciones](https://learn.microsoft.com/en-us/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide?view=sql-server-ver15#Logical_Arch) en la documentación de Microsoft SQL Server.

# Estructura de archivos y carpetas del bucket de Amazon S3
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.S3namingConvention"></a>

Las copias de seguridad del registro de transacciones tienen la siguiente estructura y convención de nomenclatura estándar dentro de un bucket de Amazon S3:
+ Se crea una nueva carpeta en la ruta `target_s3_arn` de cada base de datos con la estructura de nomenclatura como `{db_id}.{family_guid}`.
+ Dentro de la carpeta, las copias de seguridad del registro de transacciones tienen una estructura de nombre de archivo del tipo `{db_id}.{family_guid}.{rds_backup_seq_id}.{backup_file_epoch}`.
+ Puede ver los detalles de `family_guid,db_id,rds_backup_seq_id and backup_file_epoch` con la función `rds_fn_list_tlog_backup_metadata`.

En el siguiente ejemplo, se muestra la estructura de archivos y carpetas de un conjunto de copias de seguridad del registro de transacciones en un bucket de Amazon S3.

![\[Estructura de buckets de Amazon S3 con acceso a los registros de transacciones\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/images/sql_accesstransactionlogs_s3.png)


# Seguimiento del estado de las tareas
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.TrackTaskStatus"></a>

 Para realizar un seguimiento del estado de las tareas de copia, llame al procedimiento almacenado `rds_task_status`. Si no proporciona ningún parámetro, el procedimiento almacenado devuelve el estado de todas las tareas. 

**Example de uso:**  

```
exec msdb.dbo.rds_task_status
  @db_name='database_name',
  @task_id=ID_number;
```

Los siguientes parámetros son opcionales:
+ `@db_name`: nombre de la base de datos para la que se desea mostrar el estado de una tarea.
+ `@task_id`: ID de la tarea cuyo estado se desea mostrar.

**Example de enumeración del estado de un ID de tarea específica:**  

```
exec msdb.dbo.rds_task_status @task_id=5;
```

**Example de enumeración del estado de una tarea y una base de datos específicas:**  

```
exec msdb.dbo.rds_task_status@db_name='my_database',@task_id=5;
```

**Example de enumeración de todas las tareas y sus estados en una base de datos específica:**  

```
exec msdb.dbo.rds_task_status @db_name='my_database';
```

**Example de enumeración de todas las tareas y sus estados en la instancia de base de datos actual:**  

```
exec msdb.dbo.rds_task_status;
```

# Cancelación de una tarea
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.CancelTask"></a>

Para cancelar una tarea de ejecución, llame al procedimiento almacenado `rds_cancel_task`.

**Example de uso:**  

```
exec msdb.dbo.rds_cancel_task @task_id=ID_number;
```

El siguiente parámetro es obligatorio:
+ `@task_id`: ID de la tarea que se va a cancelar. Puede ver el ID de la tarea llamando al procedimiento almacenado `rds_task_status`.

Para obtener más información acerca de cómo ver y cancelar las tareas en ejecución, consulte [Importación y exportación de bases de datos de SQL Server por copias de seguridad y restauración nativas](SQLServer.Procedural.Importing.md).

# Solución de problemas del acceso a las copias de seguridad del registro de transacciones
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Troubleshooting"></a>

A continuación se indican los problemas que se puede encontrar al utilizar los procedimientos almacenados para acceder a las copias de seguridad del registro de transacciones.


****  

| Procedimiento almacenado | Mensaje de error | Problema | Sugerencias para la solución de problemas | 
| --- | --- | --- | --- | 
| rds\$1tlog\$1copy\$1setup | Las copias de seguridad están deshabilitadas en esta instancia de base de datos. Habilite las copias de seguridad de instancias de base de datos con una retención de al menos 1 e inténtelo de nuevo. | Las copias de seguridad automatizadas no están habilitadas para la instancia de base de datos. |  La retención de copias de seguridad de instancias de base de datos debe estar habilitada con una retención de al menos un día. Para obtener más información sobre cómo habilitar las copias de seguridad automatizadas y configurar una retención de copias de seguridad, consulte [Backup retention period](USER_WorkingWithAutomatedBackups.BackupRetention.md).  | 
| rds\$1tlog\$1copy\$1setup | Error al ejecutar el procedimiento almacenado rds\$1tlog\$1copy\$1setup. Vuelva a conectarse al punto de conexión de RDS e inténtelo de nuevo. | Se ha producido un error interno. | Vuelva a conectarse al punto de conexión de RDS y vuelva a ejecutar el procedimiento almacenado `rds_tlog_copy_setup`. | 
| rds\$1tlog\$1copy\$1setup | No se admite la ejecución del procedimiento almacenado rds\$1tlog\$1backup\$1copy\$1setup dentro de una transacción. Compruebe que la sesión no tenga transacciones abiertas e inténtelo de nuevo.  | El procedimiento almacenado se ha intentado dentro de una transacción utilizando `BEGIN` y `END`. | Evite utilizar`BEGIN` y `END` cuando ejecute el procedimiento almacenado `rds_tlog_copy_setup`. | 
| rds\$1tlog\$1copy\$1setup | El nombre del bucket de S3 para el parámetro de entrada `@target_s3_arn` debe contener al menos un carácter que no sea un espacio.  | Se ha proporcionado un valor incorrecto para el parámetro de entrada `@target_s3_arn`. | Asegúrese de que el parámetro de entrada `@target_s3_arn` especifique el ARN completo del bucket de Amazon S3. | 
| rds\$1tlog\$1copy\$1setup | La opción `SQLSERVER_BACKUP_RESTORE` no está habilitada o está en proceso de habilitarse. Habilite la opción o vuelva a intentarlo más tarde.  | La opción `SQLSERVER_BACKUP_RESTORE` no está habilitada en la instancia de base de datos o simplemente estaba habilitada y pendiente de activación interna. | Habilite la opción `SQLSERVER_BACKUP_RESTORE` tal y como se especifica en la sección Requisitos. Espere unos minutos y vuelva a ejecutar el procedimiento almacenado `rds_tlog_copy_setup`. | 
| rds\$1tlog\$1copy\$1setup | El ARN S3 de destino para el parámetro de entrada `@target_s3_arn` no puede estar vacío ni ser nulo.  | Se ha proporcionado un valor `NULL` para el parámetro de entrada `@target_s3_arn` o no se ha proporcionado el valor. | Asegúrese de que el parámetro de entrada `@target_s3_arn` especifique el ARN completo del bucket de Amazon S3. | 
| rds\$1tlog\$1copy\$1setup | El ARN de S3 de destino para el parámetro de entrada `@target_s3_arn` debe empezar por arn:aws.  | El parámetro de entrada `@target_s3_arn` se ha proporcionado sin `arn:aws` en la parte delantera. | Asegúrese de que el parámetro de entrada `@target_s3_arn` especifique el ARN completo del bucket de Amazon S3. | 
| rds\$1tlog\$1copy\$1setup | El ARN S3 de destino ya está configurado en el valor proporcionado.  | El procedimiento almacenado `rds_tlog_copy_setup` se ha ejecutado anteriormente y se ha configurado con un ARN de bucket de Amazon S3. | Para modificar el valor del bucket de Amazon S3 para acceder a las copias de seguridad del registro de transacciones, proporcione otro `target S3 ARN`. | 
| rds\$1tlog\$1copy\$1setup | No se pueden generar las credenciales para habilitar el acceso a las copias de seguridad del registro de transacciones. Confirme el ARN de la ruta de S3 proporcionada con `rds_tlog_copy_setup` e inténtelo de nuevo más tarde.  | Se ha producido un error no especificado al generar las credenciales para permitir el acceso a las copias de seguridad del registro de transacciones. | Revise la configuración e inténtelo de nuevo.  | 
| rds\$1tlog\$1copy\$1setup | No puede ejecutar el procedimiento almacenado rds\$1tlog\$1copy\$1setup mientras haya tareas pendientes. Espere a que se completen las tareas pendientes e inténtelo de nuevo.  | Solo se pueden ejecutar dos tareas a la vez. Hay tareas pendientes de finalización. | Visualice las tareas pendientes y espere a que se completen. Para obtener más información sobre monitorear el estado de las tareas, consulte [Seguimiento del estado de las tareas](USER.SQLServer.AddlFeat.TransactionLogAccess.TrackTaskStatus.md).  | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | Ya se ha emitido una tarea de copia del archivo de copia de seguridad de T-log para la base de datos: %s con el ID de tarea: %d, inténtelo de nuevo más tarde.  | Solo se puede ejecutar una tarea de copia para una base de datos determinada en un momento dado. Hay tareas de copia pendientes que todavía no han finalizado. | Visualice las tareas pendientes y espere a que se completen. Para obtener más información sobre monitorear el estado de las tareas, consulte [Seguimiento del estado de las tareas](USER.SQLServer.AddlFeat.TransactionLogAccess.TrackTaskStatus.md).  | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | Debe proporcionarse al menos uno de estos tres conjuntos de parámetros. SET-1:(@backup\$1file\$1start\$1time, @backup\$1file\$1end\$1time) \$1 SET-2:(@starting\$1lsn, @ending\$1lsn) \$1 SET-3:(@rds\$1backup\$1starting\$1seq\$1id, @rds\$1backup\$1ending\$1seq\$1id)  | No se ha propocionado ninguno de los tres conjuntos de parámetros o a uno de ellos le falta un parámetro obligatorio. | Puede especificar el parámetro de tiempo, el LSN o el ID de secuencia. Se requiere un conjunto de estos tres conjuntos de parámetros. Para obtener más información acerca de los parámetros requeridos, consulte [Copia de las copias de seguridad del registro de transacciones](USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.md). | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | Las copias de seguridad están deshabilitadas en su instancia. Habilite las copias de seguridad e inténtelo de nuevo más adelante. | Las copias de seguridad automatizadas no están habilitadas para la instancia de base de datos. |  Para obtener más información sobre cómo habilitar las copias de seguridad automatizadas y configurar una retención de copias de seguridad, consulte [Backup retention period](USER_WorkingWithAutomatedBackups.BackupRetention.md).  | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | No se encuentra la base de datos %s dada. | El valor proporcionado para el parámetro de entrada `@db_name` no coincide con el nombre de la base de datos de la instancia de base de datos. | Utilice el nombre de la base de datos correcto. Para enumerar todas las bases de datos por nombre, ejecute `SELECT * from sys.databases`. | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | No se puede ejecutar el procedimiento almacenado rds\$1tlog\$1backup\$1copy\$1to\$1S3 para las bases de datos del sistema SQL Server o la base de datos rdsadmin.  | El valor proporcionado para el parámetro de entrada `@db_name` coincide con el nombre de la base de datos del sistema SQL Server o con la base de datos RDSAdmin. | No se permite el uso de las siguientes bases de datos para acceder a las copias de seguridad del registro de transacciones: `master, model, msdb, tempdb, RDSAdmin.`  | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | El nombre de la base de datos del parámetro de entrada @db\$1name no puede estar vacío ni ser nulo.  | El valor proporcionado para el parámetro de entrada `@db_name` estaba vacío o `NULL`. | Utilice el nombre de la base de datos correcto. Para enumerar todas las bases de datos por nombre, ejecute `SELECT * from sys.databases`. | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | El período de retención de la copia de seguridad de la instancia de base de datos se debe establecer en al menos 1 para ejecutar el procedimiento almacenado rds\$1tlog\$1backup\$1copy\$1setup.  | Las copias de seguridad automatizadas no están habilitadas para la instancia de base de datos. | Para obtener más información sobre cómo habilitar las copias de seguridad automatizadas y configurar una retención de copias de seguridad, consulte [Backup retention period](USER_WorkingWithAutomatedBackups.BackupRetention.md). | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | Error al ejecutar el procedimiento almacenado rds\$1tlog\$1backup\$1copy\$1to\$1S3. Vuelva a conectarse al punto de conexión de RDS e inténtelo de nuevo.  | Se ha producido un error interno. | Vuelva a conectarse al punto de conexión de RDS y vuelva a ejecutar el procedimiento almacenado `rds_tlog_backup_copy_to_S3`. | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | Solo se puede proporcionar uno de estos tres conjuntos de parámetros. SET-1:(@backup\$1file\$1start\$1time, @backup\$1file\$1end\$1time) \$1 SET-2:(@starting\$1lsn, @ending\$1lsn) \$1 SET-3:(@rds\$1backup\$1starting\$1seq\$1id, @rds\$1backup\$1ending\$1seq\$1id)  | Se han proporcionado varios conjuntos de parámetros. | Puede especificar el parámetro de tiempo, el LSN o el ID de secuencia. Se requiere un conjunto de estos tres conjuntos de parámetros. Para obtener más información acerca de los parámetros requeridos, consulte [Copia de las copias de seguridad del registro de transacciones](USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.md).  | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | No se admite la ejecución del procedimiento almacenado rds\$1tlog\$1backup\$1copy\$1to\$1S3 dentro de una transacción. Compruebe que la sesión no tenga transacciones abiertas e inténtelo de nuevo.  | El procedimiento almacenado se ha intentado dentro de una transacción utilizando `BEGIN` y `END`. | Evite utilizar`BEGIN` y `END` cuando ejecute el procedimiento almacenado `rds_tlog_backup_copy_to_S3`. | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | Los parámetros proporcionados están fuera del período de retención del registro de copia de seguridad de transacciones. Para ver una lista de los archivos de copia de seguridad del registro de transacciones disponibles, ejecute la función rds\$1fn\$1list\$1tlog\$1backup\$1metadata.  | No hay copias de seguridad del registro de transacciones disponibles para los parámetros de entrada proporcionados que se ajusten a la ventana de retención de copias. | Vuelva a intentarlo con un conjunto de parámetros válido. Para obtener más información acerca de los parámetros requeridos, consulte [Copia de las copias de seguridad del registro de transacciones](USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.md). | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | Se ha producido un error de permisos al procesar la solicitud. Asegúrese de que el bucket esté en la misma cuenta y región que la instancia de base de datos y confirme los permisos de la política del bucket de S3 con la plantilla de la documentación pública.  | Se ha detectado un problema con el bucket de S3 proporcionado o con sus permisos de política. | Confirme que la configuración de acceso a las copias de seguridad del registro de transacciones es correcta. Para obtener más información sobre los requisitos de configuración de su bucket de S3, consulte [Requisitos](USER.SQLServer.AddlFeat.TransactionLogAccess.md#USER.SQLServer.AddlFeat.TransactionLogAccess.Requirements). | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | No está permitido ejecutar el procedimiento almacenado `rds_tlog_backup_copy_to_S3` en una instancia de réplica de lectura de RDS.  | Se ha intentado realizar el procedimiento almacenado en una instancia de réplica de lectura de RDS. | Conecte con la instancia de base de datos principal de RDS para ejecutar el procedimiento almacenado `rds_tlog_backup_copy_to_S3`. | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | El LSN para el parámetro de entrada `@starting_lsn` debe ser inferior a `@ending_lsn`.  | El valor proporcionado para el parámetro de entrada `@starting_lsn` era mayor que el valor proporcionado para el parámetro de entrada `@ending_lsn`. | Asegúrese de que el valor proporcionado para el parámetro de entrada `@starting_lsn` sea inferior al valor proporcionado para el parámetro de entrada `@ending_lsn`. | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | El procedimiento almacenado `rds_tlog_backup_copy_to_S3` solo lo pueden realizar los miembros del rol `db_owner` en la base de datos de origen.  | No se ha otorgado el rol `db_owner` a la cuenta que intenta ejecutar el procedimiento almacenado `rds_tlog_backup_copy_to_S3` en el `db_name` proporcionado. | Asegúrese de que la cuenta que ejecuta el procedimiento almacenado esté autorizada con el rol `db_owner` para el `db_name` proporcionado. | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | El ID de secuencia para el parámetro de entrada`@rds_backup_starting_seq_id` debe ser menor o igual que `@rds_backup_ending_seq_id`.  | El valor proporcionado para el parámetro de entrada `@rds_backup_starting_seq_id` era mayor que el valor proporcionado para el parámetro de entrada `@rds_backup_ending_seq_id`. | Asegúrese de que el valor proporcionado para el parámetro de entrada `@rds_backup_starting_seq_id` sea inferior al valor proporcionado para el parámetro de entrada `@rds_backup_ending_seq_id`. | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | La opción SQLSERVER\$1BACKUP\$1RESTORE no está habilitada o está en proceso de habilitarse. Habilite la opción o vuelva a intentarlo más tarde.  | La opción `SQLSERVER_BACKUP_RESTORE` no está habilitada en la instancia de base de datos o simplemente estaba habilitada y pendiente de activación interna. | Habilite la opción `SQLSERVER_BACKUP_RESTORE` tal y como se especifica en la sección Requisitos. Espere unos minutos y vuelva a ejecutar el procedimiento almacenado `rds_tlog_backup_copy_to_S3`. | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | La hora de inicio del parámetro de entrada `@backup_file_start_time` debe ser inferior a `@backup_file_end_time`.  | El valor proporcionado para el parámetro de entrada `@backup_file_start_time` era mayor que el valor proporcionado para el parámetro de entrada `@backup_file_end_time`. | Asegúrese de que el valor proporcionado para el parámetro de entrada `@backup_file_start_time` sea inferior al valor proporcionado para el parámetro de entrada `@backup_file_end_time`. | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | No hemos podido procesar la solicitud por falta de acceso. Compruebe la configuración y los permisos de la función.  | Puede que haya un problema con los permisos del bucket de Amazon S3 o que el bucket de Amazon S3 proporcionad o esté en otra cuenta o región. | Asegúrese de que los permisos de la política de bucket de Amazon S3 estén concedidos para poder acceder a RDS. Compruebe que el bucket de Amazon S3 esté en la misma cuenta y región que la instancia de base de datos. | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | No puede proporcionar un ARN de clave KMS como parámetro de entrada para el procedimiento almacenado para las instancias que no estén cifradas para almacenamiento.  | Si el cifrado de almacenamiento no está habilitado en la instancia de base de datos, no se deberá proporcionar el parámetro de entrada `@kms_key_arn`. | No proporcione ningún parámetro de entrada para `@kms_key_arn`. | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | Debe proporcionar un ARN de clave KMS como parámetro de entrada para el procedimiento almacenado para almacenar instancias cifradas.  | Si el cifrado de almacenamiento está habilitado en la instancia de base de datos, se deberá proporcionar el parámetro de entrada `@kms_key_arn`. | Proporcione un parámetro de entrada para `@kms_key_arn` con un valor que coincida con el ARN del bucket de Amazon S3 para usarlo en las copias de seguridad del registro de transacciones. | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | Debe ejecutar el procedimiento almacenado `rds_tlog_copy_setup` y configurar `@target_s3_arn`, antes de ejecutar el procedimiento almacenado `rds_tlog_backup_copy_to_S3`.  | El acceso al procedimiento de configuración de las copias de seguridad del registro de transacciones no se ha completado antes de intentar ejecutar el procedimiento almacenado `rds_tlog_backup_copy_to_S3`. | Debe ejecutar el procedimiento almacenado `rds_tlog_copy_setup` antes de ejecutar el procedimiento almacenado `rds_tlog_backup_copy_to_S3`. Para obtener más información sobre cómo ejecutar el procedimiento de configuración para acceder a las copias de seguridad del registro de transacciones, consulte [Configuración del acceso a las copias de seguridad del registro de transacciones](USER.SQLServer.AddlFeat.TransactionLogAccess.Enabling.md).  | 