From 63a87cce50ab5c146f7045c92c0381fe73403d87 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 26 May 2017 10:37:21 -0700 Subject: [PATCH 001/336] Add new high availability content for linux --- docs/linux/TOC.md | 4 +- .../1-read-scale-out.png | Bin 0 -> 4279 bytes .../2-witness.png | Bin 0 -> 5928 bytes .../3-three-replica.png | Bin 0 -> 9762 bytes .../sql-server-linux-availability-group-ha.md | 212 ++++++++++++++++++ 5 files changed, 214 insertions(+), 2 deletions(-) create mode 100644 docs/linux/media/sql-server-linux-availability-group-ha/1-read-scale-out.png create mode 100644 docs/linux/media/sql-server-linux-availability-group-ha/2-witness.png create mode 100644 docs/linux/media/sql-server-linux-availability-group-ha/3-three-replica.png create mode 100644 docs/linux/sql-server-linux-availability-group-ha.md diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index 9ae46a68fdd..07ddf2cd6b0 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -42,13 +42,13 @@ ### [SUSE Linux Enterprise Server]() #### [Configure (HA add-on)](sql-server-linux-shared-disk-cluster-sles-configure.md) ## [Availability Groups](sql-server-linux-availability-group-overview.md) -### [Create for high availability]() +### [Create for high availability](sql-server-linux-availability-group-ha.md) #### [Configure AG](sql-server-linux-availability-group-configure-ha.md) #### [Configure on RHEL](sql-server-linux-availability-group-cluster-rhel.md) #### [Configure on SUSE](sql-server-linux-availability-group-cluster-sles.md) #### [Configure on Ubuntu](sql-server-linux-availability-group-cluster-ubuntu.md) #### [Operate](sql-server-linux-availability-group-failover-ha.md) -### [Create for read-scale only]() +### [Create for read scale-out only]() #### [Configure AG](sql-server-linux-availability-group-configure-rs.md) # [Security](sql-server-linux-security-overview.md) ## [Get started with security features](sql-server-linux-security-get-started.md) diff --git a/docs/linux/media/sql-server-linux-availability-group-ha/1-read-scale-out.png b/docs/linux/media/sql-server-linux-availability-group-ha/1-read-scale-out.png new file mode 100644 index 0000000000000000000000000000000000000000..e1181179d1ede7188baafb43dda72c77c77082f0 GIT binary patch literal 4279 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 Z_kSQ|o-)iLILZJ3002ovPDHLkV1ke{M700_ literal 0 HcmV?d00001 diff --git a/docs/linux/media/sql-server-linux-availability-group-ha/2-witness.png b/docs/linux/media/sql-server-linux-availability-group-ha/2-witness.png new file mode 100644 index 0000000000000000000000000000000000000000..98bc014eacbbb229e5a48790185d09fecbd840a5 GIT binary patch literal 5928 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 literal 0 HcmV?d00001 diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md new file mode 100644 index 00000000000..2c5a8e45211 --- /dev/null +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -0,0 +1,212 @@ +--- +title: "SQL Server Always On availability group deployment patterns | Microsoft Docs" +ms.custom: "" +ms.date: "05/18/2017" +ms.prod: sql-linux +ms.reviewer: "" +ms.suite: "" +ms.technology: database-engine +ms.tgt_pltfrm: "" +ms.topic: article +ms.assetid: edd75f68-dc62-4479-a596-57ce8ad632e5 +caps.latest.revision: 34 +author: "MikeRayMSFT" +ms.author: "mikeray" +manager: "jhubbard" + +--- + +# High availability and data protection for availability group deployment architectures + +This article presents supported deployment architectures for SQL Server Always On availability groups on Linux servers. An availability group supports high availability and data protection. Automatic failover provides high availability and disaster recovery. Synchronized replicas provide data protection. + +>[!NOTE] +>In addition to high availability and data protection, an availability group can also provide disaster recovery, cross platform migration, and read scale-out. This article primarily discusses implementations for high availability and data protection. + +With Windows Server failover clustering a common architecture for high availability uses two synchronous replicas and a [file-share witness](http://technet.microsoft.com/library/cc731739.aspx). The file-share witness validates the availability group configuration - status of synchronization, the role of the replica, for example. This ensures that the most current member owns the clustered resources. + +The current high availability solutions for Linux do not accommodate an external witness like like the file share witness in a Windows Server failover cluster. When there is no Windows Server failover cluster, the availability group configuration is stored in the SQL Server instances, hence the availability group requires at least three synchronous replicas for high availability and data protection. After you create an availability group on Linux servers you create a cluster resource. The cluster resource settings determine the configuration for high availability. By default the SQL Server cluster manager will configure the availability group for high availability when you create a cluster resource for an availability group. + +Choose an availability group design to meet specific business requirements for high availability, data protection, and read scale-out. + +>[!IMPORTANT] +>The following architectures describe three availability group design patterns and the capabilities of each pattern. These design patterns apply to availability groups with `CLUSTER_TYPE = EXTERNAL` or `CLUSTER_TYPE = NONE`. + +The architectures include: + +- **Three synchronous replicas** + +- **Two synchronous replicas and a witness replica** + +- **Read scale-out only** + +The architectures allow you to balance costs with business requirements. + +## How the architecture affects default settings + +The cluster resource setting `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` guarantees that each transaction is written to a minimum number of secondary replica logs before committing the transaction on the primary replica. This setting can affect both high availability and data protection, depending on the architecture. When you install the SQL Server resource agent - `mssql-sserver-ha` - and create the availability group resource, the cluster manager detects the availability group architecture and sets `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` accordingly. + +If supported by the architecture, the resource agent parameter `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` is set to the value that provides high availability and data protection. If the architecture cannot support both, the default is set for high availability. If the architecture cannot support high availability, the default is set for data protection. For more information, see [Understand SQL Server resource agent for pacemaker](#pacemakerNotify). + +The following sections explain the default behavior for the cluster resource. + +## Three synchronous replicas + +This architecture consists of three synchronous replicas. By default, it provides high availability and data protection. It can also provide read scale-out. + +![Three replicas][3] + +Each instance of SQL Server requires an appropriate license. + +The following table describes the high availability and data protection behavior based on the settings for three synchronous replicas. + +|`REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`|0 |1 \*|2 +| --- |:---:|:---:|:---: +|High availability| |✔| +|Data protection | |✔|✔| +|Automatic failover after primary replica outage| |✔| +|Continue after one secondary replica outage| |✔| +|Continue after two secondary replica outages|✔| | +\* Default setting. + +## Two synchronous replicas and a witness replica + +This architecture has two synchronous replicas and a witness replica to enable high availability. The witness replica is introduced in SQL Server 2017 CTP 2.4. In this architecture, the servers have the roles of primary replica, secondary replica, or witness replica. The witness replica contains configuration data about the availability group, but not a copy of the availability group user databases. The witness replica requires a SQL Server instance with SQL Server Express edition or higher. + +By default, it provides high availability but not data protection. + +![Witness replica availability group][2] + +The Two synchronous replicas and a witness replica availability group may reduce licensing costs because the witness replica can be SQL Server Express Edition. + +The following table describes the high availability and data protection behavior according to the possible values for an availability group with two synchronous replicas and a witness replica. + +|`REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`|1|0 \* +| --- |:---:|:---: +|High availability | |✔| +|Data protection |✔| | +|Automatic failover after primary replica outage| |✔| +|Continue after secondary replica outage| |✔| +|Continue after witness replica outage|✔| | + +\* Default setting. + +For additional information, see [More about a witness replica](#WitnessReplica). + +## Read scale-out only availability group + +A read scale-out only availability group has two synchronous replicas. The secondary replica allows reading. Read scale-out can provide data protection, but not high availability. Read only connections to the availability group are directed to secondary replicas. + +![Read scale-out availability group][1] + +This architecture requires two servers. These servers fill the role of primary replica and secondary replica. + +The read scale-out architecture is optimized for distributing the read workload for databases. By default, the read scale-out architecture includes data protection. You can create the read scale-out architecture without data protection. This architecture does not provide high availability because if either instance of SQL Server fails, either the database will not be fully available or there is risk of data loss. You can configure the read scale-out architecture with or without data protection. + +>[!IMPORTANT] +>This architecture does not require a cluster manager. You can configure the availability group and not create it as a cluster resource. The `REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT` value only applies to clustered resources. Because two synchronous replicas cannot support high availability on Linux server, the cluster component does not add to the functionality of the availability group. + +The following table describes the high availability and data protection behavior according to the possible values for read scale-out only availability group. + +|`REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`|1 \*|0 +| --- |:---:|:---: +|High availability | | | +|Data protection |✔| | +|Automatic failover after primary replica outage| | | +|Continue after secondary replica outage| |✔| + +\* Default setting. + +The read scale-out architecture may be the most economical because it only requires two instances of SQL Server on two servers. + + + +## Understand SQL Server resource agent for pacemaker + +Before the CTP 1.4 release, the Pacemaker resource agent for availability groups could not know if a replica marked as `SYNCHRONOUS_COMMIT` was really up-to-date or not. It was possible that the replica had stopped synchronizing with the primary but was not aware. Thus the agent could promote an out-of-date replica to primary - which, if successful, would cause data loss. + +SQL Server 2017 CTP 1.4 added `sequence_number` to `sys.availability_groups` to solve this issue. `sequence_number` is a monotonically increasing BIGINT that represents how up-to-date the local availability group replica is with respect to the rest of the replicas in the availability group. Performing failovers, adding or removing replicas, and other availability group operations update this number. The number is updated on the primary, then pushed to secondary replicas. Thus a secondary replica that is up-to-date will have the same sequence_number as the primary. + +When Pacemaker decides to promote a replica to primary, it first sends a notification to all replicas to extract the sequence number and store it (we call this the pre-promote notification). Next, when Pacemaker actually tries to promote a replica to primary, the replica only promotes itself if its sequence number is the highest of all the sequence numbers from all replicas and rejects the promote operation otherwise. In this way only the replica with the highest sequence number can be promoted to primary, ensuring no data loss. + +Note that this is only guaranteed to work as long as at least one replica available for promotion has the same sequence number as the previous primary. To ensure this, the default behavior is for the Pacemaker resource agent to automatically set `REQUIRED_COPIES_TO_COMMIT` such that at least one synchronous secondary replica is up to date and available to be the target of an automatic failover. With each monitoring action, the value of `REQUIRED_COPIES_TO_COMMIT` is computed (and updated if necessary) as ('number of synchronous replicas' / 2). Then, at failover time, the resource agent will require (`total number of replicas` - `required_copies_to_commit` replicas) to respond to the pre-promote notification to be able to promote one of them to primary. The replica with the highest `sequence_number` will be promoted to primary. + +For example, let's consider the case of an availability group with three synchronous replicas - one primary replica and two synchronous secondary replicas. + +- `REQUIRED_COPIES_TO_COMMIT` is 3 / 2 = 1 + +- The required number of replicas to respond to pre-promote action is 3 - 1 = 2. So 2 replicas have to be up for the failover to be triggered. This means that, in the case of primary outage, if one of the secondary replicas is unresponsive and only one of the secondaries responds to the pre-promote action, the resource agent cannot guarantee that the secondary that responded has the highest sequence_number, and a failover is not triggered. + +A user can choose to override the default behavior, and configure the availability group resource to not set `REQUIRED_COPIES_TO_COMMIT` automatically as above. + +>[!IMPORTANT] +>When `REQUIRED_COPIES_TO_COMMIT` is 0 there is risk of data loss. In the case of an outage of the primary, the resource agent will not automatically trigger a failover. The user has to decide if they want to wait for primary to recover or manually fail over. + +To set `REQUIRED_COPIES_TO_COMMIT` to 0, run: + +```bash +sudo pcs resource update <**ag1**> required_copies_to_commit=0 +``` + +To revert to default computed value, run: + +```bash +sudo pcs resource update <**ag1**> required_copies_to_commit= +``` + +>[!NOTE] +>Updating resource properties causes all replicas to stop and restart. This means primary will temporarily be demoted to secondary, then promoted again which will casue temporary write unavailability. The new value for REQUIRED_COPIES_TO_COMMIT will only be set once replicas are restarted, so it won't be instantaneous with running the pcs command. + + + +## More about a witness replica + +A witness replica in a SQL Server Always On availability group enables an architecture with high availability and data protection without using a third synchronous secondary replica. Because any edition of SQL Server can host a witness replica, it can save some licensing costs over other availability group architectures. A witness replica contains availability group configuration data, availability group roles, and synchronization status data; it does not include replicated user databases.The witness replica uses the `WITNESS-COMMIT` availability mode. It is never the primary replica. + +Use a witness replica in an availability group with two synchronous replicas - one primary replica and one secondary replica. If an availability group does not include two synchronous replicas, you cannot use a witness replica. You can also include additional asynchronous replicas. The DDL `CREATE AVAILABILITY GROUP` will fail if the group does not include two synchronous replicas. Likewise, you cannot create an availability group with only one primary replica and a witness replica. An availability group cannot include more than one witness replica. + +You can use any edition of SQL Server 2017 to host a witness replica. This includes SQL Server Enterprise Edition, Standard Edition, or Express Edition. SQL Server Express edition is available for free. For SQL Server Enterprise Edition, or Standard Edition, if the instance of SQL Server is used exclusively for availability group witness replica, licensing fees are not charged. + +You cannot fail over an availability group to a witness replica. The witness replica has specific limitations. Specifically, the witness replica cannot: + +- Create an availability group on a SQL Express instance. + +- Manually or automatically become the primary replica. + +A witness replica has availability mode `WITNESS_COMMIT`. In `WITNESS_COMMIT` availability group configuration information is synchronously committed to the witness replica. You cannot modify the availability mode of a witness replica. To change the availability mode of a witness replica, remove the replica and recreate it as a secondary replica with an appropriate availability mode. + +To create an availability group with a witness replica: + +1. Install and configure SQL Server on three servers. + +2. Create the availability group. Include two replicas with synchronous availability mode, and a witness replica. For example, the following script creates an availability group called `ag1`. `node1` and `node2` host replicas in synchronous mode, with automatic seeding and automatic failover. `node3` is a witness replica. The script defines only the SQL Server instance name `node3`, the endpoint, and the availability mode. + + ```Transact-SQL + CREATE AVAILABILITY GROUP [ag1] +    WITH (CLUSTER_TYPE = EXTERNAL) +    FOR REPLICA ON +    N'node1' WITH ( +        ENDPOINT_URL = N'tcp://node1:5022', +        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, +        FAILOVER_MODE = EXTERNAL, +        SEEDING_MODE = AUTOMATIC +    ), +    N'node2' WITH (  +        ENDPOINT_URL = N'tcp://node2:5022',  +        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, +        FAILOVER_MODE = EXTERNAL, +        SEEDING_MODE = AUTOMATIC +    ), +    N'node3' WITH ( +        ENDPOINT_URL = N'tcp://node3:5022', +        AVAILABILITY_MODE = WITNESS_COMMIT +    ) + ``` + +>[!NOTE] +> + + +[1]: ./media/sql-server-linux-availability-group-ha/1-read scale-out-out.png +[2]: ./media/sql-server-linux-availability-group-ha/2-witness.png +[3]: ./media/sql-server-linux-availability-group-ha/3-three-replica.png \ No newline at end of file From 33680fec31772142b82d876d4867f11b40a052fa Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 26 May 2017 10:51:18 -0700 Subject: [PATCH 002/336] Fix broken image --- docs/linux/sql-server-linux-availability-group-ha.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index 2c5a8e45211..83a7369f70b 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -203,10 +203,7 @@ To create an availability group with a witness replica:    ) ``` ->[!NOTE] -> - -[1]: ./media/sql-server-linux-availability-group-ha/1-read scale-out-out.png +[1]: ./media/sql-server-linux-availability-group-ha/1-read scale-out-out.pn [2]: ./media/sql-server-linux-availability-group-ha/2-witness.png [3]: ./media/sql-server-linux-availability-group-ha/3-three-replica.png \ No newline at end of file From 42f7cea976a720c4642dec445fb1a9b3e4d956ab Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 26 May 2017 11:04:43 -0700 Subject: [PATCH 003/336] Fix image. --- docs/linux/sql-server-linux-availability-group-ha.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index 83a7369f70b..a2f3c0f5fc1 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -204,6 +204,6 @@ To create an availability group with a witness replica: ``` -[1]: ./media/sql-server-linux-availability-group-ha/1-read scale-out-out.pn +[1]: ./media/sql-server-linux-availability-group-ha/1-read scale-out-out.png [2]: ./media/sql-server-linux-availability-group-ha/2-witness.png [3]: ./media/sql-server-linux-availability-group-ha/3-three-replica.png \ No newline at end of file From 3d1ce3d67f500af261c2ec792f1fdbca02dfeb7c Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 26 May 2017 11:14:07 -0700 Subject: [PATCH 004/336] Fix broken link --- docs/linux/sql-server-linux-availability-group-ha.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index a2f3c0f5fc1..dc5e9137b51 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -204,6 +204,6 @@ To create an availability group with a witness replica: ``` -[1]: ./media/sql-server-linux-availability-group-ha/1-read scale-out-out.png +[1]: ./media/sql-server-linux-availability-group-ha/1-read-scale-out.png [2]: ./media/sql-server-linux-availability-group-ha/2-witness.png [3]: ./media/sql-server-linux-availability-group-ha/3-three-replica.png \ No newline at end of file From 5b2de652f47302f5f5255772dc6293871dbbee60 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 26 May 2017 13:11:38 -0700 Subject: [PATCH 005/336] Added changes from MihaelaB --- .../sql-server-linux-availability-group-ha.md | 127 +++++++++--------- 1 file changed, 61 insertions(+), 66 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index dc5e9137b51..a8700ab053b 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -18,19 +18,19 @@ manager: "jhubbard" # High availability and data protection for availability group deployment architectures -This article presents supported deployment architectures for SQL Server Always On availability groups on Linux servers. An availability group supports high availability and data protection. Automatic failover provides high availability and disaster recovery. Synchronized replicas provide data protection. +This article presents supported deployment architectures for SQL Server Always On availability groups on Linux servers. An availability group supports high availability and data protection. Automatic failure detection, automatic failover, and transparent reconnection after failover provide high availability. Synchronized replicas provide data protection. >[!NOTE] >In addition to high availability and data protection, an availability group can also provide disaster recovery, cross platform migration, and read scale-out. This article primarily discusses implementations for high availability and data protection. -With Windows Server failover clustering a common architecture for high availability uses two synchronous replicas and a [file-share witness](http://technet.microsoft.com/library/cc731739.aspx). The file-share witness validates the availability group configuration - status of synchronization, the role of the replica, for example. This ensures that the most current member owns the clustered resources. +With Windows Server failover clustering a common architecture for high availability uses two synchronous replicas and a [file-share witness](http://technet.microsoft.com/library/cc731739.aspx). The file-share witness validates the availability group configuration - status of synchronization, and the role of the replica, for example. This ensures that the secondary replica chosen as the failover target has the latest data and availability group configuration changes. -The current high availability solutions for Linux do not accommodate an external witness like like the file share witness in a Windows Server failover cluster. When there is no Windows Server failover cluster, the availability group configuration is stored in the SQL Server instances, hence the availability group requires at least three synchronous replicas for high availability and data protection. After you create an availability group on Linux servers you create a cluster resource. The cluster resource settings determine the configuration for high availability. By default the SQL Server cluster manager will configure the availability group for high availability when you create a cluster resource for an availability group. +The current high availability solutions for Linux do not accommodate an external witness like the file share witness in a Windows Server failover cluster. When there is no Windows Server failover cluster, the availability group configuration is stored in the SQL Server instances, hence the availability group requires at least three synchronous replicas for high availability and data protection. After you create an availability group on Linux servers you create a cluster resource. The cluster resource settings determine the configuration for high availability. Choose an availability group design to meet specific business requirements for high availability, data protection, and read scale-out. >[!IMPORTANT] ->The following architectures describe three availability group design patterns and the capabilities of each pattern. These design patterns apply to availability groups with `CLUSTER_TYPE = EXTERNAL` or `CLUSTER_TYPE = NONE`. +>The following architectures describe three availability group design patterns and the capabilities of each pattern. These design patterns apply to availability groups with `CLUSTER_TYPE = EXTERNAL` for high availability solutions. The architectures include: @@ -38,7 +38,7 @@ The architectures include: - **Two synchronous replicas and a witness replica** -- **Read scale-out only** +- **Two synchronous replicas availability group** The architectures allow you to balance costs with business requirements. @@ -65,9 +65,9 @@ The following table describes the high availability and data protection behavior |High availability| |✔| |Data protection | |✔|✔| |Automatic failover after primary replica outage| |✔| -|Continue after one secondary replica outage| |✔| -|Continue after two secondary replica outages|✔| | -\* Default setting. +|Primary replica available after one secondary replica outage| |✔| +|Primary replica available after two secondary replica outages|✔| | +\* Default setting when availability group is added as a resource in a cluster. ## Two synchronous replicas and a witness replica @@ -86,94 +86,55 @@ The following table describes the high availability and data protection behavior |High availability | |✔| |Data protection |✔| | |Automatic failover after primary replica outage| |✔| -|Continue after secondary replica outage| |✔| -|Continue after witness replica outage|✔| | +|Primary replica available after secondary replica outage| |✔| +|Primary replica available after witness replica outage|✔| | -\* Default setting. +\* Default setting when availability group is added as a resource in a cluster. For additional information, see [More about a witness replica](#WitnessReplica). -## Read scale-out only availability group +## Two synchronous replicas availability group -A read scale-out only availability group has two synchronous replicas. The secondary replica allows reading. Read scale-out can provide data protection, but not high availability. Read only connections to the availability group are directed to secondary replicas. +A two synchronous replicas availability group enables data protection. Like the other availability group architectures it can enable read scale-out. Two synchronous replicas does not provide high availability. -![Read scale-out availability group][1] +![Two synchronous replicas][1] This architecture requires two servers. These servers fill the role of primary replica and secondary replica. -The read scale-out architecture is optimized for distributing the read workload for databases. By default, the read scale-out architecture includes data protection. You can create the read scale-out architecture without data protection. This architecture does not provide high availability because if either instance of SQL Server fails, either the database will not be fully available or there is risk of data loss. You can configure the read scale-out architecture with or without data protection. +The two synchronous replicas architecture is optimized for data protection and distributing the read workload for databases. By default, resource is configured for data protection. This architecture does not provide high availability because if either instance of SQL Server fails, either the database will not be fully available or there is risk of data loss. You can configure the two synchronous replicas architecture with or without data protection. ->[!IMPORTANT] ->This architecture does not require a cluster manager. You can configure the availability group and not create it as a cluster resource. The `REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT` value only applies to clustered resources. Because two synchronous replicas cannot support high availability on Linux server, the cluster component does not add to the functionality of the availability group. - -The following table describes the high availability and data protection behavior according to the possible values for read scale-out only availability group. +The following table describes the data protection behavior according to the possible values for two synchronous replicas availability group. |`REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`|1 \*|0 | --- |:---:|:---: -|High availability | | | +|Automatic failover | | | |Data protection |✔| | -|Automatic failover after primary replica outage| | | -|Continue after secondary replica outage| |✔| +|Automatic failover after primary replica outage|✔\*\*| | +|Primary replica available after secondary replica outage| |✔| -\* Default setting. +\* Default setting when availability group is added as a resource in a cluster. +\*\* In this architecture, after the primary replica outage occurs the availability group automatic fails over. Applications cannot connect to the availability group until the primary replica is back on line - now as a secondary replica. -The read scale-out architecture may be the most economical because it only requires two instances of SQL Server on two servers. +The two synchronous replicas architecture may be the most economical because it only requires two instances of SQL Server on two servers. -## Understand SQL Server resource agent for pacemaker - -Before the CTP 1.4 release, the Pacemaker resource agent for availability groups could not know if a replica marked as `SYNCHRONOUS_COMMIT` was really up-to-date or not. It was possible that the replica had stopped synchronizing with the primary but was not aware. Thus the agent could promote an out-of-date replica to primary - which, if successful, would cause data loss. - -SQL Server 2017 CTP 1.4 added `sequence_number` to `sys.availability_groups` to solve this issue. `sequence_number` is a monotonically increasing BIGINT that represents how up-to-date the local availability group replica is with respect to the rest of the replicas in the availability group. Performing failovers, adding or removing replicas, and other availability group operations update this number. The number is updated on the primary, then pushed to secondary replicas. Thus a secondary replica that is up-to-date will have the same sequence_number as the primary. - -When Pacemaker decides to promote a replica to primary, it first sends a notification to all replicas to extract the sequence number and store it (we call this the pre-promote notification). Next, when Pacemaker actually tries to promote a replica to primary, the replica only promotes itself if its sequence number is the highest of all the sequence numbers from all replicas and rejects the promote operation otherwise. In this way only the replica with the highest sequence number can be promoted to primary, ensuring no data loss. - -Note that this is only guaranteed to work as long as at least one replica available for promotion has the same sequence number as the previous primary. To ensure this, the default behavior is for the Pacemaker resource agent to automatically set `REQUIRED_COPIES_TO_COMMIT` such that at least one synchronous secondary replica is up to date and available to be the target of an automatic failover. With each monitoring action, the value of `REQUIRED_COPIES_TO_COMMIT` is computed (and updated if necessary) as ('number of synchronous replicas' / 2). Then, at failover time, the resource agent will require (`total number of replicas` - `required_copies_to_commit` replicas) to respond to the pre-promote notification to be able to promote one of them to primary. The replica with the highest `sequence_number` will be promoted to primary. - -For example, let's consider the case of an availability group with three synchronous replicas - one primary replica and two synchronous secondary replicas. - -- `REQUIRED_COPIES_TO_COMMIT` is 3 / 2 = 1 - -- The required number of replicas to respond to pre-promote action is 3 - 1 = 2. So 2 replicas have to be up for the failover to be triggered. This means that, in the case of primary outage, if one of the secondary replicas is unresponsive and only one of the secondaries responds to the pre-promote action, the resource agent cannot guarantee that the secondary that responded has the highest sequence_number, and a failover is not triggered. - -A user can choose to override the default behavior, and configure the availability group resource to not set `REQUIRED_COPIES_TO_COMMIT` automatically as above. - ->[!IMPORTANT] ->When `REQUIRED_COPIES_TO_COMMIT` is 0 there is risk of data loss. In the case of an outage of the primary, the resource agent will not automatically trigger a failover. The user has to decide if they want to wait for primary to recover or manually fail over. - -To set `REQUIRED_COPIES_TO_COMMIT` to 0, run: - -```bash -sudo pcs resource update <**ag1**> required_copies_to_commit=0 -``` - -To revert to default computed value, run: - -```bash -sudo pcs resource update <**ag1**> required_copies_to_commit= -``` - ->[!NOTE] ->Updating resource properties causes all replicas to stop and restart. This means primary will temporarily be demoted to secondary, then promoted again which will casue temporary write unavailability. The new value for REQUIRED_COPIES_TO_COMMIT will only be set once replicas are restarted, so it won't be instantaneous with running the pcs command. - ## More about a witness replica -A witness replica in a SQL Server Always On availability group enables an architecture with high availability and data protection without using a third synchronous secondary replica. Because any edition of SQL Server can host a witness replica, it can save some licensing costs over other availability group architectures. A witness replica contains availability group configuration data, availability group roles, and synchronization status data; it does not include replicated user databases.The witness replica uses the `WITNESS-COMMIT` availability mode. It is never the primary replica. +A witness replica in a SQL Server Always On availability group enables an architecture with high availability and data protection without using a third synchronous secondary replica. Because any edition of SQL Server can host a witness replica, it can save some licensing costs over other availability group architectures. A witness replica contains availability group configuration data like availability group roles, and synchronization status data; it does not include replicated user databases.The witness replica uses the `WITNESS-COMMIT` availability mode. It is never the primary replica. Use a witness replica in an availability group with two synchronous replicas - one primary replica and one secondary replica. If an availability group does not include two synchronous replicas, you cannot use a witness replica. You can also include additional asynchronous replicas. The DDL `CREATE AVAILABILITY GROUP` will fail if the group does not include two synchronous replicas. Likewise, you cannot create an availability group with only one primary replica and a witness replica. An availability group cannot include more than one witness replica. You can use any edition of SQL Server 2017 to host a witness replica. This includes SQL Server Enterprise Edition, Standard Edition, or Express Edition. SQL Server Express edition is available for free. For SQL Server Enterprise Edition, or Standard Edition, if the instance of SQL Server is used exclusively for availability group witness replica, licensing fees are not charged. -You cannot fail over an availability group to a witness replica. The witness replica has specific limitations. Specifically, the witness replica cannot: - -- Create an availability group on a SQL Express instance. +On a witness replica you cannot do the following things: -- Manually or automatically become the primary replica. +- Create an availability group - you can include the witness in an availability group, or join it to an existing availability group. +- Failover an availability group to a witness replica. -A witness replica has availability mode `WITNESS_COMMIT`. In `WITNESS_COMMIT` availability group configuration information is synchronously committed to the witness replica. You cannot modify the availability mode of a witness replica. To change the availability mode of a witness replica, remove the replica and recreate it as a secondary replica with an appropriate availability mode. +A witness replica availability mode `WITNESS_COMMIT`. In this mode, configuration information is synchronously committed to the witness replica. You cannot modify the availability mode of a witness replica. To change the availability mode of a witness replica, remove the replica and recreate it as a secondary replica with an appropriate availability mode. To create an availability group with a witness replica: @@ -203,6 +164,40 @@ To create an availability group with a witness replica:    ) ``` +## Understand SQL Server resource agent for pacemaker + +SQL Server 2017 CTP 1.4 added `sequence_number` to `sys.availability_groups` to solve this issue. `sequence_number` is a monotonically increasing BIGINT that represents how up-to-date the local availability group replica is with respect to the rest of the replicas in the availability group. Performing failovers, adding or removing replicas, and other availability group configuration changes update this number. The number is updated on the primary, then replicated to secondary replicas. Thus a secondary replica that has up-to-date configuration has the same sequence number as the primary. + +When Pacemaker decides to promote a replica to primary, it first sends a notification to all replicas to extract the sequence number and store it (we call this the pre-promote notification). Next, when Pacemaker actually tries to promote a replica to primary, the replica only promotes itself if its sequence number is the highest of all the sequence numbers from all replicas and rejects the promote operation otherwise. In this way only the replica with the highest sequence number can be promoted to primary, ensuring no data loss. + +Note that this is only guaranteed to work as long as at least one replica available for promotion has the same sequence number as the previous primary. To ensure this, the default behavior is for the Pacemaker resource agent to automatically set `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` such that at least one synchronous secondary replica is up to date and available to be the target of an automatic failover. With each monitoring action, the value of `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` is computed (and updated if necessary) as ('number of synchronous replicas' / 2). Then, at failover time, the resource agent will require (`total number of replicas` - `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` replicas) to respond to the pre-promote notification to be able to promote one of them to primary. The replica with the highest `sequence_number` will be promoted to primary. + +For example, let's consider the case of an availability group with three synchronous replicas - one primary replica and two synchronous secondary replicas. + +- `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` is 3 / 2 = 1 + +- The required number of replicas to respond to pre-promote action is 3 - 1 = 2. So 2 replicas have to be up for the failover to be triggered. This means that, in the case of primary outage, if one of the secondary replicas is unresponsive and only one of the secondaries responds to the pre-promote action, the resource agent cannot guarantee that the secondary that responded has the highest sequence_number, and a failover is not triggered. + +A user can choose to override the default behavior, and configure the availability group resource to not set `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` automatically as above. + +>[!IMPORTANT] +>When `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` is 0 there is risk of data loss. In the case of an outage of the primary, the resource agent will not automatically trigger a failover. The user has to decide if they want to wait for primary to recover or manually fail over. + +To set `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` to 0, run: + +```bash +sudo pcs resource update <**ag1**> required_copies_to_commit=0 +``` + +To revert to default computed value, run: + +```bash +sudo pcs resource update <**ag1**> required_copies_to_commit= +``` + +>[!NOTE] +>Updating resource properties causes all replicas to stop and restart. This means primary will temporarily be demoted to secondary, then promoted again which will casue temporary write unavailability. The new value for REQUIRED_COPIES_TO_COMMIT will only be set once replicas are restarted, so it won't be instantaneous with running the pcs command. + [1]: ./media/sql-server-linux-availability-group-ha/1-read-scale-out.png [2]: ./media/sql-server-linux-availability-group-ha/2-witness.png From 3a6ddf4e933e2d84963428cb86ef2bb5a364b137 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 26 May 2017 13:12:34 -0700 Subject: [PATCH 006/336] Updated anchor --- docs/linux/sql-server-linux-availability-group-ha.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index a8700ab053b..fd541243749 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -117,7 +117,6 @@ The following table describes the data protection behavior according to the poss The two synchronous replicas architecture may be the most economical because it only requires two instances of SQL Server on two servers. - @@ -164,6 +163,8 @@ To create an availability group with a witness replica:    ) ``` + + ## Understand SQL Server resource agent for pacemaker SQL Server 2017 CTP 1.4 added `sequence_number` to `sys.availability_groups` to solve this issue. `sequence_number` is a monotonically increasing BIGINT that represents how up-to-date the local availability group replica is with respect to the rest of the replicas in the availability group. Performing failovers, adding or removing replicas, and other availability group configuration changes update this number. The number is updated on the primary, then replicated to secondary replicas. Thus a secondary replica that has up-to-date configuration has the same sequence number as the primary. From 0d00e814cc962788dfecfb3cf9a3222f9c528370 Mon Sep 17 00:00:00 2001 From: craigg-msft Date: Fri, 26 May 2017 14:09:15 -0700 Subject: [PATCH 007/336] stubbed ctp 2.2 sections for whats new and release notes --- .../sql-server-2017-release-notes.md | 65 ++----------------- .../what-s-new-in-sql-server-2017.md | 5 ++ 2 files changed, 12 insertions(+), 58 deletions(-) diff --git a/docs/sql-server/sql-server-2017-release-notes.md b/docs/sql-server/sql-server-2017-release-notes.md index 27a145ad30c..39318bdb399 100644 --- a/docs/sql-server/sql-server-2017-release-notes.md +++ b/docs/sql-server/sql-server-2017-release-notes.md @@ -25,6 +25,12 @@ This topic describes limitations and issues with [!INCLUDE[ssSQLv14_md](../inclu **Try it out:** - [![Download from Evaluation Center](../analysis-services/media/download.png)](http://go.microsoft.com/fwlink/?LinkID=829477) Download [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] from the **[Evaluation Center](http://go.microsoft.com/fwlink/?LinkID=829477)** +## SQL Server 2017 CTP 2.2 (June 2017) +### Documentation (CTP 2.2) +- **Issue and customer impact:** Documentation for [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] is limited and content is included with the [!INCLUDE[ssSQL15_md](../includes/sssql15-md.md)] documentation set. Content in articles that is specific to [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] will be noted with **Applies To**. +- **Issue and customer impact:** No offline content is available for [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)]. + +![horizontal_bar](../sql-server/media/horizontal-bar.png) ## SQL Server 2017 CTP 2.1 (May 2017) ### Documentation (CTP 2.1) - **Issue and customer impact:** Documentation for [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] is limited and content is included with the [!INCLUDE[ssSQL15_md](../includes/sssql15-md.md)] documentation set. Content in articles that is specific to [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] will be noted with **Applies To**. @@ -99,62 +105,6 @@ This topic describes limitations and issues with [!INCLUDE[ssSQLv14_md](../inclu - **Issue and customer impact:** Documentation for [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] is limited and content is included with the [!INCLUDE[ssSQL15_md](../includes/sssql15-md.md)] documentation set. Content in articles that is specific to [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] will be noted with **Applies To**. - **Issue and customer impact:** No offline content is available for [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)]. -![horizontal_bar](../sql-server/media/horizontal-bar.png) - -## SQL Server 2017 CTP 1.3 (February 2017) -### Supported installation scenarios (CTP 1.3) -[!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] is intended as a test version only. Production deployments are not supported. It is recommneded you install and test [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] on a virtual machine. - -### Documentation (CTP 1.3) -- **Issue and customer impact:** Documentation for [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] is limited and content is included with the [!INCLUDE[ssSQL15_md](../includes/sssql15-md.md)] documentation set. Content in articles that is specific to [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] will be noted with **Applies To**. -- **Issue and customer impact:** No offline content is available for [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)]. - -### SQL Server Integration Services (SSIS) (CTP 1.3) -#### CDC components not supported in this CTP release -- **Issue and customer impact**: The CDC Control Task, CDC Source, and CDC Splitter in are not supported in this CTP release. -- **Workaround**: There is no workaround. - - -![horizontal_bar](../sql-server/media/horizontal-bar.png) - -## SQL Server 2017 CTP 1.2 (January 2017) -### Supported installation scenarios (CTP 1.2) -[!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] is intended as a test version only. Production deployments are not supported. It is recommneded you install and test [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] on a virtual machine. - -### SQL Server Database Engine (CTP 1.2) -- **Issue and customer impact:** In some cases, the MSSQLSERVER service will get stuck in the "Starting" state. -- **Workaround:** To work around this issue: - - Create a dependency between the `mssqlserver` service and the `keyiso` service. One way to do this is to run the following from an elevated Command Prompt: `sc config mssqlserver depend= keyiso` - - Reboot the computer. - -### Documentation (CTP 1.2) -- **Issue and customer impact:** Documentaion for [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] is limited and content is inlcuded with the [!INCLUDE[ssSQL15_md](../includes/sssql15-md.md)] documentation set. Content in articles that is specific to [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] will be noted with **Applies To:**. -- **Issue and customer impact:** No offline content is available for [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)]. - -### SQL Server Integration Services (SSIS) (CTP 1.2) -#### Deleting the SSIS Catalog may fail when SSIS Scale Out is installed -**Issue and customer impact**: When the SSIS Scale Out feature is installed on a computer, deleting the SSISDB catalog database may fail with following error: “Could not drop login *'login'* as the user is currently logged in”. - -**Workaround**: -- On a Scale Out Master computer, run the command “services.msc” to open the Services window. Stop the SQL Server Integration Services Cluster Master service. -- On Scale Out Worker computers that connect to the master, run the command "services.msc" to open the Services window. Stop the SQL Server Integration Services Cluster Worker service. - -You can now delete the SSISDB catalog database. - -### SQL Server Master Data Services (CTP 1.2) -#### Transaction may not work when the entity transaction log type is set to attribute -**Issue and customer impact:** When the entity transaction log type is set to **Attribute** in [!INCLUDE[ssMDSshort_md](../includes/ssmdsshort-md.md)] (default value is **Member**), the following scenarios fail: - -* Transactions for entity changes are not shown in the website. -* Unable to open the **Transactions** page on the website and reverse a transaction. -* Unable to update an entity with a transaction annotation, in the website. - -**Workaround**: There is no workaround. - -#### Copy version may not work when **Copy only committed version** is set to false -- **Issue and customer impact:** When the **Copy only committed version** setting is set to **No** (default value is **Yes**), the copy version operation may fail. There is no error message. -- **Workaround**: There is no workaround. - ## ![info_tip](../sql-server/media/info-tip.png) Engage with the SQL Server engineering team - [Stack Overflow (tag sql-server) - ask technical questions](http://stackoverflow.com/questions/tagged/sql-server) - [MSDN Forums - ask technical questions](https://social.msdn.microsoft.com/Forums/en-US/home?category=sqlserver) @@ -162,5 +112,4 @@ You can now delete the SSISDB catalog database. - [Reddit - general discussion about R](https://www.reddit.com/r/SQLServer/) -![MS_Logo_X-Small](../sql-server/media/ms-logo-x-small.png) - +![MS_Logo_X-Small](../sql-server/media/ms-logo-x-small.png) \ No newline at end of file diff --git a/docs/sql-server/what-s-new-in-sql-server-2017.md b/docs/sql-server/what-s-new-in-sql-server-2017.md index 30baffa7ca8..83942a15c13 100644 --- a/docs/sql-server/what-s-new-in-sql-server-2017.md +++ b/docs/sql-server/what-s-new-in-sql-server-2017.md @@ -30,6 +30,11 @@ This topic is a summary of what is new in the most recent Community Technical Pr ## What's New in SQL Server 2017 CTP 2.1 (May 2017) ### SQL Server Database Engine + + +![horizontal_bar](../sql-server/media/horizontal-bar.png) +## What's New in SQL Server 2017 CTP 2.1 (May 2017) +### SQL Server Database Engine - A new DMF, [sys.dm_db_log_stats](../relational-databases/system-dynamic-management-views/sys-dm-db-log-stats-transact-sql.md), is introduced to expose summary level attributes and information on transaction log files; useful for monitoring the health of the transaction log. - This CTP contains bug fixes and performance improvements for the Database Engine. - For a detailed list of 2017 CTP enhancements in previous CTP releases, see [What's New in SQL Server 2017 (Database Engine)](../database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md). From 08b96237411531a867447df97fd7a7f362a03d36 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 26 May 2017 14:17:53 -0700 Subject: [PATCH 008/336] Update --- .../sql-server-linux-availability-group-ha.md | 49 +++++++++---------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index fd541243749..2d8ebd48645 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -16,23 +16,23 @@ manager: "jhubbard" --- -# High availability and data protection for availability group deployment architectures +# High availability and data protection for availability group configurations -This article presents supported deployment architectures for SQL Server Always On availability groups on Linux servers. An availability group supports high availability and data protection. Automatic failure detection, automatic failover, and transparent reconnection after failover provide high availability. Synchronized replicas provide data protection. +This article presents supported deployment configurations for SQL Server Always On availability groups on Linux servers. An availability group supports high availability and data protection. Automatic failure detection, automatic failover, and transparent reconnection after failover provide high availability. Synchronized replicas provide data protection. >[!NOTE] >In addition to high availability and data protection, an availability group can also provide disaster recovery, cross platform migration, and read scale-out. This article primarily discusses implementations for high availability and data protection. -With Windows Server failover clustering a common architecture for high availability uses two synchronous replicas and a [file-share witness](http://technet.microsoft.com/library/cc731739.aspx). The file-share witness validates the availability group configuration - status of synchronization, and the role of the replica, for example. This ensures that the secondary replica chosen as the failover target has the latest data and availability group configuration changes. +With Windows Server failover clustering a common configuration for high availability uses two synchronous replicas and a [file-share witness](http://technet.microsoft.com/library/cc731739.aspx). The file-share witness validates the availability group configuration - status of synchronization, and the role of the replica, for example. This ensures that the secondary replica chosen as the failover target has the latest data and availability group configuration changes. The current high availability solutions for Linux do not accommodate an external witness like the file share witness in a Windows Server failover cluster. When there is no Windows Server failover cluster, the availability group configuration is stored in the SQL Server instances, hence the availability group requires at least three synchronous replicas for high availability and data protection. After you create an availability group on Linux servers you create a cluster resource. The cluster resource settings determine the configuration for high availability. Choose an availability group design to meet specific business requirements for high availability, data protection, and read scale-out. >[!IMPORTANT] ->The following architectures describe three availability group design patterns and the capabilities of each pattern. These design patterns apply to availability groups with `CLUSTER_TYPE = EXTERNAL` for high availability solutions. +>The following configurations describe three availability group design patterns and the capabilities of each pattern. These design patterns apply to availability groups with `CLUSTER_TYPE = EXTERNAL` for high availability solutions. -The architectures include: +The design patters are three availability group configuarations. The configurations include: - **Three synchronous replicas** @@ -40,19 +40,17 @@ The architectures include: - **Two synchronous replicas availability group** -The architectures allow you to balance costs with business requirements. +## How the configuration affects default settings -## How the architecture affects default settings +The cluster resource setting `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` guarantees that each transaction is written to a minimum number of secondary replica logs before committing the transaction on the primary replica. This setting can affect both high availability and data protection, depending on the configuration. When you install the SQL Server resource agent - `mssql-sserver-ha` - and create the availability group resource, the cluster manager detects the availability group configuration and sets `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` accordingly. -The cluster resource setting `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` guarantees that each transaction is written to a minimum number of secondary replica logs before committing the transaction on the primary replica. This setting can affect both high availability and data protection, depending on the architecture. When you install the SQL Server resource agent - `mssql-sserver-ha` - and create the availability group resource, the cluster manager detects the availability group architecture and sets `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` accordingly. - -If supported by the architecture, the resource agent parameter `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` is set to the value that provides high availability and data protection. If the architecture cannot support both, the default is set for high availability. If the architecture cannot support high availability, the default is set for data protection. For more information, see [Understand SQL Server resource agent for pacemaker](#pacemakerNotify). +If supported by the configuration, the resource agent parameter `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` is set to the value that provides high availability and data protection. If the configuration cannot support both the default is set for data protection. For more information, see [Understand SQL Server resource agent for pacemaker](#pacemakerNotify). The following sections explain the default behavior for the cluster resource. ## Three synchronous replicas -This architecture consists of three synchronous replicas. By default, it provides high availability and data protection. It can also provide read scale-out. +This configuration consists of three synchronous replicas. By default, it provides high availability and data protection. It can also provide read scale-out. ![Three replicas][3] @@ -65,26 +63,25 @@ The following table describes the high availability and data protection behavior |High availability| |✔| |Data protection | |✔|✔| |Automatic failover after primary replica outage| |✔| -|Primary replica available after one secondary replica outage| |✔| -|Primary replica available after two secondary replica outages|✔| | +|Primary replica available after one secondary replica outage|✔|✔| +|Primary replica available after two secondary replica outages|✔| | +|Manual failover after primary replica outage - possible data loss|✔| | \* Default setting when availability group is added as a resource in a cluster. ## Two synchronous replicas and a witness replica -This architecture has two synchronous replicas and a witness replica to enable high availability. The witness replica is introduced in SQL Server 2017 CTP 2.4. In this architecture, the servers have the roles of primary replica, secondary replica, or witness replica. The witness replica contains configuration data about the availability group, but not a copy of the availability group user databases. The witness replica requires a SQL Server instance with SQL Server Express edition or higher. +This configuration has two synchronous replicas and a witness replica to enable high availability. The witness replica is introduced in SQL Server 2017 CTP 2.4. In this configuration, the servers have the roles of primary replica, secondary replica, or witness replica. The witness replica contains configuration data about the availability group, but not a copy of the availability group user databases. The witness replica requires a SQL Server instance with SQL Server Express edition or higher. By default, it provides high availability but not data protection. ![Witness replica availability group][2] -The Two synchronous replicas and a witness replica availability group may reduce licensing costs because the witness replica can be SQL Server Express Edition. - The following table describes the high availability and data protection behavior according to the possible values for an availability group with two synchronous replicas and a witness replica. |`REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`|1|0 \* | --- |:---:|:---: |High availability | |✔| -|Data protection |✔| | +|Data protection |✔|✔| |Automatic failover after primary replica outage| |✔| |Primary replica available after secondary replica outage| |✔| |Primary replica available after witness replica outage|✔| | @@ -95,38 +92,38 @@ For additional information, see [More about a witness replica](#WitnessReplica). ## Two synchronous replicas availability group -A two synchronous replicas availability group enables data protection. Like the other availability group architectures it can enable read scale-out. Two synchronous replicas does not provide high availability. +A two synchronous replicas availability group enables data protection. Like the other availability group configurations it can enable read scale-out. Two synchronous replicas does not provide high availability. ![Two synchronous replicas][1] -This architecture requires two servers. These servers fill the role of primary replica and secondary replica. +This configuration requires two servers. These servers fill the role of primary replica and secondary replica. -The two synchronous replicas architecture is optimized for data protection and distributing the read workload for databases. By default, resource is configured for data protection. This architecture does not provide high availability because if either instance of SQL Server fails, either the database will not be fully available or there is risk of data loss. You can configure the two synchronous replicas architecture with or without data protection. +The two synchronous replicas configuration is optimized for data protection and distributing the read workload for databases. By default, resource is configured for data protection. This configuration does not provide high availability because if either instance of SQL Server fails, either the database will not be fully available or there is risk of data loss. The following table describes the data protection behavior according to the possible values for two synchronous replicas availability group. |`REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`|1 \*|0 | --- |:---:|:---: -|Automatic failover | | | +|Automatic failover |✔| | |Data protection |✔| | |Automatic failover after primary replica outage|✔\*\*| | |Primary replica available after secondary replica outage| |✔| \* Default setting when availability group is added as a resource in a cluster. -\*\* In this architecture, after the primary replica outage occurs the availability group automatic fails over. Applications cannot connect to the availability group until the primary replica is back on line - now as a secondary replica. +\*\* In this configuration, after the primary replica outage occurs the availability group automatic fails over. Applications cannot connect to the availability group until the primary replica is back on line - now as a secondary replica. -The two synchronous replicas architecture may be the most economical because it only requires two instances of SQL Server on two servers. +The two synchronous replicas configuration may be the most economical because it only requires two instances of SQL Server on two servers. ## More about a witness replica -A witness replica in a SQL Server Always On availability group enables an architecture with high availability and data protection without using a third synchronous secondary replica. Because any edition of SQL Server can host a witness replica, it can save some licensing costs over other availability group architectures. A witness replica contains availability group configuration data like availability group roles, and synchronization status data; it does not include replicated user databases.The witness replica uses the `WITNESS-COMMIT` availability mode. It is never the primary replica. +A witness replica in a SQL Server Always On availability group enables an configuration with high availability and data protection without using a third synchronous secondary replica. Because any edition of SQL Server can host a witness replica, it can save some licensing costs over other availability group configurations. A witness replica contains availability group configuration data like availability group roles, and synchronization status data; it does not include replicated user databases.The witness replica uses the `WITNESS-COMMIT` availability mode. It is never the primary replica. Use a witness replica in an availability group with two synchronous replicas - one primary replica and one secondary replica. If an availability group does not include two synchronous replicas, you cannot use a witness replica. You can also include additional asynchronous replicas. The DDL `CREATE AVAILABILITY GROUP` will fail if the group does not include two synchronous replicas. Likewise, you cannot create an availability group with only one primary replica and a witness replica. An availability group cannot include more than one witness replica. -You can use any edition of SQL Server 2017 to host a witness replica. This includes SQL Server Enterprise Edition, Standard Edition, or Express Edition. SQL Server Express edition is available for free. For SQL Server Enterprise Edition, or Standard Edition, if the instance of SQL Server is used exclusively for availability group witness replica, licensing fees are not charged. +You can use any edition of SQL Server 2017 to host a witness replica. This includes SQL Server Enterprise Edition, Standard Edition, or Express Edition. On a witness replica you cannot do the following things: @@ -179,7 +176,7 @@ For example, let's consider the case of an availability group with three synchro - The required number of replicas to respond to pre-promote action is 3 - 1 = 2. So 2 replicas have to be up for the failover to be triggered. This means that, in the case of primary outage, if one of the secondary replicas is unresponsive and only one of the secondaries responds to the pre-promote action, the resource agent cannot guarantee that the secondary that responded has the highest sequence_number, and a failover is not triggered. -A user can choose to override the default behavior, and configure the availability group resource to not set `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` automatically as above. +A user can choose to override the default behavior, and prevent the availability group resource from setting `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` automatically as above. >[!IMPORTANT] >When `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` is 0 there is risk of data loss. In the case of an outage of the primary, the resource agent will not automatically trigger a failover. The user has to decide if they want to wait for primary to recover or manually fail over. From a13c1b7f83beeb6f9042646e0cfab31c460cf8bf Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 26 May 2017 14:24:35 -0700 Subject: [PATCH 009/336] Update table notes. --- docs/linux/sql-server-linux-availability-group-ha.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index 2d8ebd48645..5d4f25c98d3 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -103,13 +103,14 @@ The two synchronous replicas configuration is optimized for data protection and The following table describes the data protection behavior according to the possible values for two synchronous replicas availability group. |`REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`|1 \*|0 -| --- |:---:|:---: +| --- |:---|:--- |Automatic failover |✔| | |Data protection |✔| | -|Automatic failover after primary replica outage|✔\*\*| | +|Automatic failover after primary replica outage|✔ \*\*| | |Primary replica available after secondary replica outage| |✔| \* Default setting when availability group is added as a resource in a cluster. + \*\* In this configuration, after the primary replica outage occurs the availability group automatic fails over. Applications cannot connect to the availability group until the primary replica is back on line - now as a secondary replica. The two synchronous replicas configuration may be the most economical because it only requires two instances of SQL Server on two servers. From 18bf0374f41408f5c5fabb94fe73685289fb4c0b Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 30 May 2017 08:16:58 -0700 Subject: [PATCH 010/336] Adding linux CLR assembly docs --- .../sql-server-linux-encrypted-connections.md | 121 ++++++++++++++++++ .../sys-trusted-assembies-transact-sql.md | 54 ++++++++ ...ys-sp-add-trusted-assembly-transact-sql.md | 75 +++++++++++ ...s-sp-drop-trusted-assembly-transact-sql.md | 69 ++++++++++ 4 files changed, 319 insertions(+) create mode 100644 docs/linux/sql-server-linux-encrypted-connections.md create mode 100644 docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md create mode 100644 docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md create mode 100644 docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md diff --git a/docs/linux/sql-server-linux-encrypted-connections.md b/docs/linux/sql-server-linux-encrypted-connections.md new file mode 100644 index 00000000000..7003f4c922e --- /dev/null +++ b/docs/linux/sql-server-linux-encrypted-connections.md @@ -0,0 +1,121 @@ +--- +title: "Encrypting Connections to SQL Server on Linux | Microsoft Docs" +description: "This topic describes Encrypting Connections to SQL Server on Linux." +author: "tmullaney" +ms.date: "06/14/2017" +ms.author: "thmullan;rickbyh" +manager: "jhubbard" +ms.topic: "article" +ms.prod: "sql-linux" +ms.technology: "database-engine" +ms.assetid: +helpviewer_keywords: + - "Linux, encrypted connections" +# ROBOTS: "" +# audience: "" +# ms.devlang: "" +# ms.reviewer: "" +# ms.suite: "" +# ms.tgt_pltfrm: "" +# ms.custom: "" +--- +# Encrypting Connections to SQL Server on Linux +[!INCLUDE[tsql-appliesto-ss2017-xxxx-xxxx-xxx_md](../../includes/tsql-appliesto-ss2017-xxxx-xxxx-xxx-md.md)] + +[!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] on Linux can use Transport Layer Security (TLS) to encrypt data that is transmitted across a network between a client application and an instance of SQL Server. SQL Server supports the same TLS protocols on both Windows and Linux: TLS 1.2, 1.1, and 1.0. However, the steps to configure TLS are specific to the operating system on which SQL Server is running.  +  +## Typical Scenario +TLS is used to encrypt connections from a client application to SQL Server. When configured correctly, TLS provides both privacy and data integrity for communications between the client and the server.  +The following steps describe a typical scenario:  + +1. Database administrator generates a private key and a certificate signing request (CSR). The CSR's Common Name should match the server name that clients specify in their SQL Server connection string. This Common Name is usually the fully qualified domain name of the SQL Server host. To use the same certificate for multiple servers, you can use a wildcard in the Common Name (for example, `"*.contoso.com" instead of "node1.contoso.com"`). +2. The CSR is sent to a certificate authority (CA) for signing. The CA should be trusted by all client machines that connect to SQL Server. The CA returns a signed certificate to the database administrator. +3. Database administrator configures SQL Server to use the private key and the signed certificate for TLS connections. +4. Clients specify `"Encrypt=True"` and `"TrustServerCertificate=False"` in their connection strings. (The specific parameter names may be different depending on which driver is being used). Clients now attempt encrypt connections to SQL Server and check the validity of SQL Server's certificate to prevent man-in-the-middle attacks.  +  +## Configuring TLS on Linux + +Use `mssql-conf` to configure TLS for an instance of SQL Server running on Linux. The following options are supported: + +|Option |Description | +|--- |--- | +|`forceencryption` |If yes, then SQL Server forces all connections to be encrypted. By default, this option is no. |  +|`tlscert` |The absolute path to the certificate file that SQL Server uses for TLS. Example:   `/etc/ssl/certs/mssql.pem`  The certificate file must be accessible by the mssql account. Microsoft recommends Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 600 `. |  +|`tlskey` |The absolute path to the private key file that SQL Server uses for TLS. Example:  `/etc/ssl/private/mssql.key`  The certificate file must be accessible by the mssql account. Microsoft recommends Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 600 `. | +|`tlsprotocols` |A comma-separated list of which TLS protocols are allowed by SQL Server. SQL Server always attempts to negotiate the strongest allowed protocol. If a client does not support any allowed protocol, SQL Server rejects the connection attempt.  For compatibility, all supported protocols are allowed by default (1.2, 1.1, 1.0).  If your clients support TLS 1.2, Microsoft recommends allowing only TLS 1.2. |  +|`tlsciphers` |Specifies which ciphers are allowed by SQL Server for TLS. This string must be formatted per OpenSSL's cipher list format. In general, you should not need to change this option. 
By default, the following ciphers are allowed: 
`ECDHE-ECDSA-AES128-GCM-SHA256`
`ECDHE-ECDSA-AES256-GCM-SHA384`
`ECDHE-RSA-AES128-GCM-SHA256`
`ECDHE-RSA-AES256-GCM-SHA384`
`ECDHE-ECDSA-AES128-SHA256`
`ECDHE-ECDSA-AES256-SHA384`
`ECDHE-RSA-AES128-SHA256`
`ECDHE-RSA-AES256-SHA384`
`ECDHE-ECDSA-AES256-SHA`
`ECDHE-ECDSA-AES128-SHA`
`ECDHE-RSA-AES256-SHA`
`ECDHE-RSA-AES128-SHA`
`AES256-GCM-SHA384`
`AES128-GCM-SHA256`
`AES256-SHA256`
`AES128-SHA256`
`AES256-SHA:AES128-SHA` |   + +  +## Example +This example uses a self-signed certificate. In normal production scenarios, the certificate would be signed by a CA that is trusted by all clients.  +  +### Step 1: Generate private key and certificate +Open a command terminal on the Linux machine where SQL Server is running. Run the following commands: + +``` +# Generate a self-signed certificate +# Make sure the /CN matches your SQL Server host fully-qualified domain name +# You may optionally use wildcards, e.g. '/CN=*.contoso.com' +openssl req -x509 -nodes -newkey rsa:2048 -subj '/CN=mssql.contoso.com' -keyout mssql.key -out mssql.pem -days 365 +``` +  +#### Restrict access to mssql  + +``` +sudo chown mssql:mssql mssql.pem mssql.key +sudo chmod 600 mssql.pem mssql.key +``` +  +#### Move to system SSL directories (optional) + +``` +sudo mv mssql.pem /etc/ssl/certs/ +sudo mv mssql.key /etc/ssl/private/ +``` +  +### Step 2: Configure SQL Server  +Use mssql-conf to configure SQL Server to use the certificate and key for TLS. For increased security, you can also set TLS 1.2 as the only allowed protocol and force all clients to use encrypted connections.  + +``` +sudo /opt/mssql/bin/mssql-conf set tlscert /etc/ssl/certs/mssql.pem +sudo /opt/mssql/bin/mssql-conf set tlskey /etc/ssl/private/mssql.key +sudo /opt/mssql/bin/mssql-conf set tlsprotocols 1.2 +sudo /opt/mssql/bin/mssql-conf set forceencryption yes +``` +  +### Step 3: Restart SQL Server +SQL Server must be restarted for these changes to take effect. +`sudo systemctl restart mssql-server` +  +### Step 4: Copy self-signed certificate to client machines +Because this example uses a certificate self-signed by the SQL Server host, the certificate (not the private key) must be copied and installed as a trusted root certificate on all client machines that connect to SQL Server. If the certificate is signed by a CA that is already trusted by all clients, this step is not necessary. +  +### Step 5: Connect from clients using TLS +Connect to SQL Server from a client with encryption enabled and `TrustServerCertificate` set to `False` in the connection string. Here are a few examples of how to specify these parameters using different tools and drivers. + +sqlcmd +`sqlcmd -N -C -S mssql.contoso.com -U sa -P ''` + +SQL Server Management Studio + +   +ADO.NET +`"Encrypt=true; TrustServerCertificate=true;"` + +ODBC +`"Encrypt=yes; TrustServerCertificate=no;"` + +JDBC +`"encrypt=true; trustServerCertificate=false;" ` + +  +## Common connection errors + +|Error message |Fix | +|--- |--- | +|The certificate chain was issued by an authority that is not trusted.  |This error occurs when clients are unable to verify the signature on the certificate presented by SQL Server during the TLS handshake. Make sure the client trusts either the SQL Server certificate directly, or the CA which signed the SQL Server certificate. | +|The target principal name is incorrect.  |Make sure that Common Name field on SQL Server's certificate matches the server name specified in the client's connection string. |  +|An existing connection was forcibly closed by the remote host. |This error can occur when the client doesn't support the TLS protocol version required by SQL Server. For example, if SQL Server is configured to require TLS 1.2, make sure your clients also support the TLS 1.2 protocol. | + +## Next steps + diff --git a/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md b/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md new file mode 100644 index 00000000000..cd3ea3d16c8 --- /dev/null +++ b/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md @@ -0,0 +1,54 @@ +--- +title: "sys.trusted_assemblies (Transact-SQL) | Microsoft Docs" +ms.custom: "" +ms.date: "06/14/2017" +ms.prod: "sql-non-specified" +ms.reviewer: "" +ms.suite: "" +ms.technology: + - "database-engine" +ms.tgt_pltfrm: "" +ms.topic: "language-reference" +f1_keywords: + - "trusted_assemblies_TSQL" + - "trusted_assemblies" + - "sys.trusted_assemblies_TSQL" + - "sys.trusted_assemblies" +dev_langs: + - "TSQL" +helpviewer_keywords: + - "sys.trusted_assemblies" +ms.assetid: +caps.latest.revision: +author: "tmullaney" +ms.author: "thmullan;rickbyh" +manager: "jhubbard" +--- +# sys.trusted_assemblies (Transact-SQL) +[!INCLUDE[tsql-appliesto-ss2017-xxxx-xxxx-xxx_md](../../includes/tsql-appliesto-ss2017-xxxx-xxxx-xxx-md.md)] + +Contains a row for each trusted assembly for the server. + + ![Topic link icon](../../database-engine/configure-windows/media/topic-link.gif "Topic link icon") [Transact-SQL Syntax Conventions](../../t-sql/language-elements/transact-sql-syntax-conventions-transact-sql.md) + + +|Column name |Data type |Description | +|--- |--- |--- | +|clr_name |nvarchar(4000) |Canonical string that encodes the simple name, version number, culture, public key, and architecture of the assembly. This value uniquely identifies the assembly on the common language runtime (CLR) side. | +|hash |varbinary(8000) |SHA2_512 hash of the assembly content. | +|create_date |datetime2 |Date the assembly was added to the list of trusted assemblies. | +|created_by |nvarchar(128) |Login name of the principal who added the assembly to the list. | +| | | | + + +## Remarks + +Use **Need to add sp_add_trusted_assembly** and **Need to add sys.trusted_assemblies** add or remove assemblies from `sys.trusted_assemblies`. + +## See Also + **Need to add sp_add_trusted_assembly** + **Need to add sys.trusted_assemblies** + [DROP ASSEMBLY (Transact-SQL)](../../t-sql/statements/drop-assembly-transact-sql.md) + [sys.assemblies](../../t-sql/statements/sys-assemblies-transact-sql.md) + [sys.dm_clr_loaded_assemblies](../../sql/relational-databases/system-dynamic-management-views/sys-dm-clr-loaded-assemblies-transac.md) + diff --git a/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md b/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md new file mode 100644 index 00000000000..e59f6c8104a --- /dev/null +++ b/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md @@ -0,0 +1,75 @@ +--- +title: "sys.sp_add_trusted_assembly (Transact-SQL) | Microsoft Docs" +ms.custom: "" +ms.date: "06/14/2017" +ms.prod: "sql-non-specified" +ms.reviewer: "" +ms.suite: "" +ms.technology: + - "database-engine" +ms.tgt_pltfrm: "" +ms.topic: "language-reference" +f1_keywords: + - "sp_add_trusted_assembly_TSQL" + - "sp_add_trusted_assembly" + - "sys.sp_add_trusted_assembly_TSQL" + - "sys.sp_add_trusted_assembly" +dev_langs: + - "TSQL" +helpviewer_keywords: + - "sys.sp_add_trusted_assembly" +ms.assetid: +caps.latest.revision: +author: "tmullaney" +ms.author: "thmullan;rickbyh" +manager: "jhubbard" +--- +# sys.sp_add_trusted_assembly (Transact-SQL) +[!INCLUDE[tsql-appliesto-ss2017-xxxx-xxxx-xxx_md](../../includes/tsql-appliesto-ss2017-xxxx-xxxx-xxx-md.md)] + +Adds an assembly to the list of trusted assemblies for the server. + + ![Topic link icon](../../database-engine/configure-windows/media/topic-link.gif "Topic link icon") [Transact-SQL Syntax Conventions](../../t-sql/language-elements/transact-sql-syntax-conventions-transact-sql.md) + + +## Syntax +``` +sp_add_trusted_assembly + [ @clr_name = ] 'clr_name', + [ @hash = ] 'value' +``` + +## Remarks + +This procedure adds an assembly to **Need to add sys.trusted_assemblies**. + +## Arguments + +[ @clr_name = ] '*clr_name*' +Canonical name that encodes the simple name, version number, culture, public key, and architecture of the assembly to trust. This value uniquely identifies the assembly on the common language runtime (CLR) side. The value is the same as the clr_name value in sys.assemblies. + +[ @hash = ] '*value*' +The SHA2_512 hash value of the assembly to add to the list of trusted assemblies for the server. Trusted assemblies may load when CLR strict security is enabled, even if the assembly is unsigned or the database is not marked as trustworthy. + +## Permissions + +Requires membership in the `sysadmin` fixed server role or `CONTROL SERVER` permission. + +## Examples + +The following example adds an assembly named `pointudt` to the list of trusted assemblies for the server. These values are available from [sys.assemblies](../../t-sql/statements/sys-assemblies-transact-sql.md). + +``` +EXEC sp_add_trusted_assembly +N'pointudt, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarchitecture=msil', +0x8893AD6D78D14EE43DF482E2EAD44123E3A0B684A8873C3F7BF3B5E8D8F09503F3E62370CE742BBC96FE3394477214B84C7C1B0F7A04DCC788FA99C2C09DFCCC; +``` + +## See Also + **Need to add sp_add_trusted_assembly** + **Need to add sys.trusted_assemblies** + [CREATE ASSEMBLY (Transact-SQL)](../../t-sql/statements/create-assembly-transact-sql.md) + [CLR strict security](../../sql/database-engine/configure-windows/clr-strict-security.md) + [sys.assemblies](../../t-sql/statements/sys-assemblies-transact-sql.md) + [sys.dm_clr_loaded_assemblies](../../sql/relational-databases/system-dynamic-management-views/sys-dm-clr-loaded-assemblies-transac.md) + diff --git a/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md b/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md new file mode 100644 index 00000000000..06af2aec2e9 --- /dev/null +++ b/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md @@ -0,0 +1,69 @@ +--- +title: "sys.sp_drop_trusted_assembly (Transact-SQL) | Microsoft Docs" +ms.custom: "" +ms.date: "06/14/2017" +ms.prod: "sql-non-specified" +ms.reviewer: "" +ms.suite: "" +ms.technology: + - "database-engine" +ms.tgt_pltfrm: "" +ms.topic: "language-reference" +f1_keywords: + - "sp_drop_trusted_assembly_TSQL" + - "sp_drop_trusted_assembly" + - "sys.sp_drop_trusted_assembly_TSQL" + - "sys.sp_drop_trusted_assembly" +dev_langs: + - "TSQL" +helpviewer_keywords: + - "sys.sp_drop_trusted_assembly" +ms.assetid: +caps.latest.revision: +author: "tmullaney" +ms.author: "thmullan;rickbyh" +manager: "jhubbard" +--- +# sys.sp_drop_trusted_assembly (Transact-SQL) +[!INCLUDE[tsql-appliesto-ss2017-xxxx-xxxx-xxx_md](../../includes/tsql-appliesto-ss2017-xxxx-xxxx-xxx-md.md)] + +Adds an assembly to the list of trusted assemblies for the server. + + ![Topic link icon](../../database-engine/configure-windows/media/topic-link.gif "Topic link icon") [Transact-SQL Syntax Conventions](../../t-sql/language-elements/transact-sql-syntax-conventions-transact-sql.md) + + +## Syntax +``` +sp_drop_trusted_assembly + [ @clr_name = ] 'clr_name' +``` + +## Arguments + +[ @clr_name = ] '*clr_name*' +Canonical name that encodes the simple name, version number, culture, public key, and architecture of the assembly to trust. This value uniquely identifies the assembly on the common language runtime (CLR) side. The value is the same as the clr_name value in sys.assemblies. + +## Remarks + +This procedure removes an assembly from **Need to add sys.trusted_assemblies**. + +## Permissions + +Requires membership in the `sysadmin` fixed server role or `CONTROL SERVER` permission. + +## Examples + +The following example drops an assembly named `pointudt` from the list of trusted assemblies for the server. + +``` +EXEC sp_drop_trusted_assembly +N'pointudt, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarchitecture=msil'; +``` + +## See Also + **Need to add sp_add_trusted_assembly** + **Need to add sys.trusted_assemblies** + [DROP ASSEMBLY (Transact-SQL)](../../t-sql/statements/drop-assembly-transact-sql.md) + [sys.assemblies](../../t-sql/statements/sys-assemblies-transact-sql.md) + [sys.dm_clr_loaded_assemblies](../../sql/relational-databases/system-dynamic-management-views/sys-dm-clr-loaded-assemblies-transac.md) + From fd87ffb46e2e42f7ea98d3aa6810930001d3704a Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 30 May 2017 08:34:51 -0700 Subject: [PATCH 011/336] Fixing tokens --- docs/linux/sql-server-linux-encrypted-connections.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-encrypted-connections.md b/docs/linux/sql-server-linux-encrypted-connections.md index 7003f4c922e..611bb938d73 100644 --- a/docs/linux/sql-server-linux-encrypted-connections.md +++ b/docs/linux/sql-server-linux-encrypted-connections.md @@ -20,9 +20,9 @@ helpviewer_keywords: # ms.custom: "" --- # Encrypting Connections to SQL Server on Linux -[!INCLUDE[tsql-appliesto-ss2017-xxxx-xxxx-xxx_md](../../includes/tsql-appliesto-ss2017-xxxx-xxxx-xxx-md.md)] +[!INCLUDE[tsql-appliesto-sslinx-xxxx-xxxx-xxx_md](../../includes/tsql-appliesto-sslinx-xxxx-xxxx-xxx-md.md)] -[!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] on Linux can use Transport Layer Security (TLS) to encrypt data that is transmitted across a network between a client application and an instance of SQL Server. SQL Server supports the same TLS protocols on both Windows and Linux: TLS 1.2, 1.1, and 1.0. However, the steps to configure TLS are specific to the operating system on which SQL Server is running.  +[!INCLUDE[ssNoVersion](../docs/includes/ssnoversion-md.md)] on Linux can use Transport Layer Security (TLS) to encrypt data that is transmitted across a network between a client application and an instance of SQL Server. SQL Server supports the same TLS protocols on both Windows and Linux: TLS 1.2, 1.1, and 1.0. However, the steps to configure TLS are specific to the operating system on which SQL Server is running.    ## Typical Scenario TLS is used to encrypt connections from a client application to SQL Server. When configured correctly, TLS provides both privacy and data integrity for communications between the client and the server.  From 2cdfb011f1260d1dd0a52fee943b7bd2f331a984 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 30 May 2017 08:38:54 -0700 Subject: [PATCH 012/336] Fixing links. --- .../sys-trusted-assembies-transact-sql.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md b/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md index cd3ea3d16c8..2ddac9e1816 100644 --- a/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md +++ b/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md @@ -25,7 +25,7 @@ ms.author: "thmullan;rickbyh" manager: "jhubbard" --- # sys.trusted_assemblies (Transact-SQL) -[!INCLUDE[tsql-appliesto-ss2017-xxxx-xxxx-xxx_md](../../includes/tsql-appliesto-ss2017-xxxx-xxxx-xxx-md.md)] +[!INCLUDE[tsql-appliesto-sslinx-xxxx-xxxx-xxx_md](../../includes/tsql-appliesto-sslinx-xxxx-xxxx-xxx-md.md)] Contains a row for each trusted assembly for the server. @@ -49,6 +49,6 @@ Use **Need to add sp_add_trusted_assembly** and **Need to add sys.trusted_assemb **Need to add sp_add_trusted_assembly** **Need to add sys.trusted_assemblies** [DROP ASSEMBLY (Transact-SQL)](../../t-sql/statements/drop-assembly-transact-sql.md) - [sys.assemblies](../../t-sql/statements/sys-assemblies-transact-sql.md) - [sys.dm_clr_loaded_assemblies](../../sql/relational-databases/system-dynamic-management-views/sys-dm-clr-loaded-assemblies-transac.md) + [sys.assemblies](../../sql/relational-databases/system-catalog-views/sys-assemblies-transact-sql.md) + [sys.dm_clr_loaded_assemblies](../../sql/relational-databases/system-dynamic-management-views/sys-dm-clr-loaded-assemblies-transact-sql.md) From 4d3718b010cd5d04640d367bcadb2ceaf5404601 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 30 May 2017 08:40:23 -0700 Subject: [PATCH 013/336] Fixing link. --- .../sys-sp-add-trusted-assembly-transact-sql.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md b/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md index e59f6c8104a..4f936e23c47 100644 --- a/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md +++ b/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md @@ -25,7 +25,7 @@ ms.author: "thmullan;rickbyh" manager: "jhubbard" --- # sys.sp_add_trusted_assembly (Transact-SQL) -[!INCLUDE[tsql-appliesto-ss2017-xxxx-xxxx-xxx_md](../../includes/tsql-appliesto-ss2017-xxxx-xxxx-xxx-md.md)] +[!INCLUDE[tsql-appliesto-ssvnxt-xxxx-xxxx-xxx_md](../../includes/tsql-appliesto-ssvnxt-xxxx-xxxx-xxx-md.md)] Adds an assembly to the list of trusted assemblies for the server. From 6bb8ace9d6457599049b50b2d9c59e577e4c2973 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 30 May 2017 08:41:30 -0700 Subject: [PATCH 014/336] Fixing links. --- .../sys-sp-drop-trusted-assembly-transact-sql.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md b/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md index 06af2aec2e9..a32d7cc8d20 100644 --- a/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md +++ b/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md @@ -25,7 +25,7 @@ ms.author: "thmullan;rickbyh" manager: "jhubbard" --- # sys.sp_drop_trusted_assembly (Transact-SQL) -[!INCLUDE[tsql-appliesto-ss2017-xxxx-xxxx-xxx_md](../../includes/tsql-appliesto-ss2017-xxxx-xxxx-xxx-md.md)] +[!INCLUDE[tsql-appliesto-ssvnxt-xxxx-xxxx-xxx_md](../../includes/tsql-appliesto-ssvnxt-xxxx-xxxx-xxx-md.md)] Adds an assembly to the list of trusted assemblies for the server. @@ -64,6 +64,6 @@ N'pointudt, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarch **Need to add sp_add_trusted_assembly** **Need to add sys.trusted_assemblies** [DROP ASSEMBLY (Transact-SQL)](../../t-sql/statements/drop-assembly-transact-sql.md) - [sys.assemblies](../../t-sql/statements/sys-assemblies-transact-sql.md) - [sys.dm_clr_loaded_assemblies](../../sql/relational-databases/system-dynamic-management-views/sys-dm-clr-loaded-assemblies-transac.md) + [sys.assemblies](../../relational-databases/system-catalog-views/sys-assemblies-transact-sql.md) + [sys.dm_clr_loaded_assemblies](../../sql/relational-databases/system-dynamic-management-views/sys-dm-clr-loaded-assemblies-transact-sql.md) From db75a52a8acb417bd448cbd5ccefed25a2225499 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 30 May 2017 08:43:11 -0700 Subject: [PATCH 015/336] Fixing links. --- docs/linux/sql-server-linux-encrypted-connections.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-encrypted-connections.md b/docs/linux/sql-server-linux-encrypted-connections.md index 611bb938d73..5179604533c 100644 --- a/docs/linux/sql-server-linux-encrypted-connections.md +++ b/docs/linux/sql-server-linux-encrypted-connections.md @@ -20,9 +20,9 @@ helpviewer_keywords: # ms.custom: "" --- # Encrypting Connections to SQL Server on Linux -[!INCLUDE[tsql-appliesto-sslinx-xxxx-xxxx-xxx_md](../../includes/tsql-appliesto-sslinx-xxxx-xxxx-xxx-md.md)] +[!INCLUDE[tsql-appliesto-sslinx-xxxx-xxxx-xxx](../../includes/tsql-appliesto-sslinx-xxxx-xxxx-xxx.md)] -[!INCLUDE[ssNoVersion](../docs/includes/ssnoversion-md.md)] on Linux can use Transport Layer Security (TLS) to encrypt data that is transmitted across a network between a client application and an instance of SQL Server. SQL Server supports the same TLS protocols on both Windows and Linux: TLS 1.2, 1.1, and 1.0. However, the steps to configure TLS are specific to the operating system on which SQL Server is running.  +[!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] on Linux can use Transport Layer Security (TLS) to encrypt data that is transmitted across a network between a client application and an instance of SQL Server. SQL Server supports the same TLS protocols on both Windows and Linux: TLS 1.2, 1.1, and 1.0. However, the steps to configure TLS are specific to the operating system on which SQL Server is running.    ## Typical Scenario TLS is used to encrypt connections from a client application to SQL Server. When configured correctly, TLS provides both privacy and data integrity for communications between the client and the server.  From a08bf679c854ba43cae7b8600466463b7ffc394a Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 30 May 2017 08:45:23 -0700 Subject: [PATCH 016/336] Fixing links. --- .../sys-trusted-assembies-transact-sql.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md b/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md index 2ddac9e1816..b563a396512 100644 --- a/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md +++ b/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md @@ -25,7 +25,7 @@ ms.author: "thmullan;rickbyh" manager: "jhubbard" --- # sys.trusted_assemblies (Transact-SQL) -[!INCLUDE[tsql-appliesto-sslinx-xxxx-xxxx-xxx_md](../../includes/tsql-appliesto-sslinx-xxxx-xxxx-xxx-md.md)] +[!INCLUDE[tsql-appliesto-ssvnxt-xxxx-xxxx-xxx](../../includes/tsql-appliesto-ssvnxt-xxxx-xxxx-xxx.md)] Contains a row for each trusted assembly for the server. @@ -49,6 +49,6 @@ Use **Need to add sp_add_trusted_assembly** and **Need to add sys.trusted_assemb **Need to add sp_add_trusted_assembly** **Need to add sys.trusted_assemblies** [DROP ASSEMBLY (Transact-SQL)](../../t-sql/statements/drop-assembly-transact-sql.md) - [sys.assemblies](../../sql/relational-databases/system-catalog-views/sys-assemblies-transact-sql.md) - [sys.dm_clr_loaded_assemblies](../../sql/relational-databases/system-dynamic-management-views/sys-dm-clr-loaded-assemblies-transact-sql.md) + [sys.assemblies](system-catalog-views/sys-assemblies-transact-sql.md) + [sys.dm_clr_loaded_assemblies](sys-dm-clr-loaded-assemblies-transact-sql.md) From 3ef9260c1d2f8e70922167337b1ba441460b0500 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 30 May 2017 09:03:09 -0700 Subject: [PATCH 017/336] Fixing link. --- docs/linux/sql-server-linux-encrypted-connections.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-encrypted-connections.md b/docs/linux/sql-server-linux-encrypted-connections.md index 5179604533c..fd15bae5f52 100644 --- a/docs/linux/sql-server-linux-encrypted-connections.md +++ b/docs/linux/sql-server-linux-encrypted-connections.md @@ -20,7 +20,7 @@ helpviewer_keywords: # ms.custom: "" --- # Encrypting Connections to SQL Server on Linux -[!INCLUDE[tsql-appliesto-sslinx-xxxx-xxxx-xxx](../../includes/tsql-appliesto-sslinx-xxxx-xxxx-xxx.md)] +[!INCLUDE[tsql-appliesto-sslinx-xxxx-xxxx-xxx](/sql/includes/tsql-appliesto-sslinx-xxxx-xxxx-xxx.md)] [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] on Linux can use Transport Layer Security (TLS) to encrypt data that is transmitted across a network between a client application and an instance of SQL Server. SQL Server supports the same TLS protocols on both Windows and Linux: TLS 1.2, 1.1, and 1.0. However, the steps to configure TLS are specific to the operating system on which SQL Server is running.    From e0bcee24986d3caf7b770e191a5cf3de35f2d485 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 30 May 2017 09:05:07 -0700 Subject: [PATCH 018/336] Fixing links. --- .../sys-sp-drop-trusted-assembly-transact-sql.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md b/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md index a32d7cc8d20..f0c8105399c 100644 --- a/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md +++ b/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md @@ -25,7 +25,7 @@ ms.author: "thmullan;rickbyh" manager: "jhubbard" --- # sys.sp_drop_trusted_assembly (Transact-SQL) -[!INCLUDE[tsql-appliesto-ssvnxt-xxxx-xxxx-xxx_md](../../includes/tsql-appliesto-ssvnxt-xxxx-xxxx-xxx-md.md)] +[!INCLUDE[tsql-appliesto-ssvnxt-xxxx-xxxx-xxx](../../includes/tsql-appliesto-ssvnxt-xxxx-xxxx-xxx.md)] Adds an assembly to the list of trusted assemblies for the server. @@ -65,5 +65,5 @@ N'pointudt, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarch **Need to add sys.trusted_assemblies** [DROP ASSEMBLY (Transact-SQL)](../../t-sql/statements/drop-assembly-transact-sql.md) [sys.assemblies](../../relational-databases/system-catalog-views/sys-assemblies-transact-sql.md) - [sys.dm_clr_loaded_assemblies](../../sql/relational-databases/system-dynamic-management-views/sys-dm-clr-loaded-assemblies-transact-sql.md) + [sys.dm_clr_loaded_assemblies](../../relational-databases/system-dynamic-management-views/sys-dm-clr-loaded-assemblies-transact-sql.md) From 80d9ea863c061906b02fbf1ea092be7a7b441e3f Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 30 May 2017 09:06:41 -0700 Subject: [PATCH 019/336] Fixing links. --- .../sys-trusted-assembies-transact-sql.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md b/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md index b563a396512..4fcdc4cc0d4 100644 --- a/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md +++ b/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md @@ -49,6 +49,6 @@ Use **Need to add sp_add_trusted_assembly** and **Need to add sys.trusted_assemb **Need to add sp_add_trusted_assembly** **Need to add sys.trusted_assemblies** [DROP ASSEMBLY (Transact-SQL)](../../t-sql/statements/drop-assembly-transact-sql.md) - [sys.assemblies](system-catalog-views/sys-assemblies-transact-sql.md) - [sys.dm_clr_loaded_assemblies](sys-dm-clr-loaded-assemblies-transact-sql.md) + [sys.assemblies](../../relational-databases/system-catalog-views/sys-assemblies-transact-sql.md) + [sys.dm_clr_loaded_assemblies](../../relational-databases/system-catalog-views/sys-dm-clr-loaded-assemblies-transact-sql.md) From 5823ae608109375e66354fa4050b48d32a023675 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 30 May 2017 09:08:41 -0700 Subject: [PATCH 020/336] Fixing links. --- .../sys-sp-add-trusted-assembly-transact-sql.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md b/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md index 4f936e23c47..103781c2de9 100644 --- a/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md +++ b/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md @@ -25,7 +25,7 @@ ms.author: "thmullan;rickbyh" manager: "jhubbard" --- # sys.sp_add_trusted_assembly (Transact-SQL) -[!INCLUDE[tsql-appliesto-ssvnxt-xxxx-xxxx-xxx_md](../../includes/tsql-appliesto-ssvnxt-xxxx-xxxx-xxx-md.md)] +[!INCLUDE[tsql-appliesto-ssvnxt-xxxx-xxxx-xxx](../../includes/tsql-appliesto-ssvnxt-xxxx-xxxx-xxx.md)] Adds an assembly to the list of trusted assemblies for the server. @@ -57,7 +57,7 @@ Requires membership in the `sysadmin` fixed server role or `CONTROL SERVER` perm ## Examples -The following example adds an assembly named `pointudt` to the list of trusted assemblies for the server. These values are available from [sys.assemblies](../../t-sql/statements/sys-assemblies-transact-sql.md). +The following example adds an assembly named `pointudt` to the list of trusted assemblies for the server. These values are available from [sys.assemblies](../../relational-databases/system-catalog-views/sys-assemblies-transact-sql.md). ``` EXEC sp_add_trusted_assembly @@ -70,6 +70,6 @@ N'pointudt, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarch **Need to add sys.trusted_assemblies** [CREATE ASSEMBLY (Transact-SQL)](../../t-sql/statements/create-assembly-transact-sql.md) [CLR strict security](../../sql/database-engine/configure-windows/clr-strict-security.md) - [sys.assemblies](../../t-sql/statements/sys-assemblies-transact-sql.md) - [sys.dm_clr_loaded_assemblies](../../sql/relational-databases/system-dynamic-management-views/sys-dm-clr-loaded-assemblies-transac.md) + [sys.assemblies](../../relational-databases/system-catalog-views/sys-assemblies-transact-sql.md) + [sys.dm_clr_loaded_assemblies](../../relational-databases/system-dynamic-management-views/sys-dm-clr-loaded-assemblies-transac.md) From d808409689c383d25295f7eaffc5420c03ac6ed2 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 30 May 2017 09:48:28 -0700 Subject: [PATCH 021/336] fixing links. --- .../sys-sp-add-trusted-assembly-transact-sql.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md b/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md index 103781c2de9..a5227a06e02 100644 --- a/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md +++ b/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md @@ -69,7 +69,7 @@ N'pointudt, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarch **Need to add sp_add_trusted_assembly** **Need to add sys.trusted_assemblies** [CREATE ASSEMBLY (Transact-SQL)](../../t-sql/statements/create-assembly-transact-sql.md) - [CLR strict security](../../sql/database-engine/configure-windows/clr-strict-security.md) + [CLR strict security](../../database-engine/configure-windows/clr-strict-security.md) [sys.assemblies](../../relational-databases/system-catalog-views/sys-assemblies-transact-sql.md) - [sys.dm_clr_loaded_assemblies](../../relational-databases/system-dynamic-management-views/sys-dm-clr-loaded-assemblies-transac.md) + [sys.dm_clr_loaded_assemblies](../../relational-databases/system-dynamic-management-views/sys-dm-clr-loaded-assemblies-transact-sql.md) From a859d6b54aaec04aac8737c9cb273b426845147f Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 30 May 2017 09:49:34 -0700 Subject: [PATCH 022/336] Update sys-trusted-assembies-transact-sql.md --- .../system-catalog-views/sys-trusted-assembies-transact-sql.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md b/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md index 4fcdc4cc0d4..765d2b51fb2 100644 --- a/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md +++ b/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md @@ -50,5 +50,5 @@ Use **Need to add sp_add_trusted_assembly** and **Need to add sys.trusted_assemb **Need to add sys.trusted_assemblies** [DROP ASSEMBLY (Transact-SQL)](../../t-sql/statements/drop-assembly-transact-sql.md) [sys.assemblies](../../relational-databases/system-catalog-views/sys-assemblies-transact-sql.md) - [sys.dm_clr_loaded_assemblies](../../relational-databases/system-catalog-views/sys-dm-clr-loaded-assemblies-transact-sql.md) + [sys.dm_clr_loaded_assemblies](../../relational-databases/system-dynamic-management-views/sys-dm-clr-loaded-assemblies-transact-sql.md) From c649bd503d33dec42b7e17384ca829bd5c95e89a Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 30 May 2017 09:51:50 -0700 Subject: [PATCH 023/336] Fixing link --- docs/linux/sql-server-linux-encrypted-connections.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-encrypted-connections.md b/docs/linux/sql-server-linux-encrypted-connections.md index fd15bae5f52..8338793b070 100644 --- a/docs/linux/sql-server-linux-encrypted-connections.md +++ b/docs/linux/sql-server-linux-encrypted-connections.md @@ -20,7 +20,7 @@ helpviewer_keywords: # ms.custom: "" --- # Encrypting Connections to SQL Server on Linux -[!INCLUDE[tsql-appliesto-sslinx-xxxx-xxxx-xxx](/sql/includes/tsql-appliesto-sslinx-xxxx-xxxx-xxx.md)] +[!INCLUDE[tsql-appliesto-sslinx-xxxx-xxxx-xxx](../sql/includes/tsql-appliesto-sslinx-xxxx-xxxx-xxx.md)] [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] on Linux can use Transport Layer Security (TLS) to encrypt data that is transmitted across a network between a client application and an instance of SQL Server. SQL Server supports the same TLS protocols on both Windows and Linux: TLS 1.2, 1.1, and 1.0. However, the steps to configure TLS are specific to the operating system on which SQL Server is running.    From 5ff2782ae3840a82d0e90d267a1e674de986ce38 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 30 May 2017 09:58:30 -0700 Subject: [PATCH 024/336] Fixing link. --- docs/linux/sql-server-linux-encrypted-connections.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-encrypted-connections.md b/docs/linux/sql-server-linux-encrypted-connections.md index 8338793b070..6bb6b671e74 100644 --- a/docs/linux/sql-server-linux-encrypted-connections.md +++ b/docs/linux/sql-server-linux-encrypted-connections.md @@ -20,7 +20,7 @@ helpviewer_keywords: # ms.custom: "" --- # Encrypting Connections to SQL Server on Linux -[!INCLUDE[tsql-appliesto-sslinx-xxxx-xxxx-xxx](../sql/includes/tsql-appliesto-sslinx-xxxx-xxxx-xxx.md)] +[!INCLUDE[tsql-appliesto-sslinx-xxxx-xxxx-xxx](../includes/tsql-appliesto-sslinx-xxxx-xxxx-xxx.md)] [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] on Linux can use Transport Layer Security (TLS) to encrypt data that is transmitted across a network between a client application and an instance of SQL Server. SQL Server supports the same TLS protocols on both Windows and Linux: TLS 1.2, 1.1, and 1.0. However, the steps to configure TLS are specific to the operating system on which SQL Server is running.    From 80d332b3583c8c4b63de533cadd8aa9bba4dbc30 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 30 May 2017 10:09:43 -0700 Subject: [PATCH 025/336] Adding tokens. --- .../sql-server-linux-encrypted-connections.md | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/docs/linux/sql-server-linux-encrypted-connections.md b/docs/linux/sql-server-linux-encrypted-connections.md index 6bb6b671e74..acfce5544ff 100644 --- a/docs/linux/sql-server-linux-encrypted-connections.md +++ b/docs/linux/sql-server-linux-encrypted-connections.md @@ -22,35 +22,35 @@ helpviewer_keywords: # Encrypting Connections to SQL Server on Linux [!INCLUDE[tsql-appliesto-sslinx-xxxx-xxxx-xxx](../includes/tsql-appliesto-sslinx-xxxx-xxxx-xxx.md)] -[!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] on Linux can use Transport Layer Security (TLS) to encrypt data that is transmitted across a network between a client application and an instance of SQL Server. SQL Server supports the same TLS protocols on both Windows and Linux: TLS 1.2, 1.1, and 1.0. However, the steps to configure TLS are specific to the operating system on which SQL Server is running.  +[!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] on Linux can use Transport Layer Security (TLS) to encrypt data that is transmitted across a network between a client application and an instance of [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)]. [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] supports the same TLS protocols on both Windows and Linux: TLS 1.2, 1.1, and 1.0. However, the steps to configure TLS are specific to the operating system on which [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] is running.    ## Typical Scenario -TLS is used to encrypt connections from a client application to SQL Server. When configured correctly, TLS provides both privacy and data integrity for communications between the client and the server.  +TLS is used to encrypt connections from a client application to [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)]. When configured correctly, TLS provides both privacy and data integrity for communications between the client and the server.  The following steps describe a typical scenario:  -1. Database administrator generates a private key and a certificate signing request (CSR). The CSR's Common Name should match the server name that clients specify in their SQL Server connection string. This Common Name is usually the fully qualified domain name of the SQL Server host. To use the same certificate for multiple servers, you can use a wildcard in the Common Name (for example, `"*.contoso.com" instead of "node1.contoso.com"`). -2. The CSR is sent to a certificate authority (CA) for signing. The CA should be trusted by all client machines that connect to SQL Server. The CA returns a signed certificate to the database administrator. -3. Database administrator configures SQL Server to use the private key and the signed certificate for TLS connections. +1. Database administrator generates a private key and a certificate signing request (CSR). The CSR's Common Name should match the server name that clients specify in their SQL Server connection string. This Common Name is usually the fully qualified domain name of the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host. To use the same certificate for multiple servers, you can use a wildcard in the Common Name (for example, `"*.contoso.com" instead of "node1.contoso.com"`). +2. The CSR is sent to a certificate authority (CA) for signing. The CA should be trusted by all client machines that connect to [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)]. The CA returns a signed certificate to the database administrator. +3. Database administrator configures [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] to use the private key and the signed certificate for TLS connections. 4. Clients specify `"Encrypt=True"` and `"TrustServerCertificate=False"` in their connection strings. (The specific parameter names may be different depending on which driver is being used). Clients now attempt encrypt connections to SQL Server and check the validity of SQL Server's certificate to prevent man-in-the-middle attacks.    ## Configuring TLS on Linux -Use `mssql-conf` to configure TLS for an instance of SQL Server running on Linux. The following options are supported: +Use `mssql-conf` to configure TLS for an instance of [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] running on Linux. The following options are supported: |Option |Description | |--- |--- | -|`forceencryption` |If yes, then SQL Server forces all connections to be encrypted. By default, this option is no. |  -|`tlscert` |The absolute path to the certificate file that SQL Server uses for TLS. Example:   `/etc/ssl/certs/mssql.pem`  The certificate file must be accessible by the mssql account. Microsoft recommends Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 600 `. |  -|`tlskey` |The absolute path to the private key file that SQL Server uses for TLS. Example:  `/etc/ssl/private/mssql.key`  The certificate file must be accessible by the mssql account. Microsoft recommends Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 600 `. | -|`tlsprotocols` |A comma-separated list of which TLS protocols are allowed by SQL Server. SQL Server always attempts to negotiate the strongest allowed protocol. If a client does not support any allowed protocol, SQL Server rejects the connection attempt.  For compatibility, all supported protocols are allowed by default (1.2, 1.1, 1.0).  If your clients support TLS 1.2, Microsoft recommends allowing only TLS 1.2. |  -|`tlsciphers` |Specifies which ciphers are allowed by SQL Server for TLS. This string must be formatted per OpenSSL's cipher list format. In general, you should not need to change this option. 
By default, the following ciphers are allowed: 
`ECDHE-ECDSA-AES128-GCM-SHA256`
`ECDHE-ECDSA-AES256-GCM-SHA384`
`ECDHE-RSA-AES128-GCM-SHA256`
`ECDHE-RSA-AES256-GCM-SHA384`
`ECDHE-ECDSA-AES128-SHA256`
`ECDHE-ECDSA-AES256-SHA384`
`ECDHE-RSA-AES128-SHA256`
`ECDHE-RSA-AES256-SHA384`
`ECDHE-ECDSA-AES256-SHA`
`ECDHE-ECDSA-AES128-SHA`
`ECDHE-RSA-AES256-SHA`
`ECDHE-RSA-AES128-SHA`
`AES256-GCM-SHA384`
`AES128-GCM-SHA256`
`AES256-SHA256`
`AES128-SHA256`
`AES256-SHA:AES128-SHA` |   +|`forceencryption` |If yes, then [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] forces all connections to be encrypted. By default, this option is no. |  +|`tlscert` |The absolute path to the certificate file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:   `/etc/ssl/certs/mssql.pem`  The certificate file must be accessible by the mssql account. Microsoft recommends Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 600 `. |  +|`tlskey` |The absolute path to the private key file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:  `/etc/ssl/private/mssql.key`  The certificate file must be accessible by the mssql account. Microsoft recommends Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 600 `. | +|`tlsprotocols` |A comma-separated list of which TLS protocols are allowed by SQL Server. [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] always attempts to negotiate the strongest allowed protocol. If a client does not support any allowed protocol, [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] rejects the connection attempt.  For compatibility, all supported protocols are allowed by default (1.2, 1.1, 1.0).  If your clients support TLS 1.2, Microsoft recommends allowing only TLS 1.2. |  +|`tlsciphers` |Specifies which ciphers are allowed by [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] for TLS. This string must be formatted per OpenSSL's cipher list format. In general, you should not need to change this option. 
By default, the following ciphers are allowed: 
`ECDHE-ECDSA-AES128-GCM-SHA256`
`ECDHE-ECDSA-AES256-GCM-SHA384`
`ECDHE-RSA-AES128-GCM-SHA256`
`ECDHE-RSA-AES256-GCM-SHA384`
`ECDHE-ECDSA-AES128-SHA256`
`ECDHE-ECDSA-AES256-SHA384`
`ECDHE-RSA-AES128-SHA256`
`ECDHE-RSA-AES256-SHA384`
`ECDHE-ECDSA-AES256-SHA`
`ECDHE-ECDSA-AES128-SHA`
`ECDHE-RSA-AES256-SHA`
`ECDHE-RSA-AES128-SHA`
`AES256-GCM-SHA384`
`AES128-GCM-SHA256`
`AES256-SHA256`
`AES128-SHA256`
`AES256-SHA:AES128-SHA` |     ## Example This example uses a self-signed certificate. In normal production scenarios, the certificate would be signed by a CA that is trusted by all clients.    ### Step 1: Generate private key and certificate -Open a command terminal on the Linux machine where SQL Server is running. Run the following commands: +Open a command terminal on the Linux machine where [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] is running. Run the following commands: ``` # Generate a self-signed certificate @@ -73,8 +73,8 @@ sudo mv mssql.pem /etc/ssl/certs/ sudo mv mssql.key /etc/ssl/private/ ```   -### Step 2: Configure SQL Server  -Use mssql-conf to configure SQL Server to use the certificate and key for TLS. For increased security, you can also set TLS 1.2 as the only allowed protocol and force all clients to use encrypted connections.  +### Step 2: Configure [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)]  +Use mssql-conf to configure [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] to use the certificate and key for TLS. For increased security, you can also set TLS 1.2 as the only allowed protocol and force all clients to use encrypted connections.  ``` sudo /opt/mssql/bin/mssql-conf set tlscert /etc/ssl/certs/mssql.pem @@ -83,20 +83,20 @@ sudo /opt/mssql/bin/mssql-conf set tlsprotocols 1.2 sudo /opt/mssql/bin/mssql-conf set forceencryption yes ```   -### Step 3: Restart SQL Server -SQL Server must be restarted for these changes to take effect. +### Step 3: Restart [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] +[!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] must be restarted for these changes to take effect. `sudo systemctl restart mssql-server`   ### Step 4: Copy self-signed certificate to client machines -Because this example uses a certificate self-signed by the SQL Server host, the certificate (not the private key) must be copied and installed as a trusted root certificate on all client machines that connect to SQL Server. If the certificate is signed by a CA that is already trusted by all clients, this step is not necessary. +Because this example uses a certificate self-signed by the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host, the certificate (not the private key) must be copied and installed as a trusted root certificate on all client machines that connect to [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)]. If the certificate is signed by a CA that is already trusted by all clients, this step is not necessary.   ### Step 5: Connect from clients using TLS -Connect to SQL Server from a client with encryption enabled and `TrustServerCertificate` set to `False` in the connection string. Here are a few examples of how to specify these parameters using different tools and drivers. +Connect to [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] from a client with encryption enabled and `TrustServerCertificate` set to `False` in the connection string. Here are a few examples of how to specify these parameters using different tools and drivers. sqlcmd `sqlcmd -N -C -S mssql.contoso.com -U sa -P ''` -SQL Server Management Studio +[!INCLUDE[ssmanstudiofull-md](../../docs/includes/ssmanstudiofull-md.md)]   ADO.NET @@ -113,9 +113,9 @@ JDBC |Error message |Fix | |--- |--- | -|The certificate chain was issued by an authority that is not trusted.  |This error occurs when clients are unable to verify the signature on the certificate presented by SQL Server during the TLS handshake. Make sure the client trusts either the SQL Server certificate directly, or the CA which signed the SQL Server certificate. | +|The certificate chain was issued by an authority that is not trusted.  |This error occurs when clients are unable to verify the signature on the certificate presented by SQL Server during the TLS handshake. Make sure the client trusts either the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] certificate directly, or the CA which signed the SQL Server certificate. | |The target principal name is incorrect.  |Make sure that Common Name field on SQL Server's certificate matches the server name specified in the client's connection string. |  -|An existing connection was forcibly closed by the remote host. |This error can occur when the client doesn't support the TLS protocol version required by SQL Server. For example, if SQL Server is configured to require TLS 1.2, make sure your clients also support the TLS 1.2 protocol. | +|An existing connection was forcibly closed by the remote host. |This error can occur when the client doesn't support the TLS protocol version required by SQL Server. For example, if [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] is configured to require TLS 1.2, make sure your clients also support the TLS 1.2 protocol. | ## Next steps From 6ec14641dee28b69f1d12e411e1b57c64f83a02c Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 30 May 2017 10:22:16 -0700 Subject: [PATCH 026/336] Removed header --- docs/linux/sql-server-linux-encrypted-connections.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-encrypted-connections.md b/docs/linux/sql-server-linux-encrypted-connections.md index acfce5544ff..b2b01ac2ab6 100644 --- a/docs/linux/sql-server-linux-encrypted-connections.md +++ b/docs/linux/sql-server-linux-encrypted-connections.md @@ -20,7 +20,7 @@ helpviewer_keywords: # ms.custom: "" --- # Encrypting Connections to SQL Server on Linux -[!INCLUDE[tsql-appliesto-sslinx-xxxx-xxxx-xxx](../includes/tsql-appliesto-sslinx-xxxx-xxxx-xxx.md)] + [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] on Linux can use Transport Layer Security (TLS) to encrypt data that is transmitted across a network between a client application and an instance of [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)]. [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] supports the same TLS protocols on both Windows and Linux: TLS 1.2, 1.1, and 1.0. However, the steps to configure TLS are specific to the operating system on which [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] is running.    From 4696dc4a7eeee387c91cc45cf87ba9adac74d2aa Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 30 May 2017 14:20:04 -0700 Subject: [PATCH 027/336] Updated during review. --- docs/linux/sql-server-linux-availability-group-ha.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index 5d4f25c98d3..4a65f4f7ee6 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -25,7 +25,7 @@ This article presents supported deployment configurations for SQL Server Always With Windows Server failover clustering a common configuration for high availability uses two synchronous replicas and a [file-share witness](http://technet.microsoft.com/library/cc731739.aspx). The file-share witness validates the availability group configuration - status of synchronization, and the role of the replica, for example. This ensures that the secondary replica chosen as the failover target has the latest data and availability group configuration changes. -The current high availability solutions for Linux do not accommodate an external witness like the file share witness in a Windows Server failover cluster. When there is no Windows Server failover cluster, the availability group configuration is stored in the SQL Server instances, hence the availability group requires at least three synchronous replicas for high availability and data protection. After you create an availability group on Linux servers you create a cluster resource. The cluster resource settings determine the configuration for high availability. +The current high availability solutions for Linux do not accommodate an external witness like the file share witness in a Windows Server failover cluster. When there is no Windows Server failover cluster the availability group configuration is stored in the master database on participating SQL Server instances. Therefore, the availability group requires at least three synchronous replicas for high availability and data protection. After you create an availability group on Linux servers you create a cluster resource. The cluster resource settings determine the configuration for high availability. Choose an availability group design to meet specific business requirements for high availability, data protection, and read scale-out. @@ -54,8 +54,6 @@ This configuration consists of three synchronous replicas. By default, it provid ![Three replicas][3] -Each instance of SQL Server requires an appropriate license. - The following table describes the high availability and data protection behavior based on the settings for three synchronous replicas. |`REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`|0 |1 \*|2 @@ -66,6 +64,7 @@ The following table describes the high availability and data protection behavior |Primary replica available after one secondary replica outage|✔|✔| |Primary replica available after two secondary replica outages|✔| | |Manual failover after primary replica outage - possible data loss|✔| | + \* Default setting when availability group is added as a resource in a cluster. ## Two synchronous replicas and a witness replica @@ -78,9 +77,9 @@ By default, it provides high availability but not data protection. The following table describes the high availability and data protection behavior according to the possible values for an availability group with two synchronous replicas and a witness replica. -|`REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`|1|0 \* +|`REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`|0 \*|1 | --- |:---:|:---: -|High availability | |✔| +|High availability |✔| | |Data protection |✔|✔| |Automatic failover after primary replica outage| |✔| |Primary replica available after secondary replica outage| |✔| From 4ea614778bc2d2ae01e28ae04722c2696a422559 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 30 May 2017 15:34:20 -0700 Subject: [PATCH 028/336] Update witness replica --- docs/linux/sql-server-linux-availability-group-ha.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index 4a65f4f7ee6..f13364b4005 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -69,7 +69,7 @@ The following table describes the high availability and data protection behavior ## Two synchronous replicas and a witness replica -This configuration has two synchronous replicas and a witness replica to enable high availability. The witness replica is introduced in SQL Server 2017 CTP 2.4. In this configuration, the servers have the roles of primary replica, secondary replica, or witness replica. The witness replica contains configuration data about the availability group, but not a copy of the availability group user databases. The witness replica requires a SQL Server instance with SQL Server Express edition or higher. +This configuration has two synchronous replicas and a witness replica to enable high availability and data protection. The witness replica is introduced in SQL Server 2017 CTP 2.4. In this configuration, the servers have the roles of primary replica, secondary replica, or witness replica. The witness replica contains configuration data about the availability group, but not a copy of the availability group user databases. The witness replica requires a SQL Server instance with SQL Server Express edition or higher. By default, it provides high availability but not data protection. From c1be3781a225180244021fed5015e8cc734566fb Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 30 May 2017 16:58:22 -0700 Subject: [PATCH 029/336] Change to CTP 2.2. --- docs/linux/sql-server-linux-availability-group-ha.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index f13364b4005..ffd56510478 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -69,7 +69,7 @@ The following table describes the high availability and data protection behavior ## Two synchronous replicas and a witness replica -This configuration has two synchronous replicas and a witness replica to enable high availability and data protection. The witness replica is introduced in SQL Server 2017 CTP 2.4. In this configuration, the servers have the roles of primary replica, secondary replica, or witness replica. The witness replica contains configuration data about the availability group, but not a copy of the availability group user databases. The witness replica requires a SQL Server instance with SQL Server Express edition or higher. +This configuration has two synchronous replicas and a witness replica to enable high availability and data protection. The witness replica is introduced in SQL Server 2017 CTP 2.2. In this configuration, the servers have the roles of primary replica, secondary replica, or witness replica. The witness replica contains configuration data about the availability group, but not a copy of the availability group user databases. The witness replica requires a SQL Server instance with SQL Server Express edition or higher. By default, it provides high availability but not data protection. From 54746e531055f493918b12d8807b9f09a0a391e3 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Wed, 31 May 2017 09:51:56 -0700 Subject: [PATCH 030/336] Added Linux applies to and AAD linux --- .../includes/tsql-appliesto-sslinx-only_md.md | 2 + ...r-linux-active-directory-authentication.md | 155 ++++++++++++++++++ .../sql-server-linux-encrypted-connections.md | 2 +- 3 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 docs/includes/tsql-appliesto-sslinx-only_md.md create mode 100644 docs/linux/sql-server-linux-active-directory-authentication.md diff --git a/docs/includes/tsql-appliesto-sslinx-only_md.md b/docs/includes/tsql-appliesto-sslinx-only_md.md new file mode 100644 index 00000000000..3b9cee2d04f --- /dev/null +++ b/docs/includes/tsql-appliesto-sslinx-only_md.md @@ -0,0 +1,2 @@ +**THIS TOPIC APPLIES TO:**![no](media/no.png)SQL Server Windows ![yes](media/yes.png)SQL Server Linux![no](media/no.png)Azure SQL Database![no](media/no.png)Azure SQL Data Warehouse ![no](media/no.png)Parallel Data Warehouse + diff --git a/docs/linux/sql-server-linux-active-directory-authentication.md b/docs/linux/sql-server-linux-active-directory-authentication.md new file mode 100644 index 00000000000..0d2bb428c36 --- /dev/null +++ b/docs/linux/sql-server-linux-active-directory-authentication.md @@ -0,0 +1,155 @@ +--- +# required metadata + +title: "Active Directory Authentication with SQL Server on Linux | Microsoft Docs" +description: "Configuration steps for AAD authentication for SQL Server on Linux" +author: "tmullaney" +ms.date: "06/14/2017" +ms.author: "thmullan;rickbyh" +manager: "jhubbard" +ms.topic: "article" +ms.prod: "sql-linux" +ms.technology: "database-engine" +ms.assetid: +helpviewer_keywords: + - "Linux, AAD authentication" + +--- +# Active Directory Authentication with SQL Server on Linux +[!INCLUDE[tsql-appliesto-sslinx-only_md](../../includes/tsql-appliesto-sslinx-only_md.md)] + + +This document explains how to configure [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] on Linux to support Active Directory (AD) authentication, also known as integrated authentication. AD Authentication enables domain-joined clients on either Windows or Linux to authenticate to [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] using their domain credentials and the Kerberos protocol. +AD Authentication has the following advantages over [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] Authentication: +• Users authenticate via single sign-on, without being prompted for a password. +• By creating logins for AD groups, you can manage access and permissions in [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] using AD group memberships. +• Each user has a single identity across your organization, so you don’t have to keep track of which [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] logins correspond to which people. +• AD enables you to enforce a centralized password policy across your organization. + +## Prerequisites +Before you configure AD Authentication, you need to: +- Set up an AD Domain Controller (Windows) on your network +- Install [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] + - [Red Hat Enterprise Linux](sql-server-linux-setup-red-hat.md) + - [SUSE Linux Enterprise Server](sql-server-linux-setup-suse-linux-enterprise-server.md) + - [Ubuntu](sql-server-linux-setup-ubuntu.md) + +## Step 1: Join [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] host to AD domain +Numerous tools exist to help you join the [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] host machine to your AD domain. This walkthrough uses [realmd](https://www.freedesktop.org/software/realmd/docs/guide-active-directory-join.html), a popular open source package. If you haven't already, install both the **realmd** and Kerberos client packages on the [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] host machine using your Linux distribution's package manager: +```bash +# RHEL +sudo yum install realmd +sudo yum install krb5-workstation + +# SUSE +sudo zypper install realmd +sudo zypper install krb5-client + +# Ubuntu +sudo apt-get install realmd +sudo apt-get install krb5-user +``` + +If the Kerberos client package installation prompts you for a realm name, enter your domain name in uppercase. +Run the following command to verify that the [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] host machine is configured to use the AD domain controller for DNS. For the rest of this walkthrough, you should replace "contoso.com" and "CONTOSO.COM" with your own domain. +```bash +sudo realm discover contoso.com -v +``` +If no domains are found, you need to configure your machine to use your AD domain controller as a DNS nameserver. Make sure that your `/etc/resolv.conf` file contains a line like the following: +```Code +nameserver **** +``` +Next, join the domain. You'll need to authenticate using an AD account that has sufficient privileges in AD to join a new machine to the domain: +```bash +sudo realm join contoso.com -U 'user@CONTOSO.COM' -v + + * Successfully enrolled machine in realm +``` +Specifically, this command creates a new computer account in AD, create the `/etc/krb5.keytab` host keytab file, and configure the domain in `/etc/sssd/sssd.conf`. If you see an error, "Necessary packages are not installed," then you should install those packages using your Linux distro's package manager before running the realm join command again. +Verify that you can now gather information about a user from the domain, and that you can acquire a Kerberos ticket as that user: +```bash +id user@contoso.com +uid=1348601103(user@contoso.com) gid=1348600513(domain group@contoso.com) groups=1348600513(domain group@contoso.com) + +kinit user@CONTOSO.COM +Password for user@CONTOSO.COM: + +klist +Ticket cache: FILE:/tmp/krb5cc_1000 +Default principal: user@CONTOSO.COM + +``` +For more information, see the Red Hat documentation for [Discovering and Joining Identity Domains](https://access.redhat.com/documentation/Red_Hat_Enterprise_Linux/7/html/Windows_Integration_Guide/realmd-domain.html). + +## Step 2: Create AD user for [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] and set SPN +On your domain controller, run the [New-ADUser](https://technet.microsoft.com/library/ee617253.aspx) PowerShell command to create a new AD user with a password that never expires. You will be prompted to enter a new password for the account: +```PowerShell +New-ADUser mssql -AccountPassword (Read-Host -AsSecureString "Enter Password") -PasswordNeverExpires $true -Enabled $true +``` +Now set the ServicePrincipalName (SPN) for this account using the `setspn.exe` tool. The SPN must be formatted exactly as specified in the following example: You can find the fully qualified domain name of the [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] host machine by running hostname `--fqdn` on the [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] host, and the TCP port should be 1433 unless you have configured [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] to use a different port number. +```PowerShell +setspn -A MSSQLSvc/****:**** mssql +``` +For more information, see [Register a Service Principal Name for Kerberos Connections](../sql/database-engine/configure-windows/register-a-service-principal-name-for-kerberos-connections.md). + +## Step 3: Configure [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] service keytab +On the [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] host machine, create a keytab file for the AD user you just created. The `addent` command prompts you for a password. Enter the same password you used to create the AD user for [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)]. +```bash +sudo ktutil + +ktutil: addent -password -p MSSQLSvc/****:****@CONTOSO.COM -k 2 -e aes256-cts-hmac-sha1-96 +ktutil: wkt /var/opt/mssql/secrets/mssql.keytab +quit +``` + +> [!NOTE] +> If your domain controller is using Windows Server 2008 R2 or older, you should use `rc4-hmac` instead of `aes256-cts-hmac-sha1-96` as the encryption algorithm in the preceding `addent` command. For more information on which encryption algorithms are supported by different versions of Windows and Active Directory, see Network security: [Configure encryption types allowed for Kerberos Win7 only](https://docs.microsoft.com/windows/device-security/security-policy-settings/network-security-configure-encryption-types-allowed-for-kerberos). + +Anyone with access to this `keytab` file can impersonate [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] on the domain, so make sure you restrict access to the file such that only the `mssql` account has read access: +```bash +sudo chown mssql:mssql /var/opt/mssql/secrets/mssql.keytab +sudo chmod 600 /var/opt/mssql/secrets/mssql.keytab +``` +Next, configure [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] to use this `keytab` file for Kerberos authentication: +```bash +sudo /opt/mssql/bin/mssql-conf set auth.keytab /var/opt/mssql/secrets/mssql.keytab +sudo systemctl restart mssql-server +``` + +## Step 4: Create AD-based logins in Transact-SQL +Connect to [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] and create a new, AD-based login: +```Transact-SQL +CREATE LOGIN [user@contoso.com] FROM EXTERNAL PROVIDER; +``` + +> [!NOTE] +> Starting with [!INCLUDE[sssqlv14-md](../../includes/sssqlv14-md.md)], the userPrincipalName (UPN) `login_name@DomainName` is the preferred format for creating AD-based logins. However, the pre-Windows 2000 user logon name format is also supported for compatibility: `CREATE LOGIN [CONTOSO\user] FROM WINDOWS;` +Verify that the login is now listed in the [sys.server_principals](../sql/relational-databases/system-catalog-views/sys-server-principals-transact-sql.mc) system catalog view: +```Transact-SQL +SELECT name FROM sys.server_principals; +``` + +## Step 5: Connect to [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] using AD Authentication +Log in to a client machine using your domain credentials. Now you can connect to [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] without reentering your password, by using AD Authentication. If you create a login for an AD group, any AD user who is a member of that group can connect in the same way. +The specific connection string parameter for clients to use AD Authentication depends on which driver you are using. A few examples are below. + +## Examples +### Example 1: `sqlcmd` on a domain-joined Linux client +Log in to a domain-joined Linux client using `ssh` and your domain credentials: +```bash +ssh -l user@contoso.com client.contoso.com +``` + +Make sure you've installed the [mssql-tools](sql-server-linux-setup-tools.md) package, then connect using `sqlcmd` without specifying any credentials: +```bash +sqlcmd -S mssql.contoso.com +``` + +### Example 2: SSMS on a domain-joined Windows client +Log in to a domain-joined Windows client using your domain credentials. Make sure [!INCLUDE[ssmanstudiofull-md](../../includes/ssmanstudiofull-md.md)] is installed, then connect to your [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] instance by specifying **Windows Authentication** in the **Connect to Server** dialog. + +### AD Authentication using other client drivers +• JDBC: [Using Kerberos Integrated Authentication to Connect SQL Server](https://docs.microsoft.com/sql/connect/jdbc/using-kerberos-integrated-authentication-to-connect-to-sql-server]() +• ODBC: [Using Integrated Authentication](https://docs.microsoft.com/sql/connect/odbc/linux/using-integrated-authentication) +• ADO.NET: [Connection String Syntax](https://msdn.microsoft.com/library/ms254500.aspx) + diff --git a/docs/linux/sql-server-linux-encrypted-connections.md b/docs/linux/sql-server-linux-encrypted-connections.md index b2b01ac2ab6..6c5df604525 100644 --- a/docs/linux/sql-server-linux-encrypted-connections.md +++ b/docs/linux/sql-server-linux-encrypted-connections.md @@ -20,7 +20,7 @@ helpviewer_keywords: # ms.custom: "" --- # Encrypting Connections to SQL Server on Linux - +[!INCLUDE[tsql-appliesto-sslinx-only_md](../../includes/tsql-appliesto-sslinx-only_md.md)] [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] on Linux can use Transport Layer Security (TLS) to encrypt data that is transmitted across a network between a client application and an instance of [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)]. [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] supports the same TLS protocols on both Windows and Linux: TLS 1.2, 1.1, and 1.0. However, the steps to configure TLS are specific to the operating system on which [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] is running.    From 466200e8fba2bc4e9302010595665f8701f09962 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Wed, 31 May 2017 09:59:30 -0700 Subject: [PATCH 031/336] Fixing token link. --- docs/linux/sql-server-linux-encrypted-connections.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-encrypted-connections.md b/docs/linux/sql-server-linux-encrypted-connections.md index 6c5df604525..06da4386dd1 100644 --- a/docs/linux/sql-server-linux-encrypted-connections.md +++ b/docs/linux/sql-server-linux-encrypted-connections.md @@ -20,7 +20,7 @@ helpviewer_keywords: # ms.custom: "" --- # Encrypting Connections to SQL Server on Linux -[!INCLUDE[tsql-appliesto-sslinx-only_md](../../includes/tsql-appliesto-sslinx-only_md.md)] +[!INCLUDE[tsql-appliesto-sslinx-only_md](../../docs/includes/tsql-appliesto-sslinx-only_md.md)] [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] on Linux can use Transport Layer Security (TLS) to encrypt data that is transmitted across a network between a client application and an instance of [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)]. [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] supports the same TLS protocols on both Windows and Linux: TLS 1.2, 1.1, and 1.0. However, the steps to configure TLS are specific to the operating system on which [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] is running.    From a65c4c30952bcd01ca15977e2636bf734ab0e983 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Wed, 31 May 2017 10:06:03 -0700 Subject: [PATCH 032/336] Fixing links. --- ...r-linux-active-directory-authentication.md | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/docs/linux/sql-server-linux-active-directory-authentication.md b/docs/linux/sql-server-linux-active-directory-authentication.md index 0d2bb428c36..854069984b6 100644 --- a/docs/linux/sql-server-linux-active-directory-authentication.md +++ b/docs/linux/sql-server-linux-active-directory-authentication.md @@ -16,26 +16,26 @@ helpviewer_keywords: --- # Active Directory Authentication with SQL Server on Linux -[!INCLUDE[tsql-appliesto-sslinx-only_md](../../includes/tsql-appliesto-sslinx-only_md.md)] +[!INCLUDE[tsql-appliesto-sslinx-only_md](../../docs/includes/tsql-appliesto-sslinx-only_md.md)] -This document explains how to configure [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] on Linux to support Active Directory (AD) authentication, also known as integrated authentication. AD Authentication enables domain-joined clients on either Windows or Linux to authenticate to [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] using their domain credentials and the Kerberos protocol. -AD Authentication has the following advantages over [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] Authentication: +This document explains how to configure [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] on Linux to support Active Directory (AD) authentication, also known as integrated authentication. AD Authentication enables domain-joined clients on either Windows or Linux to authenticate to [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] using their domain credentials and the Kerberos protocol. +AD Authentication has the following advantages over [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] Authentication: • Users authenticate via single sign-on, without being prompted for a password. -• By creating logins for AD groups, you can manage access and permissions in [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] using AD group memberships. -• Each user has a single identity across your organization, so you don’t have to keep track of which [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] logins correspond to which people. +• By creating logins for AD groups, you can manage access and permissions in [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] using AD group memberships. +• Each user has a single identity across your organization, so you don’t have to keep track of which [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] logins correspond to which people. • AD enables you to enforce a centralized password policy across your organization. ## Prerequisites Before you configure AD Authentication, you need to: - Set up an AD Domain Controller (Windows) on your network -- Install [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] +- Install [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] - [Red Hat Enterprise Linux](sql-server-linux-setup-red-hat.md) - [SUSE Linux Enterprise Server](sql-server-linux-setup-suse-linux-enterprise-server.md) - [Ubuntu](sql-server-linux-setup-ubuntu.md) -## Step 1: Join [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] host to AD domain -Numerous tools exist to help you join the [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] host machine to your AD domain. This walkthrough uses [realmd](https://www.freedesktop.org/software/realmd/docs/guide-active-directory-join.html), a popular open source package. If you haven't already, install both the **realmd** and Kerberos client packages on the [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] host machine using your Linux distribution's package manager: +## Step 1: Join [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host to AD domain +Numerous tools exist to help you join the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host machine to your AD domain. This walkthrough uses [realmd](https://www.freedesktop.org/software/realmd/docs/guide-active-directory-join.html), a popular open source package. If you haven't already, install both the **realmd** and Kerberos client packages on the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host machine using your Linux distribution's package manager: ```bash # RHEL sudo yum install realmd @@ -51,7 +51,7 @@ sudo apt-get install krb5-user ``` If the Kerberos client package installation prompts you for a realm name, enter your domain name in uppercase. -Run the following command to verify that the [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] host machine is configured to use the AD domain controller for DNS. For the rest of this walkthrough, you should replace "contoso.com" and "CONTOSO.COM" with your own domain. +Run the following command to verify that the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host machine is configured to use the AD domain controller for DNS. For the rest of this walkthrough, you should replace "contoso.com" and "CONTOSO.COM" with your own domain. ```bash sudo realm discover contoso.com -v ``` @@ -81,19 +81,19 @@ Default principal: user@CONTOSO.COM ``` For more information, see the Red Hat documentation for [Discovering and Joining Identity Domains](https://access.redhat.com/documentation/Red_Hat_Enterprise_Linux/7/html/Windows_Integration_Guide/realmd-domain.html). -## Step 2: Create AD user for [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] and set SPN +## Step 2: Create AD user for [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] and set SPN On your domain controller, run the [New-ADUser](https://technet.microsoft.com/library/ee617253.aspx) PowerShell command to create a new AD user with a password that never expires. You will be prompted to enter a new password for the account: ```PowerShell New-ADUser mssql -AccountPassword (Read-Host -AsSecureString "Enter Password") -PasswordNeverExpires $true -Enabled $true ``` -Now set the ServicePrincipalName (SPN) for this account using the `setspn.exe` tool. The SPN must be formatted exactly as specified in the following example: You can find the fully qualified domain name of the [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] host machine by running hostname `--fqdn` on the [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] host, and the TCP port should be 1433 unless you have configured [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] to use a different port number. +Now set the ServicePrincipalName (SPN) for this account using the `setspn.exe` tool. The SPN must be formatted exactly as specified in the following example: You can find the fully qualified domain name of the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host machine by running hostname `--fqdn` on the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host, and the TCP port should be 1433 unless you have configured [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] to use a different port number. ```PowerShell setspn -A MSSQLSvc/****:**** mssql ``` -For more information, see [Register a Service Principal Name for Kerberos Connections](../sql/database-engine/configure-windows/register-a-service-principal-name-for-kerberos-connections.md). +For more information, see [Register a Service Principal Name for Kerberos Connections](../docs/sql/database-engine/configure-windows/register-a-service-principal-name-for-kerberos-connections.md). -## Step 3: Configure [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] service keytab -On the [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] host machine, create a keytab file for the AD user you just created. The `addent` command prompts you for a password. Enter the same password you used to create the AD user for [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)]. +## Step 3: Configure [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] service keytab +On the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host machine, create a keytab file for the AD user you just created. The `addent` command prompts you for a password. Enter the same password you used to create the AD user for [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)]. ```bash sudo ktutil @@ -105,32 +105,32 @@ quit > [!NOTE] > If your domain controller is using Windows Server 2008 R2 or older, you should use `rc4-hmac` instead of `aes256-cts-hmac-sha1-96` as the encryption algorithm in the preceding `addent` command. For more information on which encryption algorithms are supported by different versions of Windows and Active Directory, see Network security: [Configure encryption types allowed for Kerberos Win7 only](https://docs.microsoft.com/windows/device-security/security-policy-settings/network-security-configure-encryption-types-allowed-for-kerberos). -Anyone with access to this `keytab` file can impersonate [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] on the domain, so make sure you restrict access to the file such that only the `mssql` account has read access: +Anyone with access to this `keytab` file can impersonate [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] on the domain, so make sure you restrict access to the file such that only the `mssql` account has read access: ```bash sudo chown mssql:mssql /var/opt/mssql/secrets/mssql.keytab sudo chmod 600 /var/opt/mssql/secrets/mssql.keytab ``` -Next, configure [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] to use this `keytab` file for Kerberos authentication: +Next, configure [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] to use this `keytab` file for Kerberos authentication: ```bash sudo /opt/mssql/bin/mssql-conf set auth.keytab /var/opt/mssql/secrets/mssql.keytab sudo systemctl restart mssql-server ``` ## Step 4: Create AD-based logins in Transact-SQL -Connect to [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] and create a new, AD-based login: +Connect to [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] and create a new, AD-based login: ```Transact-SQL CREATE LOGIN [user@contoso.com] FROM EXTERNAL PROVIDER; ``` > [!NOTE] -> Starting with [!INCLUDE[sssqlv14-md](../../includes/sssqlv14-md.md)], the userPrincipalName (UPN) `login_name@DomainName` is the preferred format for creating AD-based logins. However, the pre-Windows 2000 user logon name format is also supported for compatibility: `CREATE LOGIN [CONTOSO\user] FROM WINDOWS;` -Verify that the login is now listed in the [sys.server_principals](../sql/relational-databases/system-catalog-views/sys-server-principals-transact-sql.mc) system catalog view: +> Starting with [!INCLUDE[sssqlv14-md](../../docs/includes/sssqlv14-md.md)], the userPrincipalName (UPN) `login_name@DomainName` is the preferred format for creating AD-based logins. However, the pre-Windows 2000 user logon name format is also supported for compatibility: `CREATE LOGIN [CONTOSO\user] FROM WINDOWS;` +Verify that the login is now listed in the [sys.server_principals](../docs/sql/relational-databases/system-catalog-views/sys-server-principals-transact-sql.mc) system catalog view: ```Transact-SQL SELECT name FROM sys.server_principals; ``` -## Step 5: Connect to [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] using AD Authentication -Log in to a client machine using your domain credentials. Now you can connect to [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] without reentering your password, by using AD Authentication. If you create a login for an AD group, any AD user who is a member of that group can connect in the same way. +## Step 5: Connect to [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] using AD Authentication +Log in to a client machine using your domain credentials. Now you can connect to [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] without reentering your password, by using AD Authentication. If you create a login for an AD group, any AD user who is a member of that group can connect in the same way. The specific connection string parameter for clients to use AD Authentication depends on which driver you are using. A few examples are below. ## Examples @@ -146,7 +146,7 @@ sqlcmd -S mssql.contoso.com ``` ### Example 2: SSMS on a domain-joined Windows client -Log in to a domain-joined Windows client using your domain credentials. Make sure [!INCLUDE[ssmanstudiofull-md](../../includes/ssmanstudiofull-md.md)] is installed, then connect to your [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] instance by specifying **Windows Authentication** in the **Connect to Server** dialog. +Log in to a domain-joined Windows client using your domain credentials. Make sure [!INCLUDE[ssmanstudiofull-md](../../docs/includes/ssmanstudiofull-md.md)] is installed, then connect to your [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] instance by specifying **Windows Authentication** in the **Connect to Server** dialog. ### AD Authentication using other client drivers • JDBC: [Using Kerberos Integrated Authentication to Connect SQL Server](https://docs.microsoft.com/sql/connect/jdbc/using-kerberos-integrated-authentication-to-connect-to-sql-server]() From 9505bc2df2d3889a0b0a9c329b3fe7e1fdbf332e Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Wed, 31 May 2017 10:12:19 -0700 Subject: [PATCH 033/336] Fixing links. --- docs/includes/tsql-appliesto-sslinx-only_md.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/includes/tsql-appliesto-sslinx-only_md.md b/docs/includes/tsql-appliesto-sslinx-only_md.md index 3b9cee2d04f..012ae054162 100644 --- a/docs/includes/tsql-appliesto-sslinx-only_md.md +++ b/docs/includes/tsql-appliesto-sslinx-only_md.md @@ -1,2 +1,2 @@ -**THIS TOPIC APPLIES TO:**![no](media/no.png)SQL Server Windows ![yes](media/yes.png)SQL Server Linux![no](media/no.png)Azure SQL Database![no](media/no.png)Azure SQL Data Warehouse ![no](media/no.png)Parallel Data Warehouse +**THIS TOPIC APPLIES TO:**![no](../docs/includes/media/no.png)SQL Server Windows ![yes](../docs/includes/media/yes.png)SQL Server Linux![no](../docs/includes/media/no.png)Azure SQL Database![no](../docs/includes/media/no.png)Azure SQL Data Warehouse ![no](../docs/includes/media/no.png)Parallel Data Warehouse From 67da791e8c7145767a4f56382f5f9fa68b9fe164 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Wed, 31 May 2017 10:45:05 -0700 Subject: [PATCH 034/336] Fixing links. --- .../linux/sql-server-linux-active-directory-authentication.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-active-directory-authentication.md b/docs/linux/sql-server-linux-active-directory-authentication.md index 854069984b6..ee3d8b6d4ed 100644 --- a/docs/linux/sql-server-linux-active-directory-authentication.md +++ b/docs/linux/sql-server-linux-active-directory-authentication.md @@ -90,7 +90,7 @@ Now set the ServicePrincipalName (SPN) for this account using the `setspn.exe` t ```PowerShell setspn -A MSSQLSvc/****:**** mssql ``` -For more information, see [Register a Service Principal Name for Kerberos Connections](../docs/sql/database-engine/configure-windows/register-a-service-principal-name-for-kerberos-connections.md). +For more information, see [Register a Service Principal Name for Kerberos Connections](/sql/database-engine/configure-windows/register-a-service-principal-name-for-kerberos-connections.md). ## Step 3: Configure [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] service keytab On the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host machine, create a keytab file for the AD user you just created. The `addent` command prompts you for a password. Enter the same password you used to create the AD user for [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)]. @@ -124,7 +124,7 @@ CREATE LOGIN [user@contoso.com] FROM EXTERNAL PROVIDER; > [!NOTE] > Starting with [!INCLUDE[sssqlv14-md](../../docs/includes/sssqlv14-md.md)], the userPrincipalName (UPN) `login_name@DomainName` is the preferred format for creating AD-based logins. However, the pre-Windows 2000 user logon name format is also supported for compatibility: `CREATE LOGIN [CONTOSO\user] FROM WINDOWS;` -Verify that the login is now listed in the [sys.server_principals](../docs/sql/relational-databases/system-catalog-views/sys-server-principals-transact-sql.mc) system catalog view: +Verify that the login is now listed in the [sys.server_principals](/sql/relational-databases/system-catalog-views/sys-server-principals-transact-sql.mc) system catalog view: ```Transact-SQL SELECT name FROM sys.server_principals; ``` From f75d7832903b769b3dfe684d9f66761b2ac65b38 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Wed, 31 May 2017 10:47:19 -0700 Subject: [PATCH 035/336] Fixing links. --- docs/includes/tsql-appliesto-sslinx-only_md.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/includes/tsql-appliesto-sslinx-only_md.md b/docs/includes/tsql-appliesto-sslinx-only_md.md index 012ae054162..85ab570619d 100644 --- a/docs/includes/tsql-appliesto-sslinx-only_md.md +++ b/docs/includes/tsql-appliesto-sslinx-only_md.md @@ -1,2 +1,2 @@ -**THIS TOPIC APPLIES TO:**![no](../docs/includes/media/no.png)SQL Server Windows ![yes](../docs/includes/media/yes.png)SQL Server Linux![no](../docs/includes/media/no.png)Azure SQL Database![no](../docs/includes/media/no.png)Azure SQL Data Warehouse ![no](../docs/includes/media/no.png)Parallel Data Warehouse +**THIS TOPIC APPLIES TO:**![no](/docs/includes/media/no.png)SQL Server Windows ![yes](/includes/media/yes.png)SQL Server Linux![no](../includes/media/no.png)Azure SQL Database![no](../docs/includes/media/no.png)Azure SQL Data Warehouse ![no](../docs/includes/media/no.png)Parallel Data Warehouse From 8a40d0897a36971eba53c368009042d10e92f821 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Wed, 31 May 2017 11:03:31 -0700 Subject: [PATCH 036/336] Fixing links. --- docs/includes/tsql-appliesto-sslinx-only_md.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/includes/tsql-appliesto-sslinx-only_md.md b/docs/includes/tsql-appliesto-sslinx-only_md.md index 85ab570619d..30a372b23d1 100644 --- a/docs/includes/tsql-appliesto-sslinx-only_md.md +++ b/docs/includes/tsql-appliesto-sslinx-only_md.md @@ -1,2 +1,2 @@ -**THIS TOPIC APPLIES TO:**![no](/docs/includes/media/no.png)SQL Server Windows ![yes](/includes/media/yes.png)SQL Server Linux![no](../includes/media/no.png)Azure SQL Database![no](../docs/includes/media/no.png)Azure SQL Data Warehouse ![no](../docs/includes/media/no.png)Parallel Data Warehouse +**THIS TOPIC APPLIES TO:**![no](../includes/media/no.png)SQL Server Windows ![yes](../includes/media/yes.png)SQL Server Linux![no](../includes/media/no.png)Azure SQL Database![no](../includes/media/no.png)Azure SQL Data Warehouse ![no](../includes/media/no.png)Parallel Data Warehouse From 83238014e1c6801d8a1a570a53e0244b3e0c0eb8 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Wed, 31 May 2017 12:25:27 -0700 Subject: [PATCH 037/336] Fixing links. --- docs/includes/tsql-appliesto-sslinx-only_md.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/includes/tsql-appliesto-sslinx-only_md.md b/docs/includes/tsql-appliesto-sslinx-only_md.md index 30a372b23d1..2c70f65a67c 100644 --- a/docs/includes/tsql-appliesto-sslinx-only_md.md +++ b/docs/includes/tsql-appliesto-sslinx-only_md.md @@ -1,2 +1,2 @@ -**THIS TOPIC APPLIES TO:**![no](../includes/media/no.png)SQL Server Windows ![yes](../includes/media/yes.png)SQL Server Linux![no](../includes/media/no.png)Azure SQL Database![no](../includes/media/no.png)Azure SQL Data Warehouse ![no](../includes/media/no.png)Parallel Data Warehouse +**THIS TOPIC APPLIES TO:** ![no](/docs/includes/media/no.png)SQL Server Windows ![yes](/docs/includes/media/yes.png)SQL Server Linux ![no](/docs/includes/media/no.png)Azure SQL Database ![no](/docs/includes/media/no.png)Azure SQL Data Warehouse ![no](/docs/includes/media/no.png)Parallel Data Warehouse From 339c0fe057fa74fbe8a8b9a45f1e88351d55e2a2 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Wed, 31 May 2017 13:11:28 -0700 Subject: [PATCH 038/336] Update scripts --- docs/linux/sql-server-linux-availability-group-ha.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index ffd56510478..bc3f87c48b6 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -40,9 +40,9 @@ The design patters are three availability group configuarations. The configurati - **Two synchronous replicas availability group** -## How the configuration affects default settings +## How the configuration affects default resource settings -The cluster resource setting `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` guarantees that each transaction is written to a minimum number of secondary replica logs before committing the transaction on the primary replica. This setting can affect both high availability and data protection, depending on the configuration. When you install the SQL Server resource agent - `mssql-sserver-ha` - and create the availability group resource, the cluster manager detects the availability group configuration and sets `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` accordingly. +The cluster resource setting `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` guarantees that each transaction is written to a minimum number of secondary replica logs before committing the transaction on the primary replica. This setting can affect both high availability and data protection, depending on the configuration. When you install the SQL Server resource agent - `mssql-sserver-ha` - and create a cluster resource for the availability group, the cluster manager detects the availability group configuration and sets `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` accordingly. If supported by the configuration, the resource agent parameter `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` is set to the value that provides high availability and data protection. If the configuration cannot support both the default is set for data protection. For more information, see [Understand SQL Server resource agent for pacemaker](#pacemakerNotify). @@ -184,17 +184,17 @@ A user can choose to override the default behavior, and prevent the availability To set `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` to 0, run: ```bash -sudo pcs resource update <**ag1**> required_copies_to_commit=0 +sudo pcs resource update <**ag1**> required_synchronized_secondaries_to_commit=0 ``` -To revert to default computed value, run: +To revert to default value, based on the availability group configuration run: ```bash -sudo pcs resource update <**ag1**> required_copies_to_commit= +sudo pcs resource update <**ag1**> required_synchronized_secondaries_to_commit= ``` >[!NOTE] ->Updating resource properties causes all replicas to stop and restart. This means primary will temporarily be demoted to secondary, then promoted again which will casue temporary write unavailability. The new value for REQUIRED_COPIES_TO_COMMIT will only be set once replicas are restarted, so it won't be instantaneous with running the pcs command. +>Updating resource properties causes all replicas to stop and restart. This means primary will temporarily be demoted to secondary, then promoted again which will cause temporary write unavailability. The new value for`REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` will only be set once replicas are restarted, so it won't be instantaneous with running the pcs command. [1]: ./media/sql-server-linux-availability-group-ha/1-read-scale-out.png From 9152455828c0efee213bc0ea61fc0ffa5d01365f Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Wed, 31 May 2017 13:27:43 -0700 Subject: [PATCH 039/336] Completing links. --- .../sys-sp-add-trusted-assembly-transact-sql.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md b/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md index a5227a06e02..0b701bbf9d2 100644 --- a/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md +++ b/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md @@ -41,7 +41,7 @@ sp_add_trusted_assembly ## Remarks -This procedure adds an assembly to **Need to add sys.trusted_assemblies**. +This procedure adds an assembly to [sys.trusted_assemblies](../../relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md). ## Arguments @@ -66,8 +66,8 @@ N'pointudt, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarch ``` ## See Also - **Need to add sp_add_trusted_assembly** - **Need to add sys.trusted_assemblies** + [sys.sp_drop_trusted_assembly](sys-sp-drop-trusted-assembly-transact-sql.md) + [sys.trusted_assemblies](../../relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md) [CREATE ASSEMBLY (Transact-SQL)](../../t-sql/statements/create-assembly-transact-sql.md) [CLR strict security](../../database-engine/configure-windows/clr-strict-security.md) [sys.assemblies](../../relational-databases/system-catalog-views/sys-assemblies-transact-sql.md) From 5a2c38cf9f66dd9ca33634134266e80330248465 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Wed, 31 May 2017 13:29:14 -0700 Subject: [PATCH 040/336] Completing links. --- .../sys-sp-drop-trusted-assembly-transact-sql.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md b/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md index f0c8105399c..0ab411d2285 100644 --- a/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md +++ b/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md @@ -45,7 +45,7 @@ Canonical name that encodes the simple name, version number, culture, public key ## Remarks -This procedure removes an assembly from **Need to add sys.trusted_assemblies**. +This procedure removes an assembly from [sys.trusted_assemblies](../../relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md). ## Permissions @@ -61,8 +61,8 @@ N'pointudt, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarch ``` ## See Also - **Need to add sp_add_trusted_assembly** - **Need to add sys.trusted_assemblies** + [sys.sp_add_trusted_assembly](sys-sp-add-trusted-assembly-transact-sql.md) + [sys.trusted_assemblies](../../relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md) [DROP ASSEMBLY (Transact-SQL)](../../t-sql/statements/drop-assembly-transact-sql.md) [sys.assemblies](../../relational-databases/system-catalog-views/sys-assemblies-transact-sql.md) [sys.dm_clr_loaded_assemblies](../../relational-databases/system-dynamic-management-views/sys-dm-clr-loaded-assemblies-transact-sql.md) From e26b89c1d2ee3ec42ba51cf232ab3908190ff5cb Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Wed, 31 May 2017 13:30:39 -0700 Subject: [PATCH 041/336] Completed links. --- .../sys-trusted-assembies-transact-sql.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md b/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md index 765d2b51fb2..49b88e2e055 100644 --- a/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md +++ b/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md @@ -46,8 +46,8 @@ Contains a row for each trusted assembly for the server. Use **Need to add sp_add_trusted_assembly** and **Need to add sys.trusted_assemblies** add or remove assemblies from `sys.trusted_assemblies`. ## See Also - **Need to add sp_add_trusted_assembly** - **Need to add sys.trusted_assemblies** + [sys.sp_add_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md) + [sys.sp_drop_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md) [DROP ASSEMBLY (Transact-SQL)](../../t-sql/statements/drop-assembly-transact-sql.md) [sys.assemblies](../../relational-databases/system-catalog-views/sys-assemblies-transact-sql.md) [sys.dm_clr_loaded_assemblies](../../relational-databases/system-dynamic-management-views/sys-dm-clr-loaded-assemblies-transact-sql.md) From a13eef4ae790cc4c5cefb4c834333f3b5a892442 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Wed, 31 May 2017 13:44:17 -0700 Subject: [PATCH 042/336] Light grammatical touches. --- docs/linux/sql-server-linux-availability-group-ha.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index bc3f87c48b6..70038e7751a 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -89,7 +89,7 @@ The following table describes the high availability and data protection behavior For additional information, see [More about a witness replica](#WitnessReplica). -## Two synchronous replicas availability group +## Two synchronous replicas A two synchronous replicas availability group enables data protection. Like the other availability group configurations it can enable read scale-out. Two synchronous replicas does not provide high availability. @@ -97,7 +97,7 @@ A two synchronous replicas availability group enables data protection. Like the This configuration requires two servers. These servers fill the role of primary replica and secondary replica. -The two synchronous replicas configuration is optimized for data protection and distributing the read workload for databases. By default, resource is configured for data protection. This configuration does not provide high availability because if either instance of SQL Server fails, either the database will not be fully available or there is risk of data loss. +The two synchronous replicas configuration is optimized for data protection and distributing the read workload for databases. By default, the resource is configured for data protection. This configuration does not provide high availability because if either instance of SQL Server fails, either the database will not be fully available or there is risk of data loss. The following table describes the data protection behavior according to the possible values for two synchronous replicas availability group. @@ -119,7 +119,7 @@ The two synchronous replicas configuration may be the most economical because it ## More about a witness replica -A witness replica in a SQL Server Always On availability group enables an configuration with high availability and data protection without using a third synchronous secondary replica. Because any edition of SQL Server can host a witness replica, it can save some licensing costs over other availability group configurations. A witness replica contains availability group configuration data like availability group roles, and synchronization status data; it does not include replicated user databases.The witness replica uses the `WITNESS-COMMIT` availability mode. It is never the primary replica. +A witness replica in a SQL Server Always On availability group enables a configuration with high availability and data protection without using a third replica - a *witness replica*. Any edition of SQL Server can host a witness replica. A witness replica contains availability group configuration data like availability group roles, and synchronization status data in the `master` database. It does not include replicated user databases. The witness replica uses the `WITNESS-COMMIT` availability mode. It is never the primary replica. Use a witness replica in an availability group with two synchronous replicas - one primary replica and one secondary replica. If an availability group does not include two synchronous replicas, you cannot use a witness replica. You can also include additional asynchronous replicas. The DDL `CREATE AVAILABILITY GROUP` will fail if the group does not include two synchronous replicas. Likewise, you cannot create an availability group with only one primary replica and a witness replica. An availability group cannot include more than one witness replica. From 60358d2f3fc04242e4105b86400c66cff9c245ac Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Wed, 31 May 2017 14:39:41 -0700 Subject: [PATCH 043/336] Update alter and create availability group. --- .../alter-availability-group-transact-sql.md | 8 ++++---- .../create-availability-group-transact-sql.md | 18 +++++++++--------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/t-sql/statements/alter-availability-group-transact-sql.md b/docs/t-sql/statements/alter-availability-group-transact-sql.md index eb19e3f9ae2..1934c794a28 100644 --- a/docs/t-sql/statements/alter-availability-group-transact-sql.md +++ b/docs/t-sql/statements/alter-availability-group-transact-sql.md @@ -65,7 +65,7 @@ ALTER AVAILABILITY GROUP group_name | FAILURE_CONDITION_LEVEL = { 1 | 2 | 3 | 4 | 5 } | HEALTH_CHECK_TIMEOUT = milliseconds | DB_FAILOVER = { ON | OFF } - | REQUIRED_COPIES_TO_COMMIT = { integer } + | REQUIRED_SYNCHRONOUS_SECONDARIES_TO_COMMIT = { integer } ::= { 'system_name[\instance_name]' | 'FCI_network_name[\instance_name]' } @@ -74,7 +74,7 @@ ALTER AVAILABILITY GROUP group_name WITH ( ENDPOINT_URL = 'TCP://system-address:port', - AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT }, + AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT}, FAILOVER_MODE = { AUTOMATIC | MANUAL } [ , [ ,...n ] ] ) @@ -219,8 +219,8 @@ ALTER AVAILABILITY GROUP group_name For more information regarding this setting, see [Database Level Health Detection Option](../../database-engine/availability-groups/windows/sql-server-always-on-database-health-detection-failover-option.md) - REQUIRED_COPIES_TO_COMMIT - Introduced in SQL Server 2017 CTP 1.3. Used to set a minimum number of secondary replicas required to commit before the primary commits a transaction. Guarantees that SQL Server transactions will wait until the transaction logs are updated on the minimum number of secondary replicas. The default is 0 which gives the same behavior as SQL Server 2016. The minimum value is 0. The maximum value is the number of replicas minus 1. This option relates to replicas in synchronous commit mode. When replicas are in synchronous commit mode writes on the primary replica wait until writes on the secondary synchronous replicas are committed to the replica database transaction log. If a SQL Server that hosts a secondary synchronous replica stops responding, the SQL Server that hosts the primary replica will mark that secondary replica as NOT SYNCHRONIZED and proceed. When the unresponsive database comes back online it will be in a "not synced" state and the replica will be marked as unhealthy until the primary can make it synchronous again. This setting guarantees that the primary replica will not proceed until the minimum number of replicas have committed each transaction. If the minimum number of replicas is not available then commits on the primary will fail. + REQUIRED_SYNCHRONOUS_SECONDARIES_TO_COMMIT + Introduced in SQL Server 2017 CTP 2.2. Used to set a minimum number of synchronous secondary replicas required to commit before the primary commits a transaction. Guarantees that SQL Server transactions will wait until the transaction logs are updated on the minimum number of secondary replicas. The default is 0 which gives the same behavior as SQL Server 2016. The minimum value is 0. The maximum value is the number of replicas minus 1. This option relates to replicas in synchronous commit mode. When replicas are in synchronous commit mode, writes on the primary replica wait until writes on the secondary synchronous replicas are committed to the replica database transaction log. If a SQL Server that hosts a secondary synchronous replica stops responding, the SQL Server that hosts the primary replica will mark that secondary replica as NOT SYNCHRONIZED and proceed. When the unresponsive database comes back online it will be in a "not synced" state and the replica will be marked as unhealthy until the primary can make it synchronous again. This setting guarantees that the primary replica will not proceed until the minimum number of replicas have committed each transaction. If the minimum number of replicas is not available then commits on the primary will fail. This setting applies to availability groups with cluster type `WSFC` and `EXTERNAL`. For cluster type `EXTERNAL` the setting is changed when the availability group is added to a cluster resource. See [High availability and data protection for availability group configurations](../../linux/sql-server-linux-availability-group-ha.md). ADD DATABASE *database_name* Specifies a list of one or more user databases that you want to add to the availability group. These databases must reside on the instance of [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] that hosts the current primary replica. You can specify multiple databases for an availability group, but each database can belong to only one availability group. For information about the type of databases that an availability group can support, see [Prerequisites, Restrictions, and Recommendations for Always On Availability Groups (SQL Server)](../../database-engine/availability-groups/windows/prereqs-restrictions-recommendations-always-on-availability.md). To find out which local databases already belong to an availability group, see the **replica_id** column in the [sys.databases](../../relational-databases/system-catalog-views/sys-databases-transact-sql.md) catalog view. diff --git a/docs/t-sql/statements/create-availability-group-transact-sql.md b/docs/t-sql/statements/create-availability-group-transact-sql.md index 8941da53ff8..06e035b66d6 100644 --- a/docs/t-sql/statements/create-availability-group-transact-sql.md +++ b/docs/t-sql/statements/create-availability-group-transact-sql.md @@ -1,7 +1,7 @@ --- title: "CREATE AVAILABILITY GROUP (Transact-SQL) | Microsoft Docs" ms.custom: "" -ms.date: "03/01/2017" +ms.date: "05/31/2017" ms.prod: "sql-non-specified" ms.reviewer: "" ms.suite: "" @@ -59,14 +59,14 @@ CREATE AVAILABILITY GROUP group_name | DTC_SUPPORT = { PER_DB | NONE } | BASIC | DISTRIBUTED - | REQUIRED_COPIES_TO_COMMIT = { integer } - | CLUSTER_TYPE = { WSFC | NONE } + | REQUIRED_SYNCHRONOUS_SECONDARIES_TO_COMMIT = { integer } + | CLUSTER_TYPE = { WSFC | EXTERNAL | NONE } ::= WITH ( ENDPOINT_URL = 'TCP://system-address:port', - AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT }, + AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT | WITNESS_COMMIT }, FAILOVER_MODE = { AUTOMATIC | MANUAL } [ , [ ,...n ] ] ) @@ -180,11 +180,11 @@ CREATE AVAILABILITY GROUP group_name DISTRIBUTED Used to create a distributed availability group. This option is used with the AVAILABILITY GROUP ON parameter to connect two availability groups in separate Windows Server Failover Clusters. For more information, see [Distributed Availability Groups (Always On Availability Groups)](../../database-engine/availability-groups/windows/distributed-availability-groups-always-on-availability-groups.md). Distributed availability groups are supported beginning in [!INCLUDE[ssSQL15](../../includes/sssql15-md.md)]. - REQUIRED_COPIES_TO_COMMIT - Introduced in SQL Server 2017 CTP 1.3. Used to set a minimum number of secondary replicas required to commit before the primary commits a transaction. Guarantees that SQL Server transactions will wait until the transaction logs are updated on the minimum number of secondary replicas. The default is 0 which gives the same behavior as SQL Server 2016. The minimum value is 0. The maximum value is the number of replicas minus 1. This option relates to replicas in synchronous commit mode. When replicas are in synchronous commit mode writes on the primary replica wait until writes on the secondary synchronous replicas are committed to the replica database transaction log. If a SQL Server that hosts a secondary synchronous replica stops responding, the SQL Server that hosts the primary replica will mark that secondary replica as NOT SYNCHRONIZED and proceed. When the unresponsive database comes back online it will be in a "not synced" state and the replica will be marked as unhealthy until the primary can make it synchronous again. This setting guarantees that the primary replica will not proceed until the minimum number of replicas have committed each transaction. If the minimum number of replicas is not available then commits on the primary will fail. + REQUIRED_SYNCHRONOUS_SECONDARIES_TO_COMMIT + Introduced in SQL Server 2017 CTP 2.2. Used to set a minimum number of synchronous secondary replicas required to commit before the primary commits a transaction. Guarantees that SQL Server transactions will wait until the transaction logs are updated on the minimum number of secondary replicas. The default is 0 which gives the same behavior as SQL Server 2016. The minimum value is 0. The maximum value is the number of replicas minus 1. This option relates to replicas in synchronous commit mode. When replicas are in synchronous commit mode, writes on the primary replica wait until writes on the secondary synchronous replicas are committed to the replica database transaction log. If a SQL Server that hosts a secondary synchronous replica stops responding, the SQL Server that hosts the primary replica will mark that secondary replica as NOT SYNCHRONIZED and proceed. When the unresponsive database comes back online it will be in a "not synced" state and the replica will be marked as unhealthy until the primary can make it synchronous again. This setting guarantees that the primary replica will not proceed until the minimum number of replicas have committed each transaction. If the minimum number of replicas is not available then commits on the primary will fail. This setting applies to availability groups with cluster type `WSFC` and `EXTERNAL`. For cluster type `EXTERNAL` the setting is changed when the availability group is added to a cluster resource. See [High availability and data protection for availability group configurations](../../linux/sql-server-linux-availability-group-ha.md). CLUSTER_TYPE - Introduced in SQL Server 2017 CTP 1.3. Used to identify if the availability group is on a Windows Server Failover Cluster (WSFC). Set to WSFC when availability group is on servers that belong WSFC. Set to NONE when availability group not using WSFC for cluster coordination. For example, when an availability group includes Linux servers. + Introduced in SQL Server 2017 CTP 2.2. Used to identify if the availability group is on a Windows Server Failover Cluster (WSFC). Set to WSFC when availability group is on a failover cluster instance on a Windows Server failover cluster. Set to EXTERNAL when the cluster is managed by a cluster manager that is not a Windows Server failover cluster, like Linux Pacemaker. Set to NONE when availability group not using WSFC for cluster coordination. For example, when an availability group includes Linux servers. DATABASE *database_name* Specifies a list of one or more user databases on the local [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] instance (that is, the server instance on which you are creating the availability group). You can specify multiple databases for an availability group, but each database can belong to only one availability group. For information about the type of databases that an availability group can support, see [Prerequisites, Restrictions, and Recommendations for Always On Availability Groups (SQL Server)](../../database-engine/availability-groups/windows/prereqs-restrictions-recommendations-always-on-availability.md). To find out which local databases already belong to an availability group, see the **replica_id** column in the [sys.databases](../../relational-databases/system-catalog-views/sys-databases-transact-sql.md) catalog view. @@ -239,8 +239,8 @@ CREATE AVAILABILITY GROUP group_name *port* Is a port number that is associated with the mirroring endpoint of the partner server instance (for the ENDPOINT_URL option) or the port number used by the [!INCLUDE[ssDE](../../includes/ssde-md.md)] of the server instance (for the READ_ONLY_ROUTING_URL option). - AVAILABILITY_MODE **=** { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT } - Specifies whether the primary replica has to wait for the secondary replica to acknowledge the hardening (writing) of the log records to disk before the primary replica can commit the transaction on a given primary database. The transactions on different databases on the same primary replica can commit independently. + AVAILABILITY_MODE **=** { {SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT } | WITNESS_COMMMIT } + SYNCHRONOUS_COMMIT or ASYNCHRONOUS_COMMIT specifies whether the primary replica has to wait for the secondary replica to acknowledge the hardening (writing) of the log records to disk before the primary replica can commit the transaction on a given primary database. The transactions on different databases on the same primary replica can commit independently. WITNESS_COMMIT designates a replica as a witness replica. See [More about a witness replica](../../linux/sql-server-linux-availability-group-ha.md#WitnessReplica). SYNCHRONOUS_COMMIT Specifies that the primary replica will wait to commit transactions until they have been hardened on this secondary replica (synchronous-commit mode). You can specify SYNCHRONOUS_COMMIT for up to three replicas, including the primary replica. From 4326e82287134d7f2cd8ed986fc30b86e2ce9ffa Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Wed, 31 May 2017 14:44:41 -0700 Subject: [PATCH 044/336] Updated alter. --- docs/t-sql/statements/alter-availability-group-transact-sql.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/t-sql/statements/alter-availability-group-transact-sql.md b/docs/t-sql/statements/alter-availability-group-transact-sql.md index 1934c794a28..8dab213ad75 100644 --- a/docs/t-sql/statements/alter-availability-group-transact-sql.md +++ b/docs/t-sql/statements/alter-availability-group-transact-sql.md @@ -74,7 +74,7 @@ ALTER AVAILABILITY GROUP group_name WITH ( ENDPOINT_URL = 'TCP://system-address:port', - AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT}, + AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT }, FAILOVER_MODE = { AUTOMATIC | MANUAL } [ , [ ,...n ] ] ) From b72d5ebc3efd6b7f4f4c616ec6a97955c5df1c0f Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Wed, 31 May 2017 15:46:21 -0700 Subject: [PATCH 045/336] Staging create AG for 2.2 --- ...luster-availability-group-create-prereq.md | 23 ++++++++----------- ...r-linux-availability-group-configure-ha.md | 6 +++-- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/docs/includes/ss-linux-cluster-availability-group-create-prereq.md b/docs/includes/ss-linux-cluster-availability-group-create-prereq.md index 1617cb55c8d..2e268b0870d 100644 --- a/docs/includes/ss-linux-cluster-availability-group-create-prereq.md +++ b/docs/includes/ss-linux-cluster-availability-group-create-prereq.md @@ -41,14 +41,15 @@ Before you create the availability group, you need to: sudo vi /etc/hosts ``` - The following example shows `/etc/hosts` on **node1** with additions for **node1** and **node2**. In this document **node1** refers to the primary SQL Server replica. **node2** refers to the secondary SQL Server.; + The following example shows `/etc/hosts` on **node1** with additions for **node1**, **node2**, and **node3**. In this document **node1** refers to the server hosting the primary replica. **node2**, and **node3** refer to servers hosting secondary replicas. ``` 127.0.0.1   localhost localhost4 localhost4.localdomain4 ::1       localhost localhost6 localhost6.localdomain6 - 10.128.18.128 node1 + 10.128.18.12 node1 10.128.16.77 node2 + 10.128.15.33 node3 ``` ### Install SQL Server @@ -63,7 +64,7 @@ Install SQL Server. The following links point to SQL Server installation instruc ## Enable Always On availability groups and restart sqlserver -Enable Always On availability groups on each node hosting SQL Server service, then restart `mssql-server`. Run the following script: +Enable Always On availability groups on each node hosting a SQL Server instance, then restart `mssql-server`. Run the following script: ```bash sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1 @@ -72,7 +73,7 @@ sudo systemctl restart mssql-server ## Enable AlwaysOn_health event session -You can optionaly enable Always On Availability Groups specific extended events to help with root-cause diagnosis when you troubleshoot an availability group. +You can optionally enable Always On availability groups extended events to help with root-cause diagnosis when you troubleshoot an availability group. Run the following command on each each instance of SQL Server. ```Transact-SQL ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON); @@ -83,7 +84,7 @@ For more information about this XE session, see [Always On Extended Events](http ## Create db mirroring endpoint user -The following Transact-SQL script creates a login named `dbm_login`, and a user named `dbm_user`. Update the script with a strong password. Run the following command on all SQL Servers to create the database mirroring endpoint user. +The following Transact-SQL script creates a login named `dbm_login`, and a user named `dbm_user`. Update the script with a strong password. Run the following command on all SQL Server instances to create the database mirroring endpoint user. ```Transact-SQL CREATE LOGIN dbm_login WITH PASSWORD = '**<1Sample_Strong_Password!@#>**'; @@ -92,9 +93,9 @@ CREATE USER dbm_user FOR LOGIN dbm_login; ## Create a certificate -SQL Server service on Linux uses certificates to authenticate communication between the mirroring endpoints. +The SQL Server service on Linux uses certificates to authenticate communication between the mirroring endpoints. -The following Transact-SQL script creates a master key and certificate. It then backs the certificate up and secures the file with a private key. Update the script with strong passwords. Connect to the primary SQL Server and run the following Transact-SQL to create the certificate: +The following Transact-SQL script creates a master key and certificate. It then backs the certificate up and secures the file with a private key. Update the script with strong passwords. Connect to the primary SQL Server instance and run the following Transact-SQL to create the certificate: ```Transact-SQL CREATE MASTER KEY ENCRYPTION BY PASSWORD = '****'; @@ -116,7 +117,7 @@ cd /var/opt/mssql/data scp dbm_certificate.* root@****:/var/opt/mssql/data/ ``` -On the target server, give permission to mssql user to access the certificate. +On each target server, give permission to mssql user to access the certificate. ```bash cd /var/opt/mssql/data @@ -144,15 +145,11 @@ Database mirroring endpoints use Transmission Control Protocol (TCP) to send and The following Transact-SQL creates a listening endpoint named `Hadr_endpoint` for the availability group. It starts the endpoint, and gives connect permission to the user that you created. Before you run the script, replace the values between `**< ... >**`. - ->[!NOTE] ->For this release, do not use a different IP address for the listener IP. We are working on a fix for this issue, but the only acceptable value for now is '0.0.0.0'. - Update the following Transact-SQL for your environment on all SQL Server instances: ```Transact-SQL CREATE ENDPOINT [Hadr_endpoint] - AS TCP (LISTENER_IP = (0.0.0.0), LISTENER_PORT = **<5022>**) + AS TCP (LISTENER_PORT = **<5022>**) FOR DATA_MIRRORING ( ROLE = ALL, AUTHENTICATION = CERTIFICATE dbm_certificate, diff --git a/docs/linux/sql-server-linux-availability-group-configure-ha.md b/docs/linux/sql-server-linux-availability-group-configure-ha.md index 57a071104cb..a695179683d 100644 --- a/docs/linux/sql-server-linux-availability-group-configure-ha.md +++ b/docs/linux/sql-server-linux-availability-group-configure-ha.md @@ -6,7 +6,7 @@ description: author: MikeRayMSFT ms.author: mikeray manager: jhubbard -ms.date: 05/19/2017 +ms.date: 05/31/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -76,7 +76,7 @@ The steps to create an availability group on Linux servers for high availability Create the availability group. In order to create the availability group for HA on Linux, use the [CREATE AVAILABILITY GROUP](https://docs.microsoft.com/en-us/sql/t-sql/statements/create-availability-group-transact-sql) Transact-SQL DDL with `CLUSTER_TYPE = EXTERNAL`. -The `EXTERNAL` value for `CLUSTER_TYPE` option specifies that the an external cluster entity manages the availability group. Pacemaker is an example of an external cluster entity. When the availability group `CLUSTER_TYPE = EXTERNAL`, set each replica `FAILOVER_MODE = EXTERNAL`. After you create the availability group, configure the cluster resource for the availability group using the cluster management tools - for example with Pacemaker use `pcs` (on RHEL, Ubuntu) or `crm` (on SLES). See the Linux distribution specific cluster configuration section for an end-to-end example. +The `EXTERNAL` value for `CLUSTER_TYPE` option specifies that the an external cluster entity manages the availability group. Pacemaker is an example of an external cluster entity. When the availability group `CLUSTER_TYPE = EXTERNAL`, set primary and secondary replica `FAILOVER_MODE = EXTERNAL`. After you create the availability group, configure the cluster resource for the availability group using the cluster management tools - for example with Pacemaker use `pcs` (on RHEL, Ubuntu) or `crm` (on SLES). See the Linux distribution specific cluster configuration section for an end-to-end example. The following Transact-SQL script creates an availability group for HA named `ag1`. The script configures the availability group replicas with `SEEDING_MODE = AUTOMATIC`. This setting causes SQL Server to automatically create the database on each secondary server. Update the following script for your environment. Replace the `****`, `****`, and `****` values with the names of the SQL Server instances that will host the replicas. Replace the `**<5022>**` with the port you set for the data mirroring endpoint. Run the following Transact-SQL on the SQL Server instance that will host the primary replica to create the availability group. @@ -107,6 +107,7 @@ CREATE AVAILABILITY GROUP [ag1] ); ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE; + ``` >[!NOTE] >Running the CREATE AVAILABILITY GROUP command will complete with a warning: "Attempt to access non-existent or uninitialized availability group with ID . This is usually an internal condition, such as the availability group is being dropped or the local WSFC node has lost quorum. In such cases, and no user action is required.". This is a known issue and product team is working on a fix. Meanwhile, users should assume command completed successfully. @@ -127,6 +128,7 @@ ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE; >[!IMPORTANT] >After you create the availability group, you must configure integration with a cluster technology like Pacemaker for HA. In the case of a read-only scale-out architecture using availability groups, starting with [!INCLUDE [SQL Server version](..\includes\sssqlv14-md.md)], setting up a cluster is not required. + If you followed the steps in this document, you have an availability group that is not yet clustered. The next step is to add the cluster. While this is a valid configuration in read-scale/load balancing scenarios, it is not complete for high availability. To achieve high availability, you need to add the availability group as a cluster resource. See [Next steps](#next-steps) for instructions. ## Notes From 835dadb8f6086609392fdc91678a70b2a6cc21fb Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Thu, 1 Jun 2017 08:59:47 -0700 Subject: [PATCH 046/336] Linux Encrypt Conn, TM tech review Tech review from Tommy Mullaney. --- .../sql-server-linux-encrypted-connections.md | 57 +++++++++---------- 1 file changed, 26 insertions(+), 31 deletions(-) diff --git a/docs/linux/sql-server-linux-encrypted-connections.md b/docs/linux/sql-server-linux-encrypted-connections.md index 06da4386dd1..6341f5a2d8e 100644 --- a/docs/linux/sql-server-linux-encrypted-connections.md +++ b/docs/linux/sql-server-linux-encrypted-connections.md @@ -28,7 +28,7 @@ helpviewer_keywords: TLS is used to encrypt connections from a client application to [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)]. When configured correctly, TLS provides both privacy and data integrity for communications between the client and the server.  The following steps describe a typical scenario:  -1. Database administrator generates a private key and a certificate signing request (CSR). The CSR's Common Name should match the server name that clients specify in their SQL Server connection string. This Common Name is usually the fully qualified domain name of the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host. To use the same certificate for multiple servers, you can use a wildcard in the Common Name (for example, `"*.contoso.com" instead of "node1.contoso.com"`). +1. Database administrator generates a private key and a certificate signing request (CSR). The CSR's Common Name should match the server name that clients specify in their SQL Server connection string. This Common Name is usually the fully qualified domain name of the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host. To use the same certificate for multiple servers, you can use a wildcard in the Common Name (for example, `"*.contoso.com"` instead of `"node1.contoso.com"`). 2. The CSR is sent to a certificate authority (CA) for signing. The CA should be trusted by all client machines that connect to [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)]. The CA returns a signed certificate to the database administrator. 3. Database administrator configures [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] to use the private key and the signed certificate for TLS connections. 4. Clients specify `"Encrypt=True"` and `"TrustServerCertificate=False"` in their connection strings. (The specific parameter names may be different depending on which driver is being used). Clients now attempt encrypt connections to SQL Server and check the validity of SQL Server's certificate to prevent man-in-the-middle attacks.  @@ -39,12 +39,12 @@ Use `mssql-conf` to configure TLS for an instance of [!INCLUDE[ssNoVersion](../. |Option |Description | |--- |--- | -|`forceencryption` |If yes, then [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] forces all connections to be encrypted. By default, this option is no. |  -|`tlscert` |The absolute path to the certificate file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:   `/etc/ssl/certs/mssql.pem`  The certificate file must be accessible by the mssql account. Microsoft recommends Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 600 `. |  -|`tlskey` |The absolute path to the private key file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:  `/etc/ssl/private/mssql.key`  The certificate file must be accessible by the mssql account. Microsoft recommends Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 600 `. | +|`network.forceencryption` |If yes, then [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] forces all connections to be encrypted. By default, this option is no. |  +|`network.tlscert` |The absolute path to the certificate file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:   `/etc/ssl/certs/mssql.pem`  The certificate file must be accessible by the mssql account. Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 600 `. |  +|`network.tlskey` |The absolute path to the private key file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:  `/etc/ssl/private/mssql.key`  The certificate file must be accessible by the mssql account. Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 600 `. | |`tlsprotocols` |A comma-separated list of which TLS protocols are allowed by SQL Server. [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] always attempts to negotiate the strongest allowed protocol. If a client does not support any allowed protocol, [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] rejects the connection attempt.  For compatibility, all supported protocols are allowed by default (1.2, 1.1, 1.0).  If your clients support TLS 1.2, Microsoft recommends allowing only TLS 1.2. |  -|`tlsciphers` |Specifies which ciphers are allowed by [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] for TLS. This string must be formatted per OpenSSL's cipher list format. In general, you should not need to change this option. 
By default, the following ciphers are allowed: 
`ECDHE-ECDSA-AES128-GCM-SHA256`
`ECDHE-ECDSA-AES256-GCM-SHA384`
`ECDHE-RSA-AES128-GCM-SHA256`
`ECDHE-RSA-AES256-GCM-SHA384`
`ECDHE-ECDSA-AES128-SHA256`
`ECDHE-ECDSA-AES256-SHA384`
`ECDHE-RSA-AES128-SHA256`
`ECDHE-RSA-AES256-SHA384`
`ECDHE-ECDSA-AES256-SHA`
`ECDHE-ECDSA-AES128-SHA`
`ECDHE-RSA-AES256-SHA`
`ECDHE-RSA-AES128-SHA`
`AES256-GCM-SHA384`
`AES128-GCM-SHA256`
`AES256-SHA256`
`AES128-SHA256`
`AES256-SHA:AES128-SHA` |   - +|`network.tlsciphers` |Specifies which ciphers are allowed by [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] for TLS. This string must be formatted per OpenSSL's cipher list format. In general, you should not need to change this option. 
By default, the following ciphers are allowed: 
`ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA` |   +|--- |--- |   ## Example This example uses a self-signed certificate. In normal production scenarios, the certificate would be signed by a CA that is trusted by all clients.  @@ -52,35 +52,31 @@ This example uses a self-signed certificate. In normal production scenarios, the ### Step 1: Generate private key and certificate Open a command terminal on the Linux machine where [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] is running. Run the following commands: -``` -# Generate a self-signed certificate -# Make sure the /CN matches your SQL Server host fully-qualified domain name -# You may optionally use wildcards, e.g. '/CN=*.contoso.com' -openssl req -x509 -nodes -newkey rsa:2048 -subj '/CN=mssql.contoso.com' -keyout mssql.key -out mssql.pem -days 365 -``` -  -#### Restrict access to mssql  +- Generate a self-signed certificate. Make sure the /CN matches your SQL Server host fully-qualified domain name. You may optionally use wildcards, e.g. '/CN=*.contoso.com'. + ``` + openssl req -x509 -nodes -newkey rsa:2048 -subj '/CN=mssql.contoso.com' -keyout mssql.key -out mssql.pem -days 365 + ``` -``` -sudo chown mssql:mssql mssql.pem mssql.key -sudo chmod 600 mssql.pem mssql.key -``` +- Restrict access to mssql  + ``` + sudo chown mssql:mssql mssql.pem mssql.key + sudo chmod 600 mssql.pem mssql.key + ```   -#### Move to system SSL directories (optional) - -``` -sudo mv mssql.pem /etc/ssl/certs/ -sudo mv mssql.key /etc/ssl/private/ -``` +- Move to system SSL directories (optional) + ``` + sudo mv mssql.pem /etc/ssl/certs/ + sudo mv mssql.key /etc/ssl/private/ + ```   ### Step 2: Configure [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)]  -Use mssql-conf to configure [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] to use the certificate and key for TLS. For increased security, you can also set TLS 1.2 as the only allowed protocol and force all clients to use encrypted connections.  +Use `mssql-conf` to configure [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] to use the certificate and key for TLS. For increased security, you can also set TLS 1.2 as the only allowed protocol and force all clients to use encrypted connections.  ``` -sudo /opt/mssql/bin/mssql-conf set tlscert /etc/ssl/certs/mssql.pem -sudo /opt/mssql/bin/mssql-conf set tlskey /etc/ssl/private/mssql.key -sudo /opt/mssql/bin/mssql-conf set tlsprotocols 1.2 -sudo /opt/mssql/bin/mssql-conf set forceencryption yes +sudo /opt/mssql/bin/mssql-conf set network.tlscert /etc/ssl/certs/mssql.pem +sudo /opt/mssql/bin/mssql-conf set network.tlskey /etc/ssl/private/mssql.key +sudo /opt/mssql/bin/mssql-conf set network.tlsprotocols 1.2 +sudo /opt/mssql/bin/mssql-conf set network.forceencryption yes ```   ### Step 3: Restart [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] @@ -116,6 +112,5 @@ JDBC |The certificate chain was issued by an authority that is not trusted.  |This error occurs when clients are unable to verify the signature on the certificate presented by SQL Server during the TLS handshake. Make sure the client trusts either the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] certificate directly, or the CA which signed the SQL Server certificate. | |The target principal name is incorrect.  |Make sure that Common Name field on SQL Server's certificate matches the server name specified in the client's connection string. |  |An existing connection was forcibly closed by the remote host. |This error can occur when the client doesn't support the TLS protocol version required by SQL Server. For example, if [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] is configured to require TLS 1.2, make sure your clients also support the TLS 1.2 protocol. | - -## Next steps +|--- |--- | From 93fb2fda1f510eaae0d4e3f0afb8317070f6c059 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Thu, 1 Jun 2017 09:09:13 -0700 Subject: [PATCH 047/336] adding ssms connect png --- .../ssms-encrypt-connection.png | Bin 0 -> 23395 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/linux/media/sql-server-linux-encrypted-connections/ssms-encrypt-connection.png diff --git a/docs/linux/media/sql-server-linux-encrypted-connections/ssms-encrypt-connection.png b/docs/linux/media/sql-server-linux-encrypted-connections/ssms-encrypt-connection.png new file mode 100644 index 0000000000000000000000000000000000000000..437de95a2bd1ac8e8f74ed07369db273e85b18b9 GIT binary patch literal 23395 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 o*xHDj6OoFx9m>f7zz|J! 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 literal 0 HcmV?d00001 From 8581f80beae842c23a771bb4ca9eff8adc5d40a5 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Thu, 1 Jun 2017 09:16:37 -0700 Subject: [PATCH 048/336] Formatting. --- docs/linux/sql-server-linux-encrypted-connections.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/linux/sql-server-linux-encrypted-connections.md b/docs/linux/sql-server-linux-encrypted-connections.md index 6341f5a2d8e..ffe025f9565 100644 --- a/docs/linux/sql-server-linux-encrypted-connections.md +++ b/docs/linux/sql-server-linux-encrypted-connections.md @@ -44,7 +44,7 @@ Use `mssql-conf` to configure TLS for an instance of [!INCLUDE[ssNoVersion](../. |`network.tlskey` |The absolute path to the private key file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:  `/etc/ssl/private/mssql.key`  The certificate file must be accessible by the mssql account. Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 600 `. | |`tlsprotocols` |A comma-separated list of which TLS protocols are allowed by SQL Server. [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] always attempts to negotiate the strongest allowed protocol. If a client does not support any allowed protocol, [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] rejects the connection attempt.  For compatibility, all supported protocols are allowed by default (1.2, 1.1, 1.0).  If your clients support TLS 1.2, Microsoft recommends allowing only TLS 1.2. |  |`network.tlsciphers` |Specifies which ciphers are allowed by [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] for TLS. This string must be formatted per OpenSSL's cipher list format. In general, you should not need to change this option. 
By default, the following ciphers are allowed: 
`ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA` |   -|--- |--- | +| | |   ## Example This example uses a self-signed certificate. In normal production scenarios, the certificate would be signed by a CA that is trusted by all clients.  @@ -52,12 +52,12 @@ This example uses a self-signed certificate. In normal production scenarios, the ### Step 1: Generate private key and certificate Open a command terminal on the Linux machine where [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] is running. Run the following commands: -- Generate a self-signed certificate. Make sure the /CN matches your SQL Server host fully-qualified domain name. You may optionally use wildcards, e.g. '/CN=*.contoso.com'. +- Generate a self-signed certificate. Make sure the /CN matches your SQL Server host fully-qualified domain name. You may optionally use wildcards, for example `'/CN=*.contoso.com'`. ``` openssl req -x509 -nodes -newkey rsa:2048 -subj '/CN=mssql.contoso.com' -keyout mssql.key -out mssql.pem -days 365 ``` -- Restrict access to mssql  +- Restrict access to `mssql`  ``` sudo chown mssql:mssql mssql.pem mssql.key sudo chmod 600 mssql.pem mssql.key @@ -93,7 +93,7 @@ sqlcmd `sqlcmd -N -C -S mssql.contoso.com -U sa -P ''` [!INCLUDE[ssmanstudiofull-md](../../docs/includes/ssmanstudiofull-md.md)] - +Dialog box graphic to be added.   ADO.NET `"Encrypt=true; TrustServerCertificate=true;"` @@ -112,5 +112,5 @@ JDBC |The certificate chain was issued by an authority that is not trusted.  |This error occurs when clients are unable to verify the signature on the certificate presented by SQL Server during the TLS handshake. Make sure the client trusts either the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] certificate directly, or the CA which signed the SQL Server certificate. | |The target principal name is incorrect.  |Make sure that Common Name field on SQL Server's certificate matches the server name specified in the client's connection string. |  |An existing connection was forcibly closed by the remote host. |This error can occur when the client doesn't support the TLS protocol version required by SQL Server. For example, if [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] is configured to require TLS 1.2, make sure your clients also support the TLS 1.2 protocol. | -|--- |--- | +| | | From c6a28fb10b206565935bd2aaac6dcafa0cf9a79b Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Thu, 1 Jun 2017 09:20:33 -0700 Subject: [PATCH 049/336] Fixing path to graphic --- docs/includes/tsql-appliesto-sslinx-only_md.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/includes/tsql-appliesto-sslinx-only_md.md b/docs/includes/tsql-appliesto-sslinx-only_md.md index 2c70f65a67c..4d288ddc18a 100644 --- a/docs/includes/tsql-appliesto-sslinx-only_md.md +++ b/docs/includes/tsql-appliesto-sslinx-only_md.md @@ -1,2 +1,2 @@ -**THIS TOPIC APPLIES TO:** ![no](/docs/includes/media/no.png)SQL Server Windows ![yes](/docs/includes/media/yes.png)SQL Server Linux ![no](/docs/includes/media/no.png)Azure SQL Database ![no](/docs/includes/media/no.png)Azure SQL Data Warehouse ![no](/docs/includes/media/no.png)Parallel Data Warehouse +**THIS TOPIC APPLIES TO:** ![no](/sql/includes/media/no.png)SQL Server Windows ![yes](/sql/includes/media/yes.png)SQL Server Linux ![no](/sql/includes/media/no.png)Azure SQL Database ![no](/sql/includes/media/no.png)Azure SQL Data Warehouse ![no](/sql/includes/media/no.png)Parallel Data Warehouse From ea6369aef2add93f51c55cd4731f50fcdc97b721 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Thu, 1 Jun 2017 10:01:46 -0700 Subject: [PATCH 050/336] Added the restore attach aspect. --- ...hanges-to-database-engine-features-in-sql-server-2017.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/database-engine/breaking-changes-to-database-engine-features-in-sql-server-2017.md b/docs/database-engine/breaking-changes-to-database-engine-features-in-sql-server-2017.md index 2d9d4c3a514..c0560ea93a7 100644 --- a/docs/database-engine/breaking-changes-to-database-engine-features-in-sql-server-2017.md +++ b/docs/database-engine/breaking-changes-to-database-engine-features-in-sql-server-2017.md @@ -25,8 +25,10 @@ manager: "jhubbard" ## Breaking Changes in [!INCLUDE[sssqlv14-md](../includes/sssqlv14-md.md)][!INCLUDE[ssDE](../includes/ssde-md.md)] -- CLR uses Code Access Security (CAS) in the .NET Framework, which is no longer supported as a security boundary. Beginning with [!INCLUDE[sssqlv14-md](../includes/sssqlv14-md.md)][!INCLUDE[ssDE](../includes/ssde-md.md)], an `sp_configure` option called `clr strict security` is introduced to enhance the security of CLR assemblies. clr strict security is enabled by default, and treats `SAFE` and `EXTERNAL_ACCESS` CLR assemblies as if they were marked `UNSAFE`. The `clr strict security` option can be disabled for backward compatibility, but this is not recommended. When `clr strict security` is disabled, a CLR assembly created with `PERMISSION_SET = SAFE` may be able to access external system resources, call unmanaged code, and acquire **sysadmin** privileges. After enabling strict security, any assemblies that are not signed will fail to load. You must either alter or drop and recreate each assembly so that it is signed with a certificate or asymmetric key that has a corresponding login with the `UNSAFE ASSEMBLY` permission on the server. For more information, see [clr strict security](../database-engine/configure-windows/clr-strict-security.md). - +- CLR uses Code Access Security (CAS) in the .NET Framework, which is no longer supported as a security boundary. Beginning with [!INCLUDE[sssqlv14-md](../includes/sssqlv14-md.md)][!INCLUDE[ssDE](../includes/ssde-md.md)], an `sp_configure` option called `clr strict security` is introduced to enhance the security of CLR assemblies. clr strict security is enabled by default, and treats `SAFE` and `EXTERNAL_ACCESS` CLR assemblies as if they were marked `UNSAFE`. The `clr strict security` option can be disabled for backward compatibility, but this is not recommended. When `clr strict security` is disabled, a CLR assembly created with `PERMISSION_SET = SAFE` may be able to access external system resources, call unmanaged code, and acquire **sysadmin** privileges. After enabling strict security, any assemblies that are not signed will fail to load. Also, if a database has `SAFE` or `EXTERNAL_ACCESS` assemblies, `RESTORE` or `ATTACH DATABASE` statements can complete, but the assemblies may fail to load. + To load the assemblies, you must either alter or drop and recreate each assembly so that it is signed with a certificate or asymmetric key that has a corresponding login with the `UNSAFE ASSEMBLY` permission on the server. For more information, see [clr strict security](../database-engine/configure-windows/clr-strict-security.md). + + ## Previous Versions From 358e02dccbd5d1dbdabefe3e2bda01f27d17b046 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Thu, 1 Jun 2017 10:11:02 -0700 Subject: [PATCH 051/336] Added the 2.2 CLR whitelist --- .../what-s-new-in-sql-server-2017-database-engine.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md b/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md index 8e75adfbc5d..95dba40aa86 100644 --- a/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md +++ b/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md @@ -21,6 +21,9 @@ manager: "jhubbard" **Note:** SQL Server 2017 also includes the features added in SQL Server 2016 service packs. For those items, see [What's New in SQL Server 2016 (Database Engine)](../../database-engine/configure-windows/what-s-new-in-sql-server-2016-database-engine.md). +## SQL Server Database Engine (CTP 2.2) +- CLR assemblies can now be added to a whitelist, as a work around for the `clr strict security` feature described in CTP 2.0. [sp_add_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md), [sp_drop_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md), and [sys.trusted_asssemblies](../../relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md) are added to support the white list of trusted assemblies. + ## SQL Server Database Engine (CTP 2.1) - A new, DMF [sys.dm_db_log_stats](../../relational-databases/system-dynamic-management-views/sys-dm-db-log-stats-transact-sql.md), is introduced to expose summary level attributes and information on transaction log files; useful for monitoring the health of the transaction log. From 21b97ebccc1aa416a58d9f2c211cba8f402abb8c Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 1 Jun 2017 11:07:07 -0700 Subject: [PATCH 052/336] Remove pacemaker from distro specific explanations --- docs/linux/sql-server-linux-availability-group-cluster-rhel.md | 3 +-- docs/linux/sql-server-linux-availability-group-cluster-sles.md | 2 +- .../sql-server-linux-availability-group-cluster-ubuntu.md | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md index b09ca63e9e0..d792115ec03 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md @@ -148,8 +148,7 @@ sudo pcs constraint order promote ag_cluster-master then start virtualip Manually fail over the availability group with `pcs`. Do not initiate failover with Transact-SQL. For instructions, see [Failover](sql-server-linux-availability-group-failover-ha.md#failover). - -[!INCLUDE [Pacemaker Concepts](..\includes\ss-linux-cluster-pacemaker-concepts.md)] + ## Next steps diff --git a/docs/linux/sql-server-linux-availability-group-cluster-sles.md b/docs/linux/sql-server-linux-availability-group-cluster-sles.md index f8d28af253b..9caca5f3dea 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-sles.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-sles.md @@ -262,7 +262,7 @@ For additional details see: - [HA Concepts](https://www.suse.com/documentation/sle-ha-12/singlehtml/book_sleha/book_sleha.html#cha.ha.concepts) - [Pacemaker Quick Reference](https://github.com/ClusterLabs/pacemaker/blob/master/doc/pcs-crmsh-quick-ref.md) -[!INCLUDE [Pacemaker Concepts](..\includes\ss-linux-cluster-pacemaker-concepts.md)] + ## Next steps diff --git a/docs/linux/sql-server-linux-availability-group-cluster-ubuntu.md b/docs/linux/sql-server-linux-availability-group-cluster-ubuntu.md index 66537ee99b2..6f00dbb59be 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-ubuntu.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-ubuntu.md @@ -227,5 +227,5 @@ sudo pcs constraint order promote ag_cluster-master then start virtualip >[!IMPORTANT] >After you configure the cluster and add the availability group as a cluster resource, you cannot use Transact-SQL to fail over the availability group resources. SQL Server cluster resources on Linux are not coupled as tightly with the operating system as they are on a Windows Server Failover Cluster (WSFC). SQL Server service is not aware of the presence of the cluster. All orchestration is done through the cluster management tools. In RHEL or Ubuntu use `pcs`. -[!INCLUDE [Pacemaker Concepts](..\includes\ss-linux-cluster-pacemaker-concepts.md)] + From 1c42cad3f6c1f06efab5e44526f347b1cd91f7a0 Mon Sep 17 00:00:00 2001 From: Tommy Mullaney Date: Thu, 1 Jun 2017 11:39:16 -0700 Subject: [PATCH 053/336] Fix syntax and link to OpenSSL docs - forceencryption actually uses 1/0 instead of yes/no - added a link to the OpenSSL man page for the cipher list formats, in case customers want to specify their own --- docs/linux/sql-server-linux-encrypted-connections.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/linux/sql-server-linux-encrypted-connections.md b/docs/linux/sql-server-linux-encrypted-connections.md index ffe025f9565..6f91ca68174 100644 --- a/docs/linux/sql-server-linux-encrypted-connections.md +++ b/docs/linux/sql-server-linux-encrypted-connections.md @@ -39,11 +39,11 @@ Use `mssql-conf` to configure TLS for an instance of [!INCLUDE[ssNoVersion](../. |Option |Description | |--- |--- | -|`network.forceencryption` |If yes, then [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] forces all connections to be encrypted. By default, this option is no. |  +|`network.forceencryption` |If 1, then [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] forces all connections to be encrypted. By default, this option is 0. |  |`network.tlscert` |The absolute path to the certificate file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:   `/etc/ssl/certs/mssql.pem`  The certificate file must be accessible by the mssql account. Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 600 `. |  |`network.tlskey` |The absolute path to the private key file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:  `/etc/ssl/private/mssql.key`  The certificate file must be accessible by the mssql account. Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 600 `. | -|`tlsprotocols` |A comma-separated list of which TLS protocols are allowed by SQL Server. [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] always attempts to negotiate the strongest allowed protocol. If a client does not support any allowed protocol, [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] rejects the connection attempt.  For compatibility, all supported protocols are allowed by default (1.2, 1.1, 1.0).  If your clients support TLS 1.2, Microsoft recommends allowing only TLS 1.2. |  -|`network.tlsciphers` |Specifies which ciphers are allowed by [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] for TLS. This string must be formatted per OpenSSL's cipher list format. In general, you should not need to change this option. 
By default, the following ciphers are allowed: 
`ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA` |   +|`network.tlsprotocols` |A comma-separated list of which TLS protocols are allowed by SQL Server. [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] always attempts to negotiate the strongest allowed protocol. If a client does not support any allowed protocol, [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] rejects the connection attempt.  For compatibility, all supported protocols are allowed by default (1.2, 1.1, 1.0).  If your clients support TLS 1.2, Microsoft recommends allowing only TLS 1.2. |  +|`network.tlsciphers` |Specifies which ciphers are allowed by [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] for TLS. This string must be formatted per [OpenSSL's cipher list format](https://www.openssl.org/docs/man1.0.2/apps/ciphers.html). In general, you should not need to change this option. 
By default, the following ciphers are allowed: 
`ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA` |   | | |   ## Example @@ -76,7 +76,7 @@ Use `mssql-conf` to configure [!INCLUDE[ssNoVersion](../../docs/includes/ssnover sudo /opt/mssql/bin/mssql-conf set network.tlscert /etc/ssl/certs/mssql.pem sudo /opt/mssql/bin/mssql-conf set network.tlskey /etc/ssl/private/mssql.key sudo /opt/mssql/bin/mssql-conf set network.tlsprotocols 1.2 -sudo /opt/mssql/bin/mssql-conf set network.forceencryption yes +sudo /opt/mssql/bin/mssql-conf set network.forceencryption 1 ```   ### Step 3: Restart [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] From 0b004fed61b83858452978b5d7dfb7367d2028a1 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 1 Jun 2017 15:28:51 -0700 Subject: [PATCH 054/336] Update to fix link --- .../ss-linux-cluster-pacemaker-configure-rhel.md | 8 ++++---- .../sql-server-linux-availability-group-cluster-rhel.md | 9 +++++++-- .../sql-server-linux-availability-group-cluster-sles.md | 2 +- ...sql-server-linux-availability-group-cluster-ubuntu.md | 3 ++- .../sql-server-linux-availability-group-configure-ha.md | 2 +- 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md b/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md index d6f29782abd..bfdb7864652 100644 --- a/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md +++ b/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md @@ -1,5 +1,5 @@ -3. On both cluster nodes, open the Pacemaker firewall ports. To open these ports with `firewalld`, run the following command: +3. On all cluster nodes, open the Pacemaker firewall ports. To open these ports with `firewalld`, run the following command: ```bash sudo firewall-cmd --permanent --add-service=high-availability @@ -11,7 +11,7 @@ > * TCP: Ports 2224, 3121, 21064 > * UDP: Port 5405 -1. Install Pacemaker packages on each node. +1. Install Pacemaker packages on all nodes. ```bash sudo yum install pacemaker pcs fence-agents-all resource-agents @@ -19,7 +19,7 @@ ​ -2. Set the password for for the default user that is created when installing Pacemaker and Corosync packages. Use the same password on both nodes. +2. Set the password for for the default user that is created when installing Pacemaker and Corosync packages. Use the same password on all nodes. ```bash sudo passwd hacluster @@ -27,7 +27,7 @@ ​ -3. Enable and start `pcsd` service and Pacemaker. This will allow nodes to rejoin the cluster after the reboot. Run the following command on both nodes. +3. Enable and start `pcsd` service and Pacemaker. This will allow nodes to rejoin the cluster after the reboot. Run the following command on all nodes. ```bash sudo systemctl enable pcsd diff --git a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md index d792115ec03..5aa97f3aa78 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md @@ -26,7 +26,7 @@ ms.assetid: b7102919-878b-4c08-a8c3-8500b7b42397 # Configure RHEL Cluster for SQL Server Availability Group -This document explains how to create a two-node availability group cluster for SQL Server on Red Hat Enterprise Linux. The clustering layer is based on Red Hat Enterprise Linux (RHEL) [HA add-on](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/pdf/High_Availability_Add-On_Overview/Red_Hat_Enterprise_Linux-6-High_Availability_Add-On_Overview-en-US.pdf) built on top of [Pacemaker](http://clusterlabs.org/). +This document explains how to create a three-node availability group cluster for SQL Server on Red Hat Enterprise Linux. For high availability, an availability group on Linux requires three nodes - see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). The clustering layer is based on Red Hat Enterprise Linux (RHEL) [HA add-on](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/pdf/High_Availability_Add-On_Overview/Red_Hat_Enterprise_Linux-6-High_Availability_Add-On_Overview-en-US.pdf) built on top of [Pacemaker](http://clusterlabs.org/). > [!NOTE] > Access to Red Hat full documentation requires a valid subscription. @@ -80,11 +80,13 @@ sudo pcs property set stonith-enabled=false ## Set cluster property start-failure-is-fatal to false -`Start-failure-is-fatal` indicates whether a failure to start a resource on a node prevents further start attempts on that node. When set to `false`, the cluster will decide whether to try starting on the same node again based on the resource's current failure count and migration threshold. So, after failover occurs, Pacemaker will retry starting the availability group resource on the former primary once the SQL instance is available. Pacemaker will take care of demoting the replica to secondary and it will automatically rejoin the availability group. +`start-failure-is-fatal` indicates whether a failure to start a resource on a node prevents further start attempts on that node. When set to `false`, the cluster will decide whether to try starting on the same node again based on the resource's current failure count and migration threshold. So, after failover occurs, Pacemaker will retry starting the availability group resource on the former primary once the SQL instance is available. Pacemaker will take care of demoting the replica to secondary and it will automatically rejoin the availability group. To update the property value to false run: + ```bash pcs property set start-failure-is-fatal=false ``` + If the property has the default value of `true`, if first attempt to start the resource fails, user intervention is required after an automatic failover to cleanup the resource failure count and reset the configuration using: `pcs resource cleanup ` command. For more details on Pacemaker cluster properties see [Pacemaker Clusters Properties](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/High_Availability_Add-On_Reference/ch-clusteropts-HAAR.html). @@ -101,6 +103,9 @@ To create the availability group resource, use `pcs resource create` command and sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 --master meta notify=true ``` +>[!NOTE] +>When you create the resource, the SQL Server resource agent sets `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`. The default setting is calculated, depending on the availability group configuration. This affects both automatic failover and data protection. If you are using three nodes one primary and two synchronous replicas the value is set to `1`. For details and additional configuration options, see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). + ## Create virtual IP resource To create the virtual IP address resource, run the following command on one node. Use an available static IP address from the network. Replace the IP address between `**<...>**' diff --git a/docs/linux/sql-server-linux-availability-group-cluster-sles.md b/docs/linux/sql-server-linux-availability-group-cluster-sles.md index 9caca5f3dea..7232e16ef0a 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-sles.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-sles.md @@ -26,7 +26,7 @@ ms.assetid: 85180155-6726-4f42-ba57-200bf1e15f4d # Configure SLES Cluster for SQL Server Availability Group -This guide provides instructions to create a two-node cluster for SQL Server on SUSE Linux Enterprise Server (SLES) 12 SP2. The clustering layer is based on SUSE [High Availability Extension (HAE)](https://www.suse.com/products/highavailability) built on top of [Pacemaker](http://clusterlabs.org/). +This guide provides instructions to create a three-node cluster for SQL Server on SUSE Linux Enterprise Server (SLES) 12 SP2. For high availability, an availability group on Linux requires three nodes - see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). The clustering layer is based on SUSE [High Availability Extension (HAE)](https://www.suse.com/products/highavailability) built on top of [Pacemaker](http://clusterlabs.org/). For more details on cluster configuration, resource agent options, management, best practices, and recommendations, see [SUSE Linux Enterprise High Availability Extension 12 SP2](https://www.suse.com/documentation/sle-ha-12/index.html). diff --git a/docs/linux/sql-server-linux-availability-group-cluster-ubuntu.md b/docs/linux/sql-server-linux-availability-group-cluster-ubuntu.md index 6f00dbb59be..d98175de15f 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-ubuntu.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-ubuntu.md @@ -27,7 +27,8 @@ ms.assetid: dd0d6fb9-df0a-41b9-9f22-9b558b2b2233 # Configure Ubuntu Cluster and Availability Group Resource -This document explains how to create a two-node cluster on Ubuntu and add a previously created availability group as a resource in the cluster. +This document explains how to create a three-node cluster on Ubuntu and add a previously created availability group as a resource in the cluster. +For high availability, an availability group on Linux requires three nodes - see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). > [!NOTE] > At this point, SQL Server's integration with Pacemaker on Linux is not as coupled as with WSFC on Windows. From within SQL, there is no knowledge about the presence of the cluster, all orchestration is outside in and the service is controlled as a standalone instance by Pacemaker. Also, virtual network name is specific to WSFC, there is no equivalent of the same in Pacemaker. Always On dynamic management views that query cluster information will return empty rows. You can still create a listener to use it for transparent reconnection after failover, but you will have to manually register the listener name in the DNS server with the IP used to create the virtual IP resource (as explained below). diff --git a/docs/linux/sql-server-linux-availability-group-configure-ha.md b/docs/linux/sql-server-linux-availability-group-configure-ha.md index a695179683d..6885d391a89 100644 --- a/docs/linux/sql-server-linux-availability-group-configure-ha.md +++ b/docs/linux/sql-server-linux-availability-group-configure-ha.md @@ -30,7 +30,7 @@ This article describes how to create a SQL Server Always on availability group w You can also create a *read-scale* availability group without a cluster manager. This architecture only provides read-only scalability. It does not provide HA. To create a read-scale availability group, see [Configure read-scale availability group for SQL Server on Linux](sql-server-linux-availability-group-configure-rs.md). -For a configuration that will guarantee high availability and data protection, the availability group must include at least three synchronous commit replicas. For details see [Balancing high availability and data protection](sql-server-linux-availability-group-cluster-rhel.md#balancing-high-availability-and-data-protection). +For a configuration that will guarantee high availability and data protection, the availability group must include at least three synchronous commit replicas. For details see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). All servers must be either physical or virtual, and virtual servers must be on the same virtualization platform. This is because the fencing agents are platform specific. See [Policies for Guest Clusters](https://access.redhat.com/articles/29440#guest_policies). From accd0e9c5f93b0415fa9e0301826fc3a97288766 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 1 Jun 2017 15:37:39 -0700 Subject: [PATCH 055/336] Updating PCS cluster setup. --- docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md b/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md index bfdb7864652..81a04792daa 100644 --- a/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md +++ b/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md @@ -44,7 +44,7 @@ ``` >[!NOTE] - >If you previously configured a cluster on the same nodes, you need to use '--force' option when running 'pcs cluster setup'. Note this is equivalent to running 'pcs cluster destroy' and pacemaker service needs to be reenabled using 'sudo systemctl enable pacemaker'. + >If you previously configured a cluster on the same nodes, you need to use `--force` option when running `pcs cluster setup`. Note this is equivalent to running `pcs cluster destroy` and pacemaker service needs to be re-enabled using `sudo systemctl enable pacemaker`. 5. Install SQL Server resource agent for SQL Server. Run the following commands on both nodes. From 53c045401a03b41b6476041cbe7d836c8449a4eb Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 1 Jun 2017 16:20:19 -0700 Subject: [PATCH 056/336] Reset as both nodes. --- docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md b/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md index 81a04792daa..130b3067617 100644 --- a/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md +++ b/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md @@ -46,7 +46,7 @@ >[!NOTE] >If you previously configured a cluster on the same nodes, you need to use `--force` option when running `pcs cluster setup`. Note this is equivalent to running `pcs cluster destroy` and pacemaker service needs to be re-enabled using `sudo systemctl enable pacemaker`. -5. Install SQL Server resource agent for SQL Server. Run the following commands on both nodes. +5. Install SQL Server resource agent for SQL Server. Run the following commands on all nodes. ```bash sudo yum install mssql-server-ha From 6e97e905bf7fd149b631b3fd3340bbf0bd198380 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 1 Jun 2017 16:44:44 -0700 Subject: [PATCH 057/336] Update start-failure-is-fatal=false --- ...sql-server-linux-availability-group-cluster-rhel.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md index 5aa97f3aa78..83f12282d2e 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md @@ -80,14 +80,16 @@ sudo pcs property set stonith-enabled=false ## Set cluster property start-failure-is-fatal to false -`start-failure-is-fatal` indicates whether a failure to start a resource on a node prevents further start attempts on that node. When set to `false`, the cluster will decide whether to try starting on the same node again based on the resource's current failure count and migration threshold. So, after failover occurs, Pacemaker will retry starting the availability group resource on the former primary once the SQL instance is available. Pacemaker will take care of demoting the replica to secondary and it will automatically rejoin the availability group. -To update the property value to false run: +`start-failure-is-fatal` indicates whether a failure to start a resource on a node prevents further start attempts on that node. When set to `false`, the cluster will decide whether to try starting on the same node again based on the resource's current failure count and migration threshold. After failover occurs, Pacemaker will retry starting the availability group resource on the former primary once the SQL instance is available. Pacemaker will demote the replica to secondary and it will automatically rejoin the availability group. + +To update the property value to `false` run: ```bash pcs property set start-failure-is-fatal=false ``` -If the property has the default value of `true`, if first attempt to start the resource fails, user intervention is required after an automatic failover to cleanup the resource failure count and reset the configuration using: `pcs resource cleanup ` command. +>[!WARNING] +>After an automatic failover, when `start-failure-is-fatal = true` the resource manager will attempt to start the resource. If it fails on the first attempt you have to manually run `pcs resource cleanup ` to cleanup the resource failure count and reset the configuration. For more details on Pacemaker cluster properties see [Pacemaker Clusters Properties](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/High_Availability_Add-On_Reference/ch-clusteropts-HAAR.html). @@ -104,7 +106,7 @@ sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 --master meta notif ``` >[!NOTE] ->When you create the resource, the SQL Server resource agent sets `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`. The default setting is calculated, depending on the availability group configuration. This affects both automatic failover and data protection. If you are using three nodes one primary and two synchronous replicas the value is set to `1`. For details and additional configuration options, see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). +>When you create the resource, the SQL Server resource agent sets `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`. The default setting is calculated, depending on the availability group configuration. This affects both automatic failover and data protection. If you are using three nodes - one primary and two synchronous replicas - the value is set to `1`. For details and additional configuration options, see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). ## Create virtual IP resource From aedb6e7cc840a58f90a8f4aef156feaf583f787a Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 1 Jun 2017 17:12:11 -0700 Subject: [PATCH 058/336] Update SLES --- ...r-linux-availability-group-cluster-sles.md | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-cluster-sles.md b/docs/linux/sql-server-linux-availability-group-cluster-sles.md index 7232e16ef0a..aa6d7aaeb02 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-sles.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-sles.md @@ -55,7 +55,7 @@ The steps to create an availability group on Linux servers for high availability ## Prerequisites -To complete the end-to-end scenario below you need two machines to deploy the two nodes cluster. The steps below outline how to configure these servers. +To complete the end-to-end scenario below you need three servers to deploy a three-node cluster. The steps below outline how to configure these servers. ## Setup and configure the operating system on each cluster node @@ -63,18 +63,19 @@ The first step is to configure the operating system on the cluster nodes. For th ### Install and configure SQL Server service on each cluster node -1. Install and setup SQL Server service on both nodes. For detailed instructions see [Install SQL Server on Linux](sql-server-linux-setup.md). +1. Install and setup SQL Server service on each node. For detailed instructions see [Install SQL Server on Linux](sql-server-linux-setup.md). -1. Designate one node as primary and the other as secondary, for purposes of configuration. Use these terms throughout this guide. +1. Designate one node as primary and the others as secondary, for purposes of configuration. Use these terms throughout this guide. 1. Make sure nodes that are going to be part of the cluster can communicate to each other. - The following example shows `/etc/hosts` with additions for two nodes named SLES1 and SLES2. + The following example shows `/etc/hosts` with additions for trhee nodes named node1, node2 and node3. ``` 127.0.0.1 localhost - 10.128.18.128 SLES1 - 10.128.16.77 SLES2 + 10.128.18.12 node1 + 10.128.16.77 node2 + 10.128.15.33 node3 ``` All cluster nodes must be able to access each other via SSH. Tools like `hb_report` or `crm_report` (for troubleshooting) and Hawk's History Explorer require passwordless SSH access between the nodes, otherwise they can only collect data from the current node. In case you use a non-standard SSH port, use the -X option (see `man` page). For example, if your SSH port is 3479, invoke a `crm_report` with: @@ -175,9 +176,9 @@ After logging in to the specified node, the script will copy the Corosync config 2 nodes configured 1 resource configured - Online: [ SLES1 SLES2 ] + Online: [ node1 node2 ] Full list of resources: - admin_addr (ocf::heartbeat:IPaddr2): Started SLES1 + admin_addr (ocf::heartbeat:IPaddr2): Started node1 ``` >[!NOTE] @@ -185,6 +186,9 @@ After logging in to the specified node, the script will copy the Corosync config After adding all nodes, check if you need to adjust the no-quorum-policy in the global cluster options. This is especially important for two-node clusters. For more information, refer to Section 4.1.2, Option no-quorum-policy. +>[!NOTE] +>High availability solutions require three nodes. See [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). + ## Configure the cluster resources for SQL Server Refer to [SLES Administration Guid](https://www.suse.com/documentation/sle-ha-12/singlehtml/book_sleha/book_sleha.html#cha.ha.manual_config) @@ -236,6 +240,7 @@ commit ### Add ordering constraint The colocation constraint has an implicit ordering constraint. It moves the virtual IP resource before it moves the availability group resource. By default the sequence of events is: + 1. User issues resource migrate to the availability group master from node1 to node2. 2. The virtual IP resource stops on node 1. 3. The virtual IP resource starts on node 2. At this point, the IP address temporarily points to node 2 while node 2 is still a pre-failover secondary. From cc606a29f3d91974ef250b814ae4491f0f917c21 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 2 Jun 2017 10:31:53 -0700 Subject: [PATCH 059/336] Use include for default behavior. --- ...quired-synchronized-secondaries-default.md | 2 + ...r-linux-availability-group-cluster-rhel.md | 3 +- ...r-linux-availability-group-cluster-sles.md | 2 + ...linux-availability-group-cluster-ubuntu.md | 50 +++++++++++-------- 4 files changed, 34 insertions(+), 23 deletions(-) create mode 100644 docs/includes/ss-linux-cluster-required-synchronized-secondaries-default.md diff --git a/docs/includes/ss-linux-cluster-required-synchronized-secondaries-default.md b/docs/includes/ss-linux-cluster-required-synchronized-secondaries-default.md new file mode 100644 index 00000000000..bd6288d72eb --- /dev/null +++ b/docs/includes/ss-linux-cluster-required-synchronized-secondaries-default.md @@ -0,0 +1,2 @@ +>[!NOTE] +>When you create the resource, the SQL Server resource agent sets `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`. The default setting is calculated, depending on the availability group configuration. This affects both automatic failover and data protection. If you are using three nodes - one primary and two synchronous replicas - the value is set to `1`. For details and additional configuration options, see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). \ No newline at end of file diff --git a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md index 83f12282d2e..691ff766da6 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md @@ -105,8 +105,7 @@ To create the availability group resource, use `pcs resource create` command and sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 --master meta notify=true ``` ->[!NOTE] ->When you create the resource, the SQL Server resource agent sets `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`. The default setting is calculated, depending on the availability group configuration. This affects both automatic failover and data protection. If you are using three nodes - one primary and two synchronous replicas - the value is set to `1`. For details and additional configuration options, see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). +[!INCLUDE [required-synchronized-secondaries-default](../includes/ss-linux-cluster-required-synchronized-secondaries-default.md)] ## Create virtual IP resource diff --git a/docs/linux/sql-server-linux-availability-group-cluster-sles.md b/docs/linux/sql-server-linux-availability-group-cluster-sles.md index aa6d7aaeb02..38f3f67fa32 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-sles.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-sles.md @@ -214,6 +214,8 @@ The following command creates and configures the availability group resource for commit ``` +[!INCLUDE [required-synchronized-secondaries-default](../includes/ss-linux-cluster-required-synchronized-secondaries-default.md)] + ### Create virtual IP resource If you did not create the virtual IP resource when you ran `ha-cluster-init` you can create this resource now. The following command creates a virtual IP resource. Replace `<**0.0.0.0**>` with an available address from your network and `<**24**>` with the number of bits in the CIDR subnet mask. Run on one node. diff --git a/docs/linux/sql-server-linux-availability-group-cluster-ubuntu.md b/docs/linux/sql-server-linux-availability-group-cluster-ubuntu.md index d98175de15f..fd8d1d9fbb3 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-ubuntu.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-ubuntu.md @@ -82,7 +82,7 @@ The steps to create an availability group on Linux servers for high availability sudo apt-get install pacemaker pcs fence-agents resource-agents ``` -2. Set the password for the default user that is created when installing Pacemaker and Corosync packages. Use the same password on both nodes. +2. Set the password for the default user that is created when installing Pacemaker and Corosync packages. Use the same password on all nodes. ```bash sudo passwd hacluster @@ -90,7 +90,7 @@ The steps to create an availability group on Linux servers for high availability ## Enable and start pcsd service and Pacemaker -The following command enables and starts pcsd service and pacemaker. This allows the nodes to rejoin the cluster after reboot. +The following command enables and starts pcsd service and pacemaker. Run on all nodes. This allows the nodes to rejoin the cluster after reboot. ```bash sudo systemctl enable pcsd @@ -102,17 +102,17 @@ sudo systemctl enable pacemaker ## Create the Cluster -1. Remove any existing cluster configuration. +1. Remove any existing cluster configuration from all nodes. Running 'sudo apt-get install pcs' installs pacemaker, corosync, and pcs at the same time and starts running all 3 of the services. Starting corosync generates a template '/etc/cluster/corosync.conf' file. To have next steps succeed this file should not exist – so the workaround is to stop pacemaker / corosync and delete '/etc/cluster/corosync.conf', and then next steps will complete successfully. 'pcs cluster destroy' does the same thing, and you can use it as a one time initial cluster setup step. - The following command removes any existing cluster configuration files and stops all cluster services. This permanently destroys the cluster. Run it as a first step in a pre-production environment. Run the following command on all nodes. Note that 'pcs cluster destroy' disabled the pacemaker service and needs to be reenabled. + The following command removes any existing cluster configuration files and stops all cluster services. This permanently destroys the cluster. Run it as a first step in a pre-production environment. Note that 'pcs cluster destroy' disabled the pacemaker service and needs to be reenabled. Run the following command on all nodes. >[!WARNING] >The command will destroy any existing cluster resources. ```bash - sudo pcs cluster destroy # On all nodes + sudo pcs cluster destroy sudo systemctl enable pacemaker ``` @@ -121,16 +121,16 @@ sudo systemctl enable pacemaker >[!WARNING] >Due to a known issue that the clustering vendor is investigating, starting the cluster ('pcs cluster start') will fail with below error. This is because the log file configured in /etc/corosync/corosync.conf is wrong. To workaround this issue, change the log file to: /var/log/corosync/corosync.log. Alternatively you could create the /var/log/cluster/corosync.log file. - ```bash - Job for corosync.service failed because the control process exited with error code. - See "systemctl status corosync.service" and "journalctl -xe" for details. - ``` + ```Error + Job for corosync.service failed because the control process exited with error code. + See "systemctl status corosync.service" and "journalctl -xe" for details. + ``` -The following command creates a two node cluster. Before you run the script, replace the values between `**< ... >**`. Run the following command on the primary SQL Server. +The following command creates a three-node cluster. Before you run the script, replace the values between `**< ... >**`. Run the following command on the primary node. ```bash - sudo pcs cluster auth **** **** -u hacluster -p **** - sudo pcs cluster setup --name **** **** **** + sudo pcs cluster auth **** **** **** -u hacluster -p **** + sudo pcs cluster setup --name **** **** **** **** sudo pcs cluster start --all ``` @@ -139,12 +139,13 @@ The following command creates a two node cluster. Before you run the script, rep ## Configure fencing (STONITH) + Pacemaker cluster vendors require STONITH to be enabled and a fencing device configured for a supported cluster setup. When the cluster resource manager cannot determine the state of a node or of a resource on a node, fencing is used to bring the cluster to a known state again. Resource level fencing ensures mainly that there is no data corruption in case of an outage by configuring a resource. You can use resource level fencing, for instance, with DRBD (Distributed Replicated Block Device) to mark the disk on a node as outdated when the communication link goes down. Node level fencing ensures that a node does not run any resources. This is done by resetting the node and the Pacemaker implementation of it is called STONITH (which stands for "shoot the other node in the head"). Pacemaker supports a great variety of fencing devices, e.g. an uninterruptible power supply or management interface cards for servers. For more details, see [Pacemaker Clusters from Scratch](http://clusterlabs.org/doc/en-US/Pacemaker/1.1-plugin/html/Clusters_from_Scratch/ch05.html) and [Fencing and Stonith](http://clusterlabs.org/doc/crm_fencing.html) -Because the node level fencing configuration depends heavily on your environment, we will disable it for this tutorial (it can be configured at a later time): +Because the node level fencing configuration depends heavily on your environment, we will disable it for this tutorial (it can be configured at a later time). Run the following script on the primary node: ```bash sudo pcs property set stonith-enabled=false @@ -155,13 +156,17 @@ sudo pcs property set stonith-enabled=false ## Set cluster property start-failure-is-fatal to false -`Start-failure-is-fatal` indicates whether a failure to start a resource on a node prevents further start attempts on that node. When set to `false`, the cluster will decide whether to try starting on the same node again based on the resource's current failure count and migration threshold. So, after failover occurs, Pacemaker will retry starting the availability group resource on the former primary once the SQL instance is available. Pacemaker will take care of demoting the replica to secondary and it will automatically rejoin the availability group. -To update the property value to `false` run: +`start-failure-is-fatal` indicates whether a failure to start a resource on a node prevents further start attempts on that node. When set to `false`, the cluster will decide whether to try starting on the same node again based on the resource's current failure count and migration threshold. So, after failover occurs, Pacemaker will retry starting the availability group resource on the former primary once the SQL instance is available. Pacemaker will demote the replica to secondary and it will automatically rejoin the availability group. + +To update the property value to `false` run the following script: ```bash pcs property set start-failure-is-fatal=false ``` -If the property has the default value of `true`, if first attempt to start the resource fails, user intervention is required after an automatic failover to cleanup the resource failure count and reset the configuration using: `pcs resource cleanup ` command. + + +>[!WARNING] +>After an automatic failover, when `start-failure-is-fatal = true` the resource manager will attempt to start the resource. If it fails on the first attempt you have to manually run `pcs resource cleanup ` to cleanup the resource failure count and reset the configuration. ## Install SQL Server resource agent for integration with Pacemaker @@ -181,8 +186,11 @@ To create the availability group resource, use `pcs resource create` command and ```bash sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 --master meta notify=true + ``` +[!INCLUDE [required-synchronized-secondaries-default](../includes/ss-linux-cluster-required-synchronized-secondaries-default.md)] + ## Create virtual IP resource To create the virtual IP address resource, run the following command on one node. Use an available static IP address from the network. Before you run the script, replace the values between `**< ... >**` with a valid IP address. @@ -208,14 +216,14 @@ sudo pcs constraint colocation add virtualip ag_cluster-master INFINITY with-rsc The colocation constraint has an implicit ordering constraint. It moves the virtual IP resource before it moves the availability group resource. By default the sequence of events is: 1. User issues `pcs resource move` to the availability group primary from node1 to node2. -1. The virtual IP resource stops on nodeName1. -1. The virtual IP resource starts on nodeName2. +1. The virtual IP resource stops on node1. +1. The virtual IP resource starts on node2. >[!NOTE] - >At this point, the IP address temporarily points to nodeName2 while nodeName2 is still a pre-failover secondary. + >At this point, the IP address temporarily points to node2 while node2 is still a pre-failover secondary. -1. The availability group primary on nodeName1 is demoted to secondary. -1. The availability group secondary on nodeName2 is promoted to primary. +1. The availability group primary on node1 is demoted to secondary. +1. The availability group secondary on node2 is promoted to primary. To prevent the IP address from temporarily pointing to the node with the pre-failover secondary, add an ordering constraint. From 8eca2b6a48f0574b785d0ef085d86dec6adb86ea Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 2 Jun 2017 10:39:31 -0700 Subject: [PATCH 060/336] Update link. --- ...s-linux-cluster-required-synchronized-secondaries-default.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/includes/ss-linux-cluster-required-synchronized-secondaries-default.md b/docs/includes/ss-linux-cluster-required-synchronized-secondaries-default.md index bd6288d72eb..3f9d283ff67 100644 --- a/docs/includes/ss-linux-cluster-required-synchronized-secondaries-default.md +++ b/docs/includes/ss-linux-cluster-required-synchronized-secondaries-default.md @@ -1,2 +1,2 @@ >[!NOTE] ->When you create the resource, the SQL Server resource agent sets `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`. The default setting is calculated, depending on the availability group configuration. This affects both automatic failover and data protection. If you are using three nodes - one primary and two synchronous replicas - the value is set to `1`. For details and additional configuration options, see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). \ No newline at end of file +>When you create the resource, the SQL Server resource agent sets `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`. The default setting is calculated, depending on the availability group configuration. This affects both automatic failover and data protection. If you are using three nodes - one primary and two synchronous replicas - the value is set to `1`. For details and additional configuration options, see [High availability and data protection for availability group configurations](..\linux\sql-server-linux-availability-group-ha.md). \ No newline at end of file From fa7bf4932c66f9453a6f5852ce3c19c9b04748cd Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 2 Jun 2017 11:01:23 -0700 Subject: [PATCH 061/336] Add next steps to Operate --- .../sql-server-linux-availability-group-cluster-sles.md | 6 +----- .../sql-server-linux-availability-group-cluster-ubuntu.md | 4 ++++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-cluster-sles.md b/docs/linux/sql-server-linux-availability-group-cluster-sles.md index 38f3f67fa32..836a4230cbf 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-sles.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-sles.md @@ -273,8 +273,4 @@ For additional details see: ## Next steps -[Configure availability group for SQL Server on Linux](sql-server-linux-availability-group-configure-ha.md) - -[Configure read-scale availability group for SQL Server on Linux](sql-server-linux-availability-group-configure-rs.md) - - +[Operate HA availability group](sql-server-linux-availability-group-failover-ha.md) \ No newline at end of file diff --git a/docs/linux/sql-server-linux-availability-group-cluster-ubuntu.md b/docs/linux/sql-server-linux-availability-group-cluster-ubuntu.md index fd8d1d9fbb3..bf8d0c898af 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-ubuntu.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-ubuntu.md @@ -238,3 +238,7 @@ sudo pcs constraint order promote ag_cluster-master then start virtualip +## Next steps + +[Operate HA availability group](sql-server-linux-availability-group-failover-ha.md) + From 33ec79d1e49ce8d71ae5e56e2a5a2b6e4dcf4c04 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 2 Jun 2017 12:34:31 -0700 Subject: [PATCH 062/336] Change linkto configure ha. --- ...rver-linux-availability-group-cluster-sles.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-cluster-sles.md b/docs/linux/sql-server-linux-availability-group-cluster-sles.md index 836a4230cbf..4068b22ed16 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-sles.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-sles.md @@ -93,7 +93,7 @@ The first step is to configure the operating system on the cluster nodes. For th ## Configure an Always On Availability Group -On Linux servers configure the availability group and then configure the cluster resources. To configure the availability group, see [Configure Always On Availability Group for SQL Server on Linux](sql-server-linux-availability-group-overview.md) +On Linux servers configure the availability group and then configure the cluster resources. To configure the availability group, see [Configure Always On Availability Group for SQL Server on Linux](sql-server-linux-availability-group-configure-ha.md) ## Install and configure Pacemaker on each cluster node @@ -152,7 +152,7 @@ If you have a cluster running with one or more nodes, add more cluster nodes wit If you have configured the existing cluster nodes with the `YaST` cluster module, make sure the following prerequisites are fulfilled before you run `ha-cluster-join`: - The root user on the existing nodes has SSH keys in place for passwordless login. -- Csync2 is configured on the existing nodes. For details, refer to Configuring Csync2 with YaST. +- `Csync2` is configured on the existing nodes. For details, refer to Configuring Csync2 with YaST. 1. Log in as root to the physical or virtual machine supposed to join the cluster. 2. Start the bootstrap script by executing: @@ -162,21 +162,25 @@ If you have configured the existing cluster nodes with the `YaST` cluster module ``` If NTP has not been configured to start at boot time, a message appears. + 3. If you decide to continue anyway, you will be prompted for the IP address of an existing node. Enter the IP address. + 4. If you have not already configured a passwordless SSH access between both machines, you will also be prompted for the root password of the existing node. -After logging in to the specified node, the script will copy the Corosync configuration, configure SSH and Csync2, and will bring the current machine online as new cluster node. Apart from that, it will start the service needed for Hawk. If you have configured shared storage with OCFS2, it will also automatically create the mountpoint directory for the OCFS2 file system. + + After logging in to the specified node, the script will copy the Corosync configuration, configure SSH and `Csync2`, and will bring the current machine online as new cluster node. Apart from that, it will start the service needed for Hawk. If you have configured shared storage with `OCFS2`, it will also automatically create the mountpoint directory for the `OCFS2` file system. + 5. Repeat the steps above for all machines you want to add to the cluster. 6. For details of the process, check `/var/log/ha-cluster-bootstrap.log`. 1. Check the cluster status with `crm status`. If you have successfully added a second node, the output will be similar to the following: - ```bash + ``` crm status - 2 nodes configured + 3 nodes configured 1 resource configured - Online: [ node1 node2 ] + Online: [ node1 node2 node3 ] Full list of resources: admin_addr (ocf::heartbeat:IPaddr2): Started node1 ``` From 67407e60acfa3569478ff8b4beaf5b7cc9ce9cc0 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 2 Jun 2017 12:37:14 -0700 Subject: [PATCH 063/336] Add link to configure HA --- docs/linux/sql-server-linux-availability-group-cluster-rhel.md | 2 +- .../linux/sql-server-linux-availability-group-cluster-ubuntu.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md index 691ff766da6..35b698ce229 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md @@ -44,7 +44,7 @@ The steps to create an availability group on Linux servers for high availability 1. [Configure SQL Server on the cluster nodes](sql-server-linux-setup.md). -2. [Create the availability group](sql-server-linux-availability-group-failover-ha.md). +2. [Create the availability group](sql-server-linux-availability-group-configure-ha.md). 3. Configure a cluster resource manager, like Pacemaker. These instructions are in this document. diff --git a/docs/linux/sql-server-linux-availability-group-cluster-ubuntu.md b/docs/linux/sql-server-linux-availability-group-cluster-ubuntu.md index bf8d0c898af..0e079f3c79a 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-ubuntu.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-ubuntu.md @@ -41,7 +41,7 @@ The steps to create an availability group on Linux servers for high availability 1. [Configure SQL Server on the cluster nodes](sql-server-linux-setup.md). -2. [Create the availability group](sql-server-linux-availability-group-failover-ha.md). +2. [Create the availability group](sql-server-linux-availability-group-configure-ha.md). 3. Configure a cluster resource manager, like Pacemaker. These instructions are in this document. From 19abb55988e5340ab4034c7cedddc6bcdf58ef84 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 2 Jun 2017 12:51:24 -0700 Subject: [PATCH 064/336] Update with anchors. --- ...ql-server-linux-availability-group-configure-ha.md | 11 +++++++++++ docs/linux/sql-server-linux-availability-group-ha.md | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/docs/linux/sql-server-linux-availability-group-configure-ha.md b/docs/linux/sql-server-linux-availability-group-configure-ha.md index 6885d391a89..f1ba68081b3 100644 --- a/docs/linux/sql-server-linux-availability-group-configure-ha.md +++ b/docs/linux/sql-server-linux-availability-group-configure-ha.md @@ -74,6 +74,16 @@ The steps to create an availability group on Linux servers for high availability ## Create the availability group +There are three availability group configurations. + +- [Three synchronous replicas](sql-server-linux-availability-group-failover-ha.md#threeSynch) + +- [Two synchronous replicas and a witness replica](sql-server-linux-availability-group-failover-ha.md#witness) + +- [Two synchronous replicas availability group](sql-server-linux-availability-group-failover-ha.md#twoSynch) + +This article configures the availability group with three synchronous replicas. For information about all three configurations, see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-failover-ha.md). + Create the availability group. In order to create the availability group for HA on Linux, use the [CREATE AVAILABILITY GROUP](https://docs.microsoft.com/en-us/sql/t-sql/statements/create-availability-group-transact-sql) Transact-SQL DDL with `CLUSTER_TYPE = EXTERNAL`. The `EXTERNAL` value for `CLUSTER_TYPE` option specifies that the an external cluster entity manages the availability group. Pacemaker is an example of an external cluster entity. When the availability group `CLUSTER_TYPE = EXTERNAL`, set primary and secondary replica `FAILOVER_MODE = EXTERNAL`. After you create the availability group, configure the cluster resource for the availability group using the cluster management tools - for example with Pacemaker use `pcs` (on RHEL, Ubuntu) or `crm` (on SLES). See the Linux distribution specific cluster configuration section for an end-to-end example. @@ -109,6 +119,7 @@ CREATE AVAILABILITY GROUP [ag1] ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE; ``` + >[!NOTE] >Running the CREATE AVAILABILITY GROUP command will complete with a warning: "Attempt to access non-existent or uninitialized availability group with ID . This is usually an internal condition, such as the availability group is being dropped or the local WSFC node has lost quorum. In such cases, and no user action is required.". This is a known issue and product team is working on a fix. Meanwhile, users should assume command completed successfully. diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index 70038e7751a..c7f4be3b43e 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -48,6 +48,8 @@ If supported by the configuration, the resource agent parameter `REQUIRED_ SYNCH The following sections explain the default behavior for the cluster resource. + + ## Three synchronous replicas This configuration consists of three synchronous replicas. By default, it provides high availability and data protection. It can also provide read scale-out. @@ -67,6 +69,8 @@ The following table describes the high availability and data protection behavior \* Default setting when availability group is added as a resource in a cluster. + + ## Two synchronous replicas and a witness replica This configuration has two synchronous replicas and a witness replica to enable high availability and data protection. The witness replica is introduced in SQL Server 2017 CTP 2.2. In this configuration, the servers have the roles of primary replica, secondary replica, or witness replica. The witness replica contains configuration data about the availability group, but not a copy of the availability group user databases. The witness replica requires a SQL Server instance with SQL Server Express edition or higher. @@ -89,6 +93,8 @@ The following table describes the high availability and data protection behavior For additional information, see [More about a witness replica](#WitnessReplica). + + ## Two synchronous replicas A two synchronous replicas availability group enables data protection. Like the other availability group configurations it can enable read scale-out. Two synchronous replicas does not provide high availability. From 88bb756b59244414d12662efe26adf7e7ed4cef8 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 2 Jun 2017 13:02:15 -0700 Subject: [PATCH 065/336] Update internal links --- .../sql-server-linux-availability-group-configure-ha.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-configure-ha.md b/docs/linux/sql-server-linux-availability-group-configure-ha.md index f1ba68081b3..17ff32d501d 100644 --- a/docs/linux/sql-server-linux-availability-group-configure-ha.md +++ b/docs/linux/sql-server-linux-availability-group-configure-ha.md @@ -76,13 +76,13 @@ The steps to create an availability group on Linux servers for high availability There are three availability group configurations. -- [Three synchronous replicas](sql-server-linux-availability-group-failover-ha.md#threeSynch) +- [Three synchronous replicas](sql-server-linux-availability-group-ha.md#threeSynch) -- [Two synchronous replicas and a witness replica](sql-server-linux-availability-group-failover-ha.md#witness) +- [Two synchronous replicas and a witness replica](sql-server-linux-availability-group-ha.md#witness) -- [Two synchronous replicas availability group](sql-server-linux-availability-group-failover-ha.md#twoSynch) +- [Two synchronous replicas availability group](sql-server-linux-availability-group-ha.md#twoSynch) -This article configures the availability group with three synchronous replicas. For information about all three configurations, see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-failover-ha.md). +This article configures the availability group with three synchronous replicas. For information about all three configurations, see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). Create the availability group. In order to create the availability group for HA on Linux, use the [CREATE AVAILABILITY GROUP](https://docs.microsoft.com/en-us/sql/t-sql/statements/create-availability-group-transact-sql) Transact-SQL DDL with `CLUSTER_TYPE = EXTERNAL`. From 2f1ad2173d7a2cb32b09d06dc82b56cd20e7be5d Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Fri, 2 Jun 2017 13:19:48 -0700 Subject: [PATCH 066/336] Linux encrypted conn, graphic Added link to graphic --- docs/linux/sql-server-linux-encrypted-connections.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-encrypted-connections.md b/docs/linux/sql-server-linux-encrypted-connections.md index ffe025f9565..524c59c8583 100644 --- a/docs/linux/sql-server-linux-encrypted-connections.md +++ b/docs/linux/sql-server-linux-encrypted-connections.md @@ -93,7 +93,7 @@ sqlcmd `sqlcmd -N -C -S mssql.contoso.com -U sa -P ''` [!INCLUDE[ssmanstudiofull-md](../../docs/includes/ssmanstudiofull-md.md)] -Dialog box graphic to be added. + ![SSMS connection dialog](media/ssms-encrypt-connection.png "SSMS connection dialog")   ADO.NET `"Encrypt=true; TrustServerCertificate=true;"` From 1421aaadd759e2cbd3a9af773a5df7dedcf9f2ce Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Fri, 2 Jun 2017 13:31:13 -0700 Subject: [PATCH 067/336] Fixing broken link. --- docs/linux/sql-server-linux-encrypted-connections.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-encrypted-connections.md b/docs/linux/sql-server-linux-encrypted-connections.md index 524c59c8583..aaff11b2c98 100644 --- a/docs/linux/sql-server-linux-encrypted-connections.md +++ b/docs/linux/sql-server-linux-encrypted-connections.md @@ -93,7 +93,7 @@ sqlcmd `sqlcmd -N -C -S mssql.contoso.com -U sa -P ''` [!INCLUDE[ssmanstudiofull-md](../../docs/includes/ssmanstudiofull-md.md)] - ![SSMS connection dialog](media/ssms-encrypt-connection.png "SSMS connection dialog") + ![SSMS connection dialog](media/sql-server-linux-encrypted-connections/ssms-encrypt-connection.png "SSMS connection dialog")   ADO.NET `"Encrypt=true; TrustServerCertificate=true;"` From 289346b8ca08fc3485688cf7e02e63753e20ed98 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 2 Jun 2017 16:31:37 -0700 Subject: [PATCH 068/336] UPdate with script --- ...r-linux-availability-group-configure-ha.md | 103 ++++++++++++------ .../sql-server-linux-availability-group-ha.md | 28 +---- 2 files changed, 72 insertions(+), 59 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-configure-ha.md b/docs/linux/sql-server-linux-availability-group-configure-ha.md index 17ff32d501d..320b0d9314c 100644 --- a/docs/linux/sql-server-linux-availability-group-configure-ha.md +++ b/docs/linux/sql-server-linux-availability-group-configure-ha.md @@ -82,48 +82,87 @@ There are three availability group configurations. - [Two synchronous replicas availability group](sql-server-linux-availability-group-ha.md#twoSynch) -This article configures the availability group with three synchronous replicas. For information about all three configurations, see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). +For high availability, use either three synchronous replicas, or two synchronous replicas and a witness replica. + +For information about all three configurations, see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). Create the availability group. In order to create the availability group for HA on Linux, use the [CREATE AVAILABILITY GROUP](https://docs.microsoft.com/en-us/sql/t-sql/statements/create-availability-group-transact-sql) Transact-SQL DDL with `CLUSTER_TYPE = EXTERNAL`. The `EXTERNAL` value for `CLUSTER_TYPE` option specifies that the an external cluster entity manages the availability group. Pacemaker is an example of an external cluster entity. When the availability group `CLUSTER_TYPE = EXTERNAL`, set primary and secondary replica `FAILOVER_MODE = EXTERNAL`. After you create the availability group, configure the cluster resource for the availability group using the cluster management tools - for example with Pacemaker use `pcs` (on RHEL, Ubuntu) or `crm` (on SLES). See the Linux distribution specific cluster configuration section for an end-to-end example. -The following Transact-SQL script creates an availability group for HA named `ag1`. The script configures the availability group replicas with `SEEDING_MODE = AUTOMATIC`. This setting causes SQL Server to automatically create the database on each secondary server. Update the following script for your environment. Replace the `****`, `****`, and `****` values with the names of the SQL Server instances that will host the replicas. Replace the `**<5022>**` with the port you set for the data mirroring endpoint. Run the following Transact-SQL on the SQL Server instance that will host the primary replica to create the availability group. +The following Transact-SQL scripts creates an availability group for HA named `ag1`. The script configures the availability group replicas with `SEEDING_MODE = AUTOMATIC`. This setting causes SQL Server to automatically create the database on each secondary server. Update the following script for your environment. Replace the `****`, `****`, and `****` values with the names of the SQL Server instances that will host the replicas. Replace the `**<5022>**` with the port you set for the data mirroring endpoint. Run the following Transact-SQL on the SQL Server instance that will host the primary replica to create the availability group. + +Run **only one** of the following scripts. + +- Create availability group with three synchronous replicas + + ```Transact-SQL + CREATE AVAILABILITY GROUP [ag1] + WITH (DB_FAILOVER = ON, CLUSTER_TYPE = EXTERNAL) + FOR REPLICA ON + N'****' + WITH ( + ENDPOINT_URL = N'tcp://**:**<5022>**', + AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, + FAILOVER_MODE = EXTERNAL, + SEEDING_MODE = AUTOMATIC + ), + N'****' + WITH ( + ENDPOINT_URL = N'tcp://****:**<5022>**', + AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, + FAILOVER_MODE = EXTERNAL, + SEEDING_MODE = AUTOMATIC + ), + N'****' + WITH( + ENDPOINT_URL = N'tcp://****:**<5022>**', + AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, + FAILOVER_MODE = EXTERNAL, + SEEDING_MODE = AUTOMATIC + ); + + ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE; + ``` -```Transact-SQL -CREATE AVAILABILITY GROUP [ag1] - WITH (DB_FAILOVER = ON, CLUSTER_TYPE = EXTERNAL) - FOR REPLICA ON - N'****' - WITH ( - ENDPOINT_URL = N'tcp://**:**<5022>**', - AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, - FAILOVER_MODE = EXTERNAL, - SEEDING_MODE = AUTOMATIC - ), - N'****' - WITH ( - ENDPOINT_URL = N'tcp://****:**<5022>**', - AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, - FAILOVER_MODE = EXTERNAL, - SEEDING_MODE = AUTOMATIC - ), - N'****' - WITH( - ENDPOINT_URL = N'tcp://****:**<5022>**', - AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, - FAILOVER_MODE = EXTERNAL, - SEEDING_MODE = AUTOMATIC - ); - -ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE; + >[!IMPORTANT] + >After you run the proceeding script to create an availability group with three synchronous replicas, do not run the following script. -``` + + +- Create availability group with two synchronous replicas and a witness replica + + Include two replicas with synchronous availability mode, and a witness replica. For example, the following script creates an availability group called `ag1`. `node1` and `node2` host replicas in synchronous mode, with automatic seeding and automatic failover. `node3` is a witness replica. The script defines only the SQL Server instance name `node3`, the endpoint, and the availability mode. + + >[!IMPORTANT] + >Only run the following script to create an availability group with two synchronous replicas and a witness replica. Do not run the following script if you ran the proceeding script. + + ```Transact-SQL + CREATE AVAILABILITY GROUP [ag1] +    WITH (CLUSTER_TYPE = EXTERNAL) +    FOR REPLICA ON +    N'node1' WITH ( +        ENDPOINT_URL = N'tcp://node1:5022', +        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, +        FAILOVER_MODE = EXTERNAL, +        SEEDING_MODE = AUTOMATIC +    ), +    N'node2' WITH (  +        ENDPOINT_URL = N'tcp://node2:5022',  +        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, +        FAILOVER_MODE = EXTERNAL, +        SEEDING_MODE = AUTOMATIC +    ), +    N'node3' WITH ( +        ENDPOINT_URL = N'tcp://node3:5022', +        AVAILABILITY_MODE = WITNESS_COMMIT +    ) + ``` >[!NOTE] ->Running the CREATE AVAILABILITY GROUP command will complete with a warning: "Attempt to access non-existent or uninitialized availability group with ID . This is usually an internal condition, such as the availability group is being dropped or the local WSFC node has lost quorum. In such cases, and no user action is required.". This is a known issue and product team is working on a fix. Meanwhile, users should assume command completed successfully. +>Running the `CREATE AVAILABILITY GROUP` command will complete with a warning: "Attempt to access non-existent or uninitialized availability group with ID . This is usually an internal condition, such as the availability group is being dropped or the local WSFC node has lost quorum. In such cases, and no user action is required." This is a known issue and Microsoft is working on a resolution. Meanwhile, users should assume command completed successfully. -You can also configure an availability group with CLUSTER_TYPE=EXTERNAL using SQL Server Management Studio or PowerShell. +You can also configure an availability group with `CLUSTER_TYPE=EXTERNAL` using SQL Server Management Studio or PowerShell. ### Join secondary replicas to the availability group diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index c7f4be3b43e..f8bd62c7357 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -138,33 +138,7 @@ On a witness replica you cannot do the following things: A witness replica availability mode `WITNESS_COMMIT`. In this mode, configuration information is synchronously committed to the witness replica. You cannot modify the availability mode of a witness replica. To change the availability mode of a witness replica, remove the replica and recreate it as a secondary replica with an appropriate availability mode. -To create an availability group with a witness replica: - -1. Install and configure SQL Server on three servers. - -2. Create the availability group. Include two replicas with synchronous availability mode, and a witness replica. For example, the following script creates an availability group called `ag1`. `node1` and `node2` host replicas in synchronous mode, with automatic seeding and automatic failover. `node3` is a witness replica. The script defines only the SQL Server instance name `node3`, the endpoint, and the availability mode. - - ```Transact-SQL - CREATE AVAILABILITY GROUP [ag1] -    WITH (CLUSTER_TYPE = EXTERNAL) -    FOR REPLICA ON -    N'node1' WITH ( -        ENDPOINT_URL = N'tcp://node1:5022', -        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, -        FAILOVER_MODE = EXTERNAL, -        SEEDING_MODE = AUTOMATIC -    ), -    N'node2' WITH (  -        ENDPOINT_URL = N'tcp://node2:5022',  -        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, -        FAILOVER_MODE = EXTERNAL, -        SEEDING_MODE = AUTOMATIC -    ), -    N'node3' WITH ( -        ENDPOINT_URL = N'tcp://node3:5022', -        AVAILABILITY_MODE = WITNESS_COMMIT -    ) - ``` +To create an availabiltiy group with two synchronous replicas and a witness replica, see [Create availability group with two synchronous replicas and a witness replica](sql-server-linux-availability-group-configure-ha.md#witnessScript). From 113cc4a64c6f66df7990328898fcea269cd6cb38 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 2 Jun 2017 16:55:00 -0700 Subject: [PATCH 069/336] Fix spelling preceding --- .../linux/sql-server-linux-availability-group-configure-ha.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-configure-ha.md b/docs/linux/sql-server-linux-availability-group-configure-ha.md index 320b0d9314c..c13eacac460 100644 --- a/docs/linux/sql-server-linux-availability-group-configure-ha.md +++ b/docs/linux/sql-server-linux-availability-group-configure-ha.md @@ -126,7 +126,7 @@ Run **only one** of the following scripts. ``` >[!IMPORTANT] - >After you run the proceeding script to create an availability group with three synchronous replicas, do not run the following script. + >After you run the preceding script to create an availability group with three synchronous replicas, do not run the following script. @@ -135,7 +135,7 @@ Run **only one** of the following scripts. Include two replicas with synchronous availability mode, and a witness replica. For example, the following script creates an availability group called `ag1`. `node1` and `node2` host replicas in synchronous mode, with automatic seeding and automatic failover. `node3` is a witness replica. The script defines only the SQL Server instance name `node3`, the endpoint, and the availability mode. >[!IMPORTANT] - >Only run the following script to create an availability group with two synchronous replicas and a witness replica. Do not run the following script if you ran the proceeding script. + >Only run the following script to create an availability group with two synchronous replicas and a witness replica. Do not run the following script if you ran the preceding script. ```Transact-SQL CREATE AVAILABILITY GROUP [ag1] From 1849512f30f60db249d5a9d84bc64cfa453f8207 Mon Sep 17 00:00:00 2001 From: craigg-msft Date: Mon, 5 Jun 2017 07:00:52 -0700 Subject: [PATCH 070/336] minor updates to release notes to reflect ctp 2.2 cancelled for rc0 --- docs/sql-server/sql-server-2017-release-notes.md | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/docs/sql-server/sql-server-2017-release-notes.md b/docs/sql-server/sql-server-2017-release-notes.md index 39318bdb399..d1c56eea1a8 100644 --- a/docs/sql-server/sql-server-2017-release-notes.md +++ b/docs/sql-server/sql-server-2017-release-notes.md @@ -25,8 +25,8 @@ This topic describes limitations and issues with [!INCLUDE[ssSQLv14_md](../inclu **Try it out:** - [![Download from Evaluation Center](../analysis-services/media/download.png)](http://go.microsoft.com/fwlink/?LinkID=829477) Download [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] from the **[Evaluation Center](http://go.microsoft.com/fwlink/?LinkID=829477)** -## SQL Server 2017 CTP 2.2 (June 2017) -### Documentation (CTP 2.2) +## SQL Server 2017 Release Candidate (RC0 - June 2017) +### Documentation (RC0) - **Issue and customer impact:** Documentation for [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] is limited and content is included with the [!INCLUDE[ssSQL15_md](../includes/sssql15-md.md)] documentation set. Content in articles that is specific to [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] will be noted with **Applies To**. - **Issue and customer impact:** No offline content is available for [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)]. @@ -96,20 +96,10 @@ This topic describes limitations and issues with [!INCLUDE[ssSQLv14_md](../inclu The instance of SQL Server that hosted the secondary replica recovers. - -![horizontal_bar](../sql-server/media/horizontal-bar.png) - -## SQL Server 2017 CTP 1.4 (March 2017) - -### Documentation (CTP 1.4) -- **Issue and customer impact:** Documentation for [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] is limited and content is included with the [!INCLUDE[ssSQL15_md](../includes/sssql15-md.md)] documentation set. Content in articles that is specific to [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] will be noted with **Applies To**. -- **Issue and customer impact:** No offline content is available for [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)]. - ## ![info_tip](../sql-server/media/info-tip.png) Engage with the SQL Server engineering team - [Stack Overflow (tag sql-server) - ask technical questions](http://stackoverflow.com/questions/tagged/sql-server) - [MSDN Forums - ask technical questions](https://social.msdn.microsoft.com/Forums/en-US/home?category=sqlserver) - [Microsoft Connect - report bugs and request features](https://connect.microsoft.com/SQLServer/Feedback) - [Reddit - general discussion about R](https://www.reddit.com/r/SQLServer/) - ![MS_Logo_X-Small](../sql-server/media/ms-logo-x-small.png) \ No newline at end of file From 92efee9c0e256d41ed448a5ff5d1209f72875f65 Mon Sep 17 00:00:00 2001 From: Theano Petersen Date: Mon, 5 Jun 2017 10:55:29 -0700 Subject: [PATCH 071/336] first draft whats new --- .../what-s-new-in-sql-server-2017.md | 198 ++++++------------ 1 file changed, 66 insertions(+), 132 deletions(-) diff --git a/docs/sql-server/what-s-new-in-sql-server-2017.md b/docs/sql-server/what-s-new-in-sql-server-2017.md index 5acef136495..491e31bca7d 100644 --- a/docs/sql-server/what-s-new-in-sql-server-2017.md +++ b/docs/sql-server/what-s-new-in-sql-server-2017.md @@ -1,7 +1,7 @@ --- -title: "What's New in SQL Server 2017 | Microsoft Docs" +title: "What's new in SQL Server 2017 | Microsoft Docs" ms.custom: "" -ms.date: "05/23/2017" +ms.date: "06/1/2017" ms.prod: "sql-server-2017" ms.reviewer: "" ms.suite: "" @@ -15,133 +15,67 @@ author: "craigg-msft" ms.author: "craigg" manager: "jhubbard" --- -# What's New in SQL Server 2017 -SQL Server 2017 represents a major step towards making SQL Server a platform that gives you choices of development languages, data types, on-premises and in the cloud, and across operating systems by bringing the power of SQL Server to Linux, Linux-based Docker containers, and Windows. - -This topic is a summary of what is new in the most recent Community Technical Preview (CTP) release and links to more detailed what's new information for specific feature areas. - -![info_tip](../sql-server/media/info-tip.png) Run SQL Server on Linux! For more information, see: -- [What's new for SQL Server 2017 on Linux](https://docs.microsoft.com/sql/linux/sql-server-linux-whats-new) -- [SQL Server on Linux Documentation](https://docs.microsoft.com/sql/linux/) - - -**Try it out:** - - [![Download from Evaluation Center](../analysis-services/media/download.png)](http://go.microsoft.com/fwlink/?LinkID=829477) **[Download the SQL Server 2017 Community Technology Preview](http://go.microsoft.com/fwlink/?LinkID=829477)** - -## What's New in SQL Server 2017 CTP 2.1 (May 2017) -### SQL Server Database Engine - - -![horizontal_bar](../sql-server/media/horizontal-bar.png) -## What's New in SQL Server 2017 CTP 2.1 (May 2017) -### SQL Server Database Engine -- A new DMF, [sys.dm_db_log_stats](../relational-databases/system-dynamic-management-views/sys-dm-db-log-stats-transact-sql.md), is introduced to expose summary level attributes and information on transaction log files; useful for monitoring the health of the transaction log. -- This CTP contains bug fixes and performance improvements for the Database Engine. -- For a detailed list of 2017 CTP enhancements in previous CTP releases, see [What's New in SQL Server 2017 (Database Engine)](../database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md). - -### SQL Server Reporting Services (SSRS) -- SQL Server Reporting Services is no longer available to install through SQL Server's setup as of CTP 2.1. -- Comments are now available for reports. Comments allow you to add perspective to what is in a report and collaborate with others in your organization. You can also include attachments with your comment. -- For more detailed SSRS what's new information, including details from previous releases, see [What's new in Reporting Services](../reporting-services/what-s-new-in-sql-server-reporting-services-ssrs.md). -- For information about Power BI Report Server, see [Get started with Power BI Report Server](https://powerbi.microsoft.com/documentation/reportserver-get-started/). - -### SQL Server Machine Learning Services -- There are no new Machine Learning Services features in this CTP. -- For more detailed Machine Learning Services what's new information, including details from previous CTPs, see [What's New in SQL Server Machine Learning Services](../advanced-analytics/what-s-new-in-sql-server-machine-learning-services.md). - -### SQL Server Analysis Services (SSAS) -- There are no new SSAS features in this CTP. -- For more details about improvements and bug fixes in this release, see [What's New in SQL Server 2017 Analysis Services](../analysis-services/what-s-new-in-sql-server-analysis-services-2017.md). - -### SQL Server Integration Services (SSIS) -- You can now use the **Use32BitRuntime** parameter. -- The performance of logging has been improved. -- For more detailed SSIS what's new information, including details from previous CTPs, see [What's New in SQL Server 2017 Integration Services](../integration-services/what-s-new-in-integration-services-in-sql-server-2017.md). - -![horizontal_bar](../sql-server/media/horizontal-bar.png) -## What's New in SQL Server 2017 CTP 2.0 (April 2017) -### SQL Server Database Engine -- **Resumable online index rebuild**. Resumable online index rebuild allows you to resume an online index rebuild operation from where it stopped after a failure. For example, a failover to a replica or insufficient disk space situation. You can also pause and later resume an online index rebuild operation. For example, you might need to temporarily free up systems resources in order to execute a high priority task or complete the index rebuild in another miniatous window if the available maintenance windows is too short for a large table. Finally, resumable online index rebuild does not require significant log space, which allows you to perform log truncation while the resumable rebuild operation is running. See [ALTER INDEX](../t-sql/statements/alter-index-transact-sql.md) and [Guidelines for online index operations](../relational-databases/indexes/guidelines-for-online-index-operations.md). -- **IDENTITY_CACHE option for ALTER DATABASE SCOPED CONFIGURATION**. A new option IDENTITY_CACHE was added to ALTER DATABASE SCOPED CONFIGURATION T-SQL statement. When this option is set to OFF, gaps can be avoided in the values of identity columns in case a server restarts unexpectedly or fails over to a secondary server. See [ALTER DATABASE SCOPED CONFIGURATION](../t-sql/statements/alter-database-scoped-configuration-transact-sql.md). -- CLR uses Code Access Security (CAS) in the .NET Framework, which is no longer supported as a security boundary. A CLR assembly created with `PERMISSION_SET = SAFE` may be able to access external system resources, call unmanaged code, and acquire sysadmin privileges. Beginning with [!INCLUDE[sssqlv14-md](../includes/sssqlv14-md.md)], an `sp_configure` option called `clr strict security` is introduced to enhance the security of CLR assemblies. `clr strict security` is enabled by default, and treats `SAFE` and `EXTERNAL_ACCESS` assemblies as if they were marked `UNSAFE`. The `clr strict security` option can be disabled for backward compatibility, but is not recommended. Microsoft recommends all assemblies be signed by a certificate or asymmetric key with a corresponding login that has been granted `UNSAFE ASSEMBLY` permission in the master database. For more information, see [CLR strict security](../database-engine/configure-windows/clr-strict-security.md). -- Graph database capabilities to model many-to-many relationships. This includes new [CREATE TABLE](../t-sql/statements/create-table-sql-graph.md) syntax for creating node and edge tables, and the keyword [MATCH](../t-sql/queries/match-sql-graph.md) for queries. For more information, see [Graph Processing with SQL Server 2017](../relational-databases/graphs/sql-graph-overview.md). -- Automatic tuning is a database feature that provides insight into potential query performance problems, it can recommend solutions, and automatically fix identified problems. Automatic tuning in [!INCLUDE[ssnoversion](../includes/ssnoversion.md)], notifies you whenever a potential performance issue is detected, and lets you apply corrective actions, or lets the [!INCLUDE[ssde](../includes/ssde-md.md)] automatically fix performance problems. For more information, see [Automatic tuning](../relational-databases/automatic-tuning/automatic-tuning.md). -- Batch Mode Adaptive Join to improve plan quality (under db compatability 140). -- Interleaved Execution for multi-statement T-SQL TVFs to improve plan quality (under db compatability 140). -- Query Store now also tracks wait stats summary information. -- DTC support for Always On Availability Groups for all cross database transactions among databases that are part of the availability group, including for databases that are part of same instance. For more information, see [Transactions - Always On Availability Groups and Database Mirroring](../database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md) -- A new column **modified_extent_page_count** is introduced in [sys.dm_db_file_space_usage](../relational-databases/system-dynamic-management-views/sys-dm-db-file-space-usage-transact-sql.md) to track differential changes in each database file of the database. -- [SELECT INTO](../t-sql/queries/select-into-clause-transact-sql.md) now supports loading a table into a filegroup other than a default filegroup of the user using the **ON** keyword. -- SQL Server setup supports specifying initial tempdb file size up to **256 GB (262,144 MB)** per file with a warning if the file size is set to value greater than **1 GB** and if IFI is not enabled. -- A new Dynamic Management View (DMV) [sys.dm_tran_version_store_space_usage](../relational-databases/system-dynamic-management-views/sys-dm-tran-version-store-space-usage.md) is introduced to track version store usage per database. -- A new DMV [sys.dm_db_log_info](../relational-databases/system-dynamic-management-views/sys-dm-db-log-info-transact-sql.md) is introduced to expose the VLF information similar to DBCC LOGINFO. -- DBCC CLONEDATABASE will flush runtime statistics while cloning to avoid missing query store runtime statistics in database clone. In addition to this, DBCC CLONEDATABASE is further enhanced to support and clone fulltext indexes. -- System-versioned temporal tables now support CASCADE DELETE and CASCADE UPDATE. -- This CTP contains bug fixes for the Database Engine. -- For a detailed list of 2017 CTP enhancements in previous CTP releases, see [What's New in SQL Server 2017 (Database Engine)](../database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md). - -### SQL Server Machine Learning Services -- SQL Server R Services has a new name, to reflect support for the Python language in CTP 2.0. -You can now use SQL Server Machine Learning Services (In-Database) to run either R or Python scripts in SQL Server. -Or, install Microsoft Machine Learning Server (Standalone) to deploy and consume R and Python models that don’t require SQL Server. -- Both platforms include new MicrosoftML algorithms for distributed machine learning, and the latest version of Microsoft R (version 9.1.0). -- For more information, see [What’s new for Machine Learning](../advanced-analytics/what-s-new-in-sql-server-machine-learning-services.md). - -![horizontal_bar](../sql-server/media/horizontal-bar.png) - -## What's New in SQL Server 2017 CTP 1.4 (March 2017) -### SQL Server Database Engine -- There are no new Database Engine features in this CTP. -- This CTP contains bug fixes for the Database Engine. -- For a detailed list of 2017 CTP enhancements in previous CTP releases, see [What's New in SQL Server 2017 (Database Engine)](../database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md). - -### SQL Server R Services -- There are no new R Services features in this CTP. -- For more detailed R Services what's new information, including details from previous CTPs, see [What's New in SQL Server R Services](../advanced-analytics/r-services/what-s-new-in-sql-server-r-services.md). - -### SQL Server Reporting Services (SSRS) -- There are no new SSRS features in this CTP. -- For more detailed SSRS what's new information, including details from previous releases, see [What's new in Reporting Services](../reporting-services/what-s-new-in-sql-server-reporting-services-ssrs.md). - -### SQL Server Analysis Services (SSAS) -- There are no new SSAS features in this CTP. -- For details, including what's new for Analysis Services in the latest preview releases of SSDT and SSMS, see [What's New in Analysis Services 2017](../analysis-services/what-s-new-in-sql-server-analysis-services-2017.md). - -### SQL Server Integration Services (SSIS) -- There are no new SSIS features in this CTP. -- For more detailed SSIS what's new information, including details from previous CTPs, see [What's New in Integration Services 2017](../integration-services/what-s-new-in-integration-services-in-sql-server-2017.md). - -![horizontal_bar](../sql-server/media/horizontal-bar.png) - -## What's New in SQL Server 2017 CTP 1.3 (February 2017) -### SQL Server Database Engine -- Indirect checkpoint performance improvements. -- Cluster-less Availability Groups support added. -- Minimum Replica Commit Availability Groups setting added. -- Availability Groups can now work across Windows-Linux to enable cross-OS migrations and testing. -- Temporal Tables Retention Policy support added. For more information, see [Manage Retention of Historical Data in System-Versioned Temporal Tables](../relational-databases/tables/manage-retention-of-historical-data-in-system-versioned-temporal-tables.md#using-temporal-history-retention-policy-approach). -- New DMV SYS.DM_DB_STATS_HISTOGRAM -- Online non-clustered columnstore index build and rebuild support added -- 5 new dynamic management views to return information about Linux process. For more information, see [Linux Process Dynamic Management Views](../relational-databases/system-dynamic-management-views/linux-process-dynamic-management-views-transact-sql.md). -- [sys.dm_db_stats_histogram (Transact-SQL)](../relational-databases/system-dynamic-management-views/sys-dm-db-stats-histogram-transact-sql.md) is added for examining statistics. - -### SQL Server Analysis Services (SSAS) (CTP 1.3) -- Encoding hints - an advanced feature used to optimize processing (data refresh) of large in-memory tabular models. To learn more, see [What's New in Analysis Services 2017](../analysis-services/what-s-new-in-sql-server-analysis-services-2017.md). - - -![horizontal_bar](../sql-server/media/horizontal-bar.png) - -## ![info_tip](../sql-server/media/info-tip.png) Engage with the SQL Server engineering team -- [Stack Overflow (tag sql-server)](http://stackoverflow.com/questions/tagged/sql-server) -- [MSDN Forums](https://social.msdn.microsoft.com/Forums/en-US/home?category=sqlserver) -- [Microsoft Connect - report bugs and request features](https://connect.microsoft.com/SQLServer/Feedback) -- [Reddit - general discussion about R](https://www.reddit.com/r/SQLServer/) - -## See also -- ![Release Notes](../analysis-services/instances/install-windows/media/ssrs-fyi-note.png) [SQL Server 2017 Release Notes](../sql-server/sql-server-2017-release-notes.md). -- [Features supported by Edition](https://msdn.microsoft.com/library/cc645993.aspx) -- [Installation hardware and software requirements](../sql-server/install/hardware-and-software-requirements-for-installing-sql-server.md) -- [SQL Server Installation Wizard](../database-engine/install-windows/install-sql-server-from-the-installation-wizard-setup.md) -- [Install SQL Server Servicing Updates](http://msdn.microsoft.com/library/6df72a78-6b36-4bc1-948e-04b4ebe46094) - - ![MS_Logo_X-Small](../sql-server/media/ms-logo-x-small.png) +# What's new in SQL Server 2017 +SQL Server 2017 represents a major step towards making SQL Server a platform that gives you choices of development languages, data types, on-premises or cloud, and operating systems by bringing the power of SQL Server to Linux, Linux-based Docker containers, and Windows. This topic summarizes what is new in the most recent SQL Server 2017 Community Technical Preview (CTP) release and in specific feature areas. + +**Try it out:** [Download the SQL Server 2017 Community Technology Preview](http://go.microsoft.com/fwlink/?LinkID=829477) + +>[!TIP] +>**Run SQL Server on Linux!** For more information, see [SQL Server on Linux Documentation](https://docs.microsoft.com/sql/linux/) and [What's new for SQL Server 2017 on Linux](https://docs.microsoft.com/sql/linux/sql-server-linux-whats-new). + +## Latest release +New in the SQL Server 2017 CTP 2.1 release, May 2017: +- A new dynamic management view, [sys.dm_db_log_stats](../relational-databases/system-dynamic-management-views/sys-dm-db-log-stats-transact-sql.md), exposes summary level attributes and information on transaction log files, helpful for monitoring transaction log health. +- In SQL Server Reporting Services (SSRS), comments are now available for reports, to add perspective and collaborate with others. +- SQL Server Integration Services (SSIS) now supports SQL Server on Linux, and a new package lets you run SSIS packages on Linux from the command line. For more information, see the [blog post announcing SSIS support for Linux](https://blogs.msdn.microsoft.com/ssis/2017/05/17/ssis-helsinki-is-available-in-sql-server-vnext-ctp2-1/). + +## SQL Server Database Engine +SQL Server 2017 includes many new Database Engine features, enhancements, and performance improvements. Some highlights are: +- **Resumable online index rebuild** resumes an online index rebuild operation from where it stopped after a failure (such as a failover to a replica or insufficient disk space), or pauses and later resumes an online index rebuild operation. See [ALTER INDEX](../t-sql/statements/alter-index-transact-sql.md) and [Guidelines for online index operations](../relational-databases/indexes/guidelines-for-online-index-operations.md). (CTP 2.0) +- A new **IDENTITY_CACHE** option for ALTER DATABASE SCOPED CONFIGURATION allows you to avoid gaps in the values of identity columns if a server restarts unexpectedly or fails over to a secondary server. See [ALTER DATABASE SCOPED CONFIGURATION](../t-sql/statements/alter-database-scoped-configuration-transact-sql.md). (CTP 2.0) +- **Automatic database tuning** provides insight into potential query performance problems, recommends solutions, and can automatically fix identified problems. See [Automatic tuning](../relational-databases/automatic-tuning/automatic-tuning.md). (CTP 2.0) +- New **graph database capabilities** for modeling many-to-many relationships include new [CREATE TABLE](../t-sql/statements/create-table-sql-graph.md) syntax for creating node and edge tables, and the keyword [MATCH](../t-sql/queries/match-sql-graph.md) for queries. See [Graph Processing with SQL Server 2017](../relational-databases/graphs/sql-graph-overview.md). (CTP 2.0) +- An sp_configure option called `clr strict security` is enabled by default, and enhances the security of CLR assemblies. See [CLR strict security](../database-engine/configure-windows/clr-strict-security.md). (CTP 2.0) +- Setup allows specifying initial tempdb file size up to 256 GB (262,144 MB) per file, with a warning if the file size is set greater than 1GB with IFI not enabled. (CTP 2.0) +- A new dynamic management view, [sys.dm_tran_version_store_space_usage](../relational-databases/system-dynamic-management-views/sys-dm-tran-version-store-space-usage.md), tracks version store usage per database, useful for proactively planning tempdb sizing based on the version store usage per database. (CTP 2.0) +- A new dynamic management view, [sys.dm_db_log_info](../relational-databases/system-dynamic-management-views/sys-dm-db-log-info-transact-sql.md), exposes VLF information to monitor, alert, and avert potential transaction log issues. (CTP 2.0) +- A new **modified_extent_page_count** column in [sys.dm_db_file_space_usage](../relational-databases/system-dynamic-management-views/sys-dm-db-file-space-usage-transact-sql.md) tracks differential changes in each database file, enabling smart backup solutions that perform differential backup or full backup based on percentage of changed pages in the database. (CTP 2.0) +- [SELECT INTO](../t-sql/queries/select-into-clause-transact-sql.md) T-SQL syntax now supports loading a table into a FileGroup other than the user's default by using the **ON** keyword. (CTP 2.0) +- Cross database transactions are now supported among all databases that are part of an Always On Availability Group, including databases that are part of same instance. See [Transactions - Always On Availability Groups and Database Mirroring](../database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md) (CTP 2.0) +- Five new dynamic management views return information about Linux processes. For more information, see [Linux Process Dynamic Management Views](../relational-databases/system-dynamic-management-views/linux-process-dynamic-management-views-transact-sql.md). (CTP 1.3) +- [sys.dm_db_stats_histogram] (../relational-databases/system-dynamic-management-views/sys-dm-db-stats-histogram-transact-sql.md) is a new dynamic management view for examining statistics. (CTP 1.3) +- New Availability Groups functionality includes clusterless support, Minimum Replica Commit Availability Groups setting, and Windows-Linux cross-OS migrations and testing. (CTP 1.3) +- The **Database Tuning Advisor (DTA)** has additional options and improved performance. (CTP 1.2) +- **In-memory enhancements** include support for computed columns in memory-optimized tables, full support for JSON functions in natively compiled modules, and the CROSS APPLY operator in natively compiled modules. (CTP 1.1) +- New string functions are CONCAT_WS, TRANSLATE, and TRIM. WITHIN GROUP is now supported for the STRING_AGG function. (CTP 1.1) +- There are new bulk access options (BULK INSERT and OPENROWSET(BULK...) ) for CSV and Azure Blob files. (CTP 1.1) +- **Memory-optimized object enhancements** include sp_spaceused and elimination of the 8 index limitation for memory-optimized tables, sp_rename for memory-optimized tables and natively compiled T-SQL modules, and CASE statements and TOP (N) WITH TIES for natively compiled T-SQL modules. Memory-optimized filegroup files can now be stored, backed up and restored on Azure Storage. (CTP 1.0) +- **DATABASE SCOPED CREDENTIAL** is a new class of securable, supporting CONTROL, ALTER, REFERENCES, TAKE OWNERSHIP, and VIEW DEFINITION permissions. ADMINISTER DATABASE BULK OPERATIONS is now visible in sys.fn_builtin_permissions. (CTP 1.0) +- The sys.dm_os_host_info dynamic management view provides operating system information for both Windows and Linux. (CTP 1.0) +- Database COMPATIBILITY_LEVEL 140 is added. (CTP 1.0). +For more information, see [What's new in SQL Server 2017 database engine](~/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md) + +## SQL Server Machine Learning Services +- SQL Server Machine Learning Services (formerly R Services) now supports Python. You can use Machine Learning Services (in-database) to run R or Python scripts in SQL Server, or install Microsoft Machine Learning Server (standalone) to deploy and consume R and Python models that don't require SQL Server. +- Both platforms include new MicrosoftML algorithms for distributed machine learning, and the latest version of Microsoft R (version 9.1.0). (CTP 2.0) +For more information, see [What's new in SQL Server Machine Learning Services](~/advanced-analytics/what-s-new-in-sql-server-machine-learning-services.md) + +## SQL Server Analysis Services (SSAS) +- Encoding hints is an advanced feature used to optimize data refresh of large in-memory tabular models. (CTP 1.3) +For more information, see [What's new in SQL Server Analysis Services 2017](~/analysis-services/what-s-new-in-sql-server-analysis-services-2017.md) +analysis-services/what-s-new-in-analysis-services.md, + +## SQL Server Integration Services (SSIS) +- SQL Server Integration Services (SSIS) now supports SQL Server on Linux, and a new package lets you run SSIS packages on Linux from the command line. For more information, see the blog post announcing SSIS support for Linux. (CTP 2.1) +- You can now use the **Use32BitRuntime** parameter. (CTP 2.1) +For more information, see [What's new in Integration Services in SQL Server 2017](~/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md) + +## SQL Server Reporting Services (SSRS) +- As of CTP 2.1, SSRS is no longer available to install through SQL Server setup. +- To download the May 2017 Preview of Power BI Report Server and Power BI Desktop optimized for Power BI Report Server, go to the [Microsoft download center](https://www.microsoft.com/download/details.aspx?id=55253). For information about Power BI Report Server, see [Get started with Power BI Report Server](https://powerbi.microsoft.com/documentation/reportserver-get-started/). +- Comments are now available for reports, to add perspective and collaborate with others. You can also include attachments with comments. (CTP 2.1) +- In the latest releases of Report Builder and SQL Server Data Tools – Release Candidate, you can create native DAX queries against supported SQL Server Analysis Services tabular data models by dragging and dropping desired fields in the query designers. See the [Reporting Services blog](https://blogs.msdn.microsoft.com/sqlrsteamblog/2017/03/09/query-designer-support-for-dax-now-available-in-report-builder-and-sql-server-data-tools/). +For more information, see [What's new in SQL Server reporting services (SSRS)](~/reporting-services/what-s-new-in-sql-server-reporting-services-ssrs.md) + +## Linux +For more information, see [What's new for SQL Server 2017 on Linux](~/linux/sql-server-linux-whats-new.md) \ No newline at end of file From b16fc12fda69aaf988a1724ac4a161fa2c11bf23 Mon Sep 17 00:00:00 2001 From: Theano Petersen Date: Mon, 5 Jun 2017 10:58:12 -0700 Subject: [PATCH 072/336] was incomplete --- .../what-s-new-in-sql-server-2017.md | 90 +++++++++++-------- 1 file changed, 54 insertions(+), 36 deletions(-) diff --git a/docs/sql-server/what-s-new-in-sql-server-2017.md b/docs/sql-server/what-s-new-in-sql-server-2017.md index 491e31bca7d..b68f98b8824 100644 --- a/docs/sql-server/what-s-new-in-sql-server-2017.md +++ b/docs/sql-server/what-s-new-in-sql-server-2017.md @@ -16,66 +16,84 @@ ms.author: "craigg" manager: "jhubbard" --- # What's new in SQL Server 2017 -SQL Server 2017 represents a major step towards making SQL Server a platform that gives you choices of development languages, data types, on-premises or cloud, and operating systems by bringing the power of SQL Server to Linux, Linux-based Docker containers, and Windows. This topic summarizes what is new in the most recent SQL Server 2017 Community Technical Preview (CTP) release and in specific feature areas. +SQL Server 2017 represents a major step towards making SQL Server a platform that gives you choices of development languages, data types, on-premises or cloud, and operating systems by bringing the power of SQL Server to Linux, Linux-based Docker containers, and Windows. This topic summarizes what is new for specific feature areas in the most recent SQL Server 2017 Release Candidate (RC0, June 2017) and the Community Technical Preview (CTP) releases. **Try it out:** [Download the SQL Server 2017 Community Technology Preview](http://go.microsoft.com/fwlink/?LinkID=829477) >[!TIP] >**Run SQL Server on Linux!** For more information, see [SQL Server on Linux Documentation](https://docs.microsoft.com/sql/linux/) and [What's new for SQL Server 2017 on Linux](https://docs.microsoft.com/sql/linux/sql-server-linux-whats-new). -## Latest release -New in the SQL Server 2017 CTP 2.1 release, May 2017: -- A new dynamic management view, [sys.dm_db_log_stats](../relational-databases/system-dynamic-management-views/sys-dm-db-log-stats-transact-sql.md), exposes summary level attributes and information on transaction log files, helpful for monitoring transaction log health. -- In SQL Server Reporting Services (SSRS), comments are now available for reports, to add perspective and collaborate with others. -- SQL Server Integration Services (SSIS) now supports SQL Server on Linux, and a new package lets you run SSIS packages on Linux from the command line. For more information, see the [blog post announcing SSIS support for Linux](https://blogs.msdn.microsoft.com/ssis/2017/05/17/ssis-helsinki-is-available-in-sql-server-vnext-ctp2-1/). +## Latest release +New in the **SQL Server 2017 Release Candidate** (RC0, June 2017): + +- +- +- + ## SQL Server Database Engine -SQL Server 2017 includes many new Database Engine features, enhancements, and performance improvements. Some highlights are: +SQL Server 2017 includes many new Database Engine features, enhancements, and performance improvements. - **Resumable online index rebuild** resumes an online index rebuild operation from where it stopped after a failure (such as a failover to a replica or insufficient disk space), or pauses and later resumes an online index rebuild operation. See [ALTER INDEX](../t-sql/statements/alter-index-transact-sql.md) and [Guidelines for online index operations](../relational-databases/indexes/guidelines-for-online-index-operations.md). (CTP 2.0) - A new **IDENTITY_CACHE** option for ALTER DATABASE SCOPED CONFIGURATION allows you to avoid gaps in the values of identity columns if a server restarts unexpectedly or fails over to a secondary server. See [ALTER DATABASE SCOPED CONFIGURATION](../t-sql/statements/alter-database-scoped-configuration-transact-sql.md). (CTP 2.0) - **Automatic database tuning** provides insight into potential query performance problems, recommends solutions, and can automatically fix identified problems. See [Automatic tuning](../relational-databases/automatic-tuning/automatic-tuning.md). (CTP 2.0) - New **graph database capabilities** for modeling many-to-many relationships include new [CREATE TABLE](../t-sql/statements/create-table-sql-graph.md) syntax for creating node and edge tables, and the keyword [MATCH](../t-sql/queries/match-sql-graph.md) for queries. See [Graph Processing with SQL Server 2017](../relational-databases/graphs/sql-graph-overview.md). (CTP 2.0) -- An sp_configure option called `clr strict security` is enabled by default, and enhances the security of CLR assemblies. See [CLR strict security](../database-engine/configure-windows/clr-strict-security.md). (CTP 2.0) -- Setup allows specifying initial tempdb file size up to 256 GB (262,144 MB) per file, with a warning if the file size is set greater than 1GB with IFI not enabled. (CTP 2.0) -- A new dynamic management view, [sys.dm_tran_version_store_space_usage](../relational-databases/system-dynamic-management-views/sys-dm-tran-version-store-space-usage.md), tracks version store usage per database, useful for proactively planning tempdb sizing based on the version store usage per database. (CTP 2.0) -- A new dynamic management view, [sys.dm_db_log_info](../relational-databases/system-dynamic-management-views/sys-dm-db-log-info-transact-sql.md), exposes VLF information to monitor, alert, and avert potential transaction log issues. (CTP 2.0) +- An sp_configure option called `clr strict security` is enabled by default to enhance the security of CLR assemblies. See [CLR strict security](../database-engine/configure-windows/clr-strict-security.md). (CTP 2.0) +- Setup now allows specifying initial tempdb file size up to **256 GB** (262,144 MB) per file, with a warning if the file size is set greater than 1GB with IFI not enabled. (CTP 2.0) - A new **modified_extent_page_count** column in [sys.dm_db_file_space_usage](../relational-databases/system-dynamic-management-views/sys-dm-db-file-space-usage-transact-sql.md) tracks differential changes in each database file, enabling smart backup solutions that perform differential backup or full backup based on percentage of changed pages in the database. (CTP 2.0) - [SELECT INTO](../t-sql/queries/select-into-clause-transact-sql.md) T-SQL syntax now supports loading a table into a FileGroup other than the user's default by using the **ON** keyword. (CTP 2.0) -- Cross database transactions are now supported among all databases that are part of an Always On Availability Group, including databases that are part of same instance. See [Transactions - Always On Availability Groups and Database Mirroring](../database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md) (CTP 2.0) -- Five new dynamic management views return information about Linux processes. For more information, see [Linux Process Dynamic Management Views](../relational-databases/system-dynamic-management-views/linux-process-dynamic-management-views-transact-sql.md). (CTP 1.3) -- [sys.dm_db_stats_histogram] (../relational-databases/system-dynamic-management-views/sys-dm-db-stats-histogram-transact-sql.md) is a new dynamic management view for examining statistics. (CTP 1.3) -- New Availability Groups functionality includes clusterless support, Minimum Replica Commit Availability Groups setting, and Windows-Linux cross-OS migrations and testing. (CTP 1.3) +- Cross database transactions are now supported among all databases that are part of an **Always On Availability Group**, including databases that are part of same instance. See [Transactions - Always On Availability Groups and Database Mirroring](../database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md) (CTP 2.0) +- New **Availability Groups** functionality includes clusterless support, Minimum Replica Commit Availability Groups setting, and Windows-Linux cross-OS migrations and testing. (CTP 1.3) +- New dynamic management views: + - [sys.dm_db_log_stats](../relational-databases/system-dynamic-management-views/sys-dm-db-log-stats-transact-sql.md) exposes summary level attributes and information on transaction log files, helpful for monitoring transaction log health. (CTP 2.1) + - [sys.dm_tran_version_store_space_usage](../relational-databases/system-dynamic-management-views/sys-dm-tran-version-store-space-usage.md) tracks version store usage per database, useful for proactively planning tempdb sizing based on the version store usage per database. (CTP 2.0) + - [sys.dm_db_log_info](../relational-databases/system-dynamic-management-views/sys-dm-db-log-info-transact-sql.md) exposes VLF information to monitor, alert, and avert potential transaction log issues. (CTP 2.0) + - [sys.dm_db_stats_histogram](../relational-databases/system-dynamic-management-views/sys-dm-db-stats-histogram-transact-sql.md) is a new dynamic management view for examining statistics. (CTP 1.3) + - **sys.dm_os_host_info** provides operating system information for both Windows and Linux. (CTP 1.0) + - Five new dynamic management views return information about Linux processes. For more information, see [Linux Process Dynamic Management Views](../relational-databases/system-dynamic-management-views/linux-process-dynamic-management-views-transact-sql.md). (CTP 1.3) - The **Database Tuning Advisor (DTA)** has additional options and improved performance. (CTP 1.2) - **In-memory enhancements** include support for computed columns in memory-optimized tables, full support for JSON functions in natively compiled modules, and the CROSS APPLY operator in natively compiled modules. (CTP 1.1) -- New string functions are CONCAT_WS, TRANSLATE, and TRIM. WITHIN GROUP is now supported for the STRING_AGG function. (CTP 1.1) -- There are new bulk access options (BULK INSERT and OPENROWSET(BULK...) ) for CSV and Azure Blob files. (CTP 1.1) +- New **string functions** are CONCAT_WS, TRANSLATE, and TRIM, and WITHIN GROUP is now supported for the STRING_AGG function. (CTP 1.1) +- There are new **bulk access options** (BULK INSERT and OPENROWSET(BULK...) ) for CSV and Azure Blob files. (CTP 1.1) - **Memory-optimized object enhancements** include sp_spaceused and elimination of the 8 index limitation for memory-optimized tables, sp_rename for memory-optimized tables and natively compiled T-SQL modules, and CASE statements and TOP (N) WITH TIES for natively compiled T-SQL modules. Memory-optimized filegroup files can now be stored, backed up and restored on Azure Storage. (CTP 1.0) - **DATABASE SCOPED CREDENTIAL** is a new class of securable, supporting CONTROL, ALTER, REFERENCES, TAKE OWNERSHIP, and VIEW DEFINITION permissions. ADMINISTER DATABASE BULK OPERATIONS is now visible in sys.fn_builtin_permissions. (CTP 1.0) -- The sys.dm_os_host_info dynamic management view provides operating system information for both Windows and Linux. (CTP 1.0) -- Database COMPATIBILITY_LEVEL 140 is added. (CTP 1.0). -For more information, see [What's new in SQL Server 2017 database engine](~/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md) +- Database **COMPATIBILITY_LEVEL 140** is added. (CTP 1.0). -## SQL Server Machine Learning Services -- SQL Server Machine Learning Services (formerly R Services) now supports Python. You can use Machine Learning Services (in-database) to run R or Python scripts in SQL Server, or install Microsoft Machine Learning Server (standalone) to deploy and consume R and Python models that don't require SQL Server. -- Both platforms include new MicrosoftML algorithms for distributed machine learning, and the latest version of Microsoft R (version 9.1.0). (CTP 2.0) -For more information, see [What's new in SQL Server Machine Learning Services](~/advanced-analytics/what-s-new-in-sql-server-machine-learning-services.md) +For more information, see [What's new in SQL Server 2017 Database Engine](~/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md). ## SQL Server Analysis Services (SSAS) -- Encoding hints is an advanced feature used to optimize data refresh of large in-memory tabular models. (CTP 1.3) -For more information, see [What's new in SQL Server Analysis Services 2017](~/analysis-services/what-s-new-in-sql-server-analysis-services-2017.md) -analysis-services/what-s-new-in-analysis-services.md, +SQL Server Analysis Services 2017 introduces many enhancements for tabular models. These include: +- Tabular mode as the default installation option for Analysis Services. (CTP 2.0) +- Object-level security to secure the metadata of tabular models. (CTP 2.0) +- Date relationships to easily create relationships based on date fields. (CTP 2.0) +- New **Get Data** (Power Query) data sources, and existing DirectQuery data sources support for M queries. (CTP 2.0) +- DAX Editor for SSDT. (CTP 2.0) +- Encoding hints, an advanced feature for optimizing data refresh of large in-memory tabular models. (CTP 1.3) +- Support for the **1400 Compatibility level** for tabular models. To create new or upgrade existing tabular model projects to the 1400 compatibility level, download and install [SQL Server Data Tools (SSDT) 17.0 RC2](https://go.microsoft.com/fwlink?LinkId=837939). (CTP 1.1) +- Modern **Get Data** experience for tabular models at the 1400 compatibility level. See the [Analysis Services Team Blog](https://blogs.msdn.microsoft.com/analysisservices/2016/12/16/introducing-a-modern-get-data-experience-for-sql-server-2017-on-windows-ctp-1-1-for-analysis-services/). (CTP 1.1) +- **Hide Members** property to hide blank members in ragged hierarchies. (CTP 1.1) +- New **Detail Rows** action to **Show Details** for aggregated information, with [SELECTCOLUMNS](https://msdn.microsoft.com/library/mt761759.aspx) and **DETAILROWS** functions for creating Detail Rows expressions. (CTP 1.1) +- New DAX **IN** operator for specifying multiple values. (CTP 1.1) + +For more information, see [What's new in SQL Server Analysis Services 2017](~/analysis-services/what-s-new-in-sql-server-analysis-services-2017.md). ## SQL Server Integration Services (SSIS) -- SQL Server Integration Services (SSIS) now supports SQL Server on Linux, and a new package lets you run SSIS packages on Linux from the command line. For more information, see the blog post announcing SSIS support for Linux. (CTP 2.1) -- You can now use the **Use32BitRuntime** parameter. (CTP 2.1) -For more information, see [What's new in Integration Services in SQL Server 2017](~/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md) +- The new **Scale Out for SSIS** feature makes it much easier to run SSIS on multiple machines. See [Integration Services Scale Out](~/integration-services/integration-services-ssis-scale-out.md). (CTP 1.0) You can now use the **Use32BitRuntime** parameter when you trigger execution in Scale Out. (CTP 2.1) +- SQL Server 2017 Integration Services (SSIS) now supports **SQL Server on Linux**, and a new package lets you run SSIS packages on Linux from the command line. For more information, see the [blog post announcing SSIS support for Linux](https://blogs.msdn.microsoft.com/ssis/2017/05/17/ssis-helsinki-is-available-in-sql-server-vnext-ctp2-1/). (CTP 2.1) +- OData Source and OData Connection Manager now support connecting to the OData feeds of Microsoft Dynamics AX Online and Microsoft Dynamics CRM Online. (CTP 1.0) + +For more information, see [What's new in Integration Services in SQL Server 2017](~/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md). ## SQL Server Reporting Services (SSRS) -- As of CTP 2.1, SSRS is no longer available to install through SQL Server setup. -- To download the May 2017 Preview of Power BI Report Server and Power BI Desktop optimized for Power BI Report Server, go to the [Microsoft download center](https://www.microsoft.com/download/details.aspx?id=55253). For information about Power BI Report Server, see [Get started with Power BI Report Server](https://powerbi.microsoft.com/documentation/reportserver-get-started/). +As of CTP 2.1, SSRS is no longer available to install through SQL Server setup. [Go to the Microsoft download center](https://www.microsoft.com/download/details.aspx?id=55253) to download the May 2017 Preview of **Power BI Report Server** and Power BI Desktop optimized for Power BI Report Server. For information about Power BI Report Server, see [Get started with Power BI Report Server](https://powerbi.microsoft.com/documentation/reportserver-get-started/). - Comments are now available for reports, to add perspective and collaborate with others. You can also include attachments with comments. (CTP 2.1) -- In the latest releases of Report Builder and SQL Server Data Tools – Release Candidate, you can create native DAX queries against supported SQL Server Analysis Services tabular data models by dragging and dropping desired fields in the query designers. See the [Reporting Services blog](https://blogs.msdn.microsoft.com/sqlrsteamblog/2017/03/09/query-designer-support-for-dax-now-available-in-report-builder-and-sql-server-data-tools/). -For more information, see [What's new in SQL Server reporting services (SSRS)](~/reporting-services/what-s-new-in-sql-server-reporting-services-ssrs.md) +- In the latest releases of Report Builder and SQL Server Data Tools, you can create native DAX queries against supported SQL Server Analysis Services tabular data models by dragging and dropping desired fields in the query designers. See the [Reporting Services blog](https://blogs.msdn.microsoft.com/sqlrsteamblog/2017/03/09/query-designer-support-for-dax-now-available-in-report-builder-and-sql-server-data-tools/). + +For more information, see [What's new in SQL Server Reporting Services (SSRS)](~/reporting-services/what-s-new-in-sql-server-reporting-services-ssrs.md). + +## SQL Server Machine Learning Services +SQL Server R Services is now renamed **SQL Server Machine Learning Services**, to reflect new support for Python as well as R languages. You can use Machine Learning Services (In-Database) to run R or Python scripts in SQL Server, or install Microsoft Machine Learning Server (standalone) to deploy and consume R and Python models that don't require SQL Server. Both platforms include new MicrosoftML algorithms for distributed machine learning, and the latest version of Microsoft R (version 9.1.0). (CTP 2.0) +- Machine learning with Python includes the **revoscalepy** module, which supports a subset of the distributed algorithms and compute contexts provided in RevoScaleR. +- You can easily create multiple models in parallel from R by using the new **rxExecBy** function. Supported compute contexts include RxSpark and RxInSQLServer. (CTP 2.0) + +For more information, see [What's new in SQL Server Machine Learning Services](~/advanced-analytics/what-s-new-in-sql-server-machine-learning-services.md). -## Linux -For more information, see [What's new for SQL Server 2017 on Linux](~/linux/sql-server-linux-whats-new.md) \ No newline at end of file From 699c58e62636a5177e5543d120b5785882128baa Mon Sep 17 00:00:00 2001 From: Theano Petersen Date: Tue, 6 Jun 2017 11:37:03 -0700 Subject: [PATCH 073/336] Remove content from back merge, add Next steps --- .../what-s-new-in-sql-server-2017.md | 68 +------------------ 1 file changed, 3 insertions(+), 65 deletions(-) diff --git a/docs/sql-server/what-s-new-in-sql-server-2017.md b/docs/sql-server/what-s-new-in-sql-server-2017.md index 2737408d3cc..c9e01dadda9 100644 --- a/docs/sql-server/what-s-new-in-sql-server-2017.md +++ b/docs/sql-server/what-s-new-in-sql-server-2017.md @@ -76,75 +76,11 @@ SQL Server Analysis Services 2017 introduces many enhancements for tabular model For more information, see [What's new in SQL Server Analysis Services 2017](~/analysis-services/what-s-new-in-sql-server-analysis-services-2017.md). -![horizontal_bar](../sql-server/media/horizontal-bar.png) -## What's New in SQL Server 2017 CTP 2.0 (April 2017) -### SQL Server Database Engine -- **Resumable online index rebuild**. Resumable online index rebuild allows you to resume an online index rebuild operation from where it stopped after a failure. For example, a failover to a replica or insufficient disk space situation. You can also pause and later resume an online index rebuild operation. For example, you might need to temporarily free up systems resources in order to execute a high priority task or complete the index rebuild in another miniatous window if the available maintenance windows is too short for a large table. Finally, resumable online index rebuild does not require significant log space, which allows you to perform log truncation while the resumable rebuild operation is running. See [ALTER INDEX](../t-sql/statements/alter-index-transact-sql.md) and [Guidelines for online index operations](../relational-databases/indexes/guidelines-for-online-index-operations.md). -- **IDENTITY_CACHE option for ALTER DATABASE SCOPED CONFIGURATION**. A new option IDENTITY_CACHE was added to ALTER DATABASE SCOPED CONFIGURATION T-SQL statement. When this option is set to OFF, gaps can be avoided in the values of identity columns in case a server restarts unexpectedly or fails over to a secondary server. See [ALTER DATABASE SCOPED CONFIGURATION](../t-sql/statements/alter-database-scoped-configuration-transact-sql.md). -- CLR uses Code Access Security (CAS) in the .NET Framework, which is no longer supported as a security boundary. A CLR assembly created with `PERMISSION_SET = SAFE` may be able to access external system resources, call unmanaged code, and acquire sysadmin privileges. Beginning with [!INCLUDE[sssqlv14-md](../includes/sssqlv14-md.md)], an `sp_configure` option called `clr strict security` is introduced to enhance the security of CLR assemblies. `clr strict security` is enabled by default, and treats `SAFE` and `EXTERNAL_ACCESS` assemblies as if they were marked `UNSAFE`. The `clr strict security` option can be disabled for backward compatibility, but is not recommended. Microsoft recommends all assemblies be signed by a certificate or asymmetric key with a corresponding login that has been granted `UNSAFE ASSEMBLY` permission in the master database. For more information, see [CLR strict security](../database-engine/configure-windows/clr-strict-security.md). -- Graph database capabilities to model many-to-many relationships. This includes new [CREATE TABLE](../t-sql/statements/create-table-sql-graph.md) syntax for creating node and edge tables, and the keyword [MATCH](../t-sql/queries/match-sql-graph.md) for queries. For more information, see [Graph Processing with SQL Server 2017](../relational-databases/graphs/sql-graph-overview.md). -- Automatic tuning is a database feature that provides insight into potential query performance problems, it can recommend solutions, and automatically fix identified problems. Automatic tuning in [!INCLUDE[ssnoversion](../includes/ssnoversion.md)], notifies you whenever a potential performance issue is detected, and lets you apply corrective actions, or lets the [!INCLUDE[ssde](../includes/ssde-md.md)] automatically fix performance problems. For more information, see [Automatic tuning](../relational-databases/automatic-tuning/automatic-tuning.md). -- Batch Mode Adaptive Join to improve plan quality (under db compatability 140). -- Interleaved Execution for multi-statement T-SQL TVFs to improve plan quality (under db compatability 140). -- Query Store now also tracks wait stats summary information. Tracking wait stats categories per query in Query Store enables the next level of performance troubleshooting experience, providing, even more, insight into the workload performance and its bottlenecks while preserving the key Query Store advantages. -- DTC support for Always On Availability Groups for all cross database transactions among databases that are part of the availability group, including for databases that are part of same instance. For more information, see [Transactions - Always On Availability Groups and Database Mirroring](../database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md) -- A new column **modified_extent_page_count** is introduced in [sys.dm_db_file_space_usage](../relational-databases/system-dynamic-management-views/sys-dm-db-file-space-usage-transact-sql.md) to track differential changes in each database file of the database. -- [SELECT INTO](../t-sql/queries/select-into-clause-transact-sql.md) now supports loading a table into a filegroup other than a default filegroup of the user using the **ON** keyword. -- SQL Server setup supports specifying initial tempdb file size up to **256 GB (262,144 MB)** per file with a warning if the file size is set to value greater than **1 GB** and if IFI is not enabled. -- A new Dynamic Management View (DMV) [sys.dm_tran_version_store_space_usage](../relational-databases/system-dynamic-management-views/sys-dm-tran-version-store-space-usage.md) is introduced to track version store usage per database. -- A new DMV [sys.dm_db_log_info](../relational-databases/system-dynamic-management-views/sys-dm-db-log-info-transact-sql.md) is introduced to expose the VLF information similar to DBCC LOGINFO. -- DBCC CLONEDATABASE will flush runtime statistics while cloning to avoid missing query store runtime statistics in database clone. In addition to this, DBCC CLONEDATABASE is further enhanced to support and clone fulltext indexes. -- System-versioned temporal tables now support CASCADE DELETE and CASCADE UPDATE. -- This CTP contains bug fixes for the Database Engine. -- For a detailed list of 2017 CTP enhancements in previous CTP releases, see [What's New in SQL Server 2017 (Database Engine)](../database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md). - -### SQL Server Machine Learning Services -- SQL Server R Services has a new name, to reflect support for the Python language in CTP 2.0. -You can now use SQL Server Machine Learning Services (In-Database) to run either R or Python scripts in SQL Server. -Or, install Microsoft Machine Learning Server (Standalone) to deploy and consume R and Python models that dont require SQL Server. -- Both platforms include new MicrosoftML algorithms for distributed machine learning, and the latest version of Microsoft R (version 9.1.0). -- For more information, see [Whats new for Machine Learning](../advanced-analytics/what-s-new-in-sql-server-machine-learning-services.md). - -![horizontal_bar](../sql-server/media/horizontal-bar.png) - -## What's New in SQL Server 2017 CTP 1.4 (March 2017) -### SQL Server Database Engine -- There are no new Database Engine features in this CTP. -- This CTP contains bug fixes for the Database Engine. -- For a detailed list of 2017 CTP enhancements in previous CTP releases, see [What's New in SQL Server 2017 (Database Engine)](../database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md). - -### SQL Server R Services -- There are no new R Services features in this CTP. -- For more detailed R Services what's new information, including details from previous CTPs, see [What's New in SQL Server R Services](../advanced-analytics/r-services/what-s-new-in-sql-server-r-services.md). - -### SQL Server Reporting Services (SSRS) -- There are no new SSRS features in this CTP. -- For more detailed SSRS what's new information, including details from previous releases, see [What's new in Reporting Services](../reporting-services/what-s-new-in-sql-server-reporting-services-ssrs.md). - -### SQL Server Analysis Services (SSAS) -- There are no new SSAS features in this CTP. -- For details, including what's new for Analysis Services in the latest preview releases of SSDT and SSMS, see [What's New in Analysis Services 2017](../analysis-services/what-s-new-in-sql-server-analysis-services-2017.md). - -### SQL Server Integration Services (SSIS) +## SQL Server Integration Services (SSIS) - The new **Scale Out for SSIS** feature makes it much easier to run SSIS on multiple machines. See [Integration Services Scale Out](~/integration-services/integration-services-ssis-scale-out.md). (CTP 1.0) You can now use the **Use32BitRuntime** parameter when you trigger execution in Scale Out. (CTP 2.1) - SQL Server 2017 Integration Services (SSIS) now supports **SQL Server on Linux**, and a new package lets you run SSIS packages on Linux from the command line. For more information, see the [blog post announcing SSIS support for Linux](https://blogs.msdn.microsoft.com/ssis/2017/05/17/ssis-helsinki-is-available-in-sql-server-vnext-ctp2-1/). (CTP 2.1) - OData Source and OData Connection Manager now support connecting to the OData feeds of Microsoft Dynamics AX Online and Microsoft Dynamics CRM Online. (CTP 1.0) -## What's New in SQL Server 2017 CTP 1.3 (February 2017) -### SQL Server Database Engine -- Indirect checkpoint performance improvements. -- Cluster-less Availability Groups support added. -- Minimum Replica Commit Availability Groups setting added. -- Availability Groups can now work across Windows-Linux to enable cross-OS migrations and testing. -- Temporal Tables Retention Policy support added. For more information, see [Manage Retention of Historical Data in System-Versioned Temporal Tables](../relational-databases/tables/manage-retention-of-historical-data-in-system-versioned-temporal-tables.md#using-temporal-history-retention-policy-approach). -- New DMV SYS.DM_DB_STATS_HISTOGRAM -- Online non-clustered columnstore index build and rebuild support added -- 5 new dynamic management views to return information about Linux process. For more information, see [Linux Process Dynamic Management Views](../relational-databases/system-dynamic-management-views/linux-process-dynamic-management-views-transact-sql.md). -- [sys.dm_db_stats_histogram (Transact-SQL)](../relational-databases/system-dynamic-management-views/sys-dm-db-stats-histogram-transact-sql.md) is added for examining statistics. - - -For more information, see [What's new in Integration Services in SQL Server 2017](~/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md). - ## SQL Server Reporting Services (SSRS) As of CTP 2.1, SSRS is no longer available to install through SQL Server setup. [Go to the Microsoft download center](https://www.microsoft.com/download/details.aspx?id=55253) to download the May 2017 Preview of **Power BI Report Server** and Power BI Desktop optimized for Power BI Report Server. For information about Power BI Report Server, see [Get started with Power BI Report Server](https://powerbi.microsoft.com/documentation/reportserver-get-started/). - Comments are now available for reports, to add perspective and collaborate with others. You can also include attachments with comments. (CTP 2.1) @@ -159,3 +95,5 @@ SQL Server R Services is now renamed **SQL Server Machine Learning Services**, t For more information, see [What's new in SQL Server Machine Learning Services](~/advanced-analytics/what-s-new-in-sql-server-machine-learning-services.md). +## Next steps +See the [SQL Server 2017 Release Notes](sql-server-2017-release-notes.md) From 488f111caae41984a71c8c7d9887b2d5fc438723 Mon Sep 17 00:00:00 2001 From: Theano Petersen Date: Tue, 6 Jun 2017 14:21:03 -0700 Subject: [PATCH 074/336] Update what-s-new-in-sql-server-2017.md --- .../what-s-new-in-sql-server-2017.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/docs/sql-server/what-s-new-in-sql-server-2017.md b/docs/sql-server/what-s-new-in-sql-server-2017.md index c9e01dadda9..96c4604b816 100644 --- a/docs/sql-server/what-s-new-in-sql-server-2017.md +++ b/docs/sql-server/what-s-new-in-sql-server-2017.md @@ -16,7 +16,7 @@ ms.author: "craigg" manager: "jhubbard" --- # What's new in SQL Server 2017 -SQL Server 2017 represents a major step towards making SQL Server a platform that gives you choices of development languages, data types, on-premises or cloud, and operating systems by bringing the power of SQL Server to Linux, Linux-based Docker containers, and Windows. This topic summarizes what is new for specific feature areas in the most recent SQL Server 2017 Release Candidate (RC0, June 2017) and the Community Technical Preview (CTP) releases. +SQL Server 2017 represents a major step towards making SQL Server a platform that gives you choices of development languages, data types, on-premises or cloud, and operating systems by bringing the power of SQL Server to Linux, Linux-based Docker containers, and Windows. This topic summarizes what is new for specific feature areas in the most recent SQL Server 2017 Release Candidate (RC0, June 2017) and Community Technical Preview (CTP) releases. **Try it out:** [Download the SQL Server 2017 Community Technology Preview](http://go.microsoft.com/fwlink/?LinkID=829477) @@ -34,12 +34,12 @@ New in the **SQL Server 2017 Release Candidate** (RC0, June 2017): ## SQL Server Database Engine SQL Server 2017 includes many new Database Engine features, enhancements, and performance improvements. - **Resumable online index rebuild** resumes an online index rebuild operation from where it stopped after a failure (such as a failover to a replica or insufficient disk space), or pauses and later resumes an online index rebuild operation. See [ALTER INDEX](../t-sql/statements/alter-index-transact-sql.md) and [Guidelines for online index operations](../relational-databases/indexes/guidelines-for-online-index-operations.md). (CTP 2.0) -- A new **IDENTITY_CACHE** option for ALTER DATABASE SCOPED CONFIGURATION allows you to avoid gaps in the values of identity columns if a server restarts unexpectedly or fails over to a secondary server. See [ALTER DATABASE SCOPED CONFIGURATION](../t-sql/statements/alter-database-scoped-configuration-transact-sql.md). (CTP 2.0) +- The **IDENTITY_CACHE** option for ALTER DATABASE SCOPED CONFIGURATION allows you to avoid gaps in the values of identity columns if a server restarts unexpectedly or fails over to a secondary server. See [ALTER DATABASE SCOPED CONFIGURATION](../t-sql/statements/alter-database-scoped-configuration-transact-sql.md). (CTP 2.0) - **Automatic database tuning** provides insight into potential query performance problems, recommends solutions, and can automatically fix identified problems. See [Automatic tuning](../relational-databases/automatic-tuning/automatic-tuning.md). (CTP 2.0) - New **graph database capabilities** for modeling many-to-many relationships include new [CREATE TABLE](../t-sql/statements/create-table-sql-graph.md) syntax for creating node and edge tables, and the keyword [MATCH](../t-sql/queries/match-sql-graph.md) for queries. See [Graph Processing with SQL Server 2017](../relational-databases/graphs/sql-graph-overview.md). (CTP 2.0) - An sp_configure option called `clr strict security` is enabled by default to enhance the security of CLR assemblies. See [CLR strict security](../database-engine/configure-windows/clr-strict-security.md). (CTP 2.0) - Setup now allows specifying initial tempdb file size up to **256 GB** (262,144 MB) per file, with a warning if the file size is set greater than 1GB with IFI not enabled. (CTP 2.0) -- A new **modified_extent_page_count** column in [sys.dm_db_file_space_usage](../relational-databases/system-dynamic-management-views/sys-dm-db-file-space-usage-transact-sql.md) tracks differential changes in each database file, enabling smart backup solutions that perform differential backup or full backup based on percentage of changed pages in the database. (CTP 2.0) +- The **modified_extent_page_count** column in [sys.dm_db_file_space_usage](../relational-databases/system-dynamic-management-views/sys-dm-db-file-space-usage-transact-sql.md) tracks differential changes in each database file, enabling smart backup solutions that perform differential backup or full backup based on percentage of changed pages in the database. (CTP 2.0) - [SELECT INTO](../t-sql/queries/select-into-clause-transact-sql.md) T-SQL syntax now supports loading a table into a FileGroup other than the user's default by using the **ON** keyword. (CTP 2.0) - Cross database transactions are now supported among all databases that are part of an **Always On Availability Group**, including databases that are part of same instance. See [Transactions - Always On Availability Groups and Database Mirroring](../database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md) (CTP 2.0) - New **Availability Groups** functionality includes clusterless support, Minimum Replica Commit Availability Groups setting, and Windows-Linux cross-OS migrations and testing. (CTP 1.3) @@ -69,10 +69,10 @@ SQL Server Analysis Services 2017 introduces many enhancements for tabular model - DAX Editor for SSDT. (CTP 2.0) - Encoding hints, an advanced feature for optimizing data refresh of large in-memory tabular models. (CTP 1.3) - Support for the **1400 Compatibility level** for tabular models. To create new or upgrade existing tabular model projects to the 1400 compatibility level, download and install [SQL Server Data Tools (SSDT) 17.0 RC2](https://go.microsoft.com/fwlink?LinkId=837939). (CTP 1.1) -- Modern **Get Data** experience for tabular models at the 1400 compatibility level. See the [Analysis Services Team Blog](https://blogs.msdn.microsoft.com/analysisservices/2016/12/16/introducing-a-modern-get-data-experience-for-sql-server-2017-on-windows-ctp-1-1-for-analysis-services/). (CTP 1.1) +- A modern **Get Data** experience for tabular models at the 1400 compatibility level. See the [Analysis Services Team Blog](https://blogs.msdn.microsoft.com/analysisservices/2016/12/16/introducing-a-modern-get-data-experience-for-sql-server-2017-on-windows-ctp-1-1-for-analysis-services/). (CTP 1.1) - **Hide Members** property to hide blank members in ragged hierarchies. (CTP 1.1) -- New **Detail Rows** action to **Show Details** for aggregated information, with [SELECTCOLUMNS](https://msdn.microsoft.com/library/mt761759.aspx) and **DETAILROWS** functions for creating Detail Rows expressions. (CTP 1.1) -- New DAX **IN** operator for specifying multiple values. (CTP 1.1) +- New **Detail Rows** end-user action to **Show Details** for aggregated information. [SELECTCOLUMNS](https://msdn.microsoft.com/library/mt761759.aspx) and **DETAILROWS** functions for creating Detail Rows expressions. (CTP 1.1) +- DAX **IN** operator for specifying multiple values. (CTP 1.1) For more information, see [What's new in SQL Server Analysis Services 2017](~/analysis-services/what-s-new-in-sql-server-analysis-services-2017.md). @@ -82,18 +82,19 @@ For more information, see [What's new in SQL Server Analysis Services 2017](~/an - OData Source and OData Connection Manager now support connecting to the OData feeds of Microsoft Dynamics AX Online and Microsoft Dynamics CRM Online. (CTP 1.0) ## SQL Server Reporting Services (SSRS) -As of CTP 2.1, SSRS is no longer available to install through SQL Server setup. [Go to the Microsoft download center](https://www.microsoft.com/download/details.aspx?id=55253) to download the May 2017 Preview of **Power BI Report Server** and Power BI Desktop optimized for Power BI Report Server. For information about Power BI Report Server, see [Get started with Power BI Report Server](https://powerbi.microsoft.com/documentation/reportserver-get-started/). +As of CTP 2.1, SSRS is no longer available to install through SQL Server setup. Go to the Microsoft Download Center to [download the May 2017 Preview of Power BI Report Server and Power BI Desktop optimized for Power BI Report Server](https://www.microsoft.com/download/details.aspx?id=55253). For information about Power BI Report Server, see [Get started with Power BI Report Server](https://powerbi.microsoft.com/documentation/reportserver-get-started/). - Comments are now available for reports, to add perspective and collaborate with others. You can also include attachments with comments. (CTP 2.1) - In the latest releases of Report Builder and SQL Server Data Tools, you can create native DAX queries against supported SQL Server Analysis Services tabular data models by dragging and dropping desired fields in the query designers. See the [Reporting Services blog](https://blogs.msdn.microsoft.com/sqlrsteamblog/2017/03/09/query-designer-support-for-dax-now-available-in-report-builder-and-sql-server-data-tools/). For more information, see [What's new in SQL Server Reporting Services (SSRS)](~/reporting-services/what-s-new-in-sql-server-reporting-services-ssrs.md). ## SQL Server Machine Learning Services -SQL Server R Services is now renamed **SQL Server Machine Learning Services**, to reflect new support for Python as well as R languages. You can use Machine Learning Services (In-Database) to run R or Python scripts in SQL Server, or install Microsoft Machine Learning Server (standalone) to deploy and consume R and Python models that don't require SQL Server. Both platforms include new MicrosoftML algorithms for distributed machine learning, and the latest version of Microsoft R (version 9.1.0). (CTP 2.0) +SQL Server R Services is now renamed **SQL Server Machine Learning Services**, to reflect new support for Python in addition to R languages. You can use Machine Learning Services (In-Database) to run R or Python scripts in SQL Server, or install Microsoft Machine Learning Server (Standalone) to deploy and consume R and Python models that don't require SQL Server. Both platforms include new MicrosoftML algorithms for distributed machine learning, and the latest version of Microsoft R (version 9.1.0). (CTP 2.0) - Machine learning with Python includes the **revoscalepy** module, which supports a subset of the distributed algorithms and compute contexts provided in RevoScaleR. - You can easily create multiple models in parallel from R by using the new **rxExecBy** function. Supported compute contexts include RxSpark and RxInSQLServer. (CTP 2.0) For more information, see [What's new in SQL Server Machine Learning Services](~/advanced-analytics/what-s-new-in-sql-server-machine-learning-services.md). ## Next steps -See the [SQL Server 2017 Release Notes](sql-server-2017-release-notes.md) +See the [SQL Server 2017 Release Notes](sql-server-2017-release-notes.md). +Find out [What's new in SQL Server 2016](what-s-new-in-sql-server-2016.md). From da69ae2fc001faadd674232b777eb83559622c66 Mon Sep 17 00:00:00 2001 From: Theano Petersen Date: Tue, 6 Jun 2017 14:23:10 -0700 Subject: [PATCH 075/336] Update what-s-new-in-sql-server-2017.md --- docs/sql-server/what-s-new-in-sql-server-2017.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/sql-server/what-s-new-in-sql-server-2017.md b/docs/sql-server/what-s-new-in-sql-server-2017.md index 96c4604b816..5b2ecc1151e 100644 --- a/docs/sql-server/what-s-new-in-sql-server-2017.md +++ b/docs/sql-server/what-s-new-in-sql-server-2017.md @@ -96,5 +96,5 @@ SQL Server R Services is now renamed **SQL Server Machine Learning Services**, t For more information, see [What's new in SQL Server Machine Learning Services](~/advanced-analytics/what-s-new-in-sql-server-machine-learning-services.md). ## Next steps -See the [SQL Server 2017 Release Notes](sql-server-2017-release-notes.md). -Find out [What's new in SQL Server 2016](what-s-new-in-sql-server-2016.md). +- See the [SQL Server 2017 Release Notes](sql-server-2017-release-notes.md). +- Find out [What's new in SQL Server 2016](what-s-new-in-sql-server-2016.md). From 5558b98da3df4fcf1dd22819fbe7ef04100852e0 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Wed, 7 Jun 2017 10:20:39 -0700 Subject: [PATCH 076/336] Renamed mispelled file --- ...transact-sql.md => sys-trusted-assemblies-transact-sql.md} | 0 .../sys-sp-add-trusted-assembly-transact-sql.md | 4 ++-- .../sys-sp-drop-trusted-assembly-transact-sql.md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) rename docs/relational-databases/system-catalog-views/{sys-trusted-assembies-transact-sql.md => sys-trusted-assemblies-transact-sql.md} (100%) diff --git a/docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md b/docs/relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md similarity index 100% rename from docs/relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md rename to docs/relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md diff --git a/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md b/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md index 0b701bbf9d2..4e653a6503f 100644 --- a/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md +++ b/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md @@ -41,7 +41,7 @@ sp_add_trusted_assembly ## Remarks -This procedure adds an assembly to [sys.trusted_assemblies](../../relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md). +This procedure adds an assembly to [sys.trusted_assemblies](../../relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md). ## Arguments @@ -67,7 +67,7 @@ N'pointudt, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarch ## See Also [sys.sp_drop_trusted_assembly](sys-sp-drop-trusted-assembly-transact-sql.md) - [sys.trusted_assemblies](../../relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md) + [sys.trusted_assemblies](../../relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md) [CREATE ASSEMBLY (Transact-SQL)](../../t-sql/statements/create-assembly-transact-sql.md) [CLR strict security](../../database-engine/configure-windows/clr-strict-security.md) [sys.assemblies](../../relational-databases/system-catalog-views/sys-assemblies-transact-sql.md) diff --git a/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md b/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md index 0ab411d2285..b51ed338422 100644 --- a/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md +++ b/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md @@ -45,7 +45,7 @@ Canonical name that encodes the simple name, version number, culture, public key ## Remarks -This procedure removes an assembly from [sys.trusted_assemblies](../../relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md). +This procedure removes an assembly from [sys.trusted_assemblies](../../relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md). ## Permissions @@ -62,7 +62,7 @@ N'pointudt, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarch ## See Also [sys.sp_add_trusted_assembly](sys-sp-add-trusted-assembly-transact-sql.md) - [sys.trusted_assemblies](../../relational-databases/system-catalog-views/sys-trusted-assembies-transact-sql.md) + [sys.trusted_assemblies](../../relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md) [DROP ASSEMBLY (Transact-SQL)](../../t-sql/statements/drop-assembly-transact-sql.md) [sys.assemblies](../../relational-databases/system-catalog-views/sys-assemblies-transact-sql.md) [sys.dm_clr_loaded_assemblies](../../relational-databases/system-dynamic-management-views/sys-dm-clr-loaded-assemblies-transact-sql.md) From c3c3d389be8c5efb0299e6a9022b4e066b253921 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Wed, 7 Jun 2017 14:07:20 -0700 Subject: [PATCH 077/336] Changing Witness Replica to Witness. --- .../sql-server-linux-availability-group-ha.md | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index f8bd62c7357..385b91417a2 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -36,15 +36,15 @@ The design patters are three availability group configuarations. The configurati - **Three synchronous replicas** -- **Two synchronous replicas and a witness replica** +- **Two synchronous replicas and a witness** - **Two synchronous replicas availability group** ## How the configuration affects default resource settings -The cluster resource setting `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` guarantees that each transaction is written to a minimum number of secondary replica logs before committing the transaction on the primary replica. This setting can affect both high availability and data protection, depending on the configuration. When you install the SQL Server resource agent - `mssql-sserver-ha` - and create a cluster resource for the availability group, the cluster manager detects the availability group configuration and sets `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` accordingly. +The cluster resource setting `required_synchronized_secondaries_to_commit` guarantees that each transaction is written to a minimum number of secondary replica logs before committing the transaction on the primary replica. This setting can affect both high availability and data protection, depending on the configuration. When you install the SQL Server resource agent - `mssql-sserver-ha` - and create a cluster resource for the availability group, the cluster manager detects the availability group configuration and sets `required_synchronized_secondaries_to_commit` accordingly. -If supported by the configuration, the resource agent parameter `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` is set to the value that provides high availability and data protection. If the configuration cannot support both the default is set for data protection. For more information, see [Understand SQL Server resource agent for pacemaker](#pacemakerNotify). +If supported by the configuration, the resource agent parameter `required_synchronized_secondaries_to_commit` is set to the value that provides high availability and data protection. If the configuration cannot support both the default is set for data protection. For more information, see [Understand SQL Server resource agent for pacemaker](#pacemakerNotify). The following sections explain the default behavior for the cluster resource. @@ -58,7 +58,7 @@ This configuration consists of three synchronous replicas. By default, it provid The following table describes the high availability and data protection behavior based on the settings for three synchronous replicas. -|`REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`|0 |1 \*|2 +|`required_synchronized_secondaries_to_commit`|0 |1 \*|2 | --- |:---:|:---:|:---: |High availability| |✔| |Data protection | |✔|✔| @@ -71,27 +71,27 @@ The following table describes the high availability and data protection behavior -## Two synchronous replicas and a witness replica +## Two synchronous replicas and a witness -This configuration has two synchronous replicas and a witness replica to enable high availability and data protection. The witness replica is introduced in SQL Server 2017 CTP 2.2. In this configuration, the servers have the roles of primary replica, secondary replica, or witness replica. The witness replica contains configuration data about the availability group, but not a copy of the availability group user databases. The witness replica requires a SQL Server instance with SQL Server Express edition or higher. +This configuration has two synchronous replicas and a witness to enable high availability and data protection. The witness is introduced in SQL Server 2017 CTP 2.2. In this configuration, the servers have the roles of primary replica, secondary replica, or witness. The witness contains configuration data about the availability group, but not a copy of the availability group user databases. The witness requires a SQL Server instance with SQL Server Express edition or higher. By default, it provides high availability but not data protection. -![Witness replica availability group][2] +![witness availability group][2] -The following table describes the high availability and data protection behavior according to the possible values for an availability group with two synchronous replicas and a witness replica. +The following table describes the high availability and data protection behavior according to the possible values for an availability group with two synchronous replicas and a witness. -|`REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`|0 \*|1 +|`required_synchronized_secondaries_to_commit`|0 \*|1 | --- |:---:|:---: |High availability |✔| | |Data protection |✔|✔| |Automatic failover after primary replica outage| |✔| |Primary replica available after secondary replica outage| |✔| -|Primary replica available after witness replica outage|✔| | +|Primary replica available after witness outage|✔| | \* Default setting when availability group is added as a resource in a cluster. -For additional information, see [More about a witness replica](#WitnessReplica). +For additional information, see [More about a witness](#WitnessReplica). @@ -107,12 +107,12 @@ The two synchronous replicas configuration is optimized for data protection and The following table describes the data protection behavior according to the possible values for two synchronous replicas availability group. -|`REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`|1 \*|0 +|`required_synchronized_secondaries_to_commit`|0 |1 \* | --- |:---|:--- -|Automatic failover |✔| | -|Data protection |✔| | -|Automatic failover after primary replica outage|✔ \*\*| | -|Primary replica available after secondary replica outage| |✔| +|Automatic failover | |✔| +|Data protection | |✔| +|Automatic failover after primary replica outage| |✔ \*\* | +|Primary replica available after secondary replica outage|✔| | \* Default setting when availability group is added as a resource in a cluster. @@ -123,22 +123,22 @@ The two synchronous replicas configuration may be the most economical because it -## More about a witness replica +## More about a witness -A witness replica in a SQL Server Always On availability group enables a configuration with high availability and data protection without using a third replica - a *witness replica*. Any edition of SQL Server can host a witness replica. A witness replica contains availability group configuration data like availability group roles, and synchronization status data in the `master` database. It does not include replicated user databases. The witness replica uses the `WITNESS-COMMIT` availability mode. It is never the primary replica. +A witness in a SQL Server Always On availability group enables a configuration with high availability and data protection without using a third replica - a *witness*. Any edition of SQL Server can host a witness. A witness contains availability group configuration data like availability group roles, and synchronization status data in the `master` database. It does not include replicated user databases. The witness uses the `WITNESS-COMMIT` availability mode. It is never the primary replica. -Use a witness replica in an availability group with two synchronous replicas - one primary replica and one secondary replica. If an availability group does not include two synchronous replicas, you cannot use a witness replica. You can also include additional asynchronous replicas. The DDL `CREATE AVAILABILITY GROUP` will fail if the group does not include two synchronous replicas. Likewise, you cannot create an availability group with only one primary replica and a witness replica. An availability group cannot include more than one witness replica. +Use a witness in an availability group with two synchronous replicas - one primary replica and one secondary replica. If an availability group does not include two synchronous replicas, you cannot use a witness. You can also include additional asynchronous replicas. The DDL `CREATE AVAILABILITY GROUP` will fail if the group does not include two synchronous replicas. Likewise, you cannot create an availability group with only one primary replica and a witness. An availability group cannot include more than one witness. -You can use any edition of SQL Server 2017 to host a witness replica. This includes SQL Server Enterprise Edition, Standard Edition, or Express Edition. +You can use any edition of SQL Server 2017 to host a witness. This includes SQL Server Enterprise Edition, Standard Edition, or Express Edition. -On a witness replica you cannot do the following things: +On a witness you cannot do the following things: - Create an availability group - you can include the witness in an availability group, or join it to an existing availability group. -- Failover an availability group to a witness replica. +- Failover an availability group to a witness. -A witness replica availability mode `WITNESS_COMMIT`. In this mode, configuration information is synchronously committed to the witness replica. You cannot modify the availability mode of a witness replica. To change the availability mode of a witness replica, remove the replica and recreate it as a secondary replica with an appropriate availability mode. +A witness availability mode `WITNESS_COMMIT`. In this mode, configuration information is synchronously committed to the witness. You cannot modify the availability mode of a witness. To change the availability mode of a witness, remove the replica and recreate it as a secondary replica with an appropriate availability mode. -To create an availabiltiy group with two synchronous replicas and a witness replica, see [Create availability group with two synchronous replicas and a witness replica](sql-server-linux-availability-group-configure-ha.md#witnessScript). +To create an availabiltiy group with two synchronous replicas and a witness, see [Create availability group with two synchronous replicas and a witness](sql-server-linux-availability-group-configure-ha.md#witnessScript). @@ -148,20 +148,20 @@ SQL Server 2017 CTP 1.4 added `sequence_number` to `sys.availability_groups` to When Pacemaker decides to promote a replica to primary, it first sends a notification to all replicas to extract the sequence number and store it (we call this the pre-promote notification). Next, when Pacemaker actually tries to promote a replica to primary, the replica only promotes itself if its sequence number is the highest of all the sequence numbers from all replicas and rejects the promote operation otherwise. In this way only the replica with the highest sequence number can be promoted to primary, ensuring no data loss. -Note that this is only guaranteed to work as long as at least one replica available for promotion has the same sequence number as the previous primary. To ensure this, the default behavior is for the Pacemaker resource agent to automatically set `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` such that at least one synchronous secondary replica is up to date and available to be the target of an automatic failover. With each monitoring action, the value of `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` is computed (and updated if necessary) as ('number of synchronous replicas' / 2). Then, at failover time, the resource agent will require (`total number of replicas` - `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` replicas) to respond to the pre-promote notification to be able to promote one of them to primary. The replica with the highest `sequence_number` will be promoted to primary. +Note that this is only guaranteed to work as long as at least one replica available for promotion has the same sequence number as the previous primary. To ensure this, the default behavior is for the Pacemaker resource agent to automatically set `required_synchronized_secondaries_to_commit` such that at least one synchronous secondary replica is up to date and available to be the target of an automatic failover. With each monitoring action, the value of `required_synchronized_secondaries_to_commit` is computed (and updated if necessary) as ('number of synchronous replicas' / 2). Then, at failover time, the resource agent will require (`total number of replicas` - `required_synchronized_secondaries_to_commit` replicas) to respond to the pre-promote notification to be able to promote one of them to primary. The replica with the highest `sequence_number` will be promoted to primary. For example, let's consider the case of an availability group with three synchronous replicas - one primary replica and two synchronous secondary replicas. -- `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` is 3 / 2 = 1 +- `required_synchronized_secondaries_to_commit` is 3 / 2 = 1 - The required number of replicas to respond to pre-promote action is 3 - 1 = 2. So 2 replicas have to be up for the failover to be triggered. This means that, in the case of primary outage, if one of the secondary replicas is unresponsive and only one of the secondaries responds to the pre-promote action, the resource agent cannot guarantee that the secondary that responded has the highest sequence_number, and a failover is not triggered. -A user can choose to override the default behavior, and prevent the availability group resource from setting `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` automatically as above. +A user can choose to override the default behavior, and prevent the availability group resource from setting `required_synchronized_secondaries_to_commit` automatically as above. >[!IMPORTANT] ->When `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` is 0 there is risk of data loss. In the case of an outage of the primary, the resource agent will not automatically trigger a failover. The user has to decide if they want to wait for primary to recover or manually fail over. +>When `required_synchronized_secondaries_to_commit` is 0 there is risk of data loss. In the case of an outage of the primary, the resource agent will not automatically trigger a failover. The user has to decide if they want to wait for primary to recover or manually fail over. -To set `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` to 0, run: +To set `required_synchronized_secondaries_to_commit` to 0, run: ```bash sudo pcs resource update <**ag1**> required_synchronized_secondaries_to_commit=0 @@ -174,7 +174,7 @@ sudo pcs resource update <**ag1**> required_synchronized_secondaries_to_commit= ``` >[!NOTE] ->Updating resource properties causes all replicas to stop and restart. This means primary will temporarily be demoted to secondary, then promoted again which will cause temporary write unavailability. The new value for`REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT` will only be set once replicas are restarted, so it won't be instantaneous with running the pcs command. +>Updating resource properties causes all replicas to stop and restart. This means primary will temporarily be demoted to secondary, then promoted again which will cause temporary write unavailability. The new value for`required_synchronized_secondaries_to_commit` will only be set once replicas are restarted, so it won't be instantaneous with running the pcs command. [1]: ./media/sql-server-linux-availability-group-ha/1-read-scale-out.png From b402771a44c1809ca516cc4864ef932c6ea64661 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Wed, 7 Jun 2017 14:18:39 -0700 Subject: [PATCH 078/336] Replae the term witness replica with witness. --- ...sql-server-linux-availability-group-configure-ha.md | 10 +++++----- .../create-availability-group-transact-sql.md | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-configure-ha.md b/docs/linux/sql-server-linux-availability-group-configure-ha.md index c13eacac460..e35ba850f0a 100644 --- a/docs/linux/sql-server-linux-availability-group-configure-ha.md +++ b/docs/linux/sql-server-linux-availability-group-configure-ha.md @@ -78,11 +78,11 @@ There are three availability group configurations. - [Three synchronous replicas](sql-server-linux-availability-group-ha.md#threeSynch) -- [Two synchronous replicas and a witness replica](sql-server-linux-availability-group-ha.md#witness) +- [Two synchronous replicas and a witness](sql-server-linux-availability-group-ha.md#witness) - [Two synchronous replicas availability group](sql-server-linux-availability-group-ha.md#twoSynch) -For high availability, use either three synchronous replicas, or two synchronous replicas and a witness replica. +For high availability, use either three synchronous replicas, or two synchronous replicas and a witness. For information about all three configurations, see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). @@ -130,12 +130,12 @@ Run **only one** of the following scripts. -- Create availability group with two synchronous replicas and a witness replica +- Create availability group with two synchronous replicas and a witness - Include two replicas with synchronous availability mode, and a witness replica. For example, the following script creates an availability group called `ag1`. `node1` and `node2` host replicas in synchronous mode, with automatic seeding and automatic failover. `node3` is a witness replica. The script defines only the SQL Server instance name `node3`, the endpoint, and the availability mode. + Include two replicas with synchronous availability mode, and a witness. For example, the following script creates an availability group called `ag1`. `node1` and `node2` host replicas in synchronous mode, with automatic seeding and automatic failover. `node3` is a witness. The script defines only the SQL Server instance name `node3`, the endpoint, and the availability mode. >[!IMPORTANT] - >Only run the following script to create an availability group with two synchronous replicas and a witness replica. Do not run the following script if you ran the preceding script. + >Only run the following script to create an availability group with two synchronous replicas and a witness. Do not run the following script if you ran the preceding script. ```Transact-SQL CREATE AVAILABILITY GROUP [ag1] diff --git a/docs/t-sql/statements/create-availability-group-transact-sql.md b/docs/t-sql/statements/create-availability-group-transact-sql.md index 06e035b66d6..62cdca3d92d 100644 --- a/docs/t-sql/statements/create-availability-group-transact-sql.md +++ b/docs/t-sql/statements/create-availability-group-transact-sql.md @@ -240,7 +240,7 @@ CREATE AVAILABILITY GROUP group_name Is a port number that is associated with the mirroring endpoint of the partner server instance (for the ENDPOINT_URL option) or the port number used by the [!INCLUDE[ssDE](../../includes/ssde-md.md)] of the server instance (for the READ_ONLY_ROUTING_URL option). AVAILABILITY_MODE **=** { {SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT } | WITNESS_COMMMIT } - SYNCHRONOUS_COMMIT or ASYNCHRONOUS_COMMIT specifies whether the primary replica has to wait for the secondary replica to acknowledge the hardening (writing) of the log records to disk before the primary replica can commit the transaction on a given primary database. The transactions on different databases on the same primary replica can commit independently. WITNESS_COMMIT designates a replica as a witness replica. See [More about a witness replica](../../linux/sql-server-linux-availability-group-ha.md#WitnessReplica). + SYNCHRONOUS_COMMIT or ASYNCHRONOUS_COMMIT specifies whether the primary replica has to wait for the secondary replica to acknowledge the hardening (writing) of the log records to disk before the primary replica can commit the transaction on a given primary database. The transactions on different databases on the same primary replica can commit independently. WITNESS_COMMIT designates a replica as a witness. See [More about a witness](../../linux/sql-server-linux-availability-group-ha.md#WitnessReplica). SYNCHRONOUS_COMMIT Specifies that the primary replica will wait to commit transactions until they have been hardened on this secondary replica (synchronous-commit mode). You can specify SYNCHRONOUS_COMMIT for up to three replicas, including the primary replica. From a1858770ff5febfbb7287e39c7ccaa4f3516b0a9 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Wed, 7 Jun 2017 17:42:25 -0700 Subject: [PATCH 079/336] UPdate the T-SQL --- .../sql-server-linux-availability-group-configure-ha.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-configure-ha.md b/docs/linux/sql-server-linux-availability-group-configure-ha.md index e35ba850f0a..a321c17ad96 100644 --- a/docs/linux/sql-server-linux-availability-group-configure-ha.md +++ b/docs/linux/sql-server-linux-availability-group-configure-ha.md @@ -132,7 +132,7 @@ Run **only one** of the following scripts. - Create availability group with two synchronous replicas and a witness - Include two replicas with synchronous availability mode, and a witness. For example, the following script creates an availability group called `ag1`. `node1` and `node2` host replicas in synchronous mode, with automatic seeding and automatic failover. `node3` is a witness. The script defines only the SQL Server instance name `node3`, the endpoint, and the availability mode. + Include two replicas with synchronous availability mode and a witness. For example, the following script creates an availability group called `ag1`. `node1` and `node2` host replicas in synchronous mode, with automatic seeding and automatic failover. `node3` is a witness. The script defines only the SQL Server instance name `node3`, the endpoint, and the availability mode. >[!IMPORTANT] >Only run the following script to create an availability group with two synchronous replicas and a witness. Do not run the following script if you ran the preceding script. @@ -156,7 +156,9 @@ Run **only one** of the following scripts.    N'node3' WITH (        ENDPOINT_URL = N'tcp://node3:5022',        AVAILABILITY_MODE = WITNESS_COMMIT -    ) +    ); + + ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE; ``` >[!NOTE] From d70f799c4e4b4dfc1262292a283228733568e336 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Thu, 8 Jun 2017 07:32:06 -0700 Subject: [PATCH 080/336] Whats new DB, Updated release to 3 --- .../what-s-new-in-sql-server-2017-database-engine.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md b/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md index 95dba40aa86..a70f5f283f9 100644 --- a/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md +++ b/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md @@ -1,7 +1,7 @@ --- title: "What's New in SQL Server 2017 (Database Engine) | Microsoft Docs" ms.custom: "" -ms.date: "05/18/2017" +ms.date: "06//2017" ms.prod: "sql-server-2017" ms.reviewer: "" ms.suite: "" @@ -21,7 +21,7 @@ manager: "jhubbard" **Note:** SQL Server 2017 also includes the features added in SQL Server 2016 service packs. For those items, see [What's New in SQL Server 2016 (Database Engine)](../../database-engine/configure-windows/what-s-new-in-sql-server-2016-database-engine.md). -## SQL Server Database Engine (CTP 2.2) +## SQL Server Database Engine (CTP 3.0) - CLR assemblies can now be added to a whitelist, as a work around for the `clr strict security` feature described in CTP 2.0. [sp_add_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md), [sp_drop_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md), and [sys.trusted_asssemblies](../../relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md) are added to support the white list of trusted assemblies. ## SQL Server Database Engine (CTP 2.1) From 3642fc23b3e9f83802299342fccbf3add1a1e863 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Thu, 8 Jun 2017 07:57:34 -0700 Subject: [PATCH 081/336] A bunch of Acrolinx changes. --- ...-new-in-sql-server-2017-database-engine.md | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md b/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md index a70f5f283f9..c814a69c13e 100644 --- a/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md +++ b/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md @@ -22,27 +22,27 @@ manager: "jhubbard" ## SQL Server Database Engine (CTP 3.0) -- CLR assemblies can now be added to a whitelist, as a work around for the `clr strict security` feature described in CTP 2.0. [sp_add_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md), [sp_drop_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md), and [sys.trusted_asssemblies](../../relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md) are added to support the white list of trusted assemblies. +- CLR assemblies can now be added to a whitelist, as a work-around for the `clr strict security` feature described in CTP 2.0. [sp_add_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md), [sp_drop_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md), and [sys.trusted_asssemblies](../../relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md) are added to support the white list of trusted assemblies. ## SQL Server Database Engine (CTP 2.1) - A new, DMF [sys.dm_db_log_stats](../../relational-databases/system-dynamic-management-views/sys-dm-db-log-stats-transact-sql.md), is introduced to expose summary level attributes and information on transaction log files; useful for monitoring the health of the transaction log. ## SQL Server Database Engine (CTP 2.0) -- **Resumable online index rebuild**. Resumable online index rebuild allows you to resume an online index rebuild operation from where it stopped after a failure (such as a failover to a replica or insufficient disk space). You can also pause and later resume an online index rebuild operation. For example, you might need to temporarily free up systems resources in order to execute a high priority task or complete the index rebuild in another miniatous window if the available maintenance windows is too short for a large table. Finally, resumable online index rebuild does not require significant log space, which allows you to perform log truncation while the resumable rebuild operation is running. See [ALTER INDEX](../../t-sql/statements/alter-index-transact-sql.md) and [Guidelines for online index operations](../../relational-databases/indexes/guidelines-for-online-index-operations.md). -- **IDENTITY_CACHE option for ALTER DATABASE SCOPED CONFIGURATION**. A new option IDENTITY_CACHE was added to ALTER DATABASE SCOPED CONFIGURATION T-SQL statement. When this option is set to OFF it allows to avoid gaps in the values of identity columns in case a server restarts unexpectedly or fails over to a secondary server. See [ALTER DATABASE SCOPED CONFIGURATION](../../t-sql/statements/alter-database-scoped-configuration-transact-sql.md). -- CLR uses Code Access Security (CAS) in the .NET Framework, which is no longer supported as a security boundar. A CLR assembly created with `PERMISSION_SET = SAFE` may be able to access external system resources, call unmanaged code, and acquire sysadmin privileges. Beginning with [!INCLUDE[sssqlv14-md](../../includes/sssqlv14-md.md)], an `sp_configure` option called `clr strict security` is introduced to enhance the security of CLR assemblies. `clr strict security` is enabled by default, and treats `SAFE` and `EXTERNAL_ACCESS` assemblies as if they were marked `UNSAFE`. The `clr strict security` option can be disabled for backward compatibility, but this is not recommended. Microsoft recommends that all assemblies be signed by a certificate or asymmetric key with a corresponding login that has been granted `UNSAFE ASSEMBLY` permission in the master database. For more information, see [CLR strict security](clr-strict-security.md). +- **Resumable online index rebuild**. Resumable online index rebuild allows you to resume an online index rebuild operation from where it stopped after a failure (such as a failover to a replica or insufficient disk space). You can also pause and later resume an online index rebuild operation. For example, you might need to temporarily free up systems resources in order to execute a high priority task or complete the index rebuild in another maintenance window if the available maintenance windows is too short for a large table. Finally, resumable online index rebuild does not require significant log space, which allows you to perform log truncation while the resumable rebuild operation is running. See [ALTER INDEX](../../t-sql/statements/alter-index-transact-sql.md) and [Guidelines for online index operations](../../relational-databases/indexes/guidelines-for-online-index-operations.md). +- **IDENTITY_CACHE option for ALTER DATABASE SCOPED CONFIGURATION**. A new option IDENTITY_CACHE was added to `ALTER DATABASE SCOPED CONFIGURATION` T-SQL statement. When this option is set to `OFF`, it allows the Database Engine to avoid gaps in the values of identity columns in case a server restarts unexpectedly or fails over to a secondary server. See [ALTER DATABASE SCOPED CONFIGURATION](../../t-sql/statements/alter-database-scoped-configuration-transact-sql.md). +- CLR uses Code Access Security (CAS) in the .NET Framework, which is no longer supported as a security boundary. A CLR assembly created with `PERMISSION_SET = SAFE` may be able to access external system resources, call unmanaged code, and acquire sysadmin privileges. Beginning with [!INCLUDE[sssqlv14-md](../../includes/sssqlv14-md.md)], an `sp_configure` option called `clr strict security` is introduced to enhance the security of CLR assemblies. `clr strict security` is enabled by default, and treats `SAFE` and `EXTERNAL_ACCESS` assemblies as if they were marked `UNSAFE`. The `clr strict security` option can be disabled for backward compatibility, but this is not recommended. Microsoft recommends that all assemblies be signed by a certificate or asymmetric key with a corresponding login that has been granted `UNSAFE ASSEMBLY` permission in the master database. For more information, see [CLR strict security](clr-strict-security.md). - [!INCLUDE[ssnoversion](../../includes/ssnoversion.md)] now offers graph database capabilities to model many-to-many relationships. This includes new [CREATE TABLE](../../t-sql/statements/create-table-sql-graph.md) syntax for creating node and edge tables, and the keyword [MATCH](../../t-sql/queries/match-sql-graph.md) for queries. For more information, see [Graph Processing with SQL Server 2017](../../relational-databases/graphs/sql-graph-overview.md). - Automatic tuning is a database feature that provides insight into potential query performance problems, recommend solutions, and automatically fix identified problems. Automatic tuning in [!INCLUDE[ssnoversion](../../includes/ssnoversion.md)], notifies you whenever a potential performance issue is detected, and lets you apply corrective actions, or lets the [!INCLUDE[ssde-md](../../includes/ssde-md.md)] automatically fix performance problems. For more information, see [Automatic tuning](../../relational-databases/automatic-tuning/automatic-tuning.md). - **PERFORMANCE ENHANCEMENT FOR NON CLUSTERED INDEX BUILD ON MEMORY-OPTIMIZED TABLES**. Performance of bwtree (non-clustered) index rebuild for MEMORY_OPTIMIZED tables during database recovery has been significantly optimized. This improvement substantially reduces the database recovery time when non-clustered indexes are used. - [sys.dm_os_sys_info](../../relational-databases/system-dynamic-management-views/sys-dm-os-sys-info-transact-sql.md) has three new columns: socket_count, cores_per_socket, numa_node_count. -- A new column **modified_extent_page_count** is introduced in [sys.dm_db_file_space_usage](../../relational-databases/system-dynamic-management-views/sys-dm-db-file-space-usage-transact-sql.md) to track differential changes in each database file of the database. The new column modified_extent_page_count will allow you to build smart backup solution which performs differential backup if percentage changed pages in the database is below a threshold (say 70-80%) else perform full database backup. +- A new column **modified_extent_page_count**, is introduced in [sys.dm_db_file_space_usage](../../relational-databases/system-dynamic-management-views/sys-dm-db-file-space-usage-transact-sql.md) to track differential changes in each database file of the database. The new column modified_extent_page_count allows you to build smart backup solution, which performs differential backup if percentage changed pages in the database is below a threshold (say 70-80%) else perform full database backup. - **SELECT INTO … ON FileGroup** - [SELECT INTO](../../t-sql/queries/select-into-clause-transact-sql.md) now supports loading a table into a filegroup other than a default filegroup of the user using the **ON** keyword support added in SELECT INTO TSQL syntax. -- **Tempdb Setup Improvements** - The setup will allow specifying initial tempdb file size up to **256 GB (262,144 MB)** per file with a warning to customers if the file size is set to value greater than 1GB and if IFI is not enabled. It is important to understand the implication of not enabling instant file initialization (IFI) where setup time can increase exponentially depending on the initial size of tempdb data file specified. IFI is not applicable to transaction log size so specifying larger value of transaction log can invariably increase the setup time while starting up tempdb during setup irrespective of the IFI setting for SQL Server service account. -- A new dmv [sys.dm_tran_version_store_space_usage](../../relational-databases/system-dynamic-management-views/sys-dm-tran-version-store-space-usage.md)is introduced to track version store usage per database. This new dmv will be useful in monitoring tempdb for version store usage for you to proactively plan tempdb sizing based on the version store usage requirement per database without any performance toll or overheads of running it on production servers. -- A new DMF [sys.dm_db_log_info](../../relational-databases/system-dynamic-management-views/sys-dm-db-log-info-transact-sql.md) is introduced to expose the VLF information similar to DBCC LOGINFO to monitor, alert and avert potential transaction log issues caused due to number of VLFs, VLF size or shrinkfile issues experienced by customers. -- **Improved Backup performance for small databases on high end servers** - While performing backup of databases in SQL Server, the backup process requires multiple iteration of buffer pool to drain the on-going I/Os. As a result, the backup time is not just the function of database size but also a function of active buffer pool size. In SQL Server 2017, the backup is optimized to avoid multiple iterations of buffer pool resulting in dramatic gains in backup performance for small to medium databases. The performance gain reduces as the database size increases as the pages to backup and backup IO takes more time compared to iterating buffer pool. -- **DBCC CLONEDATABASE Improvements** - DBCC CLONEDATABASE will flush runtime statistics while cloning to avoid missing query store runtime statistics in database clone. In addition to this, DBCC CLONEDATABASE is further enhanced to support and clone fulltext indexes. +- **Tempdb Setup Improvements** - The setup allows specifying initial tempdb file size up to **256 GB (262,144 MB)** per file with a warning to customers if the file size is set to value greater than 1 GB and if IFI is not enabled. It is important to understand the implication of not enabling instant file initialization (IFI) where setup time can increase exponentially depending on the initial size of tempdb data file specified. IFI is not applicable to transaction log size so specifying larger value of transaction log can invariably increase the setup time while starting up tempdb during setup irrespective of the IFI setting for SQL Server service account. +- A new dmv [sys.dm_tran_version_store_space_usage](../../relational-databases/system-dynamic-management-views/sys-dm-tran-version-store-space-usage.md)is introduced to track version store usage per database. This new dmv is be useful in monitoring tempdb for version store usage for you to proactively plan tempdb sizing based on the version store usage requirement per database without any performance toll or overheads of running it on production servers. +- A new DMF [sys.dm_db_log_info](../../relational-databases/system-dynamic-management-views/sys-dm-db-log-info-transact-sql.md) is introduced to expose the VLF information similar to DBCC LOGINFO to monitor, alert, and avert potential transaction log issues caused due to number of VLFs, VLF size or shrinkfile issues experienced by customers. +- **Improved Backup performance for small databases on high end servers** - While performing backup of databases in SQL Server, the backup process requires multiple iterations of buffer pool to drain the on-going I/Os. As a result, the backup time is not just the function of database size but also a function of active buffer pool size. In SQL Server 2017, the backup is optimized to avoid multiple iterations of buffer pool resulting in dramatic gains in backup performance for small to medium databases. The performance gain reduces as the database size increases as the pages to backup and backup IO takes more time compared to iterating buffer pool. +- **DBCC CLONEDATABASE Improvements** - DBCC CLONEDATABASE flushes runtime statistics while cloning to avoid missing query store runtime statistics in database clone. In addition to this, DBCC CLONEDATABASE is further enhanced to support and clone fulltext indexes. ## SQL Server Database Engine (CTP 1.4) - There are no new Database Engine features in this CTP. @@ -55,8 +55,8 @@ manager: "jhubbard" - Availability Groups can now work across Windows-Linux to enable cross-OS migrations and testing. - Temporal Tables Retention Policy support added, - New DMV SYS.DM_DB_STATS_HISTOGRAM -- Online non-clustered columnstore index buill and rebuild support added -- 5 new dynamic management views to return information about Linux process. For more information, see [Linux Process Dynamic Management Views](../../relational-databases/system-dynamic-management-views/linux-process-dynamic-management-views-transact-sql.md). +- Online non-clustered columnstore index build and rebuild support added +- Five new dynamic management views to return information about Linux process. For more information, see [Linux Process Dynamic Management Views](../../relational-databases/system-dynamic-management-views/linux-process-dynamic-management-views-transact-sql.md). - [sys.dm_db_stats_histogram (Transact-SQL)](../../relational-databases/system-dynamic-management-views/sys-dm-db-stats-histogram-transact-sql.md) is added for examining statistics. ## SQL Server Database Engine (CTP 1.2) @@ -77,13 +77,13 @@ manager: "jhubbard" - New string functions [CONCAT_WS](../../t-sql/functions/concat-ws-transact-sql.md), [TRANSLATE](../../t-sql/functions/translate-transact-sql.md), and [TRIM](../../t-sql/functions/trim-transact-sql.md) are added. - The `WITHIN GROUP` clause is now supported for the [STRING_AGG](../../t-sql/functions/string-agg-transact-sql.md) function. - Two new Japanese collation families (Japanese_Bushu_Kakusu_140 and Japanese_XJIS_140) were added, and the collation option Variation-selector-sensitive (_VSS) was added for use in Japanese collations. For more detail see [Collation and Unicode Support](../../relational-databases/collations/collation-and-unicode-support.md) -- New bulk access options ([BULK INSERT](../../t-sql/statements/bulk-insert-transact-sql.md) and [OPENROWSET(BULK...)](../../t-sql/functions/openrowset-transact-sql.md) ) enable access data directly from a file specified as CSV format, and from files stored in Azure Blob storage through the new `BLOB_STORAGE` option of [EXTERNAL DATA SOURCE](../../t-sql/statements/create-external-data-source-transact-sql.md). +- New bulk access options ([BULK INSERT](../../t-sql/statements/bulk-insert-transact-sql.md) and [OPENROWSET(BULK...)](../../t-sql/functions/openrowset-transact-sql.md)) enable access data directly from a file specified as CSV format, and from files stored in Azure Blob storage through the new `BLOB_STORAGE` option of [EXTERNAL DATA SOURCE](../../t-sql/statements/create-external-data-source-transact-sql.md). ## SQL Server Database Engine (CTP 1.0) - Database **COMPATIBILITY_LEVEL** 140 has been added. Customers running in this level will get the latest language features and query optimizer behaviors. This includes changes in each pre-release version Microsoft releases. -- Improvements to the way incremental statistics update thresholds are computed (140 compat mode required). +- Improvements to the way incremental statistics update thresholds are computed (140 compatibility mode required). - [sys.dm_exec_query_statistics_xml](../../relational-databases/system-dynamic-management-views/sys-dm-exec-query-statistics-xml-transact-sql.md) is added. - We have made several performance and language enhancements to Memory-Optimized objects: - `sp_spaceused` is now supported for memory-optimized tables. @@ -91,25 +91,25 @@ manager: "jhubbard" - `CASE` statements are now supported for natively compiled T-SQL modules. - The limitation of 8 indexes on memory-optimized tables has been eliminated. - `TOP (N) WITH TIES` is now supported in natively compiled T-SQL modules. - - `ALTER TABLE` against memory-optimized tables is now substantially faster in most cases. + - `ALTER TABLE` against memory-optimized tables is now usually substantially faster. - Transaction log redo of memory-optimized tables is now done in parallel. This bolsters faster recovery times and significantly increases the sustained throughput of AlwaysOn availability group configuration. - Memory-optimized filegroup files can now be stored on Azure Storage. Backup/Restore of memory-optimized files on Azure Storage is also available now. - Clustered Columnstore Indexes now support LOB columns (nvarchar(max), varchar(max), varbinary(max)). - The [STRING_AGG](../../t-sql/functions/string-agg-transact-sql.md) aggregate function has been added. -- New Permissions: `DATABASE SCOPED CREDENTIAL` is now a class of securable, supporting `CONTROL`, `ALTER`, `REFERENCES`, `TAKE OWNERSHIP`, and `VIEW DEFINITION` permissions. `ADMINISTER DATABASE BULK OPERATIONS` which is restricted to SQL Database is now visible in `sys.fn_builtin_permissions`. +- New Permissions: `DATABASE SCOPED CREDENTIAL` is now a class of securable, supporting `CONTROL`, `ALTER`, `REFERENCES`, `TAKE OWNERSHIP`, and `VIEW DEFINITION` permissions. `ADMINISTER DATABASE BULK OPERATIONS`, which is restricted to SQL Database, is now visible in `sys.fn_builtin_permissions`. - The [sys.dm_os_host_info](../../relational-databases/system-dynamic-management-views/sys-dm-os-host-info-transact-sql.md) DMV is added to provide operating system information for both Windows and Linux. - The database roles are created with R Services for managing permissions associated with packages. For more information, see [R Package management for SQL Server](../../advanced-analytics/r-services/r-package-management-for-sql-server-r-services.md). ## Code Samples for new In-Memory Enhancements -The following subsections provide Transact-SQL code samples which illustrate new In-Memory features which bullet listed in preceding text in this article. +The following subsections provide Transact-SQL code samples, which illustrate new In-Memory features which bullet listed in preceding text in this article. The CTP 1.1 bullet list for In-Memory is [here](#InMemoryBulletsCtp11). #### Computed column in a memory-optimized table -This CREATE TABLE statement illustrates the following features which were mentioned in preceding text about CTP 1.1: +This CREATE TABLE statement illustrates the following features, which were mentioned in preceding text about CTP 1.1: - JSON check constraint on a column. - New computed columns. @@ -133,7 +133,7 @@ CREATE TABLE Product( #### CROSS APPLY, and JSON functions -This CREATE PROCEDURE statement, for a natively compiled stored procedure, illustrates the following features which were mentioned in preceding text about CTP 1.1: +This CREATE PROCEDURE statement, for a natively compiled stored procedure, illustrates the following features, which were mentioned in preceding text about CTP 1.1: - CROSS APPLY operator. - JSON functions. From abd5078e3acb5e3b86e1f27722f7cd4e704e7c7e Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 8 Jun 2017 07:59:35 -0700 Subject: [PATCH 082/336] Updated with Acrolinx --- ...r-linux-availability-group-configure-ha.md | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-configure-ha.md b/docs/linux/sql-server-linux-availability-group-configure-ha.md index a321c17ad96..55739efe571 100644 --- a/docs/linux/sql-server-linux-availability-group-configure-ha.md +++ b/docs/linux/sql-server-linux-availability-group-configure-ha.md @@ -30,7 +30,7 @@ This article describes how to create a SQL Server Always on availability group w You can also create a *read-scale* availability group without a cluster manager. This architecture only provides read-only scalability. It does not provide HA. To create a read-scale availability group, see [Configure read-scale availability group for SQL Server on Linux](sql-server-linux-availability-group-configure-rs.md). -For a configuration that will guarantee high availability and data protection, the availability group must include at least three synchronous commit replicas. For details see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). +Configurations that guarantee high availability and data protection require either three synchronous commit replicas or two synchronous replicas and a witness. For details, see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). All servers must be either physical or virtual, and virtual servers must be on the same virtualization platform. This is because the fencing agents are platform specific. See [Policies for Guest Clusters](https://access.redhat.com/articles/29440#guest_policies). @@ -41,13 +41,13 @@ The steps to create an availability group on Linux servers for high availability 1. [Configure SQL Server on three cluster servers](sql-server-linux-setup.md). >[!IMPORTANT] - >All three servers in the availability group need to be on the same platform - i.e. physical or virtual. This is because the Linux high availability uses fencing agents to isolate resources on servers. The fencing agents are specific for each platform. + >All three servers in the availability group need to be on the same platform - physical or virtual - because Linux high availability uses fencing agents to isolate resources on servers. The fencing agents are specific for each platform. 2. Create the availability group. This step is covered in this current article. 3. Configure a cluster resource manager, like Pacemaker. - The way to configure a cluster resource manager depends on the specific Linux distribution. Follow the distribution specific links below: + The way to configure a cluster resource manager depends on the specific Linux distribution. See the following links for distribution specific instructions: * [RHEL](sql-server-linux-availability-group-cluster-rhel.md) * [SUSE](sql-server-linux-availability-group-cluster-sles.md) @@ -56,21 +56,19 @@ The steps to create an availability group on Linux servers for high availability >[!IMPORTANT] >Production environments require a fencing agent, like STONITH for high availability. The demonstrations in this documentation do not use fencing agents. The demonstrations are for testing and validation only. - >A Linux cluster uses fencing to return the cluster to a known state. The way to configure fencing depends on the distribution and the environment. At this time, fencing is not available in some cloud environments. See [Support Policies for RHEL High Availability Clusters - Virtualization Platforms](https://access.redhat.com/articles/29440) for more information. + >A Linux cluster uses fencing to return the cluster to a known state. The way to configure fencing depends on the distribution and the environment. Currently, fencing is not available in some cloud environments. See [Support Policies for RHEL High Availability Clusters - Virtualization Platforms](https://access.redhat.com/articles/29440) for more information. >For SLES, see [SUSE Linux Enterprise High Availability Extension](https://www.suse.com/documentation/sle-ha-12/singlehtml/book_sleha/book_sleha.html#cha.ha.fencing). 5. Add the availability group as a resource in the cluster. - The way to add the availability group as a resource in the cluster depends on the Linux distribution. - - Follow the distribution specific links below: + The way to add the availability group as a resource in the cluster depends on the Linux distribution. See the following links for distribution specific instructions: * [RHEL](sql-server-linux-availability-group-cluster-rhel.md#create-availability-group-resource) * [SLES](sql-server-linux-availability-group-cluster-sles.md#configure-the-cluster-resources-for-sql-server) * [Ubuntu](sql-server-linux-availability-group-cluster-ubuntu.md#create-availability-group-resource) -[!INCLUDE [Create Prereq](../includes/ss-linux-cluster-availability-group-create-prereq.md)] +[!INCLUDE [Create Prerequisites](../includes/ss-linux-cluster-availability-group-create-prereq.md)] ## Create the availability group @@ -88,11 +86,11 @@ For information about all three configurations, see [High availability and data Create the availability group. In order to create the availability group for HA on Linux, use the [CREATE AVAILABILITY GROUP](https://docs.microsoft.com/en-us/sql/t-sql/statements/create-availability-group-transact-sql) Transact-SQL DDL with `CLUSTER_TYPE = EXTERNAL`. -The `EXTERNAL` value for `CLUSTER_TYPE` option specifies that the an external cluster entity manages the availability group. Pacemaker is an example of an external cluster entity. When the availability group `CLUSTER_TYPE = EXTERNAL`, set primary and secondary replica `FAILOVER_MODE = EXTERNAL`. After you create the availability group, configure the cluster resource for the availability group using the cluster management tools - for example with Pacemaker use `pcs` (on RHEL, Ubuntu) or `crm` (on SLES). See the Linux distribution specific cluster configuration section for an end-to-end example. +The `EXTERNAL` value for `CLUSTER_TYPE` option specifies that the external cluster entity manages the availability group. Pacemaker is an example of an external cluster entity. When the availability group `CLUSTER_TYPE = EXTERNAL`, set primary and secondary replica `FAILOVER_MODE = EXTERNAL`. After you create the availability group, configure the cluster resource for the availability group using the cluster management tools - for example with Pacemaker use `pcs` (on RHEL, Ubuntu) or `crm` (on SLES). See the Linux distribution specific cluster configuration section for an end-to-end example. -The following Transact-SQL scripts creates an availability group for HA named `ag1`. The script configures the availability group replicas with `SEEDING_MODE = AUTOMATIC`. This setting causes SQL Server to automatically create the database on each secondary server. Update the following script for your environment. Replace the `****`, `****`, and `****` values with the names of the SQL Server instances that will host the replicas. Replace the `**<5022>**` with the port you set for the data mirroring endpoint. Run the following Transact-SQL on the SQL Server instance that will host the primary replica to create the availability group. +The following Transact-SQL scripts creates an availability group for HA named `ag1`. The script configures the availability group replicas with `SEEDING_MODE = AUTOMATIC`. This setting causes SQL Server to automatically create the database on each secondary server. Update the following script for your environment. Replace the `****`, and `****` values with the names of the SQL Server instances that will host the replicas. Replace `****` with the port you set for the data mirroring endpoint. To create the availability group, run the following Transact-SQL on the SQL Server instance that will initially host the primary replica. -Run **only one** of the following scripts. +Run **only one** of the following scripts: - Create availability group with three synchronous replicas @@ -162,13 +160,13 @@ Run **only one** of the following scripts. ``` >[!NOTE] ->Running the `CREATE AVAILABILITY GROUP` command will complete with a warning: "Attempt to access non-existent or uninitialized availability group with ID . This is usually an internal condition, such as the availability group is being dropped or the local WSFC node has lost quorum. In such cases, and no user action is required." This is a known issue and Microsoft is working on a resolution. Meanwhile, users should assume command completed successfully. +>Running the `CREATE AVAILABILITY GROUP` command completes with a warning: "Attempt to access non-existent or uninitialized availability group with ID . This is usually an internal condition, such as the availability group is being dropped or the local WSFC node has lost quorum. In such cases, and no user action is required." This is a known issue and Microsoft is working on a resolution. Meanwhile, users should assume command completed successfully. You can also configure an availability group with `CLUSTER_TYPE=EXTERNAL` using SQL Server Management Studio or PowerShell. ### Join secondary replicas to the availability group -The following Transact-SQL script joins a SQL Server instance to an availability group named `ag1`. Update the script for your environment. On each SQL Server instance that will host a secondary replica, run the following Transact-SQL to join the availability group. +The following Transact-SQL script joins a SQL Server instance to an availability group named `ag1`. Update the script for your environment. On each SQL Server instance that hosts a secondary replica, run the following Transact-SQL to join the availability group. ```Transact-SQL ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL); @@ -179,9 +177,9 @@ ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE; [!INCLUDE [Create Post](../includes/ss-linux-cluster-availability-group-create-post.md)] >[!IMPORTANT] ->After you create the availability group, you must configure integration with a cluster technology like Pacemaker for HA. In the case of a read-only scale-out architecture using availability groups, starting with [!INCLUDE [SQL Server version](..\includes\sssqlv14-md.md)], setting up a cluster is not required. +>After you create the availability group, you must configure integration with a cluster technology like Pacemaker for HA. For a read-only scale-out architecture using availability groups, starting with [!INCLUDE [SQL Server version](..\includes\sssqlv14-md.md)], setting up a cluster is not required. -If you followed the steps in this document, you have an availability group that is not yet clustered. The next step is to add the cluster. While this is a valid configuration in read-scale/load balancing scenarios, it is not complete for high availability. To achieve high availability, you need to add the availability group as a cluster resource. See [Next steps](#next-steps) for instructions. +If you followed the steps in this document, you have an availability group that is not yet clustered. The next step is to add the cluster. This configuration is valid for read scale-out/load balancing scenarios, it is not complete for high availability. For high availability, you need to add the availability group as a cluster resource. See [Next steps](#next-steps) for instructions. ## Notes From b1741310e66b2c2c1ba47045811110eb7958bacd Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Thu, 8 Jun 2017 08:02:55 -0700 Subject: [PATCH 083/336] More acrolinx. --- .../what-s-new-in-sql-server-2017-database-engine.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md b/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md index c814a69c13e..548573ba461 100644 --- a/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md +++ b/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md @@ -39,7 +39,7 @@ manager: "jhubbard" - A new column **modified_extent_page_count**, is introduced in [sys.dm_db_file_space_usage](../../relational-databases/system-dynamic-management-views/sys-dm-db-file-space-usage-transact-sql.md) to track differential changes in each database file of the database. The new column modified_extent_page_count allows you to build smart backup solution, which performs differential backup if percentage changed pages in the database is below a threshold (say 70-80%) else perform full database backup. - **SELECT INTO … ON FileGroup** - [SELECT INTO](../../t-sql/queries/select-into-clause-transact-sql.md) now supports loading a table into a filegroup other than a default filegroup of the user using the **ON** keyword support added in SELECT INTO TSQL syntax. - **Tempdb Setup Improvements** - The setup allows specifying initial tempdb file size up to **256 GB (262,144 MB)** per file with a warning to customers if the file size is set to value greater than 1 GB and if IFI is not enabled. It is important to understand the implication of not enabling instant file initialization (IFI) where setup time can increase exponentially depending on the initial size of tempdb data file specified. IFI is not applicable to transaction log size so specifying larger value of transaction log can invariably increase the setup time while starting up tempdb during setup irrespective of the IFI setting for SQL Server service account. -- A new dmv [sys.dm_tran_version_store_space_usage](../../relational-databases/system-dynamic-management-views/sys-dm-tran-version-store-space-usage.md)is introduced to track version store usage per database. This new dmv is be useful in monitoring tempdb for version store usage for you to proactively plan tempdb sizing based on the version store usage requirement per database without any performance toll or overheads of running it on production servers. +- A new dmv [sys.dm_tran_version_store_space_usage](../../relational-databases/system-dynamic-management-views/sys-dm-tran-version-store-space-usage.md)is introduced to track version store usage per database. This new dmv is useful in monitoring tempdb for version store usage for you to proactively plan tempdb sizing based on the version store usage requirement per database without any performance toll or overheads of running it on production servers. - A new DMF [sys.dm_db_log_info](../../relational-databases/system-dynamic-management-views/sys-dm-db-log-info-transact-sql.md) is introduced to expose the VLF information similar to DBCC LOGINFO to monitor, alert, and avert potential transaction log issues caused due to number of VLFs, VLF size or shrinkfile issues experienced by customers. - **Improved Backup performance for small databases on high end servers** - While performing backup of databases in SQL Server, the backup process requires multiple iterations of buffer pool to drain the on-going I/Os. As a result, the backup time is not just the function of database size but also a function of active buffer pool size. In SQL Server 2017, the backup is optimized to avoid multiple iterations of buffer pool resulting in dramatic gains in backup performance for small to medium databases. The performance gain reduces as the database size increases as the pages to backup and backup IO takes more time compared to iterating buffer pool. - **DBCC CLONEDATABASE Improvements** - DBCC CLONEDATABASE flushes runtime statistics while cloning to avoid missing query store runtime statistics in database clone. In addition to this, DBCC CLONEDATABASE is further enhanced to support and clone fulltext indexes. From e68fecf6493a5190ee47f5bbd9155d957f2ce277 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 9 Jun 2017 13:40:12 -0700 Subject: [PATCH 084/336] Staging with fixes suggested by PG --- ...s-linux-cluster-required-synchronized-secondaries-default.md | 2 +- docs/linux/sql-server-linux-availability-group-ha.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/includes/ss-linux-cluster-required-synchronized-secondaries-default.md b/docs/includes/ss-linux-cluster-required-synchronized-secondaries-default.md index 3f9d283ff67..58dfb5fab02 100644 --- a/docs/includes/ss-linux-cluster-required-synchronized-secondaries-default.md +++ b/docs/includes/ss-linux-cluster-required-synchronized-secondaries-default.md @@ -1,2 +1,2 @@ >[!NOTE] ->When you create the resource, the SQL Server resource agent sets `REQUIRED_ SYNCHRONIZED_SECONDARIES_TO_COMMIT`. The default setting is calculated, depending on the availability group configuration. This affects both automatic failover and data protection. If you are using three nodes - one primary and two synchronous replicas - the value is set to `1`. For details and additional configuration options, see [High availability and data protection for availability group configurations](..\linux\sql-server-linux-availability-group-ha.md). \ No newline at end of file +>When you create the resource, the SQL Server resource agent sets `REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT`. The default setting is calculated, depending on the availability group configuration. This affects both automatic failover and data protection. If you are using three nodes - one primary and two synchronous replicas - the value is set to `1`. For details and additional configuration options, see [High availability and data protection for availability group configurations](..\linux\sql-server-linux-availability-group-ha.md). \ No newline at end of file diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index 385b91417a2..fd7a00ec007 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -42,7 +42,7 @@ The design patters are three availability group configuarations. The configurati ## How the configuration affects default resource settings -The cluster resource setting `required_synchronized_secondaries_to_commit` guarantees that each transaction is written to a minimum number of secondary replica logs before committing the transaction on the primary replica. This setting can affect both high availability and data protection, depending on the configuration. When you install the SQL Server resource agent - `mssql-sserver-ha` - and create a cluster resource for the availability group, the cluster manager detects the availability group configuration and sets `required_synchronized_secondaries_to_commit` accordingly. +The cluster resource setting `required_synchronized_secondaries_to_commit` guarantees that each transaction is written to a minimum number of secondary replica logs before committing the transaction on the primary replica. This setting can affect both high availability and data protection, depending on the configuration. When you install the SQL Server resource agent - `mssql-server-ha` - and create a cluster resource for the availability group, the cluster manager detects the availability group configuration and sets `required_synchronized_secondaries_to_commit` accordingly. If supported by the configuration, the resource agent parameter `required_synchronized_secondaries_to_commit` is set to the value that provides high availability and data protection. If the configuration cannot support both the default is set for data protection. For more information, see [Understand SQL Server resource agent for pacemaker](#pacemakerNotify). From e7269019afda9ffec326b3f1e1a9751bc4935312 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 9 Jun 2017 13:56:11 -0700 Subject: [PATCH 085/336] Update with details about pre-promote processes. --- .../sql-server-linux-availability-group-ha.md | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index fd7a00ec007..85e169e67b8 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -44,7 +44,7 @@ The design patters are three availability group configuarations. The configurati The cluster resource setting `required_synchronized_secondaries_to_commit` guarantees that each transaction is written to a minimum number of secondary replica logs before committing the transaction on the primary replica. This setting can affect both high availability and data protection, depending on the configuration. When you install the SQL Server resource agent - `mssql-server-ha` - and create a cluster resource for the availability group, the cluster manager detects the availability group configuration and sets `required_synchronized_secondaries_to_commit` accordingly. -If supported by the configuration, the resource agent parameter `required_synchronized_secondaries_to_commit` is set to the value that provides high availability and data protection. If the configuration cannot support both the default is set for data protection. For more information, see [Understand SQL Server resource agent for pacemaker](#pacemakerNotify). +If supported by the configuration, the resource agent parameter `required_synchronized_secondaries_to_commit` is set to the value that provides high availability and data protection. For more information, see [Understand SQL Server resource agent for pacemaker](#pacemakerNotify). The following sections explain the default behavior for the cluster resource. @@ -60,8 +60,6 @@ The following table describes the high availability and data protection behavior |`required_synchronized_secondaries_to_commit`|0 |1 \*|2 | --- |:---:|:---:|:---: -|High availability| |✔| -|Data protection | |✔|✔| |Automatic failover after primary replica outage| |✔| |Primary replica available after one secondary replica outage|✔|✔| |Primary replica available after two secondary replica outages|✔| | @@ -83,8 +81,6 @@ The following table describes the high availability and data protection behavior |`required_synchronized_secondaries_to_commit`|0 \*|1 | --- |:---:|:---: -|High availability |✔| | -|Data protection |✔|✔| |Automatic failover after primary replica outage| |✔| |Primary replica available after secondary replica outage| |✔| |Primary replica available after witness outage|✔| | @@ -107,10 +103,8 @@ The two synchronous replicas configuration is optimized for data protection and The following table describes the data protection behavior according to the possible values for two synchronous replicas availability group. -|`required_synchronized_secondaries_to_commit`|0 |1 \* +|`required_synchronized_secondaries_to_commit`|0 \*|1 | --- |:---|:--- -|Automatic failover | |✔| -|Data protection | |✔| |Automatic failover after primary replica outage| |✔ \*\* | |Primary replica available after secondary replica outage|✔| | @@ -125,20 +119,22 @@ The two synchronous replicas configuration may be the most economical because it ## More about a witness -A witness in a SQL Server Always On availability group enables a configuration with high availability and data protection without using a third replica - a *witness*. Any edition of SQL Server can host a witness. A witness contains availability group configuration data like availability group roles, and synchronization status data in the `master` database. It does not include replicated user databases. The witness uses the `WITNESS-COMMIT` availability mode. It is never the primary replica. +A witness in a SQL Server Always On availability group enables a configuration with high availability and data protection without using a third replica - a *witness*. Any edition of SQL Server can host a witness. A witness contains availability group configuration data like availability group roles, and synchronization status data in the `master` database. It does not include replicated user databases. The witness uses the `WITNESS_COMMIT` availability mode. It is never the primary replica. Use a witness in an availability group with two synchronous replicas - one primary replica and one secondary replica. If an availability group does not include two synchronous replicas, you cannot use a witness. You can also include additional asynchronous replicas. The DDL `CREATE AVAILABILITY GROUP` will fail if the group does not include two synchronous replicas. Likewise, you cannot create an availability group with only one primary replica and a witness. An availability group cannot include more than one witness. +An availability group with a witness requires two synchronous replicas and can have additional asynchronous replicas. An availability group cannot have more than one witness. + You can use any edition of SQL Server 2017 to host a witness. This includes SQL Server Enterprise Edition, Standard Edition, or Express Edition. -On a witness you cannot do the following things: +A witness availability mode is `WITNESS_COMMIT`. In this mode, configuration information is synchronously committed to the witness. You cannot modify the availability mode of a witness. -- Create an availability group - you can include the witness in an availability group, or join it to an existing availability group. -- Failover an availability group to a witness. +On a witness you cannot: -A witness availability mode `WITNESS_COMMIT`. In this mode, configuration information is synchronously committed to the witness. You cannot modify the availability mode of a witness. To change the availability mode of a witness, remove the replica and recreate it as a secondary replica with an appropriate availability mode. +- Failover an availability group to a witness. +- Change the availability mode. -To create an availabiltiy group with two synchronous replicas and a witness, see [Create availability group with two synchronous replicas and a witness](sql-server-linux-availability-group-configure-ha.md#witnessScript). +To create an availability group with two synchronous replicas and a witness, see [Create availability group with two synchronous replicas and a witness](sql-server-linux-availability-group-configure-ha.md#witnessScript). @@ -146,7 +142,7 @@ To create an availabiltiy group with two synchronous replicas and a witness, see SQL Server 2017 CTP 1.4 added `sequence_number` to `sys.availability_groups` to solve this issue. `sequence_number` is a monotonically increasing BIGINT that represents how up-to-date the local availability group replica is with respect to the rest of the replicas in the availability group. Performing failovers, adding or removing replicas, and other availability group configuration changes update this number. The number is updated on the primary, then replicated to secondary replicas. Thus a secondary replica that has up-to-date configuration has the same sequence number as the primary. -When Pacemaker decides to promote a replica to primary, it first sends a notification to all replicas to extract the sequence number and store it (we call this the pre-promote notification). Next, when Pacemaker actually tries to promote a replica to primary, the replica only promotes itself if its sequence number is the highest of all the sequence numbers from all replicas and rejects the promote operation otherwise. In this way only the replica with the highest sequence number can be promoted to primary, ensuring no data loss. +When Pacemaker decides to promote a replica to primary, it first sends a *pre-promote* notification to all replicas to extract the sequence number and store it. Next, when Pacemaker actually tries to promote a replica to primary, the replica only promotes itself if its sequence number is the highest of all the sequence numbers from all replicas and rejects the promote operation otherwise. In this way only the replica with the highest sequence number can be promoted to primary, ensuring no data loss. Note that this is only guaranteed to work as long as at least one replica available for promotion has the same sequence number as the previous primary. To ensure this, the default behavior is for the Pacemaker resource agent to automatically set `required_synchronized_secondaries_to_commit` such that at least one synchronous secondary replica is up to date and available to be the target of an automatic failover. With each monitoring action, the value of `required_synchronized_secondaries_to_commit` is computed (and updated if necessary) as ('number of synchronous replicas' / 2). Then, at failover time, the resource agent will require (`total number of replicas` - `required_synchronized_secondaries_to_commit` replicas) to respond to the pre-promote notification to be able to promote one of them to primary. The replica with the highest `sequence_number` will be promoted to primary. @@ -161,7 +157,7 @@ A user can choose to override the default behavior, and prevent the availability >[!IMPORTANT] >When `required_synchronized_secondaries_to_commit` is 0 there is risk of data loss. In the case of an outage of the primary, the resource agent will not automatically trigger a failover. The user has to decide if they want to wait for primary to recover or manually fail over. -To set `required_synchronized_secondaries_to_commit` to 0, run: +The following script sets `required_synchronized_secondaries_to_commit` to 0 on an availability group named `<**ag1**>`. Before you run replace `<**ag1**>` with the name of your availability group. ```bash sudo pcs resource update <**ag1**> required_synchronized_secondaries_to_commit=0 From bba92b74af6cf74c18e5e2bbaa0f70d02badb296 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 9 Jun 2017 13:57:43 -0700 Subject: [PATCH 086/336] Update with sequence numbers --- docs/linux/sql-server-linux-availability-group-ha.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index 85e169e67b8..846ab20e2ab 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -148,9 +148,9 @@ Note that this is only guaranteed to work as long as at least one replica availa For example, let's consider the case of an availability group with three synchronous replicas - one primary replica and two synchronous secondary replicas. -- `required_synchronized_secondaries_to_commit` is 3 / 2 = 1 +- `required_synchronized_secondaries_to_commit` is 3 / 2 -> 1 -- The required number of replicas to respond to pre-promote action is 3 - 1 = 2. So 2 replicas have to be up for the failover to be triggered. This means that, in the case of primary outage, if one of the secondary replicas is unresponsive and only one of the secondaries responds to the pre-promote action, the resource agent cannot guarantee that the secondary that responded has the highest sequence_number, and a failover is not triggered. +- The required number of replicas to respond to pre-promote action is 3 - 1 = 2. So 2 replicas have to be up for the failover to be triggered. For succesful automatic failover after a primary replica outage both secondary replicas need to be up-to-date and respond to the pre-promote notification. If they are online they will have the same sequence number. The availability group will promote one of them. If one of the secondary replicas is unresponsive and only one of the secondaries responds to the pre-promote action, the resource agent cannot guarantee that the secondary that responded has the highest sequence_number, and a failover is not triggered. A user can choose to override the default behavior, and prevent the availability group resource from setting `required_synchronized_secondaries_to_commit` automatically as above. From f2c2cc7f7e8f749cc2c8b0a76c247ed235d67502 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 9 Jun 2017 14:04:23 -0700 Subject: [PATCH 087/336] Update sequence number introduction. --- docs/linux/sql-server-linux-availability-group-ha.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index 846ab20e2ab..9ff32d37e1f 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -140,7 +140,7 @@ To create an availability group with two synchronous replicas and a witness, see ## Understand SQL Server resource agent for pacemaker -SQL Server 2017 CTP 1.4 added `sequence_number` to `sys.availability_groups` to solve this issue. `sequence_number` is a monotonically increasing BIGINT that represents how up-to-date the local availability group replica is with respect to the rest of the replicas in the availability group. Performing failovers, adding or removing replicas, and other availability group configuration changes update this number. The number is updated on the primary, then replicated to secondary replicas. Thus a secondary replica that has up-to-date configuration has the same sequence number as the primary. +SQL Server 2017 CTP 1.4 added `sequence_number` to `sys.availability_groups` to allow Pacemaker to identify how current secondary replicas are with the primary replica. `sequence_number` is a monotonically increasing BIGINT that represents how up-to-date the local availability group replica is with respect to the rest of the replicas in the availability group. Performing failovers, adding or removing replicas, and other availability group configuration changes update this number. The number is updated on the primary, then replicated to secondary replicas. Thus a secondary replica that has up-to-date configuration has the same sequence number as the primary. When Pacemaker decides to promote a replica to primary, it first sends a *pre-promote* notification to all replicas to extract the sequence number and store it. Next, when Pacemaker actually tries to promote a replica to primary, the replica only promotes itself if its sequence number is the highest of all the sequence numbers from all replicas and rejects the promote operation otherwise. In this way only the replica with the highest sequence number can be promoted to primary, ensuring no data loss. From 9a1ee3078df13cfe7758bb8b032cbdd74ce3bf2d Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Mon, 12 Jun 2017 13:42:46 -0700 Subject: [PATCH 088/336] Updated based on suggestions from Arnav. --- .../sql-server-linux-availability-group-ha.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index 9ff32d37e1f..40764ac99f3 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -140,22 +140,24 @@ To create an availability group with two synchronous replicas and a witness, see ## Understand SQL Server resource agent for pacemaker -SQL Server 2017 CTP 1.4 added `sequence_number` to `sys.availability_groups` to allow Pacemaker to identify how current secondary replicas are with the primary replica. `sequence_number` is a monotonically increasing BIGINT that represents how up-to-date the local availability group replica is with respect to the rest of the replicas in the availability group. Performing failovers, adding or removing replicas, and other availability group configuration changes update this number. The number is updated on the primary, then replicated to secondary replicas. Thus a secondary replica that has up-to-date configuration has the same sequence number as the primary. +SQL Server 2017 CTP 1.4 added `sequence_number` to `sys.availability_groups` to allow Pacemaker to identify how up-to-date secondary replicas are with the primary replica. `sequence_number` is a monotonically increasing BIGINT that represents how up-to-date the local availability group replica is with respect to the rest of the replicas in the availability group. Pacemaker updates the `sequence_number` with each availability group configuration change. Examples of configuration changes include failover, replica addition, or removal. The number is updated on the primary, then replicated to secondary replicas. Thus a secondary replica that has up-to-date configuration has the same sequence number as the primary. When Pacemaker decides to promote a replica to primary, it first sends a *pre-promote* notification to all replicas to extract the sequence number and store it. Next, when Pacemaker actually tries to promote a replica to primary, the replica only promotes itself if its sequence number is the highest of all the sequence numbers from all replicas and rejects the promote operation otherwise. In this way only the replica with the highest sequence number can be promoted to primary, ensuring no data loss. -Note that this is only guaranteed to work as long as at least one replica available for promotion has the same sequence number as the previous primary. To ensure this, the default behavior is for the Pacemaker resource agent to automatically set `required_synchronized_secondaries_to_commit` such that at least one synchronous secondary replica is up to date and available to be the target of an automatic failover. With each monitoring action, the value of `required_synchronized_secondaries_to_commit` is computed (and updated if necessary) as ('number of synchronous replicas' / 2). Then, at failover time, the resource agent will require (`total number of replicas` - `required_synchronized_secondaries_to_commit` replicas) to respond to the pre-promote notification to be able to promote one of them to primary. The replica with the highest `sequence_number` will be promoted to primary. +This process requires at least one replica available for promotion with the same sequence number as the previous primary. To ensure this, the default behavior is for the Pacemaker resource agent to automatically set `required_synchronized_secondaries_to_commit` such that at least one synchronous secondary replica is up to date and available to be the target of an automatic failover. With each monitoring action, the value of `required_synchronized_secondaries_to_commit` is computed (and updated if necessary). The `required_synchronized_secondaries_to_commit` value is 'number of synchronous replicas' divided by 2. At failover time, the resource agent will require (`total number of replicas` - `required_synchronized_secondaries_to_commit` replicas) to respond to the pre-promote notification to be able to promote one of them to primary. The replica with the highest `sequence_number` will be promoted to primary. -For example, let's consider the case of an availability group with three synchronous replicas - one primary replica and two synchronous secondary replicas. +For example, An availability group with three synchronous replicas - one primary replica and two synchronous secondary replicas. -- `required_synchronized_secondaries_to_commit` is 3 / 2 -> 1 +- `required_synchronized_secondaries_to_commit` is 1; (3 / 2 -> 1). -- The required number of replicas to respond to pre-promote action is 3 - 1 = 2. So 2 replicas have to be up for the failover to be triggered. For succesful automatic failover after a primary replica outage both secondary replicas need to be up-to-date and respond to the pre-promote notification. If they are online they will have the same sequence number. The availability group will promote one of them. If one of the secondary replicas is unresponsive and only one of the secondaries responds to the pre-promote action, the resource agent cannot guarantee that the secondary that responded has the highest sequence_number, and a failover is not triggered. +- The required number of replicas to respond to pre-promote action is 2; (3 - 1 = 2). + + 2 replicas have to respond for the failover to be triggered. For successful automatic failover after a primary replica outage both secondary replicas need to be up-to-date and respond to the pre-promote notification. If they are online they will have the same sequence number. The availability group will promote one of them. If one of the secondary replicas is unresponsive and only one of the secondaries responds to the pre-promote action, the resource agent cannot guarantee that the secondary that responded has the highest sequence_number, and a failover is not triggered. A user can choose to override the default behavior, and prevent the availability group resource from setting `required_synchronized_secondaries_to_commit` automatically as above. >[!IMPORTANT] ->When `required_synchronized_secondaries_to_commit` is 0 there is risk of data loss. In the case of an outage of the primary, the resource agent will not automatically trigger a failover. The user has to decide if they want to wait for primary to recover or manually fail over. +>When `required_synchronized_secondaries_to_commit` is 0 there is risk of data loss. In the case of an outage of the primary, the resource agent will not automatically trigger a failover. The user has to decide if they want to wait for primary to recover or manually fail over using `FORCE_FAILOVER_ALLOW_DATA_LOSS`. The following script sets `required_synchronized_secondaries_to_commit` to 0 on an availability group named `<**ag1**>`. Before you run replace `<**ag1**>` with the name of your availability group. From 1bafe4399b67307258b5fd9437ac14228598856a Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 13 Jun 2017 09:24:49 -0700 Subject: [PATCH 089/336] Update with clarification. --- docs/linux/sql-server-linux-availability-group-ha.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index 40764ac99f3..12f4ca016cf 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -152,7 +152,7 @@ For example, An availability group with three synchronous replicas - one primary - The required number of replicas to respond to pre-promote action is 2; (3 - 1 = 2). - 2 replicas have to respond for the failover to be triggered. For successful automatic failover after a primary replica outage both secondary replicas need to be up-to-date and respond to the pre-promote notification. If they are online they will have the same sequence number. The availability group will promote one of them. If one of the secondary replicas is unresponsive and only one of the secondaries responds to the pre-promote action, the resource agent cannot guarantee that the secondary that responded has the highest sequence_number, and a failover is not triggered. + In this scenario, 2 replicas have to respond for the failover to be triggered. For successful automatic failover after a primary replica outage both secondary replicas need to be up-to-date and respond to the pre-promote notification. If they are online they will have the same sequence number. The availability group will promote one of them. If one of the secondary replicas is unresponsive and only one of the secondaries responds to the pre-promote action, the resource agent cannot guarantee that the secondary that responded has the highest sequence_number, and a failover is not triggered. A user can choose to override the default behavior, and prevent the availability group resource from setting `required_synchronized_secondaries_to_commit` automatically as above. From 543be8ab3a3c1bdcd2c3bb2b20a4a6e11580b516 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 13 Jun 2017 09:56:21 -0700 Subject: [PATCH 090/336] Updated date. --- docs/linux/sql-server-linux-availability-group-ha.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index 12f4ca016cf..e451c9eb6c7 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -1,7 +1,7 @@ --- title: "SQL Server Always On availability group deployment patterns | Microsoft Docs" ms.custom: "" -ms.date: "05/18/2017" +ms.date: "06/13/2017" ms.prod: sql-linux ms.reviewer: "" ms.suite: "" From bd8d44b55bb3b06531e59376d98f82c30898ab88 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 13 Jun 2017 10:39:43 -0700 Subject: [PATCH 091/336] Update with input from Acrolinx --- .../sql-server-linux-availability-group-ha.md | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index e451c9eb6c7..1e3a8f11612 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -23,9 +23,9 @@ This article presents supported deployment configurations for SQL Server Always >[!NOTE] >In addition to high availability and data protection, an availability group can also provide disaster recovery, cross platform migration, and read scale-out. This article primarily discusses implementations for high availability and data protection. -With Windows Server failover clustering a common configuration for high availability uses two synchronous replicas and a [file-share witness](http://technet.microsoft.com/library/cc731739.aspx). The file-share witness validates the availability group configuration - status of synchronization, and the role of the replica, for example. This ensures that the secondary replica chosen as the failover target has the latest data and availability group configuration changes. +With Windows Server failover clustering, a common configuration for high availability uses two synchronous replicas and a [file-share witness](http://technet.microsoft.com/library/cc731739.aspx). The file-share witness validates the availability group configuration - status of synchronization, and the role of the replica, for example. This configuration ensures that the secondary replica chosen as the failover target has the latest data and availability group configuration changes. -The current high availability solutions for Linux do not accommodate an external witness like the file share witness in a Windows Server failover cluster. When there is no Windows Server failover cluster the availability group configuration is stored in the master database on participating SQL Server instances. Therefore, the availability group requires at least three synchronous replicas for high availability and data protection. After you create an availability group on Linux servers you create a cluster resource. The cluster resource settings determine the configuration for high availability. +The current high availability solutions for Linux do not accommodate an external witness like the file share witness in a Windows Server failover cluster. When there is no Windows Server failover cluster, the availability group configuration is stored in the master database on participating SQL Server instances. Therefore, the availability group requires at least three synchronous replicas for high availability and data protection. After you create an availability group on Linux servers, create a cluster resource. The cluster resource settings determine the configuration for high availability. Choose an availability group design to meet specific business requirements for high availability, data protection, and read scale-out. @@ -77,7 +77,7 @@ By default, it provides high availability but not data protection. ![witness availability group][2] -The following table describes the high availability and data protection behavior according to the possible values for an availability group with two synchronous replicas and a witness. +The following table describes the high availability and data protection behavior of this configuration: |`required_synchronized_secondaries_to_commit`|0 \*|1 | --- |:---:|:---: @@ -87,19 +87,19 @@ The following table describes the high availability and data protection behavior \* Default setting when availability group is added as a resource in a cluster. -For additional information, see [More about a witness](#WitnessReplica). +For more information, see [More about a witness](#WitnessReplica). ## Two synchronous replicas -A two synchronous replicas availability group enables data protection. Like the other availability group configurations it can enable read scale-out. Two synchronous replicas does not provide high availability. +A two synchronous replicas availability group enables data protection. Like the other availability group configurations, it can enable read scale-out. Two synchronous replicas does not provide high availability. ![Two synchronous replicas][1] This configuration requires two servers. These servers fill the role of primary replica and secondary replica. -The two synchronous replicas configuration is optimized for data protection and distributing the read workload for databases. By default, the resource is configured for data protection. This configuration does not provide high availability because if either instance of SQL Server fails, either the database will not be fully available or there is risk of data loss. +The two synchronous replicas configuration is optimized for data protection and distributing the read workload for databases. By default, the resource is configured for data protection. This configuration does not provide high availability because if either instance of SQL Server fails, either the database is not fully available or there is risk of data loss. The following table describes the data protection behavior according to the possible values for two synchronous replicas availability group. @@ -121,13 +121,13 @@ The two synchronous replicas configuration may be the most economical because it A witness in a SQL Server Always On availability group enables a configuration with high availability and data protection without using a third replica - a *witness*. Any edition of SQL Server can host a witness. A witness contains availability group configuration data like availability group roles, and synchronization status data in the `master` database. It does not include replicated user databases. The witness uses the `WITNESS_COMMIT` availability mode. It is never the primary replica. -Use a witness in an availability group with two synchronous replicas - one primary replica and one secondary replica. If an availability group does not include two synchronous replicas, you cannot use a witness. You can also include additional asynchronous replicas. The DDL `CREATE AVAILABILITY GROUP` will fail if the group does not include two synchronous replicas. Likewise, you cannot create an availability group with only one primary replica and a witness. An availability group cannot include more than one witness. +Use a witness in an availability group with two synchronous replicas. The group can include additional asynchronous replicas. An availability group can only have one witness. An availability group with a witness requires two synchronous replicas and can have additional asynchronous replicas. An availability group cannot have more than one witness. -You can use any edition of SQL Server 2017 to host a witness. This includes SQL Server Enterprise Edition, Standard Edition, or Express Edition. +You can use any edition of SQL Server 2017 to host a witness. -A witness availability mode is `WITNESS_COMMIT`. In this mode, configuration information is synchronously committed to the witness. You cannot modify the availability mode of a witness. +The witness has an availability mode - like a replica. A witness availability mode is `WITNESS_COMMIT`. In this mode, configuration information is synchronously committed to the witness. You cannot modify the availability mode of a witness. On a witness you cannot: @@ -142,7 +142,7 @@ To create an availability group with two synchronous replicas and a witness, see SQL Server 2017 CTP 1.4 added `sequence_number` to `sys.availability_groups` to allow Pacemaker to identify how up-to-date secondary replicas are with the primary replica. `sequence_number` is a monotonically increasing BIGINT that represents how up-to-date the local availability group replica is with respect to the rest of the replicas in the availability group. Pacemaker updates the `sequence_number` with each availability group configuration change. Examples of configuration changes include failover, replica addition, or removal. The number is updated on the primary, then replicated to secondary replicas. Thus a secondary replica that has up-to-date configuration has the same sequence number as the primary. -When Pacemaker decides to promote a replica to primary, it first sends a *pre-promote* notification to all replicas to extract the sequence number and store it. Next, when Pacemaker actually tries to promote a replica to primary, the replica only promotes itself if its sequence number is the highest of all the sequence numbers from all replicas and rejects the promote operation otherwise. In this way only the replica with the highest sequence number can be promoted to primary, ensuring no data loss. +When Pacemaker decides to promote a replica to primary, it first sends a *pre-promote* notification to all replicas and the witness - if applicable. The replicas return the sequence number. Next, when Pacemaker actually tries to promote a replica to primary, the replica only promotes itself if its sequence number is the highest of all the sequence numbers. The replica and rejects the promote operation if its own sequence number does not match the highest sequence number. In this way only the replica with the highest sequence number can be promoted to primary, ensuring no data loss. This process requires at least one replica available for promotion with the same sequence number as the previous primary. To ensure this, the default behavior is for the Pacemaker resource agent to automatically set `required_synchronized_secondaries_to_commit` such that at least one synchronous secondary replica is up to date and available to be the target of an automatic failover. With each monitoring action, the value of `required_synchronized_secondaries_to_commit` is computed (and updated if necessary). The `required_synchronized_secondaries_to_commit` value is 'number of synchronous replicas' divided by 2. At failover time, the resource agent will require (`total number of replicas` - `required_synchronized_secondaries_to_commit` replicas) to respond to the pre-promote notification to be able to promote one of them to primary. The replica with the highest `sequence_number` will be promoted to primary. @@ -152,7 +152,7 @@ For example, An availability group with three synchronous replicas - one primary - The required number of replicas to respond to pre-promote action is 2; (3 - 1 = 2). - In this scenario, 2 replicas have to respond for the failover to be triggered. For successful automatic failover after a primary replica outage both secondary replicas need to be up-to-date and respond to the pre-promote notification. If they are online they will have the same sequence number. The availability group will promote one of them. If one of the secondary replicas is unresponsive and only one of the secondaries responds to the pre-promote action, the resource agent cannot guarantee that the secondary that responded has the highest sequence_number, and a failover is not triggered. +In this scenario, 2 replicas have to respond for the failover to be triggered. For successful automatic failover after a primary replica outage both secondary replicas need to be up-to-date and respond to the pre-promote notification. If they are online they will have the same sequence number. The availability group will promote one of them. If one of the secondary replicas is unresponsive and only one of the secondaries responds to the pre-promote action, the resource agent cannot guarantee that the secondary that responded has the highest sequence_number, and a failover is not triggered. A user can choose to override the default behavior, and prevent the availability group resource from setting `required_synchronized_secondaries_to_commit` automatically as above. From 5d3ea9791fc7f15a6777e8391a2f75eff5ac5afc Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 13 Jun 2017 10:57:12 -0700 Subject: [PATCH 092/336] Updating based on acrolinx --- docs/linux/sql-server-linux-availability-group-ha.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index 1e3a8f11612..096e9a261dc 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -140,11 +140,11 @@ To create an availability group with two synchronous replicas and a witness, see ## Understand SQL Server resource agent for pacemaker -SQL Server 2017 CTP 1.4 added `sequence_number` to `sys.availability_groups` to allow Pacemaker to identify how up-to-date secondary replicas are with the primary replica. `sequence_number` is a monotonically increasing BIGINT that represents how up-to-date the local availability group replica is with respect to the rest of the replicas in the availability group. Pacemaker updates the `sequence_number` with each availability group configuration change. Examples of configuration changes include failover, replica addition, or removal. The number is updated on the primary, then replicated to secondary replicas. Thus a secondary replica that has up-to-date configuration has the same sequence number as the primary. +SQL Server 2017 CTP 1.4 added `sequence_number` to `sys.availability_groups` to allow Pacemaker to identify how up-to-date secondary replicas are with the primary replica. `sequence_number` is a monotonically increasing BIGINT that represents how up-to-date the local availability group replica is. Pacemaker updates the `sequence_number` with each availability group configuration change. Examples of configuration changes include failover, replica addition, or removal. The number is updated on the primary, then replicated to secondary replicas. Thus a secondary replica that has up-to-date configuration has the same sequence number as the primary. When Pacemaker decides to promote a replica to primary, it first sends a *pre-promote* notification to all replicas and the witness - if applicable. The replicas return the sequence number. Next, when Pacemaker actually tries to promote a replica to primary, the replica only promotes itself if its sequence number is the highest of all the sequence numbers. The replica and rejects the promote operation if its own sequence number does not match the highest sequence number. In this way only the replica with the highest sequence number can be promoted to primary, ensuring no data loss. -This process requires at least one replica available for promotion with the same sequence number as the previous primary. To ensure this, the default behavior is for the Pacemaker resource agent to automatically set `required_synchronized_secondaries_to_commit` such that at least one synchronous secondary replica is up to date and available to be the target of an automatic failover. With each monitoring action, the value of `required_synchronized_secondaries_to_commit` is computed (and updated if necessary). The `required_synchronized_secondaries_to_commit` value is 'number of synchronous replicas' divided by 2. At failover time, the resource agent will require (`total number of replicas` - `required_synchronized_secondaries_to_commit` replicas) to respond to the pre-promote notification to be able to promote one of them to primary. The replica with the highest `sequence_number` will be promoted to primary. +This process requires at least one replica available for promotion with the same sequence number as the previous primary. To ensure this, the the Pacemaker resource agent sets `required_synchronized_secondaries_to_commit` such that at least one synchronous secondary replica is up-to-date and available to be the target of an automatic failover by default. With each monitoring action, the value of `required_synchronized_secondaries_to_commit` is computed (and updated if necessary). The `required_synchronized_secondaries_to_commit` value is 'number of synchronous replicas' divided by 2. At failover time, the resource agent requires (`total number of replicas` - `required_synchronized_secondaries_to_commit` replicas) to respond to the pre-promote notification. The replica with the highest `sequence_number` is promoted to primary. For example, An availability group with three synchronous replicas - one primary replica and two synchronous secondary replicas. From 10b257702d9146397f13769548dc87eae3718e46 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 13 Jun 2017 11:03:48 -0700 Subject: [PATCH 093/336] Update for improved acrolinx score. --- docs/linux/sql-server-linux-availability-group-ha.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index 096e9a261dc..b1a2de7f484 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -32,7 +32,7 @@ Choose an availability group design to meet specific business requirements for h >[!IMPORTANT] >The following configurations describe three availability group design patterns and the capabilities of each pattern. These design patterns apply to availability groups with `CLUSTER_TYPE = EXTERNAL` for high availability solutions. -The design patters are three availability group configuarations. The configurations include: +The design patters are three availability group configurations. The configurations include: - **Three synchronous replicas** @@ -144,7 +144,7 @@ SQL Server 2017 CTP 1.4 added `sequence_number` to `sys.availability_groups` to When Pacemaker decides to promote a replica to primary, it first sends a *pre-promote* notification to all replicas and the witness - if applicable. The replicas return the sequence number. Next, when Pacemaker actually tries to promote a replica to primary, the replica only promotes itself if its sequence number is the highest of all the sequence numbers. The replica and rejects the promote operation if its own sequence number does not match the highest sequence number. In this way only the replica with the highest sequence number can be promoted to primary, ensuring no data loss. -This process requires at least one replica available for promotion with the same sequence number as the previous primary. To ensure this, the the Pacemaker resource agent sets `required_synchronized_secondaries_to_commit` such that at least one synchronous secondary replica is up-to-date and available to be the target of an automatic failover by default. With each monitoring action, the value of `required_synchronized_secondaries_to_commit` is computed (and updated if necessary). The `required_synchronized_secondaries_to_commit` value is 'number of synchronous replicas' divided by 2. At failover time, the resource agent requires (`total number of replicas` - `required_synchronized_secondaries_to_commit` replicas) to respond to the pre-promote notification. The replica with the highest `sequence_number` is promoted to primary. +This process requires at least one replica available for promotion with the same sequence number as the previous primary. The Pacemaker resource agent sets `required_synchronized_secondaries_to_commit` such that at least one synchronous secondary replica is up-to-date and available to be the target of an automatic failover by default. With each monitoring action, the value of `required_synchronized_secondaries_to_commit` is computed (and updated if necessary). The `required_synchronized_secondaries_to_commit` value is 'number of synchronous replicas' divided by 2. At failover time, the resource agent requires (`total number of replicas` - `required_synchronized_secondaries_to_commit` replicas) to respond to the pre-promote notification. The replica with the highest `sequence_number` is promoted to primary. For example, An availability group with three synchronous replicas - one primary replica and two synchronous secondary replicas. @@ -152,12 +152,12 @@ For example, An availability group with three synchronous replicas - one primary - The required number of replicas to respond to pre-promote action is 2; (3 - 1 = 2). -In this scenario, 2 replicas have to respond for the failover to be triggered. For successful automatic failover after a primary replica outage both secondary replicas need to be up-to-date and respond to the pre-promote notification. If they are online they will have the same sequence number. The availability group will promote one of them. If one of the secondary replicas is unresponsive and only one of the secondaries responds to the pre-promote action, the resource agent cannot guarantee that the secondary that responded has the highest sequence_number, and a failover is not triggered. +In this scenario, two replicas have to respond for the failover to be triggered. For successful automatic failover after a primary replica outage both secondary replicas need to be up-to-date and respond to the pre-promote notification. If they are online they have the same sequence number. The availability group promotes one of them. If one of the secondary replicas is unresponsive and only one of the secondaries responds to the pre-promote action, the resource agent cannot guarantee that the secondary that responded has the highest sequence_number, and a failover is not triggered. A user can choose to override the default behavior, and prevent the availability group resource from setting `required_synchronized_secondaries_to_commit` automatically as above. >[!IMPORTANT] ->When `required_synchronized_secondaries_to_commit` is 0 there is risk of data loss. In the case of an outage of the primary, the resource agent will not automatically trigger a failover. The user has to decide if they want to wait for primary to recover or manually fail over using `FORCE_FAILOVER_ALLOW_DATA_LOSS`. +>When `required_synchronized_secondaries_to_commit` is 0 there is risk of data loss. During a primary replica outage, the resource agent does not automatically trigger a failover. You can either wait for primary to recover, or manually fail over using `FORCE_FAILOVER_ALLOW_DATA_LOSS`. The following script sets `required_synchronized_secondaries_to_commit` to 0 on an availability group named `<**ag1**>`. Before you run replace `<**ag1**>` with the name of your availability group. @@ -172,7 +172,7 @@ sudo pcs resource update <**ag1**> required_synchronized_secondaries_to_commit= ``` >[!NOTE] ->Updating resource properties causes all replicas to stop and restart. This means primary will temporarily be demoted to secondary, then promoted again which will cause temporary write unavailability. The new value for`required_synchronized_secondaries_to_commit` will only be set once replicas are restarted, so it won't be instantaneous with running the pcs command. +>Updating resource properties causes all replicas to stop and restart. This means primary is temporarily demoted to secondary, then promoted again. This action causes temporary write unavailability. The new value for`required_synchronized_secondaries_to_commit` is only set once replicas are restarted, not instantaneously with running the pcs command. [1]: ./media/sql-server-linux-availability-group-ha/1-read-scale-out.png From 75a31a2f19824fefca2e0be923065beba2e96f00 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 13 Jun 2017 11:29:39 -0700 Subject: [PATCH 094/336] More acrolinx suggestions. --- .../sql-server-linux-availability-group-ha.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index b1a2de7f484..6e380c782fd 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -56,7 +56,7 @@ This configuration consists of three synchronous replicas. By default, it provid ![Three replicas][3] -The following table describes the high availability and data protection behavior based on the settings for three synchronous replicas. +The following table describes the high availability and data protection behavior based on the settings for an availability group with three synchronous replicas: |`required_synchronized_secondaries_to_commit`|0 |1 \*|2 | --- |:---:|:---:|:---: @@ -77,7 +77,7 @@ By default, it provides high availability but not data protection. ![witness availability group][2] -The following table describes the high availability and data protection behavior of this configuration: +The following table describes the high availability and data protection behavior for an availability group with two synchronous replicas and a witness: |`required_synchronized_secondaries_to_commit`|0 \*|1 | --- |:---:|:---: @@ -93,7 +93,7 @@ For more information, see [More about a witness](#WitnessReplica). ## Two synchronous replicas -A two synchronous replicas availability group enables data protection. Like the other availability group configurations, it can enable read scale-out. Two synchronous replicas does not provide high availability. +This configuration enables data protection. Like the other availability group configurations, it can enable read scale-out. The two synchronous replicas configuration does not provide high availability. ![Two synchronous replicas][1] @@ -101,7 +101,7 @@ This configuration requires two servers. These servers fill the role of primary The two synchronous replicas configuration is optimized for data protection and distributing the read workload for databases. By default, the resource is configured for data protection. This configuration does not provide high availability because if either instance of SQL Server fails, either the database is not fully available or there is risk of data loss. -The following table describes the data protection behavior according to the possible values for two synchronous replicas availability group. +The following table describes the data protection behavior according to the possible values for an availability group with two synchronous replicas: |`required_synchronized_secondaries_to_commit`|0 \*|1 | --- |:---|:--- @@ -142,7 +142,7 @@ To create an availability group with two synchronous replicas and a witness, see SQL Server 2017 CTP 1.4 added `sequence_number` to `sys.availability_groups` to allow Pacemaker to identify how up-to-date secondary replicas are with the primary replica. `sequence_number` is a monotonically increasing BIGINT that represents how up-to-date the local availability group replica is. Pacemaker updates the `sequence_number` with each availability group configuration change. Examples of configuration changes include failover, replica addition, or removal. The number is updated on the primary, then replicated to secondary replicas. Thus a secondary replica that has up-to-date configuration has the same sequence number as the primary. -When Pacemaker decides to promote a replica to primary, it first sends a *pre-promote* notification to all replicas and the witness - if applicable. The replicas return the sequence number. Next, when Pacemaker actually tries to promote a replica to primary, the replica only promotes itself if its sequence number is the highest of all the sequence numbers. The replica and rejects the promote operation if its own sequence number does not match the highest sequence number. In this way only the replica with the highest sequence number can be promoted to primary, ensuring no data loss. +When Pacemaker decides to promote a replica to primary, it first sends a *pre-promote* notification to all replicas and the witness - if applicable. The replicas return the sequence number. Next, when Pacemaker actually tries to promote a replica to primary, the replica only promotes itself if its sequence number is the highest of all the sequence numbers. If its own sequence number does not match the highest sequence number, the replica rejects the promote operation. In this way only the replica with the highest sequence number can be promoted to primary, ensuring no data loss. This process requires at least one replica available for promotion with the same sequence number as the previous primary. The Pacemaker resource agent sets `required_synchronized_secondaries_to_commit` such that at least one synchronous secondary replica is up-to-date and available to be the target of an automatic failover by default. With each monitoring action, the value of `required_synchronized_secondaries_to_commit` is computed (and updated if necessary). The `required_synchronized_secondaries_to_commit` value is 'number of synchronous replicas' divided by 2. At failover time, the resource agent requires (`total number of replicas` - `required_synchronized_secondaries_to_commit` replicas) to respond to the pre-promote notification. The replica with the highest `sequence_number` is promoted to primary. @@ -152,7 +152,7 @@ For example, An availability group with three synchronous replicas - one primary - The required number of replicas to respond to pre-promote action is 2; (3 - 1 = 2). -In this scenario, two replicas have to respond for the failover to be triggered. For successful automatic failover after a primary replica outage both secondary replicas need to be up-to-date and respond to the pre-promote notification. If they are online they have the same sequence number. The availability group promotes one of them. If one of the secondary replicas is unresponsive and only one of the secondaries responds to the pre-promote action, the resource agent cannot guarantee that the secondary that responded has the highest sequence_number, and a failover is not triggered. +In this scenario, two replicas have to respond for the failover to be triggered. For successful automatic failover after a primary replica outage, both secondary replicas need to be up-to-date and respond to the pre-promote notification. If they are online and synchronous, they have the same sequence number. The availability group promotes one of them. If only one of the secondary replicas responds to the pre-promote action, the resource agent cannot guarantee that the secondary that responded has the highest sequence_number, and a failover is not triggered. A user can choose to override the default behavior, and prevent the availability group resource from setting `required_synchronized_secondaries_to_commit` automatically as above. @@ -172,7 +172,7 @@ sudo pcs resource update <**ag1**> required_synchronized_secondaries_to_commit= ``` >[!NOTE] ->Updating resource properties causes all replicas to stop and restart. This means primary is temporarily demoted to secondary, then promoted again. This action causes temporary write unavailability. The new value for`required_synchronized_secondaries_to_commit` is only set once replicas are restarted, not instantaneously with running the pcs command. +>Updating resource properties cause all replicas to stop and restart. This means primary is temporarily demoted to secondary, then promoted again. This action causes temporary write unavailability. The new value for`required_synchronized_secondaries_to_commit` is only set once replicas are restarted, not instantaneously with running the pcs command. [1]: ./media/sql-server-linux-availability-group-ha/1-read-scale-out.png From 603f44735810b667229fafd1baf5661742361c44 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 13 Jun 2017 11:32:08 -0700 Subject: [PATCH 095/336] Update per acrolinx --- docs/linux/sql-server-linux-availability-group-ha.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index 6e380c782fd..3b1c4799b5f 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -131,7 +131,7 @@ The witness has an availability mode - like a replica. A witness availability mo On a witness you cannot: -- Failover an availability group to a witness. +- Fail over an availability group to a witness. - Change the availability mode. To create an availability group with two synchronous replicas and a witness, see [Create availability group with two synchronous replicas and a witness](sql-server-linux-availability-group-configure-ha.md#witnessScript). @@ -154,11 +154,11 @@ For example, An availability group with three synchronous replicas - one primary In this scenario, two replicas have to respond for the failover to be triggered. For successful automatic failover after a primary replica outage, both secondary replicas need to be up-to-date and respond to the pre-promote notification. If they are online and synchronous, they have the same sequence number. The availability group promotes one of them. If only one of the secondary replicas responds to the pre-promote action, the resource agent cannot guarantee that the secondary that responded has the highest sequence_number, and a failover is not triggered. -A user can choose to override the default behavior, and prevent the availability group resource from setting `required_synchronized_secondaries_to_commit` automatically as above. - >[!IMPORTANT] >When `required_synchronized_secondaries_to_commit` is 0 there is risk of data loss. During a primary replica outage, the resource agent does not automatically trigger a failover. You can either wait for primary to recover, or manually fail over using `FORCE_FAILOVER_ALLOW_DATA_LOSS`. +You can choose to override the default behavior, and prevent the availability group resource from setting `required_synchronized_secondaries_to_commit` automatically. + The following script sets `required_synchronized_secondaries_to_commit` to 0 on an availability group named `<**ag1**>`. Before you run replace `<**ag1**>` with the name of your availability group. ```bash From baa1e8176262b4cdc7062fa5353a5fdc39e0fc73 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 13 Jun 2017 11:34:45 -0700 Subject: [PATCH 096/336] Update for style. --- docs/linux/sql-server-linux-availability-group-ha.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index 3b1c4799b5f..6fdd1c88644 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -98,7 +98,7 @@ This configuration enables data protection. Like the other availability group co ![Two synchronous replicas][1] This configuration requires two servers. These servers fill the role of primary replica and secondary replica. - +F The two synchronous replicas configuration is optimized for data protection and distributing the read workload for databases. By default, the resource is configured for data protection. This configuration does not provide high availability because if either instance of SQL Server fails, either the database is not fully available or there is risk of data loss. The following table describes the data protection behavior according to the possible values for an availability group with two synchronous replicas: @@ -172,7 +172,7 @@ sudo pcs resource update <**ag1**> required_synchronized_secondaries_to_commit= ``` >[!NOTE] ->Updating resource properties cause all replicas to stop and restart. This means primary is temporarily demoted to secondary, then promoted again. This action causes temporary write unavailability. The new value for`required_synchronized_secondaries_to_commit` is only set once replicas are restarted, not instantaneously with running the pcs command. +>When you run the preceding commands, the primary is temporarily demoted to secondary, then promoted again. The resource update causes all replicas to stop and restart. The new value for`required_synchronized_secondaries_to_commit` is only set once replicas are restarted, not instantaneously. [1]: ./media/sql-server-linux-availability-group-ha/1-read-scale-out.png From 952f77281a5ce6001e6cb5c24cbbd991f340b22d Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 13 Jun 2017 12:11:08 -0700 Subject: [PATCH 097/336] Fix for acrolinx on the include. --- ...s-linux-cluster-required-synchronized-secondaries-default.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/includes/ss-linux-cluster-required-synchronized-secondaries-default.md b/docs/includes/ss-linux-cluster-required-synchronized-secondaries-default.md index 58dfb5fab02..a196c5b6c75 100644 --- a/docs/includes/ss-linux-cluster-required-synchronized-secondaries-default.md +++ b/docs/includes/ss-linux-cluster-required-synchronized-secondaries-default.md @@ -1,2 +1,2 @@ >[!NOTE] ->When you create the resource, the SQL Server resource agent sets `REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT`. The default setting is calculated, depending on the availability group configuration. This affects both automatic failover and data protection. If you are using three nodes - one primary and two synchronous replicas - the value is set to `1`. For details and additional configuration options, see [High availability and data protection for availability group configurations](..\linux\sql-server-linux-availability-group-ha.md). \ No newline at end of file +>When you create the resource, the SQL Server resource agent sets `required_synchronized_secondaries_to_commit`. The default setting is calculated, depending on the availability group configuration. This setting affects both automatic failover and data protection. If you are using three nodes - one primary and two synchronous replicas - the value is set to `1`. For details and additional configuration options, see [High availability and data protection for availability group configurations](..\linux\sql-server-linux-availability-group-ha.md). \ No newline at end of file From cc328be8396be1c4e2c8b167aca99469dd7b7847 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 13 Jun 2017 14:23:34 -0700 Subject: [PATCH 098/336] Staging updated content based on PG Input --- ...quired-synchronized-secondaries-default.md | 2 +- ...r-linux-availability-group-cluster-rhel.md | 48 ++++++++++++------- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/docs/includes/ss-linux-cluster-required-synchronized-secondaries-default.md b/docs/includes/ss-linux-cluster-required-synchronized-secondaries-default.md index a196c5b6c75..e6f38cfcdcf 100644 --- a/docs/includes/ss-linux-cluster-required-synchronized-secondaries-default.md +++ b/docs/includes/ss-linux-cluster-required-synchronized-secondaries-default.md @@ -1,2 +1,2 @@ >[!NOTE] ->When you create the resource, the SQL Server resource agent sets `required_synchronized_secondaries_to_commit`. The default setting is calculated, depending on the availability group configuration. This setting affects both automatic failover and data protection. If you are using three nodes - one primary and two synchronous replicas - the value is set to `1`. For details and additional configuration options, see [High availability and data protection for availability group configurations](..\linux\sql-server-linux-availability-group-ha.md). \ No newline at end of file +>When you create the resource, and periodically afterwards, the Pacemaker resource agent automatically sets the value of `REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT` on the availability group based on the availability group's configuration. For example, if the availability group has three synchronous replicas, the agent will set `REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT` to `1`. For details and additional configuration options, see [High availability and data protection for availability group configurations](..\linux\sql-server-linux-availability-group-ha.md). \ No newline at end of file diff --git a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md index 35b698ce229..be38b360a6f 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md @@ -6,7 +6,7 @@ description: author: MikeRayMSFT ms.author: mikeray manager: jhubbard -ms.date: 05/17/2017 +ms.date: 06/13/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -34,7 +34,7 @@ This document explains how to create a three-node availability group cluster for For more details on cluster configuration, resource agents options, and management, visit [RHEL reference documentation](http://access.redhat.com/documentation/Red_Hat_Enterprise_Linux/7/html/High_Availability_Add-On_Reference/index.html). > [!NOTE] -> At this point, SQL Server service's integration with Pacemaker on Linux is not as coupled as with WSFC on Windows. From within SQL, there is no knowledge about the presence of the cluster, all orchestration is outside in and the service is controlled as a standalone instance by Pacemaker. Also, virtual network name is specific to WSFC, there is no equivalent of the same in Pacemaker. It is expected Always On dmvs that query cluster information to return empty rows. You can still create a listener to use it for transparent reconnection after failover, but you will have to manually register the listener name in the DNS server with the IP used to create the virtual IP resource (as explained below). +> SQL Server is not as tightly integrated with Pacemaker on Linux as it is with Windows Server failover clustering. A SQL Server instance is not aware of the cluster. Pacemaker provides cluster resource orchestration. Also, the virtual network name is specific to Windows Server failover clustering; there is no equivalent in Pacemaker. Availabilty group dynamic management views (DMVs) that query cluster information return empty rows on Pacemaker clusters. You can still create a listener for transparent reconnection after failover, but you will have to manually register the listener name in DNS with the IP used to create the virtual IP resource. The following sections walk through the steps to set up a Pacemaker cluster and add an availability group as resource in the cluster for high availability. @@ -53,7 +53,7 @@ The steps to create an availability group on Linux servers for high availability >[!IMPORTANT] >Production environments require a fencing agent, like STONITH for high availability. The demonstrations in this documentation do not use fencing agents. The demonstrations are for testing and validation only. - >A Linux cluster uses fencing to return the cluster to a known state. The way to configure fencing depends on the distribution and the environment. At this time, fencing is not available in some cloud environments. See [Support Policies for RHEL High Availability Clusters - Virtualization Platforms](https://access.redhat.com/articles/29440) for more information. + >A Linux cluster uses fencing to return the cluster to a known state. The way to configure fencing depends on the distribution and the environment. Currently, fencing is not available in some cloud environments. For more information, see [Support Policies for RHEL High Availability Clusters - Virtualization Platforms](https://access.redhat.com/articles/29440). 5. [Add the availability group as a resource in the cluster](sql-server-linux-availability-group-cluster-rhel.md#create-availability-group-resource). @@ -61,13 +61,21 @@ The steps to create an availability group on Linux servers for high availability [!INCLUDE [RHEL-Configure-Pacemaker](../includes/ss-linux-cluster-pacemaker-configure-rhel.md)] -From now on, we will interact with the cluster via `pcs` cluster management tools, so all commands need to be executed only on one host that is a node in the cluster, it does not matter which one. +After Pacemaker is configured, use `pcs` to interact with the cluster. Execute all commands on one node from the cluster. ## Configure fencing (STONITH) -Pacemaker cluster vendors require STONITH to be enabled and a fencing device configured for a supported cluster setup. When the cluster resource manager cannot determine the state of a node or of a resource on a node, fencing is used to bring the cluster to a known state again. -Resource level fencing ensures mainly that there is no data corruption in case of an outage by configuring a resource. You can use resource level fencing, for instance, with DRBD (Distributed Replicated Block Device) to mark the disk on a node as outdated when the communication link goes down. -Node level fencing ensures that a node does not run any resources. This is done by resetting the node and the Pacemaker implementation of it is called STONITH (which stands for "shoot the other node in the head"). Pacemaker supports a great variety of fencing devices, e.g. an uninterruptible power supply or management interface cards for servers. -For more details, see [Pacemaker Clusters from Scratch](http://clusterlabs.org/doc/en-US/Pacemaker/1.1-plugin/html/Clusters_from_Scratch/ch05.html), [Fencing and Stonith](http://clusterlabs.org/doc/crm_fencing.html) and [Red Hat High Availability Add-On with Pacemaker: Fencing](http://access.redhat.com/documentation/Red_Hat_Enterprise_Linux/6/html/Configuring_the_Red_Hat_High_Availability_Add-On_with_Pacemaker/ch-fencing-HAAR.html). + +Pacemaker cluster vendors require STONITH to be enabled and a fencing device configured for a supported cluster setup. STONITH stands for "shoot the other node in the head." When the cluster resource manager cannot determine the state of a node or of a resource on a node, fencing brings the cluster to a known state again. + +Resource level fencing ensures that there is no data corruption in case of an outage by configuring a resource. For example, you can use resource level fencing with DRBD (Distributed Replicated Block Device) to mark the disk on a node as outdated when the communication link goes down. + +Node level fencing ensures that a node does not run any resources. This is done by resetting the node. Pacemaker supports a great variety of fencing devices. Examples include an uninterruptible power supply or management interface cards for servers. + +For information about STONITH, and fencing, see the following articles: + +* [Pacemaker Clusters from Scratch](http://clusterlabs.org/doc/en-US/Pacemaker/1.1-plugin/html/Clusters_from_Scratch/ch05.html) +* [Fencing and Stonith](http://clusterlabs.org/doc/crm_fencing.html) +* [Red Hat High Availability Add-On with Pacemaker: Fencing](http://access.redhat.com/documentation/Red_Hat_Enterprise_Linux/6/html/Configuring_the_Red_Hat_High_Availability_Add-On_with_Pacemaker/ch-fencing-HAAR.html) Because the node level fencing configuration depends heavily on your environment, we will disable it for this tutorial (it can be configured at a later time): @@ -76,11 +84,11 @@ sudo pcs property set stonith-enabled=false ``` >[!IMPORTANT] ->Disabling STONITH is just for testing purposes. If you plan to use Pacemaker in a production environment, you should plan a STONITH implementation depending on your environment and keep it enabled. Note that RHEL does not provide fencing agents for any cloud environments (including Azure) or Hyper-V. Consequentially, the cluster vendor does not offer support for running production clusters in these environments. We are working on a solution for this gap that will be available in future releases. +>Disabling STONITH is just for testing purposes. If you plan to use Pacemaker in a production environment, you should plan a STONITH implementation depending on your environment and keep it enabled. RHEL does not provide fencing agents for any cloud environments (including Azure) or Hyper-V. Consequentially, the cluster vendor does not offer support for running production clusters in these environments. We are working on a solution for this gap that will be available in future releases. ## Set cluster property start-failure-is-fatal to false -`start-failure-is-fatal` indicates whether a failure to start a resource on a node prevents further start attempts on that node. When set to `false`, the cluster will decide whether to try starting on the same node again based on the resource's current failure count and migration threshold. After failover occurs, Pacemaker will retry starting the availability group resource on the former primary once the SQL instance is available. Pacemaker will demote the replica to secondary and it will automatically rejoin the availability group. +`start-failure-is-fatal` indicates whether a failure to start a resource on a node prevents further start attempts on that node. When set to `false`, the cluster decides whether to try starting on the same node again based on the resource's current failure count and migration threshold. After failover occurs, Pacemaker retries starting the availability group resource on the former primary once the SQL instance is available. Pacemaker demotes the replica to secondary and it automatically rejoins the availability group. To update the property value to `false` run: @@ -89,7 +97,7 @@ pcs property set start-failure-is-fatal=false ``` >[!WARNING] ->After an automatic failover, when `start-failure-is-fatal = true` the resource manager will attempt to start the resource. If it fails on the first attempt you have to manually run `pcs resource cleanup ` to cleanup the resource failure count and reset the configuration. +>After an automatic failover, when `start-failure-is-fatal = true` the resource manager will attempt to start the resource. If it fails on the first attempt, manually run `pcs resource cleanup ` to clean up the resource failure count and reset the configuration. For more details on Pacemaker cluster properties see [Pacemaker Clusters Properties](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/High_Availability_Add-On_Reference/ch-clusteropts-HAAR.html). @@ -99,7 +107,7 @@ For more details on Pacemaker cluster properties see [Pacemaker Clusters Propert ## Create availability group resource -To create the availability group resource, use `pcs resource create` command and set the resource properties. Below command creates a `ocf:mssql:ag` master/slave type resource for availability group with name `ag1`. +To create the availability group resource, use `pcs resource create` command and set the resource properties. The following command creates a `ocf:mssql:ag` master/slave type resource for availability group with name `ag1`. ```bash sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 --master meta notify=true @@ -107,21 +115,25 @@ sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 --master meta notif [!INCLUDE [required-synchronized-secondaries-default](../includes/ss-linux-cluster-required-synchronized-secondaries-default.md)] + + ## Create virtual IP resource -To create the virtual IP address resource, run the following command on one node. Use an available static IP address from the network. Replace the IP address between `**<...>**' +To create the virtual IP address resource, run the following command on one node. Use an available static IP address from the network. Replace the IP address between `**<10.128.16.240>**' with a valid IP address. ```bash sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=**<10.128.16.240>** ``` -There is no virtual server name equivalent in Pacemaker. To use a connection string that points to a string server name and not use the IP address, register the virtual IP resource address and desired virtual server name in DNS. For DR configurations, register the desired virtual server name and IP address with the DNS servers on both primary and DR site. +There is no virtual server name equivalent in Pacemaker. To use a connection string that points to a string server name instead of an IP address, register the virtual IP resource address and desired virtual server name in DNS. For DR configurations, register the desired virtual server name and IP address with the DNS servers on both primary and DR site. ## Add colocation constraint -Almost every decision in a Pacemaker cluster, like choosing where a resource should run, is done by comparing scores. Scores are calculated per resource, and the cluster resource manager chooses the node with the highest score for a particular resource. (If a node has a negative score for a resource, the resource cannot run on that node.) -We can manipulate the decisions of the cluster with constraints. Constraints have a score. If a constraint has a score lower than INFINITY, it is only a recommendation. A score of INFINITY means it is a must. -We want to ensure that primary of the availability group and the virtual ip resource are run on the same host, so we will define a colocation constraint with a score of INFINITY. To add the colocation constraint, run the following command on one node. +Almost every decision in a Pacemaker cluster, like choosing where a resource should run, is done by comparing scores. Scores are calculated per resource. The cluster resource manager chooses the node with the highest score for a particular resource. If a node has a negative score for a resource, the resource cannot run on that node. + +On a pacemaker cluster, you can manipulate the decisions of the cluster with constraints. Constraints have a score. If a constraint has a score lower than `INFINITY`, Pacemaker regards it as recommendation. A score of `INFINITY` is mandatory. + +To ensure that primary replica and the virtual ip resources run on the same host, define a colocation constraint with a score of INFINITY. To add the colocation constraint, run the following command on one node. ```bash sudo pcs constraint colocation add virtualip ag_cluster-master INFINITY with-rsc-role=Master @@ -156,6 +168,8 @@ Manually fail over the availability group with `pcs`. Do not initiate failover w +>additional line + ## Next steps [Operate HA availability group](sql-server-linux-availability-group-failover-ha.md) From 26e097c2047caf548d9d80b646fc8e86929b52b7 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 13 Jun 2017 14:44:18 -0700 Subject: [PATCH 099/336] Update code in text. --- docs/linux/sql-server-linux-availability-group-cluster-rhel.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md index be38b360a6f..8b7a0f98d48 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md @@ -119,7 +119,7 @@ sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 --master meta notif ## Create virtual IP resource -To create the virtual IP address resource, run the following command on one node. Use an available static IP address from the network. Replace the IP address between `**<10.128.16.240>**' with a valid IP address. +To create the virtual IP address resource, run the following command on one node. Use an available static IP address from the network. Replace the IP address between `**<10.128.16.240>**` with a valid IP address. ```bash sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=**<10.128.16.240>** From c7ec7dcf6f927ce72bbe8acd0af8f8854912753a Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 13 Jun 2017 14:46:43 -0700 Subject: [PATCH 100/336] Remove dnote about non-existent or uninitialized AG --- docs/linux/sql-server-linux-availability-group-configure-ha.md | 2 -- docs/linux/sql-server-linux-availability-group-configure-rs.md | 2 -- 2 files changed, 4 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-configure-ha.md b/docs/linux/sql-server-linux-availability-group-configure-ha.md index 55739efe571..3c9e4822ccf 100644 --- a/docs/linux/sql-server-linux-availability-group-configure-ha.md +++ b/docs/linux/sql-server-linux-availability-group-configure-ha.md @@ -159,8 +159,6 @@ Run **only one** of the following scripts: ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE; ``` ->[!NOTE] ->Running the `CREATE AVAILABILITY GROUP` command completes with a warning: "Attempt to access non-existent or uninitialized availability group with ID . This is usually an internal condition, such as the availability group is being dropped or the local WSFC node has lost quorum. In such cases, and no user action is required." This is a known issue and Microsoft is working on a resolution. Meanwhile, users should assume command completed successfully. You can also configure an availability group with `CLUSTER_TYPE=EXTERNAL` using SQL Server Management Studio or PowerShell. diff --git a/docs/linux/sql-server-linux-availability-group-configure-rs.md b/docs/linux/sql-server-linux-availability-group-configure-rs.md index d0421fbbf26..18bb40303e4 100644 --- a/docs/linux/sql-server-linux-availability-group-configure-rs.md +++ b/docs/linux/sql-server-linux-availability-group-configure-rs.md @@ -59,8 +59,6 @@ CREATE AVAILABILITY GROUP [ag1] ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE; ``` - > [!NOTE] - > Running the CREATE AVAILABILITY GROUP command will complete with a warning: "Attempt to access non-existent or uninitialized availability group with ID . This is usually an internal condition, such as the availability group is being dropped or the local WSFC node has lost quorum. In such cases, and no user action is required.". This is a known issue and product team is working on a fix. Meanwhile, users should assume command completed successfully. ### Join secondary SQL Servers to the availability group From 572f211d2d47fbf72e0d594930cec133584b57b6 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 13 Jun 2017 15:02:59 -0700 Subject: [PATCH 101/336] Fixing for acrolinx. --- ...sql-server-linux-availability-group-configure-rs.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-configure-rs.md b/docs/linux/sql-server-linux-availability-group-configure-rs.md index 18bb40303e4..1df5d519233 100644 --- a/docs/linux/sql-server-linux-availability-group-configure-rs.md +++ b/docs/linux/sql-server-linux-availability-group-configure-rs.md @@ -30,7 +30,7 @@ You can configure a read-scale availability group for SQL Server on Linux. There This document explains how to create a *read-scale* availability group without a cluster manager. This architecture only provides read-only scalability. It does not provide HA. -[!INCLUDE [Create Prereq](../includes/ss-linux-cluster-availability-group-create-prereq.md)] +[!INCLUDE [Create prerequisites](../includes/ss-linux-cluster-availability-group-create-prereq.md)] ## Create the availability group @@ -101,7 +101,9 @@ ALTER AVAILABILITY GROUP [ag1] FORCE_FAILOVER_ALLOW_DATA_LOSS; ### Manual failover without data loss -Use this method when the primary replica is available, but you need to temporarly or permanently change the configuration and change the SQL instance that hosts the primary replica. One such case is during SQL Server upgrades. Before issuing manual failover, the user has to ensure that the target secondary replica is up to date, and there is no potential of data loss. The steps below describe how to achive this safely, without incuring data loss. +Use this method when the primary replica is available, but you need to temporarily or permanently change the configuration and change the SQL Server instance that hosts the primary replica. Before issuing manual failing over, ensure that the target secondary replica is up to date, so that there is no potential data loss. + +The following steps describe how to manually fail over without data loss: 1. Make the target secondary replica synchronous commit. @@ -110,7 +112,7 @@ Use this method when the primary replica is available, but you need to temporarl ``` 1. Update `REQUIRED_COPIES_TO_COMMIT` to 1. - This ensures no active transactions are committed to the primary replica without committing first to at least one synchronous secondary. The availabilty group is ready to failover when they synchronization_state_desc is SYNCHRONIZED and the sequence_number is the same for both primary and target secondary replica. Run this query to check: + This ensures no active transactions are committed to the primary replica without committing first to at least one synchronous secondary. The availability group is ready to failover when the synchronization_state_desc is SYNCHRONIZED and the sequence_number is the same for both primary and target secondary replica. Run this query to check: ```Transact-SQL SELECT ag.name, @@ -136,7 +138,7 @@ Use this method when the primary replica is available, but you need to temporarl ``` > [!NOTE] - > To delete an availability group use [DROP AVAILABILITY GROUP](https://docs.microsoft.com/en-us/sql/t-sql/statements/drop-availability-group-transact-sql). For an availability group created with CLUSTER_TYPE NONE or EXTERNAL, the command has to be executed on all replicas part of the avilability group. + > To delete an availability group use [DROP AVAILABILITY GROUP](https://docs.microsoft.com/en-us/sql/t-sql/statements/drop-availability-group-transact-sql). For an availability group created with CLUSTER_TYPE NONE or EXTERNAL, the command has to be executed on all replicas part of the availability group. ## Next steps From 287624eac2201e00a69ab1517d20a5faa3da31c5 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 13 Jun 2017 15:26:15 -0700 Subject: [PATCH 102/336] Update changes. --- docs/linux/sql-server-linux-availability-group-configure-rs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-availability-group-configure-rs.md b/docs/linux/sql-server-linux-availability-group-configure-rs.md index 1df5d519233..5de45f16cc3 100644 --- a/docs/linux/sql-server-linux-availability-group-configure-rs.md +++ b/docs/linux/sql-server-linux-availability-group-configure-rs.md @@ -34,7 +34,7 @@ This document explains how to create a *read-scale* availability group without a ## Create the availability group -Create the availability group. In order to create the availability group for read-scale on Linux, set `CLUSTER_TYPE = NONE`. In addition, set each replica with `FAILOVER_MODE = NONE`. In this configuration the availability group does not provide HA, but it does provide read-scale. The client applications running analytics or reporting workloads can directly connect to the secondary databases. Or the customer can setup a read only routing list and connect to the primary that will forward the connection request to each of the secondary replicas from the routing list in a round robin fashion. +Create the availability group. In order to create the availability group for read-scale on Linux, set `CLUSTER_TYPE = NONE`. In addition, set each replica with `FAILOVER_MODE = NONE`. In this configuration the availability group does not provide HA, but it does provide read-scale. The client applications running analytics or reporting workloads can directly connect to the secondary databases. You can also create a read only routing list. Connections to the primary replica forward read connection requests to each of the secondary replicas from the routing list in a round robin fashion. The following Transact-SQL script creates an availability group name `ag1`. The script configures the availability group replicas with `SEEDING_MODE = AUTOMATIC`. This setting causes SQL Server to automatically create the database on each secondary server after it is added to the availability group. Update the following script for your environment. Replace the `****` and `****` values with the names of the SQL Server instances that will host the replicas. Replace the `**<5022>**` with the port you set for the endpoint. Run the following Transact-SQL on the primary SQL Server replica to create the availability group. From dba27b55821a1b62164c5691e289c29f1d724634 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Wed, 14 Jun 2017 12:16:20 -0700 Subject: [PATCH 103/336] Update with changes --- ...r-linux-availability-group-configure-ha.md | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-configure-ha.md b/docs/linux/sql-server-linux-availability-group-configure-ha.md index 3c9e4822ccf..3c6c60d599f 100644 --- a/docs/linux/sql-server-linux-availability-group-configure-ha.md +++ b/docs/linux/sql-server-linux-availability-group-configure-ha.md @@ -26,13 +26,13 @@ ms.assetid: # Configure Always On availability group for SQL Server on Linux -This article describes how to create a SQL Server Always on availability group with three replicas for high availability on Linux. You can configure an availability group for SQL Server on Linux. There are two architectures for availability groups. A *high availability* architecture has three servers and uses a cluster manager to provide business continuity. This architecture can also include read-scale replicas. This document explains how to create the availability group high availability architecture. +This article describes how to create a SQL Server Always on availability group with three replicas for high availability on Linux. You can configure an availability group for SQL Server on Linux. There are two configuration type for availability groups. A *high availability* configuration has three servers and uses a cluster manager to provide business continuity. This configuration can also include read scale-out replicas. This document explains how to create the availability group high availability configuration. -You can also create a *read-scale* availability group without a cluster manager. This architecture only provides read-only scalability. It does not provide HA. To create a read-scale availability group, see [Configure read-scale availability group for SQL Server on Linux](sql-server-linux-availability-group-configure-rs.md). +You can also create a *read scale-out* availability group without a cluster manager. This configuration only provides read-only replicas for performance scale-out. It does not provide high availability. To create a read scale-out availability group, see [Configure read scale-out availability group for SQL Server on Linux](sql-server-linux-availability-group-configure-rs.md). Configurations that guarantee high availability and data protection require either three synchronous commit replicas or two synchronous replicas and a witness. For details, see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). -All servers must be either physical or virtual, and virtual servers must be on the same virtualization platform. This is because the fencing agents are platform specific. See [Policies for Guest Clusters](https://access.redhat.com/articles/29440#guest_policies). +All servers must be either physical or virtual, and virtual servers must be on the same virtualization platform. This requirement is because the fencing agents are platform specific. See [Policies for Guest Clusters](https://access.redhat.com/articles/29440#guest_policies). ## Roadmap @@ -78,17 +78,21 @@ There are three availability group configurations. - [Two synchronous replicas and a witness](sql-server-linux-availability-group-ha.md#witness) -- [Two synchronous replicas availability group](sql-server-linux-availability-group-ha.md#twoSynch) +- [Two synchronous replicas](sql-server-linux-availability-group-ha.md#twoSynch) For high availability, use either three synchronous replicas, or two synchronous replicas and a witness. For information about all three configurations, see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). -Create the availability group. In order to create the availability group for HA on Linux, use the [CREATE AVAILABILITY GROUP](https://docs.microsoft.com/en-us/sql/t-sql/statements/create-availability-group-transact-sql) Transact-SQL DDL with `CLUSTER_TYPE = EXTERNAL`. +Create the availability group for high availability on Linux. Use the [CREATE AVAILABILITY GROUP](https://docs.microsoft.com/en-us/sql/t-sql/statements/create-availability-group-transact-sql) with `CLUSTER_TYPE = EXTERNAL`. -The `EXTERNAL` value for `CLUSTER_TYPE` option specifies that the external cluster entity manages the availability group. Pacemaker is an example of an external cluster entity. When the availability group `CLUSTER_TYPE = EXTERNAL`, set primary and secondary replica `FAILOVER_MODE = EXTERNAL`. After you create the availability group, configure the cluster resource for the availability group using the cluster management tools - for example with Pacemaker use `pcs` (on RHEL, Ubuntu) or `crm` (on SLES). See the Linux distribution specific cluster configuration section for an end-to-end example. +* Availability group - `CLUSTER_TYPE = EXTERNAL` + Specifies that an external cluster entity manages the availability group. Pacemaker is an example of an external cluster entity. When the availability group cluster type is external, -The following Transact-SQL scripts creates an availability group for HA named `ag1`. The script configures the availability group replicas with `SEEDING_MODE = AUTOMATIC`. This setting causes SQL Server to automatically create the database on each secondary server. Update the following script for your environment. Replace the `****`, and `****` values with the names of the SQL Server instances that will host the replicas. Replace `****` with the port you set for the data mirroring endpoint. To create the availability group, run the following Transact-SQL on the SQL Server instance that will initially host the primary replica. +* Set Primary and secondary replicas `FAILOVER_MODE = EXTERNAL`. + Specifies that the replica will interact with an external cluster manager, like Pacemaker. + +The following Transact-SQL scripts creates an availability group for high availability named `ag1`. The script configures the availability group replicas with `SEEDING_MODE = AUTOMATIC`. This setting causes SQL Server to automatically create the database on each secondary server. Update the following script for your environment. Replace the `****`, and `****` values with the names of the SQL Server instances that will host the replicas. Replace `****` with the port you set for the data mirroring endpoint. To create the availability group, run the following Transact-SQL on the SQL Server instance that will initially host the primary replica. Run **only one** of the following scripts: @@ -140,20 +144,20 @@ Run **only one** of the following scripts:    WITH (CLUSTER_TYPE = EXTERNAL)    FOR REPLICA ON    N'node1' WITH ( -        ENDPOINT_URL = N'tcp://node1:5022', -        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, -        FAILOVER_MODE = EXTERNAL, -        SEEDING_MODE = AUTOMATIC + ENDPOINT_URL = N'tcp://node1:5022', +       AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, +       FAILOVER_MODE = EXTERNAL, +       SEEDING_MODE = AUTOMATIC    ),    N'node2' WITH (  -        ENDPOINT_URL = N'tcp://node2:5022',  -        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, -        FAILOVER_MODE = EXTERNAL, -        SEEDING_MODE = AUTOMATIC +       ENDPOINT_URL = N'tcp://node2:5022',  +       AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, +       FAILOVER_MODE = EXTERNAL, +       SEEDING_MODE = AUTOMATIC    ),    N'node3' WITH ( -        ENDPOINT_URL = N'tcp://node3:5022', -        AVAILABILITY_MODE = WITNESS_COMMIT +       ENDPOINT_URL = N'tcp://node3:5022', +       AVAILABILITY_MODE = WITNESS_COMMIT    ); ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE; @@ -175,7 +179,7 @@ ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE; [!INCLUDE [Create Post](../includes/ss-linux-cluster-availability-group-create-post.md)] >[!IMPORTANT] ->After you create the availability group, you must configure integration with a cluster technology like Pacemaker for HA. For a read-only scale-out architecture using availability groups, starting with [!INCLUDE [SQL Server version](..\includes\sssqlv14-md.md)], setting up a cluster is not required. +>After you create the availability group, you must configure integration with a cluster technology like Pacemaker for high availability. For a read scale-out configuration using availability groups, starting with [!INCLUDE [SQL Server version](..\includes\sssqlv14-md.md)], setting up a cluster is not required. If you followed the steps in this document, you have an availability group that is not yet clustered. The next step is to add the cluster. This configuration is valid for read scale-out/load balancing scenarios, it is not complete for high availability. For high availability, you need to add the availability group as a cluster resource. See [Next steps](#next-steps) for instructions. From 15182ce60e46cfce67408b41aa9e0bfb4c2337f8 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Wed, 14 Jun 2017 13:56:50 -0700 Subject: [PATCH 104/336] Trying to improve acrolinx score. --- ...l-server-linux-availability-group-configure-ha.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-configure-ha.md b/docs/linux/sql-server-linux-availability-group-configure-ha.md index 3c6c60d599f..d73e5e035a9 100644 --- a/docs/linux/sql-server-linux-availability-group-configure-ha.md +++ b/docs/linux/sql-server-linux-availability-group-configure-ha.md @@ -56,7 +56,7 @@ The steps to create an availability group on Linux servers for high availability >[!IMPORTANT] >Production environments require a fencing agent, like STONITH for high availability. The demonstrations in this documentation do not use fencing agents. The demonstrations are for testing and validation only. - >A Linux cluster uses fencing to return the cluster to a known state. The way to configure fencing depends on the distribution and the environment. Currently, fencing is not available in some cloud environments. See [Support Policies for RHEL High Availability Clusters - Virtualization Platforms](https://access.redhat.com/articles/29440) for more information. + >A Linux cluster uses fencing to return the cluster to a known state. The way to configure fencing depends on the distribution and the environment. Currently, fencing is not available in some cloud environments. For more information, see [Support Policies for RHEL High Availability Clusters - Virtualization Platforms](https://access.redhat.com/articles/29440). >For SLES, see [SUSE Linux Enterprise High Availability Extension](https://www.suse.com/documentation/sle-ha-12/singlehtml/book_sleha/book_sleha.html#cha.ha.fencing). @@ -90,13 +90,13 @@ Create the availability group for high availability on Linux. Use the [CREATE AV Specifies that an external cluster entity manages the availability group. Pacemaker is an example of an external cluster entity. When the availability group cluster type is external, * Set Primary and secondary replicas `FAILOVER_MODE = EXTERNAL`. - Specifies that the replica will interact with an external cluster manager, like Pacemaker. + Specifies that the replica interacts with an external cluster manager, like Pacemaker. -The following Transact-SQL scripts creates an availability group for high availability named `ag1`. The script configures the availability group replicas with `SEEDING_MODE = AUTOMATIC`. This setting causes SQL Server to automatically create the database on each secondary server. Update the following script for your environment. Replace the `****`, and `****` values with the names of the SQL Server instances that will host the replicas. Replace `****` with the port you set for the data mirroring endpoint. To create the availability group, run the following Transact-SQL on the SQL Server instance that will initially host the primary replica. +The following Transact-SQL scripts creates an availability group for high availability named `ag1`. The script configures the availability group replicas with `SEEDING_MODE = AUTOMATIC`. This setting causes SQL Server to automatically create the database on each secondary server. Update the following script for your environment. Replace the `****`, and `****` values with the names of the SQL Server instances that host the replicas. Replace `****` with the port you set for the data mirroring endpoint. To create the availability group, run the following Transact-SQL on the SQL Server instance that hosts the primary replica. Run **only one** of the following scripts: -- Create availability group with three synchronous replicas +- Create availability group with three synchronous replicas. ```Transact-SQL CREATE AVAILABILITY GROUP [ag1] @@ -128,7 +128,7 @@ Run **only one** of the following scripts: ``` >[!IMPORTANT] - >After you run the preceding script to create an availability group with three synchronous replicas, do not run the following script. + >After you run the preceding script to create an availability group with three synchronous replicas, do not run the following script: @@ -189,7 +189,7 @@ If you followed the steps in this document, you have an availability group that >After you configure the cluster and add the availability group as a cluster resource, you cannot use Transact-SQL to fail over the availability group resources. SQL Server cluster resources on Linux are not coupled as tightly with the operating system as they are on a Windows Server Failover Cluster (WSFC). SQL Server service is not aware of the presence of the cluster. All orchestration is done through the cluster management tools. In RHEL or Ubuntu use `pcs`. In SLES use `crm`. >[!IMPORTANT] ->If the availability group is a cluster resource, there is a known issue in current release where forced failover with data loss to an asynchronous replica does not work. This will be fixed in the upcoming release. Manual or automatic failover to a synchronous replica will succeed. +>If the availability group is a cluster resource, there is a known issue in current release where forced failover with data loss to an asynchronous replica does not work. This will be fixed in the upcoming release. Manual or automatic failover to a synchronous replica succeeds. ## Next steps From c78aa303cefaa286cac44c836bbf22779a90e67b Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Wed, 14 Jun 2017 14:24:15 -0700 Subject: [PATCH 105/336] Update for acrolinx --- ...r-linux-availability-group-configure-rs.md | 40 +++++++++---------- ...erver-linux-availability-group-overview.md | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-configure-rs.md b/docs/linux/sql-server-linux-availability-group-configure-rs.md index 5de45f16cc3..fde370918ae 100644 --- a/docs/linux/sql-server-linux-availability-group-configure-rs.md +++ b/docs/linux/sql-server-linux-availability-group-configure-rs.md @@ -1,7 +1,7 @@ --- # required metadata -title: Configure read-scale availability group for SQL Server on Linux | Microsoft Docs +title: Configure read scale-out availability group for SQL Server on Linux | Microsoft Docs description: author: MikeRayMSFT ms.author: mikeray @@ -24,19 +24,19 @@ ms.assetid: --- -# Configure read-scale availability group for SQL Server on Linux +# Configure read scale-out availability group for SQL Server on Linux -You can configure a read-scale availability group for SQL Server on Linux. There are two architectures for availability groups. A *high availability* (HA) architecture uses a cluster manager to provide improved business continuity. This architecture can also include read-scale replicas. To create the HA architecture, see [Configure Always On availability group for SQL Server on Linux](sql-server-linux-availability-group-configure-ha.md). +You can configure a read scale-out availability group for SQL Server on Linux. There are two architectures for availability groups. A *high availability* architecture uses a cluster manager to provide improved business continuity. This architecture can also include read scale-out replicas. To create the high availability architecture, see [Configure Always On availability group for SQL Server on Linux](sql-server-linux-availability-group-configure-ha.md). -This document explains how to create a *read-scale* availability group without a cluster manager. This architecture only provides read-only scalability. It does not provide HA. +This document explains how to create a *read scale-out* availability group without a cluster manager. This architecture only provides read scale-out only. It does not provide high availability. [!INCLUDE [Create prerequisites](../includes/ss-linux-cluster-availability-group-create-prereq.md)] ## Create the availability group -Create the availability group. In order to create the availability group for read-scale on Linux, set `CLUSTER_TYPE = NONE`. In addition, set each replica with `FAILOVER_MODE = NONE`. In this configuration the availability group does not provide HA, but it does provide read-scale. The client applications running analytics or reporting workloads can directly connect to the secondary databases. You can also create a read only routing list. Connections to the primary replica forward read connection requests to each of the secondary replicas from the routing list in a round robin fashion. +Create the availability group. Set `CLUSTER_TYPE = NONE`. In addition, set each replica with `FAILOVER_MODE = NONE`. Client applications running analytics or reporting workloads can directly connect to the secondary databases. You can also create a read-only routing list. Connections to the primary replica forward read connection requests to each of the secondary replicas from the routing list in a round robin fashion. -The following Transact-SQL script creates an availability group name `ag1`. The script configures the availability group replicas with `SEEDING_MODE = AUTOMATIC`. This setting causes SQL Server to automatically create the database on each secondary server after it is added to the availability group. Update the following script for your environment. Replace the `****` and `****` values with the names of the SQL Server instances that will host the replicas. Replace the `**<5022>**` with the port you set for the endpoint. Run the following Transact-SQL on the primary SQL Server replica to create the availability group. +The following Transact-SQL script creates an availability group name `ag1`. The script configures the availability group replicas with `SEEDING_MODE = AUTOMATIC`. This setting causes SQL Server to automatically create the database on each secondary server after it is added to the availability group. Update the following script for your environment. Replace the `****` and `****` values with the names of the SQL Server instances that host the replicas. Replace the `**<5022>**` with the port you set for the endpoint. Run the following Transact-SQL on the primary SQL Server replica: ```Transact-SQL CREATE AVAILABILITY GROUP [ag1] @@ -72,34 +72,34 @@ ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE; [!INCLUDE [Create Post](../includes/ss-linux-cluster-availability-group-create-post.md)] -This is not an HA configuration, if you need HA, follow the instructions at [Configure Always On Availability Group for SQL Server on Linux](sql-server-linux-availability-group-configure-ha.md). Specifically, create the availability group with `CLUSTER_TYPE=WSFC` (in Windows) or `CLUSTER_TYPE=EXTERNAL` (in Linux) and integrate with a cluster manager - either WSFC on Windows or Pacemaker on Linux. +This is not an high availability configuration, if you need high availability, follow the instructions at [Configure Always On Availability Group for SQL Server on Linux](sql-server-linux-availability-group-configure-ha.md). Specifically, create the availability group with `CLUSTER_TYPE=WSFC` (in Windows) or `CLUSTER_TYPE=EXTERNAL` (in Linux) and integrate with a cluster manager - either WSFC on Windows or Pacemaker on Linux. -## Connect to read only secondary replicas +## Connect to read-only secondary replicas -There are two ways to connect to the read only secondary replicas. Applications can connect directly to the SQL Server instance that hosts the secondary replica and query the databases, or they can use read-only routing. Read only routing requires a listener. +There are two ways to connect to the read-only secondary replicas. Applications can connect directly to the SQL Server instance that hosts the secondary replica and query the databases, or they can use read-only routing. read-only routing requires a listener. [Readable secondary replicas](../database-engine/availability-groups/windows/active-secondaries-readable-secondary-replicas-always-on-availability-groups.md) -[Read only routing](../database-engine/availability-groups/windows/listeners-client-connectivity-application-failover.md#ConnectToSecondary) +[read-only routing](../database-engine/availability-groups/windows/listeners-client-connectivity-application-failover.md#ConnectToSecondary) -## Failover primary replica on read-scale availability group +## Fail over primary replica on read scale-out availability group -Each availability group has only one primary replica. The primary replica allows reads and writes. To change which replica is the primary, you can failover. In an availability group for HA, the cluster manager automates in the failover process. In a read-scale availability group, the failover process is manual. There are two ways to failover the primary replica in a read scale availability group. +Each availability group has only one primary replica. The primary replica allows reads and writes. To change which replica is the primary, you can fail over. In an availability group for high availability, the cluster manager automates in the failover process. In a read scale-out availability group, the failover process is manual. There are two ways to fail over the primary replica in a read scale availability group. -- Forced manual failover with data loss +- Forced manual fail over with data loss -- Manual failover without data loss +- Manual fail over without data loss -### Forced failover with data loss +### Forced fail over with data loss Use this method when the primary replica is not available and can not be recovered. You can find more information about forced failover with data loss at [Perform a Forced Manual Failover](../database-engine/availability-groups/windows/perform-a-forced-manual-failover-of-an-availability-group-sql-server.md). -To issue a forced failover with data loss, connect to the SQL instance hosting the target secondary replica and run: +To force fail over with data loss, connect to the SQL instance hosting the target secondary replica and run: ```Transact-SQL ALTER AVAILABILITY GROUP [ag1] FORCE_FAILOVER_ALLOW_DATA_LOSS; ``` -### Manual failover without data loss +### Manual fail over without data loss Use this method when the primary replica is available, but you need to temporarily or permanently change the configuration and change the SQL Server instance that hosts the primary replica. Before issuing manual failing over, ensure that the target secondary replica is up to date, so that there is no potential data loss. @@ -110,9 +110,9 @@ The following steps describe how to manually fail over without data loss: ```Transact-SQL ALTER AVAILABILITY GROUP [ag1] MODIFY REPLICA ON N'***' WITH (AVAILABILITY_MODE = SYNCHRONOUS_COMMIT); ``` -1. Update `REQUIRED_COPIES_TO_COMMIT` to 1. +1. Update `required_synchronized_secondaries_to_commit`to 1. - This ensures no active transactions are committed to the primary replica without committing first to at least one synchronous secondary. The availability group is ready to failover when the synchronization_state_desc is SYNCHRONIZED and the sequence_number is the same for both primary and target secondary replica. Run this query to check: + This setting ensures that every active transaction is committed to the primary replica and at least one synchronous secondary. The availability group is ready to fail over when the synchronization_state_desc is SYNCHRONIZED and the sequence_number is the same for both primary and target secondary replica. Run this query to check: ```Transact-SQL SELECT ag.name, @@ -125,7 +125,7 @@ The following steps describe how to manually fail over without data loss: WHERE drs.group_id = ag.group_id; ``` -1. Demote the primary replica to secondary replica. After the primary replica is demoted, connections to the primary replica will not be able to write to the databases. Run this command on the SQL instance hosting the primary replica to to update the role to SECONDARY: +1. Demote the primary replica to secondary replica. After the primary replica is demoted, it is read-only. Run this command on the SQL instance hosting the primary replica to update the role to SECONDARY: ```Transact-SQL ALTER AVAILABILITY GROUP [ag1] SET (ROLE = SECONDARY); diff --git a/docs/linux/sql-server-linux-availability-group-overview.md b/docs/linux/sql-server-linux-availability-group-overview.md index 42de3a08dfa..9e39479b6d5 100644 --- a/docs/linux/sql-server-linux-availability-group-overview.md +++ b/docs/linux/sql-server-linux-availability-group-overview.md @@ -105,7 +105,7 @@ For more information about these options, see [CREATE AVAILABILITY GROUP](http:/ **Guarantee commits on synchronous secondary replicas** -Use `REQUIRED_COPIES_TO_COMMIT` with `CREATE AVAILABILITY GROUP` or `ALTER AVAILABILITY GROUP`. When REQUIRED_COPIES_TO_COMMIT is set to a value higher than 0, transactions at the primary replica databases will wait until the transaction is committed on the specified number of **synchronous secondary** replica database transaction logs. If enough synchronous secondary replicas are not online, all connections to primary replica will be rejected until communication with sufficient secondary replicas resume. +Use `required_synchronized_secondaries_to_commit`with `CREATE AVAILABILITY GROUP` or `ALTER AVAILABILITY GROUP`. When REQUIRED_COPIES_TO_COMMIT is set to a value higher than 0, transactions at the primary replica databases will wait until the transaction is committed on the specified number of **synchronous secondary** replica database transaction logs. If enough synchronous secondary replicas are not online, all connections to primary replica will be rejected until communication with sufficient secondary replicas resume. **Read-scale availability groups** From fdb31664f651b7550781de2d6dfe0052291aedd0 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Wed, 14 Jun 2017 14:27:13 -0700 Subject: [PATCH 106/336] Cleaning up required_copies_to_commit --- docs/linux/sql-server-linux-availability-group-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-availability-group-overview.md b/docs/linux/sql-server-linux-availability-group-overview.md index 9e39479b6d5..fda01909fc7 100644 --- a/docs/linux/sql-server-linux-availability-group-overview.md +++ b/docs/linux/sql-server-linux-availability-group-overview.md @@ -105,7 +105,7 @@ For more information about these options, see [CREATE AVAILABILITY GROUP](http:/ **Guarantee commits on synchronous secondary replicas** -Use `required_synchronized_secondaries_to_commit`with `CREATE AVAILABILITY GROUP` or `ALTER AVAILABILITY GROUP`. When REQUIRED_COPIES_TO_COMMIT is set to a value higher than 0, transactions at the primary replica databases will wait until the transaction is committed on the specified number of **synchronous secondary** replica database transaction logs. If enough synchronous secondary replicas are not online, all connections to primary replica will be rejected until communication with sufficient secondary replicas resume. +Use `required_synchronized_secondaries_to_commit`with `CREATE AVAILABILITY GROUP` or `ALTER AVAILABILITY GROUP`. When `required_synchronized_secondaries_to_commit` is set to a value higher than 0, transactions at the primary replica databases will wait until the transaction is committed on the specified number of **synchronous secondary** replica database transaction logs. If enough synchronous secondary replicas are not online, all connections to primary replica will be rejected until communication with sufficient secondary replicas resume. **Read-scale availability groups** From 5b24df993d3bee729135737f85d9dddeccee76e3 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Wed, 14 Jun 2017 14:37:12 -0700 Subject: [PATCH 107/336] Update dates. --- docs/linux/sql-server-linux-availability-group-cluster-rhel.md | 2 +- docs/linux/sql-server-linux-availability-group-configure-ha.md | 2 +- docs/linux/sql-server-linux-availability-group-configure-rs.md | 2 +- docs/linux/sql-server-linux-availability-group-overview.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md index 8b7a0f98d48..20df70d2924 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md @@ -6,7 +6,7 @@ description: author: MikeRayMSFT ms.author: mikeray manager: jhubbard -ms.date: 06/13/2017 +ms.date: 06/14/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine diff --git a/docs/linux/sql-server-linux-availability-group-configure-ha.md b/docs/linux/sql-server-linux-availability-group-configure-ha.md index d73e5e035a9..da661ca2a1c 100644 --- a/docs/linux/sql-server-linux-availability-group-configure-ha.md +++ b/docs/linux/sql-server-linux-availability-group-configure-ha.md @@ -6,7 +6,7 @@ description: author: MikeRayMSFT ms.author: mikeray manager: jhubbard -ms.date: 05/31/2017 +ms.date: 06/14/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine diff --git a/docs/linux/sql-server-linux-availability-group-configure-rs.md b/docs/linux/sql-server-linux-availability-group-configure-rs.md index fde370918ae..f20179bee8c 100644 --- a/docs/linux/sql-server-linux-availability-group-configure-rs.md +++ b/docs/linux/sql-server-linux-availability-group-configure-rs.md @@ -6,7 +6,7 @@ description: author: MikeRayMSFT ms.author: mikeray manager: jhubbard -ms.date: 05/17/2017 +ms.date: 06/14/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine diff --git a/docs/linux/sql-server-linux-availability-group-overview.md b/docs/linux/sql-server-linux-availability-group-overview.md index fda01909fc7..babc90e636f 100644 --- a/docs/linux/sql-server-linux-availability-group-overview.md +++ b/docs/linux/sql-server-linux-availability-group-overview.md @@ -6,7 +6,7 @@ description: author: MikeRayMSFT ms.author: mikeray manager: jhubbard -ms.date: 05/17/2017 +ms.date: 06/14/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine From 3cd501892d72ca5b09d7b28a888090fe34419155 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 15 Jun 2017 14:01:42 -0700 Subject: [PATCH 108/336] Adding step before the include --- docs/linux/sql-server-linux-availability-group-cluster-rhel.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md index 20df70d2924..55a030d81f8 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md @@ -59,6 +59,8 @@ The steps to create an availability group on Linux servers for high availability ## Configure Pacemaker for RHEL +1. Enable high availability subscription. + [!INCLUDE [RHEL-Configure-Pacemaker](../includes/ss-linux-cluster-pacemaker-configure-rhel.md)] After Pacemaker is configured, use `pcs` to interact with the cluster. Execute all commands on one node from the cluster. From 74d6ce4781e77a1010a5a86bffc452e543216a57 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 15 Jun 2017 14:10:47 -0700 Subject: [PATCH 109/336] Deleted extra space to see if that fixes the skipped number --- docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md b/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md index 130b3067617..dd4574e1945 100644 --- a/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md +++ b/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md @@ -1,4 +1,3 @@ - 3. On all cluster nodes, open the Pacemaker firewall ports. To open these ports with `firewalld`, run the following command: ```bash From b3a78dbd13d9572ccfcfd41bea545ba9900d6039 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 15 Jun 2017 14:54:29 -0700 Subject: [PATCH 110/336] Update link because numbered lists don't work in include files. --- .../sql-server-linux-availability-group-cluster-rhel.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md index 55a030d81f8..0f75f2d5c22 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md @@ -59,8 +59,9 @@ The steps to create an availability group on Linux servers for high availability ## Configure Pacemaker for RHEL -1. Enable high availability subscription. - +>[!NOTE] +>Red Hat Enterprise Linux servers require a subscription before you configure Pacemaker. + [!INCLUDE [RHEL-Configure-Pacemaker](../includes/ss-linux-cluster-pacemaker-configure-rhel.md)] After Pacemaker is configured, use `pcs` to interact with the cluster. Execute all commands on one node from the cluster. From 20b0801783491e3ced693cbfbded4b416567e1e5 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 15 Jun 2017 15:00:54 -0700 Subject: [PATCH 111/336] Update steps for Acrolinx --- docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md b/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md index dd4574e1945..8e37d6359a5 100644 --- a/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md +++ b/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md @@ -5,7 +5,7 @@ sudo firewall-cmd --reload ``` - > If you’re using another firewall that doesn’t have a built-in high-availability configuration, the following ports need to be opened for Pacemaker to be able to communicate with other nodes in the cluster + > If the firewall doesn’t have a built-in high-availability configuration, open the following ports for Pacemaker. > > * TCP: Ports 2224, 3121, 21064 > * UDP: Port 5405 @@ -18,7 +18,7 @@ ​ -2. Set the password for for the default user that is created when installing Pacemaker and Corosync packages. Use the same password on all nodes. +2. Set the password for the default user that is created when installing Pacemaker and Corosync packages. Use the same password on all nodes. ```bash sudo passwd hacluster @@ -43,7 +43,7 @@ ``` >[!NOTE] - >If you previously configured a cluster on the same nodes, you need to use `--force` option when running `pcs cluster setup`. Note this is equivalent to running `pcs cluster destroy` and pacemaker service needs to be re-enabled using `sudo systemctl enable pacemaker`. + >If you previously configured a cluster on the same nodes, you need to use `--force` option when running `pcs cluster setup`. This option is equivalent to running `pcs cluster destroy`. Run `sudo systemctl enable pacemaker` to re-enable pacemaker. 5. Install SQL Server resource agent for SQL Server. Run the following commands on all nodes. From 71ab9388389f8b395244abe0b2fe98442154e07b Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 15 Jun 2017 15:04:14 -0700 Subject: [PATCH 112/336] Again with the Acrolinx --- docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md b/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md index 8e37d6359a5..8ef0c1dd99f 100644 --- a/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md +++ b/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md @@ -26,7 +26,7 @@ ​ -3. Enable and start `pcsd` service and Pacemaker. This will allow nodes to rejoin the cluster after the reboot. Run the following command on all nodes. +3. To allow nodes to rejoin the cluster after the reboot, enable and start `pcsd` service and Pacemaker. Run the following command on all nodes. ```bash sudo systemctl enable pcsd @@ -43,7 +43,7 @@ ``` >[!NOTE] - >If you previously configured a cluster on the same nodes, you need to use `--force` option when running `pcs cluster setup`. This option is equivalent to running `pcs cluster destroy`. Run `sudo systemctl enable pacemaker` to re-enable pacemaker. + >If you previously configured a cluster on the same nodes, you need to use `--force` option when running `pcs cluster setup`. This option is equivalent to running `pcs cluster destroy`. To re-enable pacemaker, run `sudo systemctl enable pacemaker`. 5. Install SQL Server resource agent for SQL Server. Run the following commands on all nodes. From 5225e4b0e4ec64ff7dbfb6b3b8b852f8bc9d13ac Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 15 Jun 2017 15:08:11 -0700 Subject: [PATCH 113/336] Fix something. --- .../sql-server-linux-availability-group-cluster-rhel.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md index 0f75f2d5c22..6e29e8e7fee 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md @@ -34,13 +34,13 @@ This document explains how to create a three-node availability group cluster for For more details on cluster configuration, resource agents options, and management, visit [RHEL reference documentation](http://access.redhat.com/documentation/Red_Hat_Enterprise_Linux/7/html/High_Availability_Add-On_Reference/index.html). > [!NOTE] -> SQL Server is not as tightly integrated with Pacemaker on Linux as it is with Windows Server failover clustering. A SQL Server instance is not aware of the cluster. Pacemaker provides cluster resource orchestration. Also, the virtual network name is specific to Windows Server failover clustering; there is no equivalent in Pacemaker. Availabilty group dynamic management views (DMVs) that query cluster information return empty rows on Pacemaker clusters. You can still create a listener for transparent reconnection after failover, but you will have to manually register the listener name in DNS with the IP used to create the virtual IP resource. +> SQL Server is not as tightly integrated with Pacemaker on Linux as it is with Windows Server failover clustering. A SQL Server instance is not aware of the cluster. Pacemaker provides cluster resource orchestration. Also, the virtual network name is specific to Windows Server failover clustering - there is no equivalent in Pacemaker. Availability group dynamic management views (DMVs) that query cluster information return empty rows on Pacemaker clusters. To create a listener for transparent reconnection after failover, manually register the listener name in DNS with the IP used to create the virtual IP resource. The following sections walk through the steps to set up a Pacemaker cluster and add an availability group as resource in the cluster for high availability. ## Roadmap -The steps to create an availability group on Linux servers for high availability are different from the steps on a Windows Server failover cluster. The following list describes the high level steps: +The steps to create an availability group on Linux servers for high availability are different from the steps on a Windows Server failover cluster. The following list describes the high-level steps: 1. [Configure SQL Server on the cluster nodes](sql-server-linux-setup.md). @@ -77,7 +77,7 @@ Node level fencing ensures that a node does not run any resources. This is done For information about STONITH, and fencing, see the following articles: * [Pacemaker Clusters from Scratch](http://clusterlabs.org/doc/en-US/Pacemaker/1.1-plugin/html/Clusters_from_Scratch/ch05.html) -* [Fencing and Stonith](http://clusterlabs.org/doc/crm_fencing.html) +* [Fencing and STONITH](http://clusterlabs.org/doc/crm_fencing.html) * [Red Hat High Availability Add-On with Pacemaker: Fencing](http://access.redhat.com/documentation/Red_Hat_Enterprise_Linux/6/html/Configuring_the_Red_Hat_High_Availability_Add-On_with_Pacemaker/ch-fencing-HAAR.html) Because the node level fencing configuration depends heavily on your environment, we will disable it for this tutorial (it can be configured at a later time): From 1be9b00b00b06b2754e62dc08575c9a63980c11f Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 15 Jun 2017 17:53:36 -0700 Subject: [PATCH 114/336] Update with script --- ...ql-server-linux-availability-group-cluster-rhel.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md index 6e29e8e7fee..ef6d73c1a45 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md @@ -61,6 +61,17 @@ The steps to create an availability group on Linux servers for high availability >[!NOTE] >Red Hat Enterprise Linux servers require a subscription before you configure Pacemaker. +>Run the following script to configure the subscription and repos: +> + ```bash + #sudo subscription-manager register + #sudo subscription-manager list --available + #sudo subscription-manager attach --pool= + #sudo subscription-manager repos --enable=rhel-ha-for-rhel-7-server-rpms + ``` +>For more information, see [Pacemaker – The Open Source, High Availability Cluster](http://www.opensourcerers.org/pacemaker-the-open-source-high-availability-cluster/). + + [!INCLUDE [RHEL-Configure-Pacemaker](../includes/ss-linux-cluster-pacemaker-configure-rhel.md)] From 70deaced948328d7c71c37d584bcc7c7ed0ad32e Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 16 Jun 2017 10:05:22 -0700 Subject: [PATCH 115/336] Update with appropriate links. --- .../sql-server-linux-availability-group-cluster-rhel.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md index ef6d73c1a45..e864d0e8a04 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md @@ -59,19 +59,18 @@ The steps to create an availability group on Linux servers for high availability ## Configure Pacemaker for RHEL ->[!NOTE] ->Red Hat Enterprise Linux servers require a subscription before you configure Pacemaker. ->Run the following script to configure the subscription and repos: -> +Each node in the cluster must have an appropriate subscription for RHEL and the High Availability Add on. Review the requirements at [How to install High Availability and/or Resilient Storage cluster packages in Red Hat Enterprise Linux 5, 6, or 7? ](http://access.redhat.com/solutions/45930). Run the following script to configure the subscription and repos: + ```bash #sudo subscription-manager register #sudo subscription-manager list --available #sudo subscription-manager attach --pool= #sudo subscription-manager repos --enable=rhel-ha-for-rhel-7-server-rpms ``` ->For more information, see [Pacemaker – The Open Source, High Availability Cluster](http://www.opensourcerers.org/pacemaker-the-open-source-high-availability-cluster/). +For more information, see [Pacemaker – The Open Source, High Availability Cluster](http://www.opensourcerers.org/pacemaker-the-open-source-high-availability-cluster/). +After you have configured the subscription, complete the following steps to configure Pacemaker: [!INCLUDE [RHEL-Configure-Pacemaker](../includes/ss-linux-cluster-pacemaker-configure-rhel.md)] From 97fca198dcb910256bd279bc98894eededaab9bf Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 16 Jun 2017 10:18:29 -0700 Subject: [PATCH 116/336] Clean up link --- docs/linux/sql-server-linux-availability-group-cluster-rhel.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md index e864d0e8a04..ec5aa07ae99 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md @@ -59,7 +59,7 @@ The steps to create an availability group on Linux servers for high availability ## Configure Pacemaker for RHEL -Each node in the cluster must have an appropriate subscription for RHEL and the High Availability Add on. Review the requirements at [How to install High Availability and/or Resilient Storage cluster packages in Red Hat Enterprise Linux 5, 6, or 7? ](http://access.redhat.com/solutions/45930). Run the following script to configure the subscription and repos: +Each node in the cluster must have an appropriate subscription for RHEL and the High Availability Add on. Review the requirements at [How to install High Availability cluster packages in Red Hat Enterprise Linux](http://access.redhat.com/solutions/45930). Run the following script to configure the subscription and repos: ```bash #sudo subscription-manager register From f51464fb84c4bce85913f262002eaac9f9ada7cd Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 16 Jun 2017 10:36:31 -0700 Subject: [PATCH 117/336] Clarify steps for enabling pacemaker. --- ...r-linux-availability-group-cluster-rhel.md | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md index ec5aa07ae99..c2fb4297e10 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md @@ -57,20 +57,39 @@ The steps to create an availability group on Linux servers for high availability 5. [Add the availability group as a resource in the cluster](sql-server-linux-availability-group-cluster-rhel.md#create-availability-group-resource). -## Configure Pacemaker for RHEL +## Configure high availability for RHEL -Each node in the cluster must have an appropriate subscription for RHEL and the High Availability Add on. Review the requirements at [How to install High Availability cluster packages in Red Hat Enterprise Linux](http://access.redhat.com/solutions/45930). Run the following script to configure the subscription and repos: +To configure high availability for RHEL, enable the high availabilility subscription and then configure Pacemaker. +### Enable the high hvailability subscription for RHEL + +Each node in the cluster must have an appropriate subscription for RHEL and the High Availability Add on. Review the requirements at [How to install High Availability cluster packages in Red Hat Enterprise Linux](http://access.redhat.com/solutions/45930). Follow these steps to configure the subscription and repos: + +1. Register the system. ```bash #sudo subscription-manager register + ``` +1. List the available pools for registration. + ```bash #sudo subscription-manager list --available + ``` + From the list of available pools, note the pool ID for the high availability subscription. +1. Update the following script. Replace `` with the pool ID for high availability from the preceding step. Run the script to attach the subscription. + ```bash #sudo subscription-manager attach --pool= + ``` +1. Enable the repository. + ```bash #sudo subscription-manager repos --enable=rhel-ha-for-rhel-7-server-rpms ``` For more information, see [Pacemaker – The Open Source, High Availability Cluster](http://www.opensourcerers.org/pacemaker-the-open-source-high-availability-cluster/). After you have configured the subscription, complete the following steps to configure Pacemaker: + +### Configure Pacemaker + +After you register the subscription, complete the following steps to configure Pacemaker: [!INCLUDE [RHEL-Configure-Pacemaker](../includes/ss-linux-cluster-pacemaker-configure-rhel.md)] From 1a0dce13cbac0e41cee8cb3fcc53f2812c9432cb Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 16 Jun 2017 10:43:27 -0700 Subject: [PATCH 118/336] Fixing spacing. --- ...l-server-linux-availability-group-cluster-rhel.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md index c2fb4297e10..c883e70c880 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md @@ -59,26 +59,34 @@ The steps to create an availability group on Linux servers for high availability ## Configure high availability for RHEL -To configure high availability for RHEL, enable the high availabilility subscription and then configure Pacemaker. +To configure high availability for RHEL, enable the high availability subscription and then configure Pacemaker. -### Enable the high hvailability subscription for RHEL +### Enable the high availability subscription for RHEL Each node in the cluster must have an appropriate subscription for RHEL and the High Availability Add on. Review the requirements at [How to install High Availability cluster packages in Red Hat Enterprise Linux](http://access.redhat.com/solutions/45930). Follow these steps to configure the subscription and repos: 1. Register the system. + ```bash #sudo subscription-manager register ``` + 1. List the available pools for registration. + ```bash #sudo subscription-manager list --available ``` + From the list of available pools, note the pool ID for the high availability subscription. + 1. Update the following script. Replace `` with the pool ID for high availability from the preceding step. Run the script to attach the subscription. + ```bash #sudo subscription-manager attach --pool= ``` + 1. Enable the repository. + ```bash #sudo subscription-manager repos --enable=rhel-ha-for-rhel-7-server-rpms ``` From 66e59ca3cfa0cffe6c68df7b54f6477eb1f222b3 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 16 Jun 2017 10:49:39 -0700 Subject: [PATCH 119/336] Fixed for acrolynx... --- .../sql-server-linux-availability-group-cluster-rhel.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md index c883e70c880..a120f35b917 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md @@ -107,7 +107,7 @@ After Pacemaker is configured, use `pcs` to interact with the cluster. Execute a Pacemaker cluster vendors require STONITH to be enabled and a fencing device configured for a supported cluster setup. STONITH stands for "shoot the other node in the head." When the cluster resource manager cannot determine the state of a node or of a resource on a node, fencing brings the cluster to a known state again. -Resource level fencing ensures that there is no data corruption in case of an outage by configuring a resource. For example, you can use resource level fencing with DRBD (Distributed Replicated Block Device) to mark the disk on a node as outdated when the communication link goes down. +Resource level fencing ensures that there is no data corruption in case of an outage by configuring a resource. For example, you can use resource level fencing to mark the disk on a node as outdated when the communication link goes down. Node level fencing ensures that a node does not run any resources. This is done by resetting the node. Pacemaker supports a great variety of fencing devices. Examples include an uninterruptible power supply or management interface cards for servers. @@ -117,7 +117,7 @@ For information about STONITH, and fencing, see the following articles: * [Fencing and STONITH](http://clusterlabs.org/doc/crm_fencing.html) * [Red Hat High Availability Add-On with Pacemaker: Fencing](http://access.redhat.com/documentation/Red_Hat_Enterprise_Linux/6/html/Configuring_the_Red_Hat_High_Availability_Add-On_with_Pacemaker/ch-fencing-HAAR.html) -Because the node level fencing configuration depends heavily on your environment, we will disable it for this tutorial (it can be configured at a later time): +Because the node level fencing configuration depends heavily on your environment, disable it for this tutorial (it can be configured later). The following script disables node level fencing: ```bash sudo pcs property set stonith-enabled=false @@ -139,7 +139,7 @@ pcs property set start-failure-is-fatal=false >[!WARNING] >After an automatic failover, when `start-failure-is-fatal = true` the resource manager will attempt to start the resource. If it fails on the first attempt, manually run `pcs resource cleanup ` to clean up the resource failure count and reset the configuration. -For more details on Pacemaker cluster properties see [Pacemaker Clusters Properties](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/High_Availability_Add-On_Reference/ch-clusteropts-HAAR.html). +For information on Pacemaker cluster properties, see [Pacemaker Clusters Properties](http://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/High_Availability_Add-On_Reference/ch-clusteropts-HAAR.html). ## Create a SQL Server login for Pacemaker From ba855f5e52fd06f5ace1db235cdc0f825eaa7d2e Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 16 Jun 2017 11:38:53 -0700 Subject: [PATCH 120/336] Provide user name and password. --- docs/linux/sql-server-linux-availability-group-cluster-rhel.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md index a120f35b917..605cbe1efb2 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md @@ -71,6 +71,8 @@ Each node in the cluster must have an appropriate subscription for RHEL and the #sudo subscription-manager register ``` + Provide your user name and password. + 1. List the available pools for registration. ```bash From 217d9eed768a6abd18e80a2b45b6b83e2903a1fe Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 16 Jun 2017 12:51:06 -0700 Subject: [PATCH 121/336] Removing Witness from Linux Configurations. --- ...r-linux-availability-group-configure-ha.md | 26 +++----- .../sql-server-linux-availability-group-ha.md | 61 +++---------------- 2 files changed, 16 insertions(+), 71 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-configure-ha.md b/docs/linux/sql-server-linux-availability-group-configure-ha.md index da661ca2a1c..bcf2964bf6d 100644 --- a/docs/linux/sql-server-linux-availability-group-configure-ha.md +++ b/docs/linux/sql-server-linux-availability-group-configure-ha.md @@ -26,11 +26,11 @@ ms.assetid: # Configure Always On availability group for SQL Server on Linux -This article describes how to create a SQL Server Always on availability group with three replicas for high availability on Linux. You can configure an availability group for SQL Server on Linux. There are two configuration type for availability groups. A *high availability* configuration has three servers and uses a cluster manager to provide business continuity. This configuration can also include read scale-out replicas. This document explains how to create the availability group high availability configuration. +This article describes how to create a SQL Server Always on availability group for high availability on Linux. There are two configuration types for availability groups. A *high availability* configuration uses a cluster manager to provide business continuity. This configuration can also include read scale-out replicas. This document explains how to create the availability group high availability configuration. You can also create a *read scale-out* availability group without a cluster manager. This configuration only provides read-only replicas for performance scale-out. It does not provide high availability. To create a read scale-out availability group, see [Configure read scale-out availability group for SQL Server on Linux](sql-server-linux-availability-group-configure-rs.md). -Configurations that guarantee high availability and data protection require either three synchronous commit replicas or two synchronous replicas and a witness. For details, see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). +Configurations that guarantee high availability and data protection require either two or three synchronous commit replicas. With three synchronous replicas the availability group can automatically recovery even if one server is not available. For more information, see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). All servers must be either physical or virtual, and virtual servers must be on the same virtualization platform. This requirement is because the fencing agents are platform specific. See [Policies for Guest Clusters](https://access.redhat.com/articles/29440#guest_policies). @@ -72,17 +72,13 @@ The steps to create an availability group on Linux servers for high availability ## Create the availability group -There are three availability group configurations. +There are two supported availability group configurations for SQL Server on Linux. - [Three synchronous replicas](sql-server-linux-availability-group-ha.md#threeSynch) -- [Two synchronous replicas and a witness](sql-server-linux-availability-group-ha.md#witness) - - [Two synchronous replicas](sql-server-linux-availability-group-ha.md#twoSynch) -For high availability, use either three synchronous replicas, or two synchronous replicas and a witness. - -For information about all three configurations, see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). +For information, see [High availability and data protection for availability group configurations](sql-server-linux-availability-group-ha.md). Create the availability group for high availability on Linux. Use the [CREATE AVAILABILITY GROUP](https://docs.microsoft.com/en-us/sql/t-sql/statements/create-availability-group-transact-sql) with `CLUSTER_TYPE = EXTERNAL`. @@ -92,7 +88,7 @@ Create the availability group for high availability on Linux. Use the [CREATE AV * Set Primary and secondary replicas `FAILOVER_MODE = EXTERNAL`. Specifies that the replica interacts with an external cluster manager, like Pacemaker. -The following Transact-SQL scripts creates an availability group for high availability named `ag1`. The script configures the availability group replicas with `SEEDING_MODE = AUTOMATIC`. This setting causes SQL Server to automatically create the database on each secondary server. Update the following script for your environment. Replace the `****`, and `****` values with the names of the SQL Server instances that host the replicas. Replace `****` with the port you set for the data mirroring endpoint. To create the availability group, run the following Transact-SQL on the SQL Server instance that hosts the primary replica. +The following Transact-SQL scripts creates an availability group for high availability named `ag1`. The script configures the availability group replicas with `SEEDING_MODE = AUTOMATIC`. This setting causes SQL Server to automatically create the database on each secondary server. Update the following script for your environment. Replace the `****`, and `****` values with the names of the SQL Server instances that host the replicas. Replace the `**<5022>**` with the port you set for the data mirroring endpoint. To create the availability group, run the following Transact-SQL on the SQL Server instance that hosts the primary replica. Run **only one** of the following scripts: @@ -130,14 +126,14 @@ Run **only one** of the following scripts: >[!IMPORTANT] >After you run the preceding script to create an availability group with three synchronous replicas, do not run the following script: - + -- Create availability group with two synchronous replicas and a witness +- Create availability group with two synchronous replicas - Include two replicas with synchronous availability mode and a witness. For example, the following script creates an availability group called `ag1`. `node1` and `node2` host replicas in synchronous mode, with automatic seeding and automatic failover. `node3` is a witness. The script defines only the SQL Server instance name `node3`, the endpoint, and the availability mode. + Include two replicas with synchronous availability mode. For example, the following script creates an availability group called `ag1`. `node1` and `node2` host replicas in synchronous mode, with automatic seeding and automatic failover. >[!IMPORTANT] - >Only run the following script to create an availability group with two synchronous replicas and a witness. Do not run the following script if you ran the preceding script. + >Only run the following script to create an availability group with two synchronous replicas. Do not run the following script if you ran the preceding script. ```Transact-SQL CREATE AVAILABILITY GROUP [ag1] @@ -154,10 +150,6 @@ Run **only one** of the following scripts:       AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,       FAILOVER_MODE = EXTERNAL,       SEEDING_MODE = AUTOMATIC -    ), -    N'node3' WITH ( -       ENDPOINT_URL = N'tcp://node3:5022', -       AVAILABILITY_MODE = WITNESS_COMMIT    ); ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE; diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index 6fdd1c88644..5a92c9f9049 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -30,15 +30,13 @@ The current high availability solutions for Linux do not accommodate an external Choose an availability group design to meet specific business requirements for high availability, data protection, and read scale-out. >[!IMPORTANT] ->The following configurations describe three availability group design patterns and the capabilities of each pattern. These design patterns apply to availability groups with `CLUSTER_TYPE = EXTERNAL` for high availability solutions. +>The following configurations describe the availability group design patterns and the capabilities of each pattern. These design patterns apply to availability groups with `CLUSTER_TYPE = EXTERNAL` for high availability solutions. -The design patters are three availability group configurations. The configurations include: +The design patters are two availability group configurations. The configurations include: - **Three synchronous replicas** -- **Two synchronous replicas and a witness** - -- **Two synchronous replicas availability group** +- **Two synchronous replicas** ## How the configuration affects default resource settings @@ -67,38 +65,16 @@ The following table describes the high availability and data protection behavior \* Default setting when availability group is added as a resource in a cluster. - - -## Two synchronous replicas and a witness - -This configuration has two synchronous replicas and a witness to enable high availability and data protection. The witness is introduced in SQL Server 2017 CTP 2.2. In this configuration, the servers have the roles of primary replica, secondary replica, or witness. The witness contains configuration data about the availability group, but not a copy of the availability group user databases. The witness requires a SQL Server instance with SQL Server Express edition or higher. - -By default, it provides high availability but not data protection. - -![witness availability group][2] - -The following table describes the high availability and data protection behavior for an availability group with two synchronous replicas and a witness: - -|`required_synchronized_secondaries_to_commit`|0 \*|1 -| --- |:---:|:---: -|Automatic failover after primary replica outage| |✔| -|Primary replica available after secondary replica outage| |✔| -|Primary replica available after witness outage|✔| | - -\* Default setting when availability group is added as a resource in a cluster. - -For more information, see [More about a witness](#WitnessReplica). - ## Two synchronous replicas -This configuration enables data protection. Like the other availability group configurations, it can enable read scale-out. The two synchronous replicas configuration does not provide high availability. +This configuration enables data protection. Like the other availability group configurations, it can enable read scale-out. The two synchronous replicas configuration does not provide automatic high availability. ![Two synchronous replicas][1] -This configuration requires two servers. These servers fill the role of primary replica and secondary replica. -F +This configuration requires two servers. These servers fill the role of primary replica and secondary replica. + The two synchronous replicas configuration is optimized for data protection and distributing the read workload for databases. By default, the resource is configured for data protection. This configuration does not provide high availability because if either instance of SQL Server fails, either the database is not fully available or there is risk of data loss. The following table describes the data protection behavior according to the possible values for an availability group with two synchronous replicas: @@ -114,35 +90,13 @@ The following table describes the data protection behavior according to the poss The two synchronous replicas configuration may be the most economical because it only requires two instances of SQL Server on two servers. - - - -## More about a witness - -A witness in a SQL Server Always On availability group enables a configuration with high availability and data protection without using a third replica - a *witness*. Any edition of SQL Server can host a witness. A witness contains availability group configuration data like availability group roles, and synchronization status data in the `master` database. It does not include replicated user databases. The witness uses the `WITNESS_COMMIT` availability mode. It is never the primary replica. - -Use a witness in an availability group with two synchronous replicas. The group can include additional asynchronous replicas. An availability group can only have one witness. - -An availability group with a witness requires two synchronous replicas and can have additional asynchronous replicas. An availability group cannot have more than one witness. - -You can use any edition of SQL Server 2017 to host a witness. - -The witness has an availability mode - like a replica. A witness availability mode is `WITNESS_COMMIT`. In this mode, configuration information is synchronously committed to the witness. You cannot modify the availability mode of a witness. - -On a witness you cannot: - -- Fail over an availability group to a witness. -- Change the availability mode. - -To create an availability group with two synchronous replicas and a witness, see [Create availability group with two synchronous replicas and a witness](sql-server-linux-availability-group-configure-ha.md#witnessScript). - ## Understand SQL Server resource agent for pacemaker SQL Server 2017 CTP 1.4 added `sequence_number` to `sys.availability_groups` to allow Pacemaker to identify how up-to-date secondary replicas are with the primary replica. `sequence_number` is a monotonically increasing BIGINT that represents how up-to-date the local availability group replica is. Pacemaker updates the `sequence_number` with each availability group configuration change. Examples of configuration changes include failover, replica addition, or removal. The number is updated on the primary, then replicated to secondary replicas. Thus a secondary replica that has up-to-date configuration has the same sequence number as the primary. -When Pacemaker decides to promote a replica to primary, it first sends a *pre-promote* notification to all replicas and the witness - if applicable. The replicas return the sequence number. Next, when Pacemaker actually tries to promote a replica to primary, the replica only promotes itself if its sequence number is the highest of all the sequence numbers. If its own sequence number does not match the highest sequence number, the replica rejects the promote operation. In this way only the replica with the highest sequence number can be promoted to primary, ensuring no data loss. +When Pacemaker decides to promote a replica to primary, it first sends a *pre-promote* notification to all replicas. The replicas return the sequence number. Next, when Pacemaker actually tries to promote a replica to primary, the replica only promotes itself if its sequence number is the highest of all the sequence numbers. If its own sequence number does not match the highest sequence number, the replica rejects the promote operation. In this way only the replica with the highest sequence number can be promoted to primary, ensuring no data loss. This process requires at least one replica available for promotion with the same sequence number as the previous primary. The Pacemaker resource agent sets `required_synchronized_secondaries_to_commit` such that at least one synchronous secondary replica is up-to-date and available to be the target of an automatic failover by default. With each monitoring action, the value of `required_synchronized_secondaries_to_commit` is computed (and updated if necessary). The `required_synchronized_secondaries_to_commit` value is 'number of synchronous replicas' divided by 2. At failover time, the resource agent requires (`total number of replicas` - `required_synchronized_secondaries_to_commit` replicas) to respond to the pre-promote notification. The replica with the highest `sequence_number` is promoted to primary. @@ -176,5 +130,4 @@ sudo pcs resource update <**ag1**> required_synchronized_secondaries_to_commit= [1]: ./media/sql-server-linux-availability-group-ha/1-read-scale-out.png -[2]: ./media/sql-server-linux-availability-group-ha/2-witness.png [3]: ./media/sql-server-linux-availability-group-ha/3-three-replica.png \ No newline at end of file From 3ad220504cf08af56addbe6c8bdb2aa99c10dd49 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 16 Jun 2017 12:56:47 -0700 Subject: [PATCH 122/336] Remove availabilty group commit mode witness. from Create Availability Group. --- .../statements/create-availability-group-transact-sql.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/t-sql/statements/create-availability-group-transact-sql.md b/docs/t-sql/statements/create-availability-group-transact-sql.md index 62cdca3d92d..03778276ec5 100644 --- a/docs/t-sql/statements/create-availability-group-transact-sql.md +++ b/docs/t-sql/statements/create-availability-group-transact-sql.md @@ -66,7 +66,7 @@ CREATE AVAILABILITY GROUP group_name WITH ( ENDPOINT_URL = 'TCP://system-address:port', - AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT | WITNESS_COMMIT }, + AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT }, FAILOVER_MODE = { AUTOMATIC | MANUAL } [ , [ ,...n ] ] ) @@ -239,8 +239,8 @@ CREATE AVAILABILITY GROUP group_name *port* Is a port number that is associated with the mirroring endpoint of the partner server instance (for the ENDPOINT_URL option) or the port number used by the [!INCLUDE[ssDE](../../includes/ssde-md.md)] of the server instance (for the READ_ONLY_ROUTING_URL option). - AVAILABILITY_MODE **=** { {SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT } | WITNESS_COMMMIT } - SYNCHRONOUS_COMMIT or ASYNCHRONOUS_COMMIT specifies whether the primary replica has to wait for the secondary replica to acknowledge the hardening (writing) of the log records to disk before the primary replica can commit the transaction on a given primary database. The transactions on different databases on the same primary replica can commit independently. WITNESS_COMMIT designates a replica as a witness. See [More about a witness](../../linux/sql-server-linux-availability-group-ha.md#WitnessReplica). + AVAILABILITY_MODE **=** { {SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT } + SYNCHRONOUS_COMMIT or ASYNCHRONOUS_COMMIT specifies whether the primary replica has to wait for the secondary replica to acknowledge the hardening (writing) of the log records to disk before the primary replica can commit the transaction on a given primary database. The transactions on different databases on the same primary replica can commit independently. SYNCHRONOUS_COMMIT Specifies that the primary replica will wait to commit transactions until they have been hardened on this secondary replica (synchronous-commit mode). You can specify SYNCHRONOUS_COMMIT for up to three replicas, including the primary replica. From 359f059eeb208a34b8ff12fc0b90e45f6e5b2824 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 16 Jun 2017 13:14:38 -0700 Subject: [PATCH 123/336] Change availability group tense to please acrolinx --- .../create-availability-group-transact-sql.md | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/docs/t-sql/statements/create-availability-group-transact-sql.md b/docs/t-sql/statements/create-availability-group-transact-sql.md index 03778276ec5..93b83a9bdf7 100644 --- a/docs/t-sql/statements/create-availability-group-transact-sql.md +++ b/docs/t-sql/statements/create-availability-group-transact-sql.md @@ -138,10 +138,10 @@ CREATE AVAILABILITY GROUP group_name > There is no enforcement of the AUTOMATED_BACKUP_PREFERENCE setting. The interpretation of this preference depends on the logic, if any, that you script into back jobs for the databases in a given availability group. The automated backup preference setting has no impact on ad-hoc backups. For more information, see [Configure Backup on Availability Replicas (SQL Server)](../../database-engine/availability-groups/windows/configure-backup-on-availability-replicas-sql-server.md). > [!NOTE] -> To view the automated backup preference of an existing availability group, select the **automated_backup_preference** or **automated_backup_preference_desc** column of the [sys.availability_groups](../../relational-databases/system-catalog-views/sys-availability-groups-transact-sql.md) catalog view. Additionally, [sys.fn_hadr_backup_is_preferred_replica (Transact-SQL)](../../relational-databases/system-functions/sys-fn-hadr-backup-is-preferred-replica-transact-sql.md) can be used to determine the preferred backup replica. This function will always return 1 for at least one of the replicas, even when `AUTOMATED_BACKUP_PREFERENCE = NONE`. +> To view the automated backup preference of an existing availability group, select the **automated_backup_preference** or **automated_backup_preference_desc** column of the [sys.availability_groups](../../relational-databases/system-catalog-views/sys-availability-groups-transact-sql.md) catalog view. Additionally, [sys.fn_hadr_backup_is_preferred_replica (Transact-SQL)](../../relational-databases/system-functions/sys-fn-hadr-backup-is-preferred-replica-transact-sql.md) can be used to determine the preferred backup replica. This function returns 1 for at least one of the replicas, even when `AUTOMATED_BACKUP_PREFERENCE = NONE`. FAILURE_CONDITION_LEVEL **=** { 1 | 2 | **3** | 4 | 5 } - Specifies what failure conditions will trigger an automatic failover for this availability group. FAILURE_CONDITION_LEVEL is set at the group level but is relevant only on availability replicas that are configured for synchronous-commit availability mode (AVAILIBILITY_MODE **=** SYNCHRONOUS_COMMIT). Furthermore, failure conditions can trigger an automatic failover only if both the primary and secondary replicas are configured for automatic failover mode (FAILOVER_MODE **=** AUTOMATIC) and the secondary replica is currently synchronized with the primary replica. + Specifies what failure conditions trigger an automatic failover for this availability group. FAILURE_CONDITION_LEVEL is set at the group level but is relevant only on availability replicas that are configured for synchronous-commit availability mode (AVAILIBILITY_MODE **=** SYNCHRONOUS_COMMIT). Furthermore, failure conditions can trigger an automatic failover only if both the primary and secondary replicas are configured for automatic failover mode (FAILOVER_MODE **=** AUTOMATIC) and the secondary replica is currently synchronized with the primary replica. The failure-condition levels (1–5) range from the least restrictive, level 1, to the most restrictive, level 5. A given condition level encompasses all the less restrictive levels. Thus, the strictest condition level, 5, includes the four less restrictive condition levels (1-4), level 4 includes levels 1-3, and so forth. The following table describes the failure-condition that corresponds to each level. @@ -181,7 +181,7 @@ CREATE AVAILABILITY GROUP group_name Used to create a distributed availability group. This option is used with the AVAILABILITY GROUP ON parameter to connect two availability groups in separate Windows Server Failover Clusters. For more information, see [Distributed Availability Groups (Always On Availability Groups)](../../database-engine/availability-groups/windows/distributed-availability-groups-always-on-availability-groups.md). Distributed availability groups are supported beginning in [!INCLUDE[ssSQL15](../../includes/sssql15-md.md)]. REQUIRED_SYNCHRONOUS_SECONDARIES_TO_COMMIT - Introduced in SQL Server 2017 CTP 2.2. Used to set a minimum number of synchronous secondary replicas required to commit before the primary commits a transaction. Guarantees that SQL Server transactions will wait until the transaction logs are updated on the minimum number of secondary replicas. The default is 0 which gives the same behavior as SQL Server 2016. The minimum value is 0. The maximum value is the number of replicas minus 1. This option relates to replicas in synchronous commit mode. When replicas are in synchronous commit mode, writes on the primary replica wait until writes on the secondary synchronous replicas are committed to the replica database transaction log. If a SQL Server that hosts a secondary synchronous replica stops responding, the SQL Server that hosts the primary replica will mark that secondary replica as NOT SYNCHRONIZED and proceed. When the unresponsive database comes back online it will be in a "not synced" state and the replica will be marked as unhealthy until the primary can make it synchronous again. This setting guarantees that the primary replica will not proceed until the minimum number of replicas have committed each transaction. If the minimum number of replicas is not available then commits on the primary will fail. This setting applies to availability groups with cluster type `WSFC` and `EXTERNAL`. For cluster type `EXTERNAL` the setting is changed when the availability group is added to a cluster resource. See [High availability and data protection for availability group configurations](../../linux/sql-server-linux-availability-group-ha.md). + Introduced in SQL Server 2017 CTP 2.2. Used to set a minimum number of synchronous secondary replicas required to commit before the primary commits a transaction. Guarantees that SQL Server transaction waits until the transaction logs are updated on the minimum number of secondary replicas. The default is 0 which gives the same behavior as SQL Server 2016. The minimum value is 0. The maximum value is the number of replicas minus 1. This option relates to replicas in synchronous commit mode. When replicas are in synchronous commit mode, writes on the primary replica wait until writes on the secondary synchronous replicas are committed to the replica database transaction log. If a SQL Server that hosts a secondary synchronous replica stops responding, the SQL Server that hosts the primary replica marks that secondary replica as NOT SYNCHRONIZED and proceed. When the unresponsive database comes back online it is in a "not synced" state and the replica marked as unhealthy until the primary can make it synchronous again. This setting guarantees that the primary replica waits until the minimum number of replicas have committed each transaction. If the minimum number of replicas is not available then commits on the primary fail. This setting applies to availability groups with cluster type `WSFC` and `EXTERNAL`. For cluster type `EXTERNAL` the setting is changed when the availability group is added to a cluster resource. See [High availability and data protection for availability group configurations](../../linux/sql-server-linux-availability-group-ha.md). CLUSTER_TYPE Introduced in SQL Server 2017 CTP 2.2. Used to identify if the availability group is on a Windows Server Failover Cluster (WSFC). Set to WSFC when availability group is on a failover cluster instance on a Windows Server failover cluster. Set to EXTERNAL when the cluster is managed by a cluster manager that is not a Windows Server failover cluster, like Linux Pacemaker. Set to NONE when availability group not using WSFC for cluster coordination. For example, when an availability group includes Linux servers. @@ -189,15 +189,15 @@ CREATE AVAILABILITY GROUP group_name DATABASE *database_name* Specifies a list of one or more user databases on the local [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] instance (that is, the server instance on which you are creating the availability group). You can specify multiple databases for an availability group, but each database can belong to only one availability group. For information about the type of databases that an availability group can support, see [Prerequisites, Restrictions, and Recommendations for Always On Availability Groups (SQL Server)](../../database-engine/availability-groups/windows/prereqs-restrictions-recommendations-always-on-availability.md). To find out which local databases already belong to an availability group, see the **replica_id** column in the [sys.databases](../../relational-databases/system-catalog-views/sys-databases-transact-sql.md) catalog view. - The DATABASE clause is optional. If you omit it, the new availability group will be empty. + The DATABASE clause is optional. If you omit it, the new availability group is empty. - After you have created the availability group, you will need connect to each server instance that hosts a secondary replica and then prepare each secondary database and join it to the availability group. For more information, see [Start Data Movement on an Always On Secondary Database (SQL Server)](../../database-engine/availability-groups/windows/start-data-movement-on-an-always-on-secondary-database-sql-server.md). + After you have created the availability group, connect to each server instance that hosts a secondary replica and then prepare each secondary database and join it to the availability group. For more information, see [Start Data Movement on an Always On Secondary Database (SQL Server)](../../database-engine/availability-groups/windows/start-data-movement-on-an-always-on-secondary-database-sql-server.md). > [!NOTE] > Later, you can add eligible databases on the server instance that hosts the current primary replica to an availability group. You can also remove a database from an availability group. For more information, see [ALTER AVAILABILITY GROUP (Transact-SQL)](../../t-sql/statements/alter-availability-group-transact-sql.md). REPLICA ON - Specifies from one to five SQL server instances to host availability replicas in the new availability group. Each replica is specified by its server instance address followed by a WITH (…) clause. Minimally, you must specify your local server instance, which will become the initial primary replica. Optionally, you can also specify up to four secondary replicas. + Specifies from one to five SQL server instances to host availability replicas in the new availability group. Each replica is specified by its server instance address followed by a WITH (…) clause. Minimally, you must specify your local server instance, which becomes the initial primary replica. Optionally, you can also specify up to four secondary replicas. You need to join every secondary replica to the availability group. For more information, see [ALTER AVAILABILITY GROUP (Transact-SQL)](../../t-sql/statements/alter-availability-group-transact-sql.md). @@ -226,7 +226,7 @@ CREATE AVAILABILITY GROUP group_name For information about the prerequisites for WSFC nodes and server instances, see [Prerequisites, Restrictions, and Recommendations for Always On Availability Groups (SQL Server)](../../database-engine/availability-groups/windows/prereqs-restrictions-recommendations-always-on-availability.md). ENDPOINT_URL **='**TCP**://***system-address***:***port***'** - Specifies the URL path for the [database mirroring endpoint](../../database-engine/database-mirroring/the-database-mirroring-endpoint-sql-server.md) on the instance of [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] that will host the availability replica that you are defining in your current REPLICA ON clause. + Specifies the URL path for the [database mirroring endpoint](../../database-engine/database-mirroring/the-database-mirroring-endpoint-sql-server.md) on the instance of [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] that hosts the availability replica that you are defining in your current REPLICA ON clause. The ENDPOINT_URL clause is required. For more information, see [Specify the Endpoint URL When Adding or Modifying an Availability Replica (SQL Server)](../../database-engine/availability-groups/windows/specify-endpoint-url-adding-or-modifying-availability-replica.md). @@ -243,7 +243,7 @@ CREATE AVAILABILITY GROUP group_name SYNCHRONOUS_COMMIT or ASYNCHRONOUS_COMMIT specifies whether the primary replica has to wait for the secondary replica to acknowledge the hardening (writing) of the log records to disk before the primary replica can commit the transaction on a given primary database. The transactions on different databases on the same primary replica can commit independently. SYNCHRONOUS_COMMIT - Specifies that the primary replica will wait to commit transactions until they have been hardened on this secondary replica (synchronous-commit mode). You can specify SYNCHRONOUS_COMMIT for up to three replicas, including the primary replica. + Specifies that the primary replica waits to commit transactions until they have been hardened on this secondary replica (synchronous-commit mode). You can specify SYNCHRONOUS_COMMIT for up to three replicas, including the primary replica. ASYNCHRONOUS_COMMIT Specifies that the primary replica commits transactions without waiting for this secondary replica to harden the log (synchronous-commit availability mode). You can specify ASYNCHRONOUS_COMMIT for up to five availability replicas, including the primary replica. @@ -265,10 +265,10 @@ CREATE AVAILABILITY GROUP group_name The FAILOVER_MODE clause is required. The two types of manual failover, manual failover without data loss and forced failover (with possible data loss), are supported under different conditions. For more information, see [Failover and Failover Modes (Always On Availability Groups)](../../database-engine/availability-groups/windows/failover-and-failover-modes-always-on-availability-groups.md). SEEDING_MODE **=** { AUTOMATIC | MANUAL } - Specifies how the secondary replica will be initially seeded. + Specifies how the secondary replica is initially seeded. AUTOMATIC - Enables direct seeding. This method will seed the secondary replica over the network. This method does not require you to backup and restore a copy of the primary database on the replica. + Enables direct seeding. This method seeds the secondary replica over the network. This method does not require you to backup and restore a copy of the primary database on the replica. > [!NOTE] > For direct seeding, you must allow database creation on each secondary replica by calling **ALTER AVAILABILITY GROUP** with the **GRANT CREATE ANY DATABASE** option. @@ -281,12 +281,12 @@ CREATE AVAILABILITY GROUP group_name - 1..100 indicates that the availability replica could be chosen for performing backups. 1 indicates the lowest priority, and 100 indicates the highest priority. If BACKUP_PRIORITY = 1, the availability replica would be chosen for performing backups only if no higher priority availability replicas are currently available. -- 0 indicates that this availability replica will never be chosen for performing backups. This is useful, for example, for a remote availability replica to which you never want backups to fail over. +- 0 indicates that this availability replica is not for performing backups. This is useful, for example, for a remote availability replica to which you never want backups to fail over. For more information, see [Active Secondaries: Backup on Secondary Replicas (Always On Availability Groups)](../../database-engine/availability-groups/windows/active-secondaries-backup-on-secondary-replicas-always-on-availability-groups.md). SECONDARY_ROLE **(** … **)** - Specifies role-specific settings that will take effect if this availability replica currently owns the secondary role (that is, whenever it is a secondary replica). Within the parentheses, specify either or both secondary-role options. If you specify both, use a comma-separated list. + Specifies role-specific settings that take effect if this availability replica currently owns the secondary role (that is, whenever it is a secondary replica). Within the parentheses, specify either or both secondary-role options. If you specify both, use a comma-separated list. The secondary role options are as follows: @@ -309,13 +309,13 @@ CREATE AVAILABILITY GROUP group_name For a named instance, you can obtain the port number by querying the **port** and **type_desc** columns of the [sys.dm_tcp_listener_states](../../relational-databases/system-dynamic-management-views/sys-dm-tcp-listener-states-transact-sql.md) dynamic management view. The server instance uses the Transact-SQL listener (**type_desc='TSQL'**). - For more information about calculating the read-only routing URL for an availability replica, see [Calculating read_only_routing_url for Always On](http://blogs.msdn.com/b/mattn/archive/2012/04/25/calculating-read-only-routing-url-for-AlwaysOn.aspx). + For more information about calculating the read-only routing URL for a replica, see [Calculating read_only_routing_url for Always On](http://blogs.msdn.com/b/mattn/archive/2012/04/25/calculating-read-only-routing-url-for-AlwaysOn.aspx). > [!NOTE] > For a named instance of [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)], the Transact-SQL listener should be configured to use a specific port. For more information, see [Configure a Server to Listen on a Specific TCP Port (SQL Server Configuration Manager)](../../database-engine/configure-windows/configure-a-server-to-listen-on-a-specific-tcp-port.md). PRIMARY_ROLE **(** … **)** - Specifies role-specific settings that will take effect if this availability replica currently owns the primary role (that is, whenever it is the primary replica). Within the parentheses, specify either or both primary-role options. If you specify both, use a comma-separated list. + Specifies role-specific settings that take effect if this availability replica currently owns the primary role (that is, whenever it is the primary replica). Within the parentheses, specify either or both primary-role options. If you specify both, use a comma-separated list. The primary role options are as follows: @@ -338,14 +338,14 @@ CREATE AVAILABILITY GROUP group_name The READ_ONLY_ROUTING_LIST values are as follows: - Specifies the address of the instance of [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] that is the host for an availability replica that is a readable secondary replica when running under the secondary role. + Specifies the address of the instance of [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] that is the host for a replica that is a readable secondary replica when running under the secondary role. - Use a comma-separated list to specify all the server instances that might host a readable secondary replica. Read-only routing will follow the order in which server instances are specified in the list. If you include a replica's host server instance on the replica's read-only routing list, placing this server instance at the end of the list is typically a good practice, so that read-intent connections go to a secondary replica, if one is available. + Use a comma-separated list to specify all the server instances that might host a readable secondary replica. Read-only routing follows the order in which server instances are specified in the list. If you include a replica's host server instance on the replica's read-only routing list, placing this server instance at the end of the list is typically a good practice, so that read-intent connections go to a secondary replica, if one is available. Beginning with [!INCLUDE[ssSQL15](../../includes/sssql15-md.md)], you can load-balance read-intent requests across readable secondary replicas. You specify this by placing the replicas in a nested set of parentheses within the read-only routing list. For more information and examples, see [Configure load-balancing across read-only replicas](../../database-engine/availability-groups/windows/configure-read-only-routing-for-an-availability-group-sql-server.md#loadbalancing). NONE - Specifies that when this availability replica is the primary replica, read-only routing will not be supported. This is the default behavior. + Specifies that when this availability replica is the primary replica, read-only routing is not supported. This is the default behavior. SESSION_TIMEOUT **=** *integer* Specifies the session-timeout period in seconds. If you do not specify this option, by default, the time period is 10 seconds. The minimum value is 5 seconds. @@ -381,7 +381,7 @@ CREATE AVAILABILITY GROUP group_name Specifies whether the primary replica has to wait for the secondary availability group to acknowledge the hardening (writing) of the log records to disk before the primary replica can commit the transaction on a given primary database. SYNCHRONOUS_COMMIT - Specifies that the primary replica will wait to commit transactions until they have been hardened on the secondary availability group. You can specify SYNCHRONOUS_COMMIT for up to two availability groups, including the primary availability group. + Specifies that the primary replica waits to commit transactions until they have been hardened on the secondary availability group. You can specify SYNCHRONOUS_COMMIT for up to two availability groups, including the primary availability group. ASYNCHRONOUS_COMMIT Specifies that the primary replica commits transactions without waiting for this secondary availability group to harden the log. You can specify ASYNCHRONOUS_COMMIT for up to two availability groups, including the primary availability group. @@ -397,10 +397,10 @@ CREATE AVAILABILITY GROUP group_name The FAILOVER_MODE clause is required, and the only option is MANUAL. Automatic failover to the secondary availability group is not supported. SEEDING_MODE **=** { AUTOMATIC | MANUAL } - Specifies how the secondary availability group will be initially seeded. + Specifies how the secondary availability group is initially seeded. AUTOMATIC - Enables direct seeding. This method will seed the secondary availability group over the network. This method does not require you to backup and restore a copy of the primary database on the replicas of the secondary availability group. + Enables direct seeding. This method seeds the secondary availability group over the network. This method does not require you to backup and restore a copy of the primary database on the replicas of the secondary availability group. MANUAL Specifies manual seeding (default). This method requires you to create a backup of the database on the primary replica and manually restore that backup on the replica(s) of the secondary availability group. @@ -424,13 +424,13 @@ CREATE AVAILABILITY GROUP group_name We recommend that you specify a meaningful string. For example, for an availability group named `AG1`, a meaningful DNS host name would be `ag1-listener`. > [!IMPORTANT] -> NetBIOS recognizes only the first 15 chars in the dns_name. If you have two WSFC clusters that are controlled by the same Active Directory and you try to create availability group listeners in both of clusters using names with more than 15 characters and an identical 15 character prefix, you will get an error reporting that the Virtual Network Name resource could not be brought online. For information about prefix naming rules for DNS names, see [Assigning Domain Names](http://technet.microsoft.com/library/cc731265\(WS.10\).aspx). +> NetBIOS recognizes only the first 15 chars in the dns_name. If you have two WSFC clusters that are controlled by the same Active Directory and you try to create availability group listeners in both clusters using names with more than 15 characters and an identical 15 character prefix, an error reports that the Virtual Network Name resource could not be brought online. For information about prefix naming rules for DNS names, see [Assigning Domain Names](http://technet.microsoft.com/library/cc731265\(WS.10\).aspx). LISTENER takes one of the following options: WITH DHCP [ ON { **(‘***four_part_ipv4_address***’,‘***four_part_ipv4_mask***’)** } ] - Specifies that the availability group listener will use the Dynamic Host Configuration Protocol (DHCP). Optionally, use the ON clause to identify the network on which this listener will be created. DHCP is limited to a single subnet that is used for every server instances that hosts an availability replica in the availability group. + Specifies that the availability group listener uses the Dynamic Host Configuration Protocol (DHCP). Optionally, use the ON clause to identify the network on which this listener is created. DHCP is limited to a single subnet that is used for every server instances that hosts a replica in the availability group. > [!IMPORTANT] > We do not recommend DHCP in production environment. If there is a down time and the DHCP IP lease expires, extra time is required to register the new DHCP network IP address that is associated with the listener DNS name and impact the client connectivity. However, DHCP is good for setting up your development and testing environment to verify basic functions of availability groups and for integration with your applications. @@ -440,7 +440,7 @@ CREATE AVAILABILITY GROUP group_name `WITH DHCP ON ('10.120.19.0','255.255.254.0')` WITH IP **(** { **(‘***four_part_ipv4_address***’,‘***four_part_ipv4_mask***’)** | **(‘***ipv6_address***’)** } [ **,** ...*n* ] **)** [ **,** PORT **=***listener_port* ] - Specifies that, instead of using DHCP, the availability group listener will use one or more static IP addresses. To create an availability group across multiple subnets, each subnet requires one static IP address in the listener configuration. For a given subnet, the static IP address can be either an IPv4 address or an IPv6 address. Contact your network administrator to get a static IP address for each subnet that will host an availability replica for the new availability group. + Specifies that, instead of using DHCP, the availability group listener uses one or more static IP addresses. To create an availability group across multiple subnets, each subnet requires one static IP address in the listener configuration. For a given subnet, the static IP address can be either an IPv4 address or an IPv6 address. Contact your network administrator to get a static IP address for each subnet that hosts a replica for the new availability group. For example: @@ -481,7 +481,7 @@ CREATE AVAILABILITY GROUP group_name |------------------|-------------|-----------------| |AUTOMATED_BACKUP_PREFERENCE|SECONDARY|This automated backup preference indicates that backups should occur on a secondary replica except when the primary replica is the only replica online (this is the default behavior). For the AUTOMATED_BACKUP_PREFERENCE setting to have any effect, you need to script backup jobs on the availability databases to take the automated backup preference into account.| |FAILURE_CONDITION_LEVEL|3|This failure condition level setting specifies that an automatic failover should be initiated on critical SQL Server internal errors, such as orphaned spinlocks, serious write-access violations, or too much dumping.| -|HEALTH_CHECK_TIMEOUT|600000|This health check timeout value, 60 seconds, specifies that the WSFC cluster will wait 60000 milliseconds for the [sp_server_diagnostics](../../relational-databases/system-stored-procedures/sp-server-diagnostics-transact-sql.md) system stored procedure to return server-health information about a server instance that is hosting a synchronous-commit replica with automatic before the cluster assumes that the host server instance is slow or hung. (The default value is 30000 milliseconds).| +|HEALTH_CHECK_TIMEOUT|600000|This health check timeout value, 60 seconds, specifies that the WSFC cluster waits 60000 milliseconds for the [sp_server_diagnostics](../../relational-databases/system-stored-procedures/sp-server-diagnostics-transact-sql.md) system stored procedure to return server-health information about a server instance that is hosting a synchronous-commit replica with automatic before the cluster assumes that the host server instance is slow or hung. (The default value is 30000 milliseconds).| Three availability replicas are to be hosted by the default server instances on computers named `COMPUTER01`, `COMPUTER02`, and `COMPUTER03`. The following table summarizes the values specified for the replica options of each replica. @@ -490,9 +490,9 @@ CREATE AVAILABILITY GROUP group_name |ENDPOINT_URL|TCP://*COMPUTER01:5022*|TCP://*COMPUTER02:5022*|TCP://*COMPUTER03:5022*|In this example, the systems are the same domain, so the endpoint URLs can use the name of the computer system as the system address.| |AVAILABILITY_MODE|SYNCHRONOUS_COMMIT|SYNCHRONOUS_COMMIT|ASYNCHRONOUS_COMMIT|Two of the replicas use synchronous-commit mode. When synchronized, they support failover without data loss. The third replica, which uses asynchronous-commit availability mode.| |FAILOVER_MODE|AUTOMATIC|AUTOMATIC|MANUAL|The synchronous-commit replicas support automatic failover and planned manual failover. The synchronous-commit availability mode replica supports only forced manual failover.| -|BACKUP_PRIORITY|30|30|90|A higher priority, 90, is assigned to the asynchronous-commit replica, than to the synchronous-commit replicas. Backups will tend to occur on the server instance that hosts the asynchronous-commit replica.| +|BACKUP_PRIORITY|30|30|90|A higher priority, 90, is assigned to the asynchronous-commit replica, than to the synchronous-commit replicas. Backups tend to occur on the server instance that hosts the asynchronous-commit replica.| |SECONDARY_ROLE|( ALLOW_CONNECTIONS = NO,

READ_ONLY_ROUTING_URL = 'TCP://COMPUTER01:1433' )|( ALLOW_CONNECTIONS = NO,

READ_ONLY_ROUTING_URL = 'TCP://COMPUTER02:1433' )|( ALLOW_CONNECTIONS = READ_ONLY,
READ_ONLY_ROUTING_URL = 'TCP://COMPUTER03:1433' )|Only the asynchronous-commit replica serves as a readable secondary replica.

Specifies the computer name and default Database Engine port number (1433).

This argument is optional.| -|PRIMARY_ROLE|( ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = (COMPUTER03) )|( ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = (COMPUTER03) )|( ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = NONE )|In the primary role, all the replicas will reject read-intent connection attempts.

Read-intent connection requests will be routed to COMPUTER03 if the local replica is running under the secondary role. When that replica runs under the primary role, read-only routing is disabled.

This argument is optional.| +|PRIMARY_ROLE|( ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = (COMPUTER03) )|( ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = (COMPUTER03) )|( ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = NONE )|In the primary role, all the replicas reject read-intent connection attempts.

Read-intent connection requests are routed to COMPUTER03 if the local replica is running under the secondary role. When that replica runs under the primary role, read-only routing is disabled.

This argument is optional.| |SESSION_TIMEOUT|10|10|10|This example specifies the default session timeout value (10). This argument is optional.| Finally, the example specifies the optional LISTENER clause to create an availability group listener for the new availability group. A unique DNS name, `MyAgListenerIvP6`, is specified for this listener. The two replicas are on different subnets, so the listener must use static IP addresses. For each of the two availability replicas, the WITH IP clause specifies a static IP address, `2001:4898:f0:f00f::cf3c` and `2001:4898:e0:f213::4ce2`, which use the IPv6 format. This example also specifies uses the optional PORT argument to specify port `60173` as the listener port. From e1221cc5d5d7cbe0e5605a32d3d545e7c5fcd65d Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Fri, 16 Jun 2017 13:31:13 -0700 Subject: [PATCH 124/336] mssql-config, TLS settings. --- .../sql-server-linux-configure-mssql-conf.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-configure-mssql-conf.md b/docs/linux/sql-server-linux-configure-mssql-conf.md index 883de97ca6f..bef9a403d1c 100644 --- a/docs/linux/sql-server-linux-configure-mssql-conf.md +++ b/docs/linux/sql-server-linux-configure-mssql-conf.md @@ -6,7 +6,7 @@ description: This topic describes how to use the mssql-conf tool to configure S author: luisbosquez ms.author: lbosq manager: jhubbard -ms.date: 05/17/2017 +ms.date: 06/16/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -34,6 +34,7 @@ ms.custom: H1Hack27Feb2017 - [Default backup directory](#backupdir): Change the directory where SQL Server will send the backup files by default. - [Mini and full dump preferences](#coredump): Specify whether to generate both mini dumps and full dumps. - [Core dump type](#coredump): Choose the type of dump memory dump file to collect. +- [TLS settings](#tls): Configure Transport Level Security. - [High Availability](#hadr): Enable Availability Groups. - [Set traceflags](#traceflags): Set the traceflags that the service is going to use. - [Set collation](#collation): Set a new collation for SQL Server on Linux. @@ -200,6 +201,20 @@ The first phase capture is controlled by the **coredump.coredumptype** setting, | **filtered** | Filtered uses a subtraction-based design where all memory in the process is included unless specifically excluded. The design understands the internals of SQLPAL and the host environment, excluding certain regions from the dump. | **full** | Full is a complete process dump that includes all regions located in **/proc/$pid/maps**. This is not controlled by **coredump.captureminiandfull** setting. | +## Specify TLS settings + +Use mssql-conf to configure TLS for an instance of SQL Server running on Linux. The following options are supported: + +|Option |Description | +|--- |--- | +|`network.forceencryption` |If 1, then [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] forces all connections to be encrypted. By default, this option is 0. |  +|`network.tlscert` |The absolute path to the certificate file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:   `/etc/ssl/certs/mssql.pem`  The certificate file must be accessible by the mssql account. Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 600 `. |  +|`network.tlskey` |The absolute path to the private key file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:  `/etc/ssl/private/mssql.key`  The certificate file must be accessible by the mssql account. Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 600 `. | +|`network.tlsprotocols` |A comma-separated list of which TLS protocols are allowed by SQL Server. [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] always attempts to negotiate the strongest allowed protocol. If a client does not support any allowed protocol, [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] rejects the connection attempt.  For compatibility, all supported protocols are allowed by default (1.2, 1.1, 1.0).  If your clients support TLS 1.2, Microsoft recommends allowing only TLS 1.2. |  +|`network.tlsciphers` |Specifies which ciphers are allowed by [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] for TLS. This string must be formatted per [OpenSSL's cipher list format](https://www.openssl.org/docs/man1.0.2/apps/ciphers.html). In general, you should not need to change this option. 
By default, the following ciphers are allowed: 
`ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA` |   +| | | +For an example of using the TLS settings, see [Encrypting Connections to SQL Server on Linux](sql-server-linux-encrypted-connections.md). + ## High Availability This option enables availability groups on your SQL Server instance. The following command enables availability groups by setting **hadr.hadrenabled** to 1. You must restart SQL Server for the setting to take effect. From 5be5f554d4b4ab93927eca01a73c5e1edabd1cca Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 16 Jun 2017 13:33:01 -0700 Subject: [PATCH 125/336] Update date. --- docs/linux/sql-server-linux-availability-group-ha.md | 2 +- docs/t-sql/statements/create-availability-group-transact-sql.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-ha.md b/docs/linux/sql-server-linux-availability-group-ha.md index 5a92c9f9049..0c6a240a6bb 100644 --- a/docs/linux/sql-server-linux-availability-group-ha.md +++ b/docs/linux/sql-server-linux-availability-group-ha.md @@ -1,7 +1,7 @@ --- title: "SQL Server Always On availability group deployment patterns | Microsoft Docs" ms.custom: "" -ms.date: "06/13/2017" +ms.date: "06/16/2017" ms.prod: sql-linux ms.reviewer: "" ms.suite: "" diff --git a/docs/t-sql/statements/create-availability-group-transact-sql.md b/docs/t-sql/statements/create-availability-group-transact-sql.md index 93b83a9bdf7..e94d3ca8133 100644 --- a/docs/t-sql/statements/create-availability-group-transact-sql.md +++ b/docs/t-sql/statements/create-availability-group-transact-sql.md @@ -1,7 +1,7 @@ --- title: "CREATE AVAILABILITY GROUP (Transact-SQL) | Microsoft Docs" ms.custom: "" -ms.date: "05/31/2017" +ms.date: "06/16/2017" ms.prod: "sql-non-specified" ms.reviewer: "" ms.suite: "" From 1b8c241640fafbf240aba4c8a43ee1c6b57a57d9 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 16 Jun 2017 14:19:18 -0700 Subject: [PATCH 126/336] Removed additional line. --- .../linux/sql-server-linux-availability-group-cluster-rhel.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md index 605cbe1efb2..4131b26b493 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md @@ -208,10 +208,6 @@ sudo pcs constraint order promote ag_cluster-master then start virtualip Manually fail over the availability group with `pcs`. Do not initiate failover with Transact-SQL. For instructions, see [Failover](sql-server-linux-availability-group-failover-ha.md#failover). - - ->additional line - ## Next steps [Operate HA availability group](sql-server-linux-availability-group-failover-ha.md) From e1ab982cfd3171aba783023f6b279117111122ef Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 16 Jun 2017 14:24:04 -0700 Subject: [PATCH 127/336] Removed extra spaces. --- docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md b/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md index 8ef0c1dd99f..993d7f18945 100644 --- a/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md +++ b/docs/includes/ss-linux-cluster-pacemaker-configure-rhel.md @@ -16,16 +16,12 @@ sudo yum install pacemaker pcs fence-agents-all resource-agents ``` - ​ - 2. Set the password for the default user that is created when installing Pacemaker and Corosync packages. Use the same password on all nodes. ```bash sudo passwd hacluster ``` - ​ - 3. To allow nodes to rejoin the cluster after the reboot, enable and start `pcsd` service and Pacemaker. Run the following command on all nodes. ```bash From 7f7d6fb827540df5e61c1d9eaa90b87178ce775b Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Mon, 19 Jun 2017 12:50:52 -0700 Subject: [PATCH 128/336] Removing an unintended charachter from a few samples (#) --- .../sql-server-linux-availability-group-cluster-rhel.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md index 4131b26b493..f499502fcc2 100644 --- a/docs/linux/sql-server-linux-availability-group-cluster-rhel.md +++ b/docs/linux/sql-server-linux-availability-group-cluster-rhel.md @@ -68,7 +68,7 @@ Each node in the cluster must have an appropriate subscription for RHEL and the 1. Register the system. ```bash - #sudo subscription-manager register + sudo subscription-manager register ``` Provide your user name and password. @@ -76,7 +76,7 @@ Each node in the cluster must have an appropriate subscription for RHEL and the 1. List the available pools for registration. ```bash - #sudo subscription-manager list --available + sudo subscription-manager list --available ``` From the list of available pools, note the pool ID for the high availability subscription. @@ -84,13 +84,13 @@ Each node in the cluster must have an appropriate subscription for RHEL and the 1. Update the following script. Replace `` with the pool ID for high availability from the preceding step. Run the script to attach the subscription. ```bash - #sudo subscription-manager attach --pool= + sudo subscription-manager attach --pool= ``` 1. Enable the repository. ```bash - #sudo subscription-manager repos --enable=rhel-ha-for-rhel-7-server-rpms + sudo subscription-manager repos --enable=rhel-ha-for-rhel-7-server-rpms ``` For more information, see [Pacemaker – The Open Source, High Availability Cluster](http://www.opensourcerers.org/pacemaker-the-open-source-high-availability-cluster/). From 7a4449850257d9329c5c4cdc58c34a10fbdeac09 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Mon, 19 Jun 2017 13:17:37 -0700 Subject: [PATCH 129/336] What's new 2017 RC0 Reorganized. --- ...-new-in-sql-server-2017-database-engine.md | 103 +++--------------- 1 file changed, 14 insertions(+), 89 deletions(-) diff --git a/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md b/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md index 548573ba461..7078833190a 100644 --- a/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md +++ b/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md @@ -1,7 +1,7 @@ --- title: "What's New in SQL Server 2017 (Database Engine) | Microsoft Docs" ms.custom: "" -ms.date: "06//2017" +ms.date: "06/17/2017" ms.prod: "sql-server-2017" ms.reviewer: "" ms.suite: "" @@ -24,31 +24,23 @@ manager: "jhubbard" ## SQL Server Database Engine (CTP 3.0) - CLR assemblies can now be added to a whitelist, as a work-around for the `clr strict security` feature described in CTP 2.0. [sp_add_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md), [sp_drop_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md), and [sys.trusted_asssemblies](../../relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md) are added to support the white list of trusted assemblies. -## SQL Server Database Engine (CTP 2.1) -- A new, DMF [sys.dm_db_log_stats](../../relational-databases/system-dynamic-management-views/sys-dm-db-log-stats-transact-sql.md), is introduced to expose summary level attributes and information on transaction log files; useful for monitoring the health of the transaction log. - - -## SQL Server Database Engine (CTP 2.0) -- **Resumable online index rebuild**. Resumable online index rebuild allows you to resume an online index rebuild operation from where it stopped after a failure (such as a failover to a replica or insufficient disk space). You can also pause and later resume an online index rebuild operation. For example, you might need to temporarily free up systems resources in order to execute a high priority task or complete the index rebuild in another maintenance window if the available maintenance windows is too short for a large table. Finally, resumable online index rebuild does not require significant log space, which allows you to perform log truncation while the resumable rebuild operation is running. See [ALTER INDEX](../../t-sql/statements/alter-index-transact-sql.md) and [Guidelines for online index operations](../../relational-databases/indexes/guidelines-for-online-index-operations.md). -- **IDENTITY_CACHE option for ALTER DATABASE SCOPED CONFIGURATION**. A new option IDENTITY_CACHE was added to `ALTER DATABASE SCOPED CONFIGURATION` T-SQL statement. When this option is set to `OFF`, it allows the Database Engine to avoid gaps in the values of identity columns in case a server restarts unexpectedly or fails over to a secondary server. See [ALTER DATABASE SCOPED CONFIGURATION](../../t-sql/statements/alter-database-scoped-configuration-transact-sql.md). +## SQL Server Database Engine (CTP 2.1 and earlier) - CLR uses Code Access Security (CAS) in the .NET Framework, which is no longer supported as a security boundary. A CLR assembly created with `PERMISSION_SET = SAFE` may be able to access external system resources, call unmanaged code, and acquire sysadmin privileges. Beginning with [!INCLUDE[sssqlv14-md](../../includes/sssqlv14-md.md)], an `sp_configure` option called `clr strict security` is introduced to enhance the security of CLR assemblies. `clr strict security` is enabled by default, and treats `SAFE` and `EXTERNAL_ACCESS` assemblies as if they were marked `UNSAFE`. The `clr strict security` option can be disabled for backward compatibility, but this is not recommended. Microsoft recommends that all assemblies be signed by a certificate or asymmetric key with a corresponding login that has been granted `UNSAFE ASSEMBLY` permission in the master database. For more information, see [CLR strict security](clr-strict-security.md). +- A new, DMF [sys.dm_db_log_stats](../../relational-databases/system-dynamic-management-views/sys-dm-db-log-stats-transact-sql.md), is introduced to expose summary level attributes and information on transaction log files; useful for monitoring the health of the transaction log. +- Resumable online index rebuild. Resumable online index rebuild allows you to resume an online index rebuild operation from where it stopped after a failure (such as a failover to a replica or insufficient disk space). You can also pause and later resume an online index rebuild operation. For example, you might need to temporarily free up systems resources in order to execute a high priority task or complete the index rebuild in another maintenance window if the available maintenance windows is too short for a large table. Finally, resumable online index rebuild does not require significant log space, which allows you to perform log truncation while the resumable rebuild operation is running. See [ALTER INDEX](../../t-sql/statements/alter-index-transact-sql.md) and [Guidelines for online index operations](../../relational-databases/indexes/guidelines-for-online-index-operations.md). +- **IDENTITY_CACHE option for ALTER DATABASE SCOPED CONFIGURATION**. A new option IDENTITY_CACHE was added to `ALTER DATABASE SCOPED CONFIGURATION` T-SQL statement. When this option is set to `OFF`, it allows the Database Engine to avoid gaps in the values of identity columns in case a server restarts unexpectedly or fails over to a secondary server. See [ALTER DATABASE SCOPED CONFIGURATION](../../t-sql/statements/alter-database-scoped-configuration-transact-sql.md). - [!INCLUDE[ssnoversion](../../includes/ssnoversion.md)] now offers graph database capabilities to model many-to-many relationships. This includes new [CREATE TABLE](../../t-sql/statements/create-table-sql-graph.md) syntax for creating node and edge tables, and the keyword [MATCH](../../t-sql/queries/match-sql-graph.md) for queries. For more information, see [Graph Processing with SQL Server 2017](../../relational-databases/graphs/sql-graph-overview.md). - Automatic tuning is a database feature that provides insight into potential query performance problems, recommend solutions, and automatically fix identified problems. Automatic tuning in [!INCLUDE[ssnoversion](../../includes/ssnoversion.md)], notifies you whenever a potential performance issue is detected, and lets you apply corrective actions, or lets the [!INCLUDE[ssde-md](../../includes/ssde-md.md)] automatically fix performance problems. For more information, see [Automatic tuning](../../relational-databases/automatic-tuning/automatic-tuning.md). -- **PERFORMANCE ENHANCEMENT FOR NON CLUSTERED INDEX BUILD ON MEMORY-OPTIMIZED TABLES**. Performance of bwtree (non-clustered) index rebuild for MEMORY_OPTIMIZED tables during database recovery has been significantly optimized. This improvement substantially reduces the database recovery time when non-clustered indexes are used. +- PERFORMANCE ENHANCEMENT FOR NON CLUSTERED INDEX BUILD ON MEMORY-OPTIMIZED TABLES. Performance of bwtree (non-clustered) index rebuild for MEMORY_OPTIMIZED tables during database recovery has been significantly optimized. This improvement substantially reduces the database recovery time when non-clustered indexes are used. - [sys.dm_os_sys_info](../../relational-databases/system-dynamic-management-views/sys-dm-os-sys-info-transact-sql.md) has three new columns: socket_count, cores_per_socket, numa_node_count. -- A new column **modified_extent_page_count**, is introduced in [sys.dm_db_file_space_usage](../../relational-databases/system-dynamic-management-views/sys-dm-db-file-space-usage-transact-sql.md) to track differential changes in each database file of the database. The new column modified_extent_page_count allows you to build smart backup solution, which performs differential backup if percentage changed pages in the database is below a threshold (say 70-80%) else perform full database backup. -- **SELECT INTO … ON FileGroup** - [SELECT INTO](../../t-sql/queries/select-into-clause-transact-sql.md) now supports loading a table into a filegroup other than a default filegroup of the user using the **ON** keyword support added in SELECT INTO TSQL syntax. -- **Tempdb Setup Improvements** - The setup allows specifying initial tempdb file size up to **256 GB (262,144 MB)** per file with a warning to customers if the file size is set to value greater than 1 GB and if IFI is not enabled. It is important to understand the implication of not enabling instant file initialization (IFI) where setup time can increase exponentially depending on the initial size of tempdb data file specified. IFI is not applicable to transaction log size so specifying larger value of transaction log can invariably increase the setup time while starting up tempdb during setup irrespective of the IFI setting for SQL Server service account. +- A new column modified_extent_page_count\, is introduced in [sys.dm_db_file_space_usage](../../relational-databases/system-dynamic-management-views/sys-dm-db-file-space-usage-transact-sql.md) to track differential changes in each database file of the database. The new column modified_extent_page_count allows you to build smart backup solution, which performs differential backup if percentage changed pages in the database is below a threshold (say 70-80%) else perform full database backup. +- SELECT INTO … ON FileGroup - [SELECT INTO](../../t-sql/queries/select-into-clause-transact-sql.md) now supports loading a table into a filegroup other than a default filegroup of the user using the **ON** keyword support added in SELECT INTO TSQL syntax. +- Tempdb Setup Improvements - The setup allows specifying initial tempdb file size up to **256 GB (262,144 MB)** per file with a warning to customers if the file size is set to value greater than 1 GB and if IFI is not enabled. It is important to understand the implication of not enabling instant file initialization (IFI) where setup time can increase exponentially depending on the initial size of tempdb data file specified. IFI is not applicable to transaction log size so specifying larger value of transaction log can invariably increase the setup time while starting up tempdb during setup irrespective of the IFI setting for SQL Server service account. - A new dmv [sys.dm_tran_version_store_space_usage](../../relational-databases/system-dynamic-management-views/sys-dm-tran-version-store-space-usage.md)is introduced to track version store usage per database. This new dmv is useful in monitoring tempdb for version store usage for you to proactively plan tempdb sizing based on the version store usage requirement per database without any performance toll or overheads of running it on production servers. - A new DMF [sys.dm_db_log_info](../../relational-databases/system-dynamic-management-views/sys-dm-db-log-info-transact-sql.md) is introduced to expose the VLF information similar to DBCC LOGINFO to monitor, alert, and avert potential transaction log issues caused due to number of VLFs, VLF size or shrinkfile issues experienced by customers. -- **Improved Backup performance for small databases on high end servers** - While performing backup of databases in SQL Server, the backup process requires multiple iterations of buffer pool to drain the on-going I/Os. As a result, the backup time is not just the function of database size but also a function of active buffer pool size. In SQL Server 2017, the backup is optimized to avoid multiple iterations of buffer pool resulting in dramatic gains in backup performance for small to medium databases. The performance gain reduces as the database size increases as the pages to backup and backup IO takes more time compared to iterating buffer pool. -- **DBCC CLONEDATABASE Improvements** - DBCC CLONEDATABASE flushes runtime statistics while cloning to avoid missing query store runtime statistics in database clone. In addition to this, DBCC CLONEDATABASE is further enhanced to support and clone fulltext indexes. - -## SQL Server Database Engine (CTP 1.4) -- There are no new Database Engine features in this CTP. -- This CTP contains bug fixes for the Database Engine. - -## SQL Server Database Engine (CTP 1.3) +- Improved Backup performance for small databases on high end servers - While performing backup of databases in SQL Server, the backup process requires multiple iterations of buffer pool to drain the on-going I/Os. As a result, the backup time is not just the function of database size but also a function of active buffer pool size. In SQL Server 2017, the backup is optimized to avoid multiple iterations of buffer pool resulting in dramatic gains in backup performance for small to medium databases. The performance gain reduces as the database size increases as the pages to backup and backup IO takes more time compared to iterating buffer pool. +- Query Store now tracks wait stats summary information. Tracking wait stats categories per query in Query Store enables the next level of performance troubleshooting experience, providing, even more, insight into the workload performance and its bottlenecks while preserving the key Query Store advantages. +- System-versioned temporal tables now support CASCADE DELETE and CASCADE UPDATE. - Indirect checkpoint performance improvements. - Cluster-less Availability Groups support added. - Minimum Replica Commit Availability Groups setting added. @@ -58,30 +50,18 @@ manager: "jhubbard" - Online non-clustered columnstore index build and rebuild support added - Five new dynamic management views to return information about Linux process. For more information, see [Linux Process Dynamic Management Views](../../relational-databases/system-dynamic-management-views/linux-process-dynamic-management-views-transact-sql.md). - [sys.dm_db_stats_histogram (Transact-SQL)](../../relational-databases/system-dynamic-management-views/sys-dm-db-stats-histogram-transact-sql.md) is added for examining statistics. - -## SQL Server Database Engine (CTP 1.2) - - The Database Tuning Advisor (DTA) released with SQL Server Management Studio version 16.4, when analyzing SQL Server 2016 and later, has additional options. - Improved performance. For more information, see [Performance Improvements using Database Engine Tuning Advisor (DTA) recommendations](../../relational-databases/performance/performance-improvements-using-dta-recommendations.md). - The `-fc` option for allowing recommendations of columnstore indexes. For more information, see [DTA Utility](../../tools/dta/dta-utility.md) and [Columnstore index recommendations in Database Engine Tuning Advisor (DTA)](../../relational-databases/performance/columnstore-index-recommendations-in-database-engine-tuning-advisor-dta.md). - - The `-iq` option for allowing the DTA to review a workload from the Query Store. For more information, see [Tuning Database Using Workload from Query Store](../../relational-databases/performance/tuning-database-using-workload-from-query-store.md). - - -## SQL Server Database Engine (CTP 1.1) - - + - The `-iq` option for allowing the DTA to review a workload from the Query Store. For more information, see [Tuning Database Using Workload from Query Store](../../relational-databases/performance/tuning-database-using-workload-from-query-store.md). - For In-Memory functionality, additional enhancements to memory-optimized tables and natively compiled functions are listed next, and code samples are available in [subsequent text](#InMemory_CodeSamples): - Support for computed columns in memory-optimized tables, including indexes on computed columns. - - Full support for JSON functions in natively compiled modules, and in check constraints. + - Full support for JSON functions in natively compiled modules, and in check constraints. For more information, see [Optimize JSON processing with in-memory OLTP](../../relational-databases/json/optimize-json-processing-with-in-memory-oltp.md). - `CROSS APPLY` operator in natively compiled modules. - New string functions [CONCAT_WS](../../t-sql/functions/concat-ws-transact-sql.md), [TRANSLATE](../../t-sql/functions/translate-transact-sql.md), and [TRIM](../../t-sql/functions/trim-transact-sql.md) are added. - The `WITHIN GROUP` clause is now supported for the [STRING_AGG](../../t-sql/functions/string-agg-transact-sql.md) function. - Two new Japanese collation families (Japanese_Bushu_Kakusu_140 and Japanese_XJIS_140) were added, and the collation option Variation-selector-sensitive (_VSS) was added for use in Japanese collations. For more detail see [Collation and Unicode Support](../../relational-databases/collations/collation-and-unicode-support.md) - New bulk access options ([BULK INSERT](../../t-sql/statements/bulk-insert-transact-sql.md) and [OPENROWSET(BULK...)](../../t-sql/functions/openrowset-transact-sql.md)) enable access data directly from a file specified as CSV format, and from files stored in Azure Blob storage through the new `BLOB_STORAGE` option of [EXTERNAL DATA SOURCE](../../t-sql/statements/create-external-data-source-transact-sql.md). - - -## SQL Server Database Engine (CTP 1.0) - - Database **COMPATIBILITY_LEVEL** 140 has been added. Customers running in this level will get the latest language features and query optimizer behaviors. This includes changes in each pre-release version Microsoft releases. - Improvements to the way incremental statistics update thresholds are computed (140 compatibility mode required). - [sys.dm_exec_query_statistics_xml](../../relational-databases/system-dynamic-management-views/sys-dm-exec-query-statistics-xml-transact-sql.md) is added. @@ -99,59 +79,4 @@ manager: "jhubbard" - New Permissions: `DATABASE SCOPED CREDENTIAL` is now a class of securable, supporting `CONTROL`, `ALTER`, `REFERENCES`, `TAKE OWNERSHIP`, and `VIEW DEFINITION` permissions. `ADMINISTER DATABASE BULK OPERATIONS`, which is restricted to SQL Database, is now visible in `sys.fn_builtin_permissions`. - The [sys.dm_os_host_info](../../relational-databases/system-dynamic-management-views/sys-dm-os-host-info-transact-sql.md) DMV is added to provide operating system information for both Windows and Linux. - The database roles are created with R Services for managing permissions associated with packages. For more information, see [R Package management for SQL Server](../../advanced-analytics/r-services/r-package-management-for-sql-server-r-services.md). - - -## Code Samples for new In-Memory Enhancements - -The following subsections provide Transact-SQL code samples, which illustrate new In-Memory features which bullet listed in preceding text in this article. - -The CTP 1.1 bullet list for In-Memory is [here](#InMemoryBulletsCtp11). - -#### Computed column in a memory-optimized table - -This CREATE TABLE statement illustrates the following features, which were mentioned in preceding text about CTP 1.1: - -- JSON check constraint on a column. -- New computed columns. -- An index on a computed column. - -```tsql -CREATE TABLE Product( - ProductID int PRIMARY KEY NONCLUSTERED, - Name nvarchar(400) NOT NULL, - Price float, - - Data nvarchar(4000) CONSTRAINT [Data contains JSON] CHECK (ISJSON(Data)=1), - - MadeIn AS CAST(JSON_VALUE(Data, '$.MadeIn') as NVARCHAR(50)) PERSISTED, - Cost AS CAST(JSON_VALUE(Data, '$.ManufacturingCost') as float ), - - INDEX [idx_Product_MadeIn] NONCLUSTERED (MadeIn) -) - WITH (MEMORY_OPTIMIZED=ON); -``` - -#### CROSS APPLY, and JSON functions - -This CREATE PROCEDURE statement, for a natively compiled stored procedure, illustrates the following features, which were mentioned in preceding text about CTP 1.1: - -- CROSS APPLY operator. -- JSON functions. - -```tsql -CREATE OR ALTER PROCEDURE ProductList() - WITH SCHEMABINDING, NATIVE_COMPILATION -as begin - atomic with (transaction isolation level = snapshot, language = N'English') - - SELECT - ProductID, Name, Price, Tags, - Data, - JSON_VALUE(Data,'$.MadeIn') AS MadeIn, - value - FROM Product - CROSS APPLY OPENJSON(Data, '$.SalesReasons') - FOR JSON PATH -end; -``` From 69e0a525e8a2816f1106775421227ffac84c65d1 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Mon, 19 Jun 2017 13:52:41 -0700 Subject: [PATCH 130/336] Tweaking in-memory text. --- .../what-s-new-in-sql-server-2017-database-engine.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md b/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md index 7078833190a..5a4a7c4f948 100644 --- a/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md +++ b/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md @@ -54,9 +54,9 @@ manager: "jhubbard" - Improved performance. For more information, see [Performance Improvements using Database Engine Tuning Advisor (DTA) recommendations](../../relational-databases/performance/performance-improvements-using-dta-recommendations.md). - The `-fc` option for allowing recommendations of columnstore indexes. For more information, see [DTA Utility](../../tools/dta/dta-utility.md) and [Columnstore index recommendations in Database Engine Tuning Advisor (DTA)](../../relational-databases/performance/columnstore-index-recommendations-in-database-engine-tuning-advisor-dta.md). - The `-iq` option for allowing the DTA to review a workload from the Query Store. For more information, see [Tuning Database Using Workload from Query Store](../../relational-databases/performance/tuning-database-using-workload-from-query-store.md). -- For In-Memory functionality, additional enhancements to memory-optimized tables and natively compiled functions are listed next, and code samples are available in [subsequent text](#InMemory_CodeSamples): +- For In-Memory functionality, additional enhancements to memory-optimized tables and natively compiled functions are available. For code samples that illustrate these enhancements, see [Optimize JSON processing with in-memory OLTP](../../relational-databases/json/optimize-json-processing-with-in-memory-oltp.md). - Support for computed columns in memory-optimized tables, including indexes on computed columns. - - Full support for JSON functions in natively compiled modules, and in check constraints. For more information, see [Optimize JSON processing with in-memory OLTP](../../relational-databases/json/optimize-json-processing-with-in-memory-oltp.md). + - Full support for JSON functions in natively compiled modules, and in check constraints. - `CROSS APPLY` operator in natively compiled modules. - New string functions [CONCAT_WS](../../t-sql/functions/concat-ws-transact-sql.md), [TRANSLATE](../../t-sql/functions/translate-transact-sql.md), and [TRIM](../../t-sql/functions/trim-transact-sql.md) are added. - The `WITHIN GROUP` clause is now supported for the [STRING_AGG](../../t-sql/functions/string-agg-transact-sql.md) function. From 523283d1aede859f1043b8a518c9ebce16e39801 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Mon, 19 Jun 2017 18:16:16 -0400 Subject: [PATCH 131/336] New quick start format for Ubuntu --- .../quickstart-install-connect-ubuntu.md | 202 ++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 docs/linux/quickstart-install-connect-ubuntu.md diff --git a/docs/linux/quickstart-install-connect-ubuntu.md b/docs/linux/quickstart-install-connect-ubuntu.md new file mode 100644 index 00000000000..748f22614fc --- /dev/null +++ b/docs/linux/quickstart-install-connect-ubuntu.md @@ -0,0 +1,202 @@ +--- +title: Get started with SQL Server 2017 on Ubuntu | Microsoft Docs +description: This quick start tutorial shows how to install SQL Server on Ubuntu and then create and query a database with sqlcmd. +author: rothja +ms.author: jroth +manager: jhubbard +ms.date: 06/19/2017 +ms.topic: article +ms.prod: sql-linux +ms.technology: database-engine +--- +# Install SQL Server and create a database on Ubuntu + +This quick start first installs SQL Server 2017 CTP 2.1 on Ubuntu 16.04. You then connect with **sqlcmd** to create your first database. + +## Prerequisites + +- You must have a Ubuntu machine with at least 3.25GB of memory. + + > [!TIP] To install Ubuntu, go to [http://www.ubuntu.com/download/server](http://www.ubuntu.com/download/server). You can also create Ubuntu virtual machines in Azure. For instructions, see [Create a Linux virtual machine with the Azure CLI](https://docs.microsoft.com/azure/virtual-machines/linux/quick-create-cli). + +- For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). + +## Install SQL Server + +To install the **mssql-server** Package on Ubuntu, follow these steps: + +1. Import the public repository GPG keys: + + ```bash + curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - + ``` + +1. Register the Microsoft SQL Server Ubuntu repository: + + ```bash + curl https://packages.microsoft.com/config/ubuntu/16.04/mssql-server.list | sudo tee /etc/apt/sources.list.d/mssql-server.list + ``` + +1. Run the following commands to install SQL Server: + + ```bash + sudo apt-get update + sudo apt-get install -y mssql-server + ``` + +1. After the package installation finishes, run **mssql-conf setup** and follow the prompts. Make sure to specify a strong password for the SA account (Minimum length 8 characters, including uppercase and lowercase letters, base 10 digits and/or non-alphanumeric symbols). + + ```bash + sudo /opt/mssql/bin/mssql-conf setup + ``` + > [!IMPORTANT] If you plan to connect remotely, you might need to open the SQL Server TCP port on your firewall. The default SQL Server port is 1433. + +1. Once the configuration is done, verify that the service is running: + + ```bash + systemctl status mssql-server + ``` + +At this point, SQL Server is running on your Ubuntu machine and is ready to use. + +## Install the SQL Server command-line tools + +To create a database, you need to connect with a tool can run Transact-SQL statements on the SQL Server. The following steps install the SQL Server command-line tools, [sqlcmd](../tools/sqlcmd-utility.md) and [bcp](../tools/bcp-utility.md). + +> [!TIP] +> **Sqlcmd** is just one tool for connecting to SQL Server to run queries and perform management and development tasks. For other tools such as SQL Server Management Studio and Visual Studio Code, see the [Develop](sql-server-linux-develop-overview.md) and [Manage](sql-server-linux-management-overview.md) areas. + +1. Import the public repository GPG keys. + + ```bash + curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - + ``` + +1. Register the Microsoft Ubuntu repository. + + ```bash + curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list + ``` + +1. Update the sources list and run the installation command with the unixODBC developer package. + + ```bash + sudo apt-get update + sudo apt-get install mssql-tools unixodbc-dev + ``` + +1. For convenience, add `/opt/mssql-tools/bin/` to your **PATH** environment variable. This enables you to run the tools without specifying the full path. Run the following commands to modify the **PATH** for both login sessions and interactive/non-login sessions: + + ```bash + echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile + echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc + source ~/.bashrc + ``` + +## Connect to SQL Server on Linux + +The following steps use **sqlcmd** to locally connect to your new SQL Server instance. + +1. On your Linux box, open a command terminal. + +1. Run **sqlcmd** with parameters for your SQL Server name (-S), the user name (-U), and the password (-P). In this tutorial, you are connecting locally, so the server name is `localhost`. The user name is `SA` and the password is the one you provided for the SA account during setup. + + ```bash + sqlcmd -S localhost -U SA -P '' + ``` + + > [!TIP] + > You can omit the password on the command-line to be prompted to enter it. + + > [!TIP] If you later decide to connect remotely, specify the machine name or IP address for the **-S** parameter, and make sure port 1433 is open on your firewall. + +1. If successful, you should get to a **sqlcmd** command prompt: `1>`. + +1. If you get a connection failure, first attempt to diagnose the problem from the error message. Then review the [connection troubleshooting recommendations](sql-server-linux-troubleshooting-guide.md#connection). + +## Create a database + +From the **sqlcmd** command prompt, paste the following Transact-SQL command to create a test database: + +```sql +CREATE DATABASE testdb +``` + +On the next line, write a query to return the name of all of the databases on your server: + +```sql +SELECT Name from sys.Databases +``` + +The previous two commands were not executed immediately. You must type `GO` on a new line to execute the previous commands: + +```sql +GO +``` + +## Insert data + +Switch context to the new `testdb` database: + +```sql +USE testdb +``` + +Create new table named `inventory`: + +```sql +CREATE TABLE inventory (id INT, name NVARCHAR(50), quantity INT) +``` + +Insert data into the new table: + +```sql +INSERT INTO inventory VALUES (1, 'banana', 150); INSERT INTO inventory VALUES (2, 'orange', 154); +``` + +Type `GO` to execute the previous commands: + +```sql +GO +``` + +## Select data + +Query rows from the `inventory` table where the quantity is greater than 152: + +```sql +SELECT * FROM inventory WHERE quantity > 152; +``` + +Execute the command: + +```sql +GO +``` + +## Exit the sqlcmd command prompt + +To end your **sqlcmd** session, type `QUIT`: + +```sql +QUIT +``` + +In this quick start you connected to SQL Server with **sqlcmd**, and created and populated a database. For more information on how to use sqlcmd.exe, see [sqlcmd Utility](https://msdn.microsoft.com/library/ms162773.aspx). + +## Connect from Windows + +It is important to note that SQL Server tools on Windows connect to SQL Server instances on Linux in the same way they would connect to any remote SQL Server instance. + +If you have a Windows machine that can connect to your Linux machine, try the same steps in this topic from a Windows command-prompt running **sqlcmd**. Just verify that you use the target Linux machine name or IP address rather than localhost, and make sure that TCP port 1433 is open. If you have any problems connecting from Windows, see [connection troubleshooting recommendations](sql-server-linux-troubleshooting-guide.md#connection). + +For other tools that run on Windows but connect to SQL Server on Linux, see: +- [SQL Server Management Studio (SSMS)](sql-server-linux-develop-use-ssms.md) +- [Windows PowerShell](sql-server-linux-manage-powershell.md) +- [SQL Server Data Tools (SSDT)](sql-server-linux-develop-use-ssdt.md) + +## Next Steps + +If you're new to T-SQL, see [Tutorial: Writing Transact-SQL Statements](https://msdn.microsoft.com/library/ms365303.aspx) and the [Transact-SQL Reference (Database Engine)](https://msdn.microsoft.com/library/bb510741.aspx). + +For other ways to connect to SQL Server on Linux, see the [Develop](sql-server-linux-develop-overview.md) and [Manage](sql-server-linux-management-overview.md) areas. \ No newline at end of file From f55a1ec7a8b7988bf09a182ce211ba5e5c494676 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Mon, 19 Jun 2017 18:20:46 -0400 Subject: [PATCH 132/336] Create quickstarts test branch --- docs/linux/TOC.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index 9ae46a68fdd..bf61b8cb457 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -1,6 +1,7 @@ # [Understand and Explore](sql-server-linux-overview.md) ## [Release notes](sql-server-linux-release-notes.md) ## [What's new in this release?](sql-server-linux-whats-new.md) +# [Quickstarts] # [Get Started](sql-server-linux-get-started-tutorial.md) ## [Install SQL Server](sql-server-linux-setup.md) ### [Install on Red Hat Enterprise Linux](sql-server-linux-setup-red-hat.md) From b224f7fbaaf705af7ea1cdea1394ceb5cb181e40 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Mon, 19 Jun 2017 18:39:02 -0400 Subject: [PATCH 133/336] Fixing notes --- docs/linux/quickstart-install-connect-ubuntu.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/linux/quickstart-install-connect-ubuntu.md b/docs/linux/quickstart-install-connect-ubuntu.md index 748f22614fc..5f904fe1593 100644 --- a/docs/linux/quickstart-install-connect-ubuntu.md +++ b/docs/linux/quickstart-install-connect-ubuntu.md @@ -17,7 +17,8 @@ This quick start first installs SQL Server 2017 CTP 2.1 on Ubuntu 16.04. You the - You must have a Ubuntu machine with at least 3.25GB of memory. - > [!TIP] To install Ubuntu, go to [http://www.ubuntu.com/download/server](http://www.ubuntu.com/download/server). You can also create Ubuntu virtual machines in Azure. For instructions, see [Create a Linux virtual machine with the Azure CLI](https://docs.microsoft.com/azure/virtual-machines/linux/quick-create-cli). + > [!TIP] + > To install Ubuntu, go to [http://www.ubuntu.com/download/server](http://www.ubuntu.com/download/server). You can also create Ubuntu virtual machines in Azure. For instructions, see [Create a Linux virtual machine with the Azure CLI](https://docs.microsoft.com/azure/virtual-machines/linux/quick-create-cli). - For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). @@ -49,7 +50,8 @@ To install the **mssql-server** Package on Ubuntu, follow these steps: ```bash sudo /opt/mssql/bin/mssql-conf setup ``` - > [!IMPORTANT] If you plan to connect remotely, you might need to open the SQL Server TCP port on your firewall. The default SQL Server port is 1433. + > [!IMPORTANT] + > If you plan to connect remotely, you might need to open the SQL Server TCP port on your firewall. The default SQL Server port is 1433. 1. Once the configuration is done, verify that the service is running: @@ -108,7 +110,8 @@ The following steps use **sqlcmd** to locally connect to your new SQL Server ins > [!TIP] > You can omit the password on the command-line to be prompted to enter it. - > [!TIP] If you later decide to connect remotely, specify the machine name or IP address for the **-S** parameter, and make sure port 1433 is open on your firewall. + > [!TIP] + > If you later decide to connect remotely, specify the machine name or IP address for the **-S** parameter, and make sure port 1433 is open on your firewall. 1. If successful, you should get to a **sqlcmd** command prompt: `1>`. From e8061c55c92ca4d0ded6857d384b785dd40d6ddb Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Tue, 20 Jun 2017 11:22:27 -0400 Subject: [PATCH 134/336] Reformatting for consistency and clarity --- .../quickstart-install-connect-ubuntu.md | 94 ++++++++++--------- 1 file changed, 48 insertions(+), 46 deletions(-) diff --git a/docs/linux/quickstart-install-connect-ubuntu.md b/docs/linux/quickstart-install-connect-ubuntu.md index 5f904fe1593..addb98cbd8e 100644 --- a/docs/linux/quickstart-install-connect-ubuntu.md +++ b/docs/linux/quickstart-install-connect-ubuntu.md @@ -11,7 +11,7 @@ ms.technology: database-engine --- # Install SQL Server and create a database on Ubuntu -This quick start first installs SQL Server 2017 CTP 2.1 on Ubuntu 16.04. You then connect with **sqlcmd** to create your first database. +In this quick start tutorial, you first install SQL Server 2017 CTP 2.1 on Ubuntu 16.04. Then connect with **sqlcmd** to create your first database. ## Prerequisites @@ -24,7 +24,7 @@ This quick start first installs SQL Server 2017 CTP 2.1 on Ubuntu 16.04. You the ## Install SQL Server -To install the **mssql-server** Package on Ubuntu, follow these steps: +To configure SQL Server on Ubuntu, run the following commands in a terminal to install the **mssql-server** package: 1. Import the public repository GPG keys: @@ -51,7 +51,7 @@ To install the **mssql-server** Package on Ubuntu, follow these steps: sudo /opt/mssql/bin/mssql-conf setup ``` > [!IMPORTANT] - > If you plan to connect remotely, you might need to open the SQL Server TCP port on your firewall. The default SQL Server port is 1433. + > If you plan to connect remotely, you might also need to open the SQL Server TCP port (default 1433) on your firewall. 1. Once the configuration is done, verify that the service is running: @@ -65,9 +65,6 @@ At this point, SQL Server is running on your Ubuntu machine and is ready to use. To create a database, you need to connect with a tool can run Transact-SQL statements on the SQL Server. The following steps install the SQL Server command-line tools, [sqlcmd](../tools/sqlcmd-utility.md) and [bcp](../tools/bcp-utility.md). -> [!TIP] -> **Sqlcmd** is just one tool for connecting to SQL Server to run queries and perform management and development tasks. For other tools such as SQL Server Management Studio and Visual Studio Code, see the [Develop](sql-server-linux-develop-overview.md) and [Manage](sql-server-linux-management-overview.md) areas. - 1. Import the public repository GPG keys. ```bash @@ -95,12 +92,13 @@ To create a database, you need to connect with a tool can run Transact-SQL state source ~/.bashrc ``` +> [!TIP] +> **Sqlcmd** is just one tool for connecting to SQL Server to run queries and perform management and development tasks. Other tools include [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md) and [Visusal Studio Code](sql-server-linux-develop-use-vscode.md). + ## Connect to SQL Server on Linux The following steps use **sqlcmd** to locally connect to your new SQL Server instance. -1. On your Linux box, open a command terminal. - 1. Run **sqlcmd** with parameters for your SQL Server name (-S), the user name (-U), and the password (-P). In this tutorial, you are connecting locally, so the server name is `localhost`. The user name is `SA` and the password is the one you provided for the SA account during setup. ```bash @@ -119,63 +117,69 @@ The following steps use **sqlcmd** to locally connect to your new SQL Server ins ## Create a database -From the **sqlcmd** command prompt, paste the following Transact-SQL command to create a test database: +The following steps create a new database named `TestDB`. -```sql -CREATE DATABASE testdb -``` +1. From the **sqlcmd** command prompt, paste the following Transact-SQL command to create a test database: -On the next line, write a query to return the name of all of the databases on your server: + ```sql + CREATE DATABASE TestDB + ``` -```sql -SELECT Name from sys.Databases -``` +1. On the next line, write a query to return the name of all of the databases on your server: -The previous two commands were not executed immediately. You must type `GO` on a new line to execute the previous commands: + ```sql + SELECT Name from sys.Databases + ``` -```sql -GO -``` +1. The previous two commands were not executed immediately. You must type `GO` on a new line to execute the previous commands: + + ```sql + GO + ``` ## Insert data -Switch context to the new `testdb` database: +Next create a new table, `Inventory`, and insert two new rows. -```sql -USE testdb -``` +1. From the **sqlcmd** command prompt, switch context to the new `TestDB` database: + + ```sql + USE TestDB + ``` -Create new table named `inventory`: +1. Create new table named `Inventory`: -```sql -CREATE TABLE inventory (id INT, name NVARCHAR(50), quantity INT) -``` + ```sql + CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT) + ``` -Insert data into the new table: +1. Insert data into the new table: -```sql -INSERT INTO inventory VALUES (1, 'banana', 150); INSERT INTO inventory VALUES (2, 'orange', 154); -``` + ```sql + INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154); + ``` -Type `GO` to execute the previous commands: +1. Type `GO` to execute the previous commands: -```sql -GO -``` + ```sql + GO + ``` ## Select data -Query rows from the `inventory` table where the quantity is greater than 152: +Now, run a query to return data from the `Inventory` table. -```sql -SELECT * FROM inventory WHERE quantity > 152; -``` +1. From the **sqlcmd** commandd prompt, enter a query that returns rows from the `Inventory` table where the quantity is greater than 152: -Execute the command: + ```sql + SELECT * FROM Inventory WHERE quantity > 152; + ``` -```sql -GO -``` +1. Execute the command: + + ```sql + GO + ``` ## Exit the sqlcmd command prompt @@ -185,8 +189,6 @@ To end your **sqlcmd** session, type `QUIT`: QUIT ``` -In this quick start you connected to SQL Server with **sqlcmd**, and created and populated a database. For more information on how to use sqlcmd.exe, see [sqlcmd Utility](https://msdn.microsoft.com/library/ms162773.aspx). - ## Connect from Windows It is important to note that SQL Server tools on Windows connect to SQL Server instances on Linux in the same way they would connect to any remote SQL Server instance. From e72bde54e846200d1a7a5f94034f4beeb424a00e Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Tue, 20 Jun 2017 11:25:26 -0400 Subject: [PATCH 135/336] Changing next steps --- docs/linux/quickstart-install-connect-ubuntu.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/quickstart-install-connect-ubuntu.md b/docs/linux/quickstart-install-connect-ubuntu.md index addb98cbd8e..14d08b13fbe 100644 --- a/docs/linux/quickstart-install-connect-ubuntu.md +++ b/docs/linux/quickstart-install-connect-ubuntu.md @@ -204,4 +204,4 @@ For other tools that run on Windows but connect to SQL Server on Linux, see: If you're new to T-SQL, see [Tutorial: Writing Transact-SQL Statements](https://msdn.microsoft.com/library/ms365303.aspx) and the [Transact-SQL Reference (Database Engine)](https://msdn.microsoft.com/library/bb510741.aspx). -For other ways to connect to SQL Server on Linux, see the [Develop](sql-server-linux-develop-overview.md) and [Manage](sql-server-linux-management-overview.md) areas. \ No newline at end of file +To explore other ways to connect and manage SQL Server, see [Visusal Studio Code](sql-server-linux-develop-use-vscode.md) and [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md). \ No newline at end of file From c449dd9c7d15ff93a58d2f279c734edfd35702f5 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 20 Jun 2017 09:56:17 -0700 Subject: [PATCH 136/336] CLR Overview, link to new proc --- .../common-language-runtime-integration-overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/relational-databases/clr-integration/common-language-runtime-integration-overview.md b/docs/relational-databases/clr-integration/common-language-runtime-integration-overview.md index d96383183fd..d738f273ade 100644 --- a/docs/relational-databases/clr-integration/common-language-runtime-integration-overview.md +++ b/docs/relational-databases/clr-integration/common-language-runtime-integration-overview.md @@ -1,7 +1,7 @@ --- title: "Common Language Runtime (CLR) Integration Overview | Microsoft Docs" ms.custom: "" -ms.date: "04/14/2017" +ms.date: "06/20/2017" ms.prod: "sql-server-2016" ms.reviewer: "" ms.suite: "" @@ -29,7 +29,7 @@ manager: "jhubbard" [!INCLUDE[msCoName](../../includes/msconame-md.md)] [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] now features the integration of the common language runtime (CLR) component of the .NET Framework for [!INCLUDE[msCoName](../../includes/msconame-md.md)] Windows. The CLR supplies managed code with services such as cross-language integration, code access security, object lifetime management, and debugging and profiling support. For [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] users and application developers, CLR integration means that you can now write stored procedures, triggers, user-defined types, user-defined functions (scalar and table-valued), and user-defined aggregate functions using any .NET Framework language, including [!INCLUDE[msCoName](../../includes/msconame-md.md)] Visual Basic .NET and [!INCLUDE[msCoName](../../includes/msconame-md.md)] Visual C#. [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] includes the .NET Framework version 4 pre-installed. > [!WARNING] -> CLR uses Code Access Security (CAS) in the .NET Framework, which is no longer supported as a security boundary. A CLR assembly created with `PERMISSION_SET = SAFE` may be able to access external system resources, call unmanaged code, and acquire sysadmin privileges. Beginning with [!INCLUDE[sssqlv14](../../includes/sssqlv14-md.md)], an `sp_configure` option called `clr strict security` is introduced to enhance the security of CLR assemblies. `clr strict security` is enabled by default, and treats `SAFE` and `EXTERNAL_ACCESS` assemblies as if they were marked `UNSAFE`. The `clr strict security` option can be disabled for backward compatibility, but this is not recommended. Microsoft recommends that all assemblies be signed by a certificate or asymmetric key with a corresponding login that has been granted `UNSAFE ASSEMBLY` permission in the master database. For more information, see [CLR strict security](../../database-engine/configure-windows/clr-strict-security.md). +> CLR uses Code Access Security (CAS) in the .NET Framework, which is no longer supported as a security boundary. A CLR assembly created with `PERMISSION_SET = SAFE` may be able to access external system resources, call unmanaged code, and acquire sysadmin privileges. Beginning with [!INCLUDE[sssqlv14](../../includes/sssqlv14-md.md)], an `sp_configure` option called `clr strict security` is introduced to enhance the security of CLR assemblies. `clr strict security` is enabled by default, and treats `SAFE` and `EXTERNAL_ACCESS` assemblies as if they were marked `UNSAFE`. The `clr strict security` option can be disabled for backward compatibility, but this is not recommended. Microsoft recommends that all assemblies be signed by a certificate or asymmetric key with a corresponding login that has been granted `UNSAFE ASSEMBLY` permission in the master database. For more information, see [CLR strict security](../../database-engine/configure-windows/clr-strict-security.md). [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] administrators can also add assemblies to a list of assemblies, which the Database Engine should trust. For more information, see [sys.sp_add_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md). Among the major benefits of this integration are: From 130733417039dd88b48dac34a365c6eff901bebd Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 20 Jun 2017 09:57:43 -0700 Subject: [PATCH 137/336] CLR Strict sec, added link to proc --- docs/database-engine/configure-windows/clr-strict-security.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/database-engine/configure-windows/clr-strict-security.md b/docs/database-engine/configure-windows/clr-strict-security.md index e86f6a7a76e..64fbbeffbf0 100644 --- a/docs/database-engine/configure-windows/clr-strict-security.md +++ b/docs/database-engine/configure-windows/clr-strict-security.md @@ -2,7 +2,7 @@ title: "CLR strict security | Microsoft Docs" description: How to configure CLR strict security in SQL Server ms.custom: "" -ms.date: "04/19/2017" +ms.date: "06/20/2017" ms.prod: "sql-server-2017" ms.reviewer: "" ms.suite: "" @@ -35,7 +35,7 @@ Controls the interpretation of the `SAFE`, `EXTERNAL ACCESS`, `UNSAFE` permissio |1 |Enabled - Causes the [!INCLUDE[ssde-md](../../includes/ssde-md.md)] to ignore the `PERMISSION_SET` information on the assemblies, and always interpret them as `UNSAFE`. `Enabled` is the default value for [!INCLUDE[sssqlv14](../../includes/sssqlv14-md.md)]. | > [!WARNING] -> CLR uses Code Access Security (CAS) in the .NET Framework, which is no longer supported as a security boundary. A CLR assembly created with `PERMISSION_SET = SAFE` may be able to access external system resources, call unmanaged code, and acquire sysadmin privileges. Beginning with [!INCLUDE[sssqlv14](../../includes/sssqlv14-md.md)], an `sp_configure` option called `clr strict security` is introduced to enhance the security of CLR assemblies. `clr strict security` is enabled by default, and treats `SAFE` and `EXTERNAL_ACCESS` assemblies as if they were marked `UNSAFE`. The `clr strict security` option can be disabled for backward compatibility, but this is not recommended. Microsoft recommends that all assemblies be signed by a certificate or asymmetric key with a corresponding login that has been granted `UNSAFE ASSEMBLY` permission in the master database. +> CLR uses Code Access Security (CAS) in the .NET Framework, which is no longer supported as a security boundary. A CLR assembly created with `PERMISSION_SET = SAFE` may be able to access external system resources, call unmanaged code, and acquire sysadmin privileges. Beginning with [!INCLUDE[sssqlv14](../../includes/sssqlv14-md.md)], an `sp_configure` option called `clr strict security` is introduced to enhance the security of CLR assemblies. `clr strict security` is enabled by default, and treats `SAFE` and `EXTERNAL_ACCESS` assemblies as if they were marked `UNSAFE`. The `clr strict security` option can be disabled for backward compatibility, but this is not recommended. Microsoft recommends that all assemblies be signed by a certificate or asymmetric key with a corresponding login that has been granted `UNSAFE ASSEMBLY` permission in the master database. [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] administrators can also add assemblies to a list of assemblies, which the Database Engine should trust. For more information, see [sys.sp_add_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md). ## Remarks From deb530499cfd36e7559134aa25f67238a3ef7341 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 20 Jun 2017 09:59:38 -0700 Subject: [PATCH 138/336] clr enable option, added warning. --- .../clr-enabled-server-configuration-option.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/database-engine/configure-windows/clr-enabled-server-configuration-option.md b/docs/database-engine/configure-windows/clr-enabled-server-configuration-option.md index 23f8b9c4172..beafbf1b9c3 100644 --- a/docs/database-engine/configure-windows/clr-enabled-server-configuration-option.md +++ b/docs/database-engine/configure-windows/clr-enabled-server-configuration-option.md @@ -1,7 +1,7 @@ --- title: "clr enabled Server Configuration Option | Microsoft Docs" ms.custom: "" -ms.date: "03/02/2017" +ms.date: "06/20/2017" ms.prod: "sql-server-2016" ms.reviewer: "" ms.suite: "" @@ -33,6 +33,9 @@ WOW64 only. Restart WOW64 servers to effect the settings changes. No restart req When you run RECONFIGURE, and the run value of the clr enabled option is changed from 1 to 0, all application domains containing user assemblies are immediately unloaded. > **Common language runtime (CLR) execution is not supported under lightweight pooling** Disable one of two options: "clr enabled" or "lightweight pooling. Features that rely upon CLR and that do not work properly in fiber mode include the **hierarchy** data type, replication, and Policy-Based Management. + +> [!WARNING] +> CLR uses Code Access Security (CAS) in the .NET Framework, which is no longer supported as a security boundary. A CLR assembly created with `PERMISSION_SET = SAFE` may be able to access external system resources, call unmanaged code, and acquire sysadmin privileges. Beginning with [!INCLUDE[sssqlv14](../../includes/sssqlv14-md.md)], an `sp_configure` option called `clr strict security` is introduced to enhance the security of CLR assemblies. `clr strict security` is enabled by default, and treats `SAFE` and `EXTERNAL_ACCESS` assemblies as if they were marked `UNSAFE`. The `clr strict security` option can be disabled for backward compatibility, but this is not recommended. Microsoft recommends that all assemblies be signed by a certificate or asymmetric key with a corresponding login that has been granted `UNSAFE ASSEMBLY` permission in the master database. [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] administrators can also add assemblies to a list of assemblies, which the Database Engine should trust. For more information, see [sys.sp_add_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md). ## Example The following example first displays the current setting of the clr enabled option and then enables the option by setting the option value to 1. To disable the option, set the value to 0. From 00fd1332901b6bdb1e84e0126bab0b0d8b4266cf Mon Sep 17 00:00:00 2001 From: Mike Ray Date: Tue, 20 Jun 2017 10:41:55 -0700 Subject: [PATCH 139/336] A couple of suggestions to standardize style I added colons after instructions in the **Install the SQL Server command-line tools** section. To make it match the other sections. Also in that same section the first sentence was missing a word, so I fixed. --- docs/linux/quickstart-install-connect-ubuntu.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/linux/quickstart-install-connect-ubuntu.md b/docs/linux/quickstart-install-connect-ubuntu.md index 14d08b13fbe..b33392631ee 100644 --- a/docs/linux/quickstart-install-connect-ubuntu.md +++ b/docs/linux/quickstart-install-connect-ubuntu.md @@ -63,21 +63,21 @@ At this point, SQL Server is running on your Ubuntu machine and is ready to use. ## Install the SQL Server command-line tools -To create a database, you need to connect with a tool can run Transact-SQL statements on the SQL Server. The following steps install the SQL Server command-line tools, [sqlcmd](../tools/sqlcmd-utility.md) and [bcp](../tools/bcp-utility.md). +To create a database, you need to connect with a tool that can run Transact-SQL statements on the SQL Server. The following steps install the SQL Server command-line tools, [sqlcmd](../tools/sqlcmd-utility.md) and [bcp](../tools/bcp-utility.md). -1. Import the public repository GPG keys. +1. Import the public repository GPG keys: ```bash curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - ``` -1. Register the Microsoft Ubuntu repository. +1. Register the Microsoft Ubuntu repository: ```bash curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list ``` -1. Update the sources list and run the installation command with the unixODBC developer package. +1. Update the sources list and run the installation command with the unixODBC developer package: ```bash sudo apt-get update @@ -204,4 +204,4 @@ For other tools that run on Windows but connect to SQL Server on Linux, see: If you're new to T-SQL, see [Tutorial: Writing Transact-SQL Statements](https://msdn.microsoft.com/library/ms365303.aspx) and the [Transact-SQL Reference (Database Engine)](https://msdn.microsoft.com/library/bb510741.aspx). -To explore other ways to connect and manage SQL Server, see [Visusal Studio Code](sql-server-linux-develop-use-vscode.md) and [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md). \ No newline at end of file +To explore other ways to connect and manage SQL Server, see [Visusal Studio Code](sql-server-linux-develop-use-vscode.md) and [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md). From b249f7aaed9e80159fbb2fae5acfa06f118a70c5 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Tue, 20 Jun 2017 14:09:21 -0400 Subject: [PATCH 140/336] Prototyping TOC changes for MVC --- docs/linux/TOC.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index bf61b8cb457..eb6c8480744 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -1,7 +1,9 @@ -# [Understand and Explore](sql-server-linux-overview.md) +# [Overview] +## [About SQL Server on Linux](sql-server-linux-overview.md) ## [Release notes](sql-server-linux-release-notes.md) ## [What's new in this release?](sql-server-linux-whats-new.md) # [Quickstarts] +## [Create DB - Ubuntu](quickstart-install-connect-ubuntu.md) # [Get Started](sql-server-linux-get-started-tutorial.md) ## [Install SQL Server](sql-server-linux-setup.md) ### [Install on Red Hat Enterprise Linux](sql-server-linux-setup-red-hat.md) From 3b31c5b358205c167370b8e44f788757bdba3b5f Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Tue, 20 Jun 2017 14:16:44 -0400 Subject: [PATCH 141/336] Removing unecessary brackets --- docs/linux/TOC.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index eb6c8480744..8714726d729 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -1,8 +1,8 @@ -# [Overview] +# Overview ## [About SQL Server on Linux](sql-server-linux-overview.md) ## [Release notes](sql-server-linux-release-notes.md) ## [What's new in this release?](sql-server-linux-whats-new.md) -# [Quickstarts] +# Quickstarts ## [Create DB - Ubuntu](quickstart-install-connect-ubuntu.md) # [Get Started](sql-server-linux-get-started-tutorial.md) ## [Install SQL Server](sql-server-linux-setup.md) From 8a80be9c58f7188f77aa2a89faa37263faed55ab Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Wed, 21 Jun 2017 10:34:48 -0400 Subject: [PATCH 142/336] Applying organizational feedback --- docs/linux/quickstart-install-connect-ubuntu.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/docs/linux/quickstart-install-connect-ubuntu.md b/docs/linux/quickstart-install-connect-ubuntu.md index b33392631ee..077e8f11d16 100644 --- a/docs/linux/quickstart-install-connect-ubuntu.md +++ b/docs/linux/quickstart-install-connect-ubuntu.md @@ -11,7 +11,7 @@ ms.technology: database-engine --- # Install SQL Server and create a database on Ubuntu -In this quick start tutorial, you first install SQL Server 2017 CTP 2.1 on Ubuntu 16.04. Then connect with **sqlcmd** to create your first database. +In this quick start tutorial, you first install SQL Server 2017 CTP 2.1 on Ubuntu 16.04. Then connect with **sqlcmd** to create your first database and run queries. ## Prerequisites @@ -95,7 +95,7 @@ To create a database, you need to connect with a tool that can run Transact-SQL > [!TIP] > **Sqlcmd** is just one tool for connecting to SQL Server to run queries and perform management and development tasks. Other tools include [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md) and [Visusal Studio Code](sql-server-linux-develop-use-vscode.md). -## Connect to SQL Server on Linux +## Connect locally The following steps use **sqlcmd** to locally connect to your new SQL Server instance. @@ -115,7 +115,10 @@ The following steps use **sqlcmd** to locally connect to your new SQL Server ins 1. If you get a connection failure, first attempt to diagnose the problem from the error message. Then review the [connection troubleshooting recommendations](sql-server-linux-troubleshooting-guide.md#connection). -## Create a database +## Create and query data +The following sections walk you through using **sqlcmd** and Transact-SQL to create a new database, add data, and run a simple query. + +### Create a new database The following steps create a new database named `TestDB`. @@ -137,7 +140,7 @@ The following steps create a new database named `TestDB`. GO ``` -## Insert data +### Insert data Next create a new table, `Inventory`, and insert two new rows. @@ -165,7 +168,7 @@ Next create a new table, `Inventory`, and insert two new rows. GO ``` -## Select data +### Select data Now, run a query to return data from the `Inventory` table. @@ -181,7 +184,7 @@ Now, run a query to return data from the `Inventory` table. GO ``` -## Exit the sqlcmd command prompt +### Exit the sqlcmd command prompt To end your **sqlcmd** session, type `QUIT`: From aadb074ddceccdab389c28403da5aa3771d980d9 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Wed, 21 Jun 2017 12:19:14 -0400 Subject: [PATCH 143/336] RC0 general changes --- docs/linux/index.md | 2 +- .../sql-server-linux-azure-virtual-machine.md | 2 +- ...erver-linux-backup-and-restore-database.md | 4 +- ...sql-server-linux-business-continuity-dr.md | 6 +- ...r-linux-configure-environment-variables.md | 2 +- .../sql-server-linux-configure-mssql-conf.md | 2 +- ...l-server-linux-connect-and-query-sqlcmd.md | 2 +- .../sql-server-linux-develop-overview.md | 8 +- .../sql-server-linux-develop-use-ssdt.md | 2 +- .../sql-server-linux-develop-use-ssms.md | 2 +- .../sql-server-linux-get-started-tutorial.md | 4 +- .../sql-server-linux-manage-powershell.md | 14 +- docs/linux/sql-server-linux-manage-ssms.md | 10 +- .../sql-server-linux-management-overview.md | 2 +- docs/linux/sql-server-linux-migrate-bcp.md | 2 +- .../sql-server-linux-migrate-overview.md | 2 +- ...l-server-linux-migrate-restore-database.md | 6 +- .../sql-server-linux-migrate-sqlpackage.md | 2 +- docs/linux/sql-server-linux-migrate-ssma.md | 4 +- docs/linux/sql-server-linux-migrate-ssms.md | 2 +- docs/linux/sql-server-linux-overview.md | 4 +- docs/linux/sql-server-linux-release-notes.md | 156 +++++++++++++++++- ...sql-server-linux-setup-full-text-search.md | 4 +- docs/linux/sql-server-linux-setup-red-hat.md | 4 +- .../linux/sql-server-linux-setup-sql-agent.md | 2 +- ...inux-setup-suse-linux-enterprise-server.md | 4 +- docs/linux/sql-server-linux-setup-ubuntu.md | 2 +- docs/linux/sql-server-linux-setup.md | 6 +- ...shared-disk-cluster-red-hat-7-configure.md | 2 +- docs/linux/sql-server-linux-whats-new.md | 10 +- 30 files changed, 216 insertions(+), 58 deletions(-) diff --git a/docs/linux/index.md b/docs/linux/index.md index 4c0a1cfba9c..981d8c43860 100644 --- a/docs/linux/index.md +++ b/docs/linux/index.md @@ -4,7 +4,7 @@ layout: LandingPage #SQL Server on Linux Documentation -SQL Server 2017 CTP 2.1 runs on Linux! Learn about the core relational database capabilities in this release of SQL Server, and how to install, manage, secure, and develop for this new release. +SQL Server 2017 RC0 runs on Linux! Learn about the core relational database capabilities in this release of SQL Server, and how to install, manage, secure, and develop for this new release.
  • diff --git a/docs/linux/sql-server-linux-azure-virtual-machine.md b/docs/linux/sql-server-linux-azure-virtual-machine.md index a2ae6f2ace0..563f4fc0a56 100644 --- a/docs/linux/sql-server-linux-azure-virtual-machine.md +++ b/docs/linux/sql-server-linux-azure-virtual-machine.md @@ -24,7 +24,7 @@ ms.assetid: 222e23b2-51e7-429b-b8e5-61e0ebe7df9b # ms.custom: H1Hack27Feb2017 --- # Create a Linux SQL Server 2017 virtual machine with the Azure portal -Azure provides Linux virtual machine images that have SQL Server 2017 CTP 2.1 installed. This topic provides a short walkthrough on how to use the Azure portal to create a Linux SQL Server virtual machine. +Azure provides Linux virtual machine images that have SQL Server 2017 RC0 installed. This topic provides a short walkthrough on how to use the Azure portal to create a Linux SQL Server virtual machine. ## Create a Linux VM with SQL Server installed diff --git a/docs/linux/sql-server-linux-backup-and-restore-database.md b/docs/linux/sql-server-linux-backup-and-restore-database.md index af4935411a1..8e511d91bf5 100644 --- a/docs/linux/sql-server-linux-backup-and-restore-database.md +++ b/docs/linux/sql-server-linux-backup-and-restore-database.md @@ -26,7 +26,7 @@ ms.assetid: d30090fb-889f-466e-b793-5f284fccc4e6 --- # Backup and restore SQL Server databases on Linux -You can take backups of databases from SQL Server 2017 CTP 2.1 on Linux with the same tools as other platforms. On a Linux server, you can use `sqlcmd` to connect to the SQL Server and take backups. From Windows, you can connect to SQL Server on Linux and take backups with the user interface. The backup functionality is the same across platforms. For example, you can backup databases locally, to remote drives, or to [Microsoft Azure Blob storage service](http://msdn.microsoft.com/library/dn435916.aspx). +You can take backups of databases from SQL Server 2017 RC0 on Linux with the same tools as other platforms. On a Linux server, you can use `sqlcmd` to connect to the SQL Server and take backups. From Windows, you can connect to SQL Server on Linux and take backups with the user interface. The backup functionality is the same across platforms. For example, you can backup databases locally, to remote drives, or to [Microsoft Azure Blob storage service](http://msdn.microsoft.com/library/dn435916.aspx). ## Backup with sqlcmd @@ -81,7 +81,7 @@ You can use SSMS from a Windows computer to connect to a Linux database and take The following steps walk through taking a backup with SSMS. -1. Start SSMS and connect to your server in SQL Server 2017 CTP 2.1 on Linux. +1. Start SSMS and connect to your server in SQL Server 2017 RC0 on Linux. 1. In Object Explorer, right-click on your database, Click **Tasks**, and then click **Back Up...**. diff --git a/docs/linux/sql-server-linux-business-continuity-dr.md b/docs/linux/sql-server-linux-business-continuity-dr.md index 861ed1fbcbd..b853fbb7f69 100644 --- a/docs/linux/sql-server-linux-business-continuity-dr.md +++ b/docs/linux/sql-server-linux-business-continuity-dr.md @@ -28,7 +28,7 @@ ms.assetid: c75717c8-c677-4033-8ca6-d0ac93aee04d SQL Server on Linux allows organizations to achieve a wide array of service-level agreement goals to accommodate various business requirements. -The simplest solutions leverage virtualization technologies to achieve a high degree of resiliency against host-level failures, fault tolerance against hardware failures, as well as elasticity and resource maximization. These systems can run on-premises, in a private or public cloud, or hybrid environments. The simplest form of disaster recovery and protection is the database backup. Simple solutions available in SQL Server 2017 CTP 2.1 include: +The simplest solutions leverage virtualization technologies to achieve a high degree of resiliency against host-level failures, fault tolerance against hardware failures, as well as elasticity and resource maximization. These systems can run on-premises, in a private or public cloud, or hybrid environments. The simplest form of disaster recovery and protection is the database backup. Simple solutions available in SQL Server 2017 RC0 include: - **VM Failover** - Resilience against guest and OS level failures @@ -42,7 +42,7 @@ The simplest solutions leverage virtualization technologies to achieve a high de - Disaster recovery protection - RTO in minutes to hours -Standard high-availability and disaster recovery techniques provide instance-level protection combined with a reliable shared storage infrastructure. For SQL Server 2017 CTP 2.1 standard high-availability includes: +Standard high-availability and disaster recovery techniques provide instance-level protection combined with a reliable shared storage infrastructure. For SQL Server 2017 RC0 standard high-availability includes: - [**Failover Cluster**](sql-server-linux-shared-disk-cluster-configure.md) - Instance level protection @@ -53,4 +53,4 @@ Standard high-availability and disaster recovery techniques provide instance-lev ## Summary -SQL Server 2017 CTP 2.1 on Linux includes virtualization, backup and restore, and failover clusters to support high-availability and disaster recovery. \ No newline at end of file +SQL Server 2017 RC0 on Linux includes virtualization, backup and restore, and failover clusters to support high-availability and disaster recovery. \ No newline at end of file diff --git a/docs/linux/sql-server-linux-configure-environment-variables.md b/docs/linux/sql-server-linux-configure-environment-variables.md index 364be4f7b00..10d7dc447be 100644 --- a/docs/linux/sql-server-linux-configure-environment-variables.md +++ b/docs/linux/sql-server-linux-configure-environment-variables.md @@ -25,7 +25,7 @@ ms.assetid: --- # Configure SQL Server settings with environment variables on Linux -You can use several different environment variables to configure SQL Server 2017 CTP 2.1 on Linux. This topic provides a list of the settings that are configurable using environment variables. +You can use several different environment variables to configure SQL Server 2017 RC0 on Linux. This topic provides a list of the settings that are configurable using environment variables. > [!IMPORTANT] > At this time, the environment variables only configure [SQL Server running in Docker](sql-server-linux-setup-docker.md). To configure the SQL Server service outside of a Docker scenario, see [Configure SQL Server on Linux with the mssql-conf tool](sql-server-linux-configure-mssql-conf.md). diff --git a/docs/linux/sql-server-linux-configure-mssql-conf.md b/docs/linux/sql-server-linux-configure-mssql-conf.md index bef9a403d1c..19f523ad3b2 100644 --- a/docs/linux/sql-server-linux-configure-mssql-conf.md +++ b/docs/linux/sql-server-linux-configure-mssql-conf.md @@ -25,7 +25,7 @@ ms.custom: H1Hack27Feb2017 --- # Configure SQL Server on Linux with the mssql-conf tool -**mssql-conf** is a configuration script that installs with SQL Server 2017 CTP 2.1 for Red Hat Enterprise Linux, SUSE Linux Enterprise Server, and Ubuntu. You can use this utility to set the following parameters: +**mssql-conf** is a configuration script that installs with SQL Server 2017 RC0 for Red Hat Enterprise Linux, SUSE Linux Enterprise Server, and Ubuntu. You can use this utility to set the following parameters: - [TCP port](#tcpport): Change the port where SQL Server will listen for connections. - [Default data directory](#datadir): Change the directory where the new SQL Server database data files (.mdf) are created. diff --git a/docs/linux/sql-server-linux-connect-and-query-sqlcmd.md b/docs/linux/sql-server-linux-connect-and-query-sqlcmd.md index 444cef9a70c..0bc938e8994 100644 --- a/docs/linux/sql-server-linux-connect-and-query-sqlcmd.md +++ b/docs/linux/sql-server-linux-connect-and-query-sqlcmd.md @@ -26,7 +26,7 @@ ms.custom: H1Hack27Feb2017 --- # Connect to SQL Server on Linux and run Transact-SQL queries -This topic provides connection requirements and guidance for SQL Server 2017 CTP 2.1 running on Linux. In most cases, the connection requirements and processes do not differ across platforms. This topic approaches the subject in the context of Linux and then points to other resources. +This topic provides connection requirements and guidance for SQL Server 2017 RC0 running on Linux. In most cases, the connection requirements and processes do not differ across platforms. This topic approaches the subject in the context of Linux and then points to other resources. This topic is a walk-through. In this walk-through, you will use [sqlcmd](https://msdn.microsoft.com/library/ms162773.aspx) to connect to SQL Server 2017 on Linux. After successfully connecting, you will use Transact-SQL (T-SQL) queries to create and populate a small database. diff --git a/docs/linux/sql-server-linux-develop-overview.md b/docs/linux/sql-server-linux-develop-overview.md index aa6585a28d3..caa669b7a23 100644 --- a/docs/linux/sql-server-linux-develop-overview.md +++ b/docs/linux/sql-server-linux-develop-overview.md @@ -25,7 +25,7 @@ ms.custom: H1Hack27Feb2017 --- # How to get started developing applications for SQL Server on Linux -You can create applications that connect to and use SQL Server 2017 CTP 2.1 on Linux from a variety of programming languages, such as C#, Java, Node.js, PHP, Python, Ruby, and C++. You can also use popular web frameworks and Object Relational Mapping (ORM) frameworks. +You can create applications that connect to and use SQL Server 2017 RC0 on Linux from a variety of programming languages, such as C#, Java, Node.js, PHP, Python, Ruby, and C++. You can also use popular web frameworks and Object Relational Mapping (ORM) frameworks. > [!TIP] > These same development options also enable you to target SQL Server on other platforms. Applications can target SQL Server running on-premises or in the cloud, on Linux, Windows, or Docker on macOS. Or you can target Azure SQL Database and Azure SQL Data Warehouse. @@ -38,16 +38,16 @@ The best way to get started and build applications with SQL Server is to try it - Try the code samples. > [!TIP] -> If you want to develop for SQL Server 2017 CTP 2.1 on Docker, take a look at the **macOS** tutorials. +> If you want to develop for SQL Server 2017 RC0 on Docker, take a look at the **macOS** tutorials. ## Create new applications If you're creating a new application, take a look at a list of the [Connectivity libraries](sql-server-linux-develop-connectivity-libraries.md) for a summary of the connectors and popular frameworks available for various programming languages. ## Use existing applications -If you have an existing database application, you can simply change its connection string to target SQL Server 2017 CTP 2.1 on Linux. Make sure to read about the [Known Issues](sql-server-linux-release-notes.md) in SQL Server 2017 CTP 2.1 on Linux. +If you have an existing database application, you can simply change its connection string to target SQL Server 2017 RC0 on Linux. Make sure to read about the [Known Issues](sql-server-linux-release-notes.md) in SQL Server 2017 RC0 on Linux. ## Use existing SQL tools on Windows with SQL Server on Linux -Tools that currently run on Windows such as SSMS, SSDT, and PowerShell, also work with SQL Server 2017 CTP 2.1 on Linux. Although they do not run natively on Linux, you can still manage remote SQL Server instances on Linux. +Tools that currently run on Windows such as SSMS, SSDT, and PowerShell, also work with SQL Server 2017 RC0 on Linux. Although they do not run natively on Linux, you can still manage remote SQL Server instances on Linux. See the following topics for more information: diff --git a/docs/linux/sql-server-linux-develop-use-ssdt.md b/docs/linux/sql-server-linux-develop-use-ssdt.md index d4a3ec24c08..e46ac26b355 100644 --- a/docs/linux/sql-server-linux-develop-use-ssdt.md +++ b/docs/linux/sql-server-linux-develop-use-ssdt.md @@ -42,7 +42,7 @@ SQL Server Data Tools (SSDT) turns Visual Studio into a powerful development and ## Upgrade SQL Server Data Tools to SSDT 17.0 RC release -SQL Server 2017 CTP 2.1 on Linux is supported by SSDT version 17.0 RC or later. +SQL Server 2017 RC0 on Linux is supported by SSDT version 17.0 RC or later. 1. [Download and Install SSDT 17.0 RC1]. diff --git a/docs/linux/sql-server-linux-develop-use-ssms.md b/docs/linux/sql-server-linux-develop-use-ssms.md index 58652794aa8..5edbcf773c1 100644 --- a/docs/linux/sql-server-linux-develop-use-ssms.md +++ b/docs/linux/sql-server-linux-develop-use-ssms.md @@ -26,7 +26,7 @@ ms.assetid: 30cc4564-f389-4707-9b25-8ba782cc5150 --- # Use SQL Server Management Studio (SSMS) on Windows to manage SQL Server on Linux -This topic shows how to use [SQL Server Management Studio (SSMS)](https://msdn.microsoft.com/library/mt238290.aspx) to connect to SQL Server 2017 CTP 2.1 on Linux. SSMS is a Windows application, so use SSMS when you have a Windows machine that can connect to a remote SQL Server instance on Linux. +This topic shows how to use [SQL Server Management Studio (SSMS)](https://msdn.microsoft.com/library/mt238290.aspx) to connect to SQL Server 2017 RC0 on Linux. SSMS is a Windows application, so use SSMS when you have a Windows machine that can connect to a remote SQL Server instance on Linux. After successfully connecting, you run a simple Transact-SQL (T-SQL) query to verify communication with the database. diff --git a/docs/linux/sql-server-linux-get-started-tutorial.md b/docs/linux/sql-server-linux-get-started-tutorial.md index d73ff0166cf..b82cb3ed7cb 100644 --- a/docs/linux/sql-server-linux-get-started-tutorial.md +++ b/docs/linux/sql-server-linux-get-started-tutorial.md @@ -26,13 +26,13 @@ ms.custom: H1Hack27Feb2017 --- # Find resources for installing and using SQL Server on Linux -Get started using SQL Server 2017 CTP 2.1 on Linux. Here are basic steps with links to how-to information. +Get started using SQL Server 2017 RC0 on Linux. Here are basic steps with links to how-to information. ## 1: Install Linux If you do not already have a Linux machine, install Linux on a physical server or a virtual machine (VM). Review the [Release notes](sql-server-linux-release-notes.md) on supported platforms and requirements. > [!NOTE] -> One option is to create use a pre-configured Linux VM in Azure. In addition to OS-only VMs, there is also a VM image with SQL Server 2017 CTP 2.1 already installed. For more information, see [Provision a Linux VM in Azure for SQL Server](sql-server-linux-azure-virtual-machine.md). +> One option is to create use a pre-configured Linux VM in Azure. In addition to OS-only VMs, there is also a VM image with SQL Server 2017 RC0 already installed. For more information, see [Provision a Linux VM in Azure for SQL Server](sql-server-linux-azure-virtual-machine.md). ## 2: Install SQL Server Next, set up SQL Server 2017 on your Linux machine, or run the Docker image, using one of the following guides: diff --git a/docs/linux/sql-server-linux-manage-powershell.md b/docs/linux/sql-server-linux-manage-powershell.md index 55c91f59ccf..fe01ae5486d 100644 --- a/docs/linux/sql-server-linux-manage-powershell.md +++ b/docs/linux/sql-server-linux-manage-powershell.md @@ -26,15 +26,15 @@ ms.assetid: a3492ce1-5d55-4505-983c-d6da8d1a94ad --- # Use PowerShell on Windows to Manage SQL Server on Linux -This topic introduces [SQL Server PowerShell](https://msdn.microsoft.com/en-us/library/mt740629.aspx) and walks you through a couple of examples on how to use it with SQL Server 2017 CTP 2.1 on Linux. PowerShell support for SQL Server is currently available on Windows, so you can use it when you have a Windows machine that can connect to a remote SQL Server instance on Linux. +This topic introduces [SQL Server PowerShell](https://msdn.microsoft.com/en-us/library/mt740629.aspx) and walks you through a couple of examples on how to use it with SQL Server 2017 RC0 on Linux. PowerShell support for SQL Server is currently available on Windows, so you can use it when you have a Windows machine that can connect to a remote SQL Server instance on Linux. ## Install the newest version of SQL PowerShell on Windows -[SQL PowerShell](https://msdn.microsoft.com/en-us/library/mt740629.aspx) on Windows is included with [SQL Server Management Studio (SSMS)](https://msdn.microsoft.com/en-us/library/hh213248.aspx). When working with SQL Server, you should always use the most recent version of SSMS and SQL PowerShell. The latest version of SSMS is continually updated and optimized and currently works with SQL Server 2017 CTP 2.1 on Linux. To download and install the latest version, see [Download SQL Server Management Studio](https://msdn.microsoft.com/library/mt238290.aspx). To stay up-to-date, the latest version of SSMS prompts you when there is a new version available to download. +[SQL PowerShell](https://msdn.microsoft.com/en-us/library/mt740629.aspx) on Windows is included with [SQL Server Management Studio (SSMS)](https://msdn.microsoft.com/en-us/library/hh213248.aspx). When working with SQL Server, you should always use the most recent version of SSMS and SQL PowerShell. The latest version of SSMS is continually updated and optimized and currently works with SQL Server 2017 RC0 on Linux. To download and install the latest version, see [Download SQL Server Management Studio](https://msdn.microsoft.com/library/mt238290.aspx). To stay up-to-date, the latest version of SSMS prompts you when there is a new version available to download. ## Before you begin -Read the [Known Issues](sql-server-linux-release-notes.md) for SQL Server 2017 CTP 2.1 on Linux. +Read the [Known Issues](sql-server-linux-release-notes.md) for SQL Server 2017 RC0 on Linux. ## Launch PowerShell and import the *sqlserver* module @@ -72,12 +72,12 @@ Manifest 20.0 SqlServer {Add-SqlAvailabilityDatabase, Add-SqlAvailab Let's use PowerShell on Windows to connect to your SQL Server 2017 instance on Linux and display a couple of server properties. Copy and paste the commands below at the PowerShell prompt. When you run these commands, PowerShell will: -- Display the *Windows PowerShell credential request* dialog that prompts you for the credentials (*SQL username* and *SQL password*) to connect to your SQL Server 2017 CTP 2.1 instance on Linux +- Display the *Windows PowerShell credential request* dialog that prompts you for the credentials (*SQL username* and *SQL password*) to connect to your SQL Server 2017 RC0 instance on Linux - Load the SQL Server Management Objects (SMO) assembly - Create an instance of the [Server](https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.server.aspx) object - Connect to the **Server** and display a few properties -Remember to replace **\** with the IP address or the hostname of your SQL Server 2017 CTP 2.1 instance on Linux. +Remember to replace **\** with the IP address or the hostname of your SQL Server 2017 RC0 instance on Linux. ```powershell # Prompt for credentials to login into SQL Server @@ -113,11 +113,11 @@ HostDistribution : Ubuntu Let's use PowerShell on Windows to examine error logs connect on your SQL Server 2017 instance on Linux. We will also use the **Out-GridView** cmdlet to show information from the error logs in a grid view display. Copy and paste the commands below at the PowerShell prompt. They might take a few minutes to run. These commands do the following: -- Display the *Windows PowerShell credential request* dialog that prompts you for the credentials (*SQL username* and *SQL password*) to connect to your SQL Server 2017 CTP 2.1 instance on Linux +- Display the *Windows PowerShell credential request* dialog that prompts you for the credentials (*SQL username* and *SQL password*) to connect to your SQL Server 2017 RC0 instance on Linux - Use the **Get-SqlErrorLog** cmdlet to connect to the SQL Server 2017 instance on Linux and retrieve error logs since **Yesterday** - Pipe the output to the **Out-GridView** cmdlet -Remember to replace **\** with the IP address or the hostname of your SQL Server 2017 CTP 2.1 instance on Linux. +Remember to replace **\** with the IP address or the hostname of your SQL Server 2017 RC0 instance on Linux. ```powershell # Prompt for credentials to login into SQL Server diff --git a/docs/linux/sql-server-linux-manage-ssms.md b/docs/linux/sql-server-linux-manage-ssms.md index 9e55c403bf1..74259b3fba0 100644 --- a/docs/linux/sql-server-linux-manage-ssms.md +++ b/docs/linux/sql-server-linux-manage-ssms.md @@ -46,14 +46,14 @@ When working with SQL Server, you should always use the most recent version of S ## Before you begin - See [Use SSMS on Windows to connect to SQL Server on Linux](sql-server-linux-develop-use-ssms.md) for how to Connect and Query using SSMS -- Read the [Known Issues](sql-server-linux-release-notes.md) for SQL Server 2017 CTP 2.1 on Linux +- Read the [Known Issues](sql-server-linux-release-notes.md) for SQL Server 2017 RC0 on Linux ## Create and manage databases -While connected to the *master* database, you can create databases on the server and modify or drop existing databases. The following steps describe how to accomplish several common database management tasks through Management Studio. To perform these tasks, make sure you are connected to the *master* database with the server-level principal login that you created when you set up SQL Server 2017 CTP 2.1 on Linux. +While connected to the *master* database, you can create databases on the server and modify or drop existing databases. The following steps describe how to accomplish several common database management tasks through Management Studio. To perform these tasks, make sure you are connected to the *master* database with the server-level principal login that you created when you set up SQL Server 2017 RC0 on Linux. ### Create a new database -1. Start SSMS and connect to your server in SQL Server 2017 CTP 2.1 on Linux +1. Start SSMS and connect to your server in SQL Server 2017 RC0 on Linux 2. In Object Explorer, right-click on the *Databases* folder, and then click *New Database..." @@ -63,7 +63,7 @@ The new database is successfully created in your server. If you prefer to create ### Drop a database -1. Start SSMS and connect to your server in SQL Server 2017 CTP 2.1 on Linux +1. Start SSMS and connect to your server in SQL Server 2017 RC0 on Linux 2. In Object Explorer, expand the *Databases* folder to see a list of all the database on the server. @@ -77,7 +77,7 @@ The database is successfully dropped from your server. If you prefer to drop a d The [Activity Monitor](https://msdn.microsoft.com/en-us/library/hh212951.aspx) tool is built-in into SQL Server Management Studio (SSMS) and displays information about SQL Server processes and how these processes affect the current instance of SQL Server. -1. Start SSMS and connect to your server in SQL Server 2017 CTP 2.1 on Linux +1. Start SSMS and connect to your server in SQL Server 2017 RC0 on Linux 2. In Object Explorer, right-click the *server* node, and then click *Activity Monitor* diff --git a/docs/linux/sql-server-linux-management-overview.md b/docs/linux/sql-server-linux-management-overview.md index fc47304d16b..0121c11951f 100644 --- a/docs/linux/sql-server-linux-management-overview.md +++ b/docs/linux/sql-server-linux-management-overview.md @@ -26,7 +26,7 @@ ms.custom: H1Hack27Feb2017 --- # Choose the right tool to manage SQL Server on Linux -There are several ways to manage SQL Server 2017 CTP 2.1 on Linux. The following section provide a quick overview of different management tools and techniques with pointers to more resources. +There are several ways to manage SQL Server 2017 RC0 on Linux. The following section provide a quick overview of different management tools and techniques with pointers to more resources. ## mssql-conf The **mssql-conf** tool configures SQL Server on Linux. For more information, see [Configure SQL Server on Linux with mssql-conf](sql-server-linux-configure-mssql-conf.md). diff --git a/docs/linux/sql-server-linux-migrate-bcp.md b/docs/linux/sql-server-linux-migrate-bcp.md index 70d4d3dbb9b..b17d3bfade3 100644 --- a/docs/linux/sql-server-linux-migrate-bcp.md +++ b/docs/linux/sql-server-linux-migrate-bcp.md @@ -25,7 +25,7 @@ ms.assetid: 7b93d0d7-7946-4b78-b33a-57d6307cdfa9 --- # Bulk copy data with bcp to SQL Server on Linux -This topic shows how to use the [bcp](https://msdn.microsoft.com/en-us/library/ms162802.aspx) command line utility to bulk copy data between an instance of SQL Server 2017 CTP 2.1 on Linux and a data file in a user-specified format. +This topic shows how to use the [bcp](https://msdn.microsoft.com/en-us/library/ms162802.aspx) command line utility to bulk copy data between an instance of SQL Server 2017 RC0 on Linux and a data file in a user-specified format. You can use `bcp` to import large numbers of rows into SQL Server tables or to export data from SQL Server tables into data files. Except when used with the queryout option, `bcp` requires no knowledge of Transact-SQL. The `bcp` command line utility works with Microsoft SQL Server running on-premises or in the cloud, on Linux, Windows or Docker and Azure SQL Database and Azure SQL Data Warehouse. diff --git a/docs/linux/sql-server-linux-migrate-overview.md b/docs/linux/sql-server-linux-migrate-overview.md index e473be3a3e5..e4fcc6808dc 100644 --- a/docs/linux/sql-server-linux-migrate-overview.md +++ b/docs/linux/sql-server-linux-migrate-overview.md @@ -26,7 +26,7 @@ ms.custom: H1Hack27Feb2017 --- # Migrate databases and structured data to SQL Server on Linux -You can migrate your databases and data to SQL Server 2017 CTP 2.1 running on Linux. The method you choose to use depends on the source data and your specific scenario. The following sections provide best practices for various migration scenarios. +You can migrate your databases and data to SQL Server 2017 RC0 running on Linux. The method you choose to use depends on the source data and your specific scenario. The following sections provide best practices for various migration scenarios. ## Migrate from SQL Server on Windows If you want to migrate SQL Server databases on Windows to SQL Server 2017 on Linux, the recommended technique is to use SQL Server backup and restore. diff --git a/docs/linux/sql-server-linux-migrate-restore-database.md b/docs/linux/sql-server-linux-migrate-restore-database.md index 00defcb49c6..6cd08cf38bd 100644 --- a/docs/linux/sql-server-linux-migrate-restore-database.md +++ b/docs/linux/sql-server-linux-migrate-restore-database.md @@ -2,7 +2,7 @@ # required metadata title: Migrate a SQL Server database from Windows to Linux | Microsoft Docs -description: This topic shows how to take a SQL Server database backup on Windows and restore it to a Linux machine running SQL Server 2017 CTP 2.1. +description: This topic shows how to take a SQL Server database backup on Windows and restore it to a Linux machine running SQL Server 2017 RC0. author: MikeRayMSFT ms.author: mikeray manager: jhubbard @@ -26,14 +26,14 @@ ms.assetid: 9ac64d1a-9fe5-446e-93c3-d17b8f55a28f --- # Migrate a SQL Server database from Windows to Linux using backup and restore -SQL Server's backup and restore feature is the recommended way to migrate a database from SQL Server on Windows to SQL Server 2017 CTP 2.1 on Linux. This topic provides step-by-step instructions for this technique. In this tutorial, you will: +SQL Server's backup and restore feature is the recommended way to migrate a database from SQL Server on Windows to SQL Server 2017 RC0 on Linux. This topic provides step-by-step instructions for this technique. In this tutorial, you will: - Download the AdventureWorks backup file on a Windows machine - Transfer the backup to your Linux machine - Restore the database using Transact-SQL commands > [!NOTE] -> This tutorial assumes that you have installed [SQL Server 2017 CTP 2.1](sql-server-linux-setup.md) and the [SQL Server Tools](sql-server-linux-setup-tools.md) on your target Linux server. +> This tutorial assumes that you have installed [SQL Server 2017 RC0](sql-server-linux-setup.md) and the [SQL Server Tools](sql-server-linux-setup-tools.md) on your target Linux server. ## Download the AdventureWorks database backup diff --git a/docs/linux/sql-server-linux-migrate-sqlpackage.md b/docs/linux/sql-server-linux-migrate-sqlpackage.md index c640424c3be..cbde2980b87 100644 --- a/docs/linux/sql-server-linux-migrate-sqlpackage.md +++ b/docs/linux/sql-server-linux-migrate-sqlpackage.md @@ -25,7 +25,7 @@ ms.assetid: e239793b-e630-4110-81cc-19b1ef8bb8b0 --- # Export and import a database on Linux with sqlpackage -This topic shows how to the **sqlpackage** tool to export and import databases to SQL Server 2017 CTP 2.1 on Linux. +This topic shows how to the **sqlpackage** tool to export and import databases to SQL Server 2017 RC0 on Linux. > [!NOTE] > If you are migrating a database from one SQL Server instance to another, the recommendation is to use [Backup and restore](sql-server-linux-migrate-restore-database.md). diff --git a/docs/linux/sql-server-linux-migrate-ssma.md b/docs/linux/sql-server-linux-migrate-ssma.md index d041b4b4872..ba2b3e2533d 100644 --- a/docs/linux/sql-server-linux-migrate-ssma.md +++ b/docs/linux/sql-server-linux-migrate-ssma.md @@ -25,9 +25,9 @@ ms.custom: H1Hack27Feb2017 --- # Automate database migration to Linux with the SQL Server Migration Assistant -This topic introduces [SQL Server Migration Assistant (SSMA)](http://msdn.microsoft.com/library/mt613434.aspx) that helps you easily migrate databases to SQL Server 2017 CTP 2.1 on Linux from Microsoft Access, DB2, MySQL, Oracle and Sybase. SSMA is a Windows application, so use SSMA when you have a Windows machine that can connect to a remote SQL Server instance on Linux. +This topic introduces [SQL Server Migration Assistant (SSMA)](http://msdn.microsoft.com/library/mt613434.aspx) that helps you easily migrate databases to SQL Server 2017 RC0 on Linux from Microsoft Access, DB2, MySQL, Oracle and Sybase. SSMA is a Windows application, so use SSMA when you have a Windows machine that can connect to a remote SQL Server instance on Linux. -SSMA supports a variety of source databases including Oracle, MySQL, Sybase, DB2 and Microsoft Access to SQL Server 2017 CTP 2.1 on Linux and helps automate migration tasks such as: +SSMA supports a variety of source databases including Oracle, MySQL, Sybase, DB2 and Microsoft Access to SQL Server 2017 RC0 on Linux and helps automate migration tasks such as: - assess your source database - convert the source database schema to Microsoft SQL Server schema - migrate the schema diff --git a/docs/linux/sql-server-linux-migrate-ssms.md b/docs/linux/sql-server-linux-migrate-ssms.md index 38505ddc1b5..8a6dd105425 100644 --- a/docs/linux/sql-server-linux-migrate-ssms.md +++ b/docs/linux/sql-server-linux-migrate-ssms.md @@ -25,7 +25,7 @@ ms.custom: H1Hack27Feb2017 --- # Export and import a database on Linux with SQL Server Management Studio on Windows -This topic shows how to use [SQL Server Management Studio (SSMS)](https://msdn.microsoft.com/library/mt238290.aspx) to export and import a database on SQL Server 2017 CTP 2.1 on Linux. SSMS is a Windows application, so use SSMS when you have a Windows machine that can connect to a remote SQL Server instance on Linux. +This topic shows how to use [SQL Server Management Studio (SSMS)](https://msdn.microsoft.com/library/mt238290.aspx) to export and import a database on SQL Server 2017 RC0 on Linux. SSMS is a Windows application, so use SSMS when you have a Windows machine that can connect to a remote SQL Server instance on Linux. You should always install and use the most recent version of SQL Server Management Studio (SSMS) as described in [Use SSMS on Windows to connect to SQL Server on Linux](sql-server-linux-develop-use-ssms.md) diff --git a/docs/linux/sql-server-linux-overview.md b/docs/linux/sql-server-linux-overview.md index 3cb2e5cebc7..544d1d70d76 100644 --- a/docs/linux/sql-server-linux-overview.md +++ b/docs/linux/sql-server-linux-overview.md @@ -6,7 +6,7 @@ description: This topic describes how SQL Server runs on Linux and provides info author: rothja ms.author: jroth manager: jhubbard -ms.date: 05/17/2017 +ms.date: 06/28/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -26,7 +26,7 @@ ms.assetid: 9dcc6a90-0add-42c2-815b-862e4e2a21ac --- # SQL Server on Linux -SQL Server now runs on Linux! This latest release, SQL Server 2017 CTP 2.1, runs on Linux and is in +SQL Server now runs on Linux! This latest release, SQL Server 2017 RC0, runs on Linux and is in many ways simply SQL Server. It’s the same SQL Server database engine, with many similar features and services regardless of your operating system. - [Install SQL Server on Linux](sql-server-linux-setup.md). diff --git a/docs/linux/sql-server-linux-release-notes.md b/docs/linux/sql-server-linux-release-notes.md index 8597bcde7e5..ca52a1128bd 100644 --- a/docs/linux/sql-server-linux-release-notes.md +++ b/docs/linux/sql-server-linux-release-notes.md @@ -6,7 +6,7 @@ description: This topic contains the release notes and supported features for SQ author: rothja ms.author: jroth manager: jhubbard -ms.date: 05/23/2017 +ms.date: 06/28/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -26,12 +26,13 @@ ms.assetid: 1314744f-fcaf-46db-800e-2918fa7e1b6c --- # Release notes for SQL Server 2017 on Linux -The following release notes apply to SQL Server 2017 running on Linux. This release supports many of the SQL Server database engine features for Linux. The topic below is broken into sections for each release, beginning with the most recent release, CTP 2.1. See the information in each section for supported platforms, tools, features, and known issues. +The following release notes apply to SQL Server 2017 running on Linux. This release supports many of the SQL Server database engine features for Linux. The topic below is broken into sections for each release, beginning with the most recent release, RC0. See the information in each section for supported platforms, tools, features, and known issues. The following table lists the releases of SQL Server 2017 covered in this topic. | Release | Version | Release date | |-----|-----|-----| +| [RC0](#rc0) | 00.0.000.000 | 6-2017 | | [CTP 2.1](#ctp21) | 14.0.600.250 | 5-2017 | | [CTP 2.0](#ctp20) | 14.0.500.272 | 4-2017 | | [CTP 1.4](#ctp14) | 14.0.405.198 | 3-2017 | @@ -40,6 +41,157 @@ The following table lists the releases of SQL Server 2017 covered in this topic. | [CTP 1.1](#ctp11) | 14.0.100.187 | 12-2016 | | [CTP 1.0](#ctp10) | 14.0.1.246 | 11-2016 | +## RC0 (June 2017) +The SQL Server engine version for this release is 00.0.000.000. + +### Supported platforms + +| Platform | File System | Installation Guide | +|-----|-----|-----| +| Red Hat Enterprise Linux 7.3 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](sql-server-linux-setup-red-hat.md) | +| SUSE Enterprise Linux Server v12 SP2 | EXT4 | [Installation guide](sql-server-linux-setup-suse-linux-enterprise-server.md) | +| Ubuntu 16.04LTS | EXT4 | [Installation guide](sql-server-linux-setup-ubuntu.md) | +| Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](sql-server-linux-setup-docker.md) | + +> [!NOTE] +> You need at least 3.25GB of memory to run SQL Server on Linux. +> SQL Server Engine has been tested up to 1 TB of memory at this time. + +### Package details +Package details and download locations for the RPM and Debian packages are listed in the following table. Note that you do not need to download these packages directly if you use the steps in the following installation guides: + +- [Install SQL Server package](sql-server-linux-setup.md) +- [Install Full-text Search package](sql-server-linux-setup-full-text-search.md) +- [Install SQL Server Agent package](sql-server-linux-setup-sql-agent.md) + +| Package | Package version | Downloads | +|-----|-----|-----| +| Red Hat RPM package | 00.0.000.000-0 | [Engine RPM package](https://packages.microsoft.com/rhel/7/mssql-server/mssql-server-00.0.000.000-0.x86_64.rpm)
    [High Availability RPM package](https://packages.microsoft.com/rhel/7/mssql-server/mssql-server-ha-00.0.000.000-0.x86_64.rpm)
    [Full-text Search RPM package](https://packages.microsoft.com/rhel/7/mssql-server/mssql-server-fts-00.0.000.000-0.x86_64.rpm)
    [SQL Server Agent RPM package](https://packages.microsoft.com/rhel/7/mssql-server/mssql-server-agent-00.0.000.000-0.x86_64.rpm) | +| SLES RPM package | 00.0.000.000-0 | [mssql-server Engine RPM package](https://packages.microsoft.com/sles/12/mssql-server/mssql-server-00.0.000.000-0.x86_64.rpm)
    [High Availability RPM package](https://packages.microsoft.com/sles/12/mssql-server/mssql-server-ha-00.0.000.000-0.x86_64.rpm)
    [Full-text Search RPM package](https://packages.microsoft.com/sles/12/mssql-server/mssql-server-fts-00.0.000.000-0.x86_64.rpm)
    [SQL Server Agent RPM package](https://packages.microsoft.com/rhel/7/mssql-server/mssql-server-agent-00.0.000.000-0.x86_64.rpm) | +| Ubuntu 16.04 Debian package | 00.0.000.000-0 | [Engine Debian package](https://packages.microsoft.com/ubuntu/16.04/mssql-server/pool/main/m/mssql-server/mssql-server_00.0.000.000-0_amd64.deb)
    [High Availability Debian package](https://packages.microsoft.com/ubuntu/16.04/mssql-server/pool/main/m/mssql-server-ha/mssql-server-ha_00.0.000.000-0_amd64.deb)
    [Full-text Search Debian package](https://packages.microsoft.com/ubuntu/16.04/mssql-server/pool/main/m/mssql-server-fts/mssql-server-fts_00.0.000.000-0_amd64.deb)
    [SQL Server Agent Debian package](https://packages.microsoft.com/ubuntu/16.04/mssql-server/pool/main/m/mssql-server-agent/mssql-server-agent_00.0.000.000-0_amd64.deb) | + +### Supported client tools + +| Tool | Minimum version | +|-----|-----| +| [SQL Server Management Studio (SSMS) for Windows](https://go.microsoft.com/fwlink/?linkid=847722) | 17.0 | +| [SQL Server Data Tools for Visual Studio](https://go.microsoft.com/fwlink/?linkid=846626) | 17.0 | +| [Visual Studio Code](https://code.visualstudio.com) with the [mssql extension](https://aka.ms/mssql-marketplace) | Latest (1.12) | + +### Unsupported features and services +The following features and services are not available on Linux at this time. The support of these features will be increasingly enabled during the monthly updates cadence of the preview program. + +| Area | Unsupported feature or service | +|-----|-----| +| **Database engine** | Replication | +|   | Stretch DB | +|   | Polybase | +|   | Distributed Query | +|   | System extended stored procedures (XP_CMDSHELL, etc.) | +|   | Filetable | +|   | CLR assemblies with the EXTERNAL_ACCESS or UNSAFE permission set | +| **High Availability** | Database mirroring | +| **Security** | Active Directory Authentication | +|   | Windows Authentication | +|   | Extensible Key Management | +|   | Use of user-provided certificate for SSL or TLS | +| **Services** | SQL Server Browser | +|   | SQL Server R services | +|   | StreamInsight | +|   | Analysis Services | +|   | Reporting Services | +|   | Data Quality Services | +|   | Master Data Services | + +### Known issues +The following sections describe known issues with this release of SQL Server 2017 CTP 2.1 on Linux. + +#### General +- The length of the hostname where SQL Server is installed needs to be 15 characters or less. + + - **Resolution**: Change the name in /etc/hostname to something 15 characters long or less. + +- Manually setting the system time backwards in time will cause SQL Server to stop updating the internal system time within SQL Server. + + - **Resolution**: Restart SQL Server. + +- Only single instance installations are supported. + + - **Resolution**: If you want to have more than one instance on a given host, consider using VMs or Docker containers. + +- SQL Server Configuration Manager can’t connect to SQL Server on Linux. + +- The default language of the **sa** login is English. + + - **Resolution**: Change the language of the **sa** login with the **ALTER LOGIN** statement. + +#### Databases +- System databases cannot be moved with the mssql-conf utility. + +- When restoring a database that was backed up on SQL Server on Windows, you must use the **WITH MOVE** clause in the Transact-SQL statement. + +- Distributed transactions requiring the Microsoft Distributed Transaction Coordinator service are not supported on SQL Server running on Linux. SQL Server to SQL Server distributed transactions are supported. + +#### Always On Availability Group +- `sys.fn_hadr_backup_is_preffered_replica` does not work for `CLUSTER_TYPE=NONE` or `CLUSTER_TYPE=EXTERNAL` because it relies on the WSFC-replicated cluster registry key which not available. We are working on providing a similar functionality through a different function. + +#### Full-Text Search +- Not all filters are available with this release, including filters for Office documents. For a list of supported filters, see [Install SQL Server Full-Text Search on Linux](sql-server-linux-setup-full-text-search.md#filters). + +#### SQL Agent +- The following components and subsystems of SQL Agent jobs are not currently supported on Linux: + + - Subsystems: CmdExec, PowerShell, Replication Distributor, Snapshot, Merge, Queue Reader, SSIS, SSAS, SSRS + - Alerts + - DB Mail + - Log Reader Agent + - Change Data Capture + +#### SqlPackage +- Using SqlPackage requires specifying an absolute path for files. Using relative paths will map the files under the "/tmp/sqlpackage.\/system/system32" folder. + + - **Resolution**: Use absolute file paths. + +- SqlPackage shows the location of files with a "C:\\" prefix. + +#### SQL Server Integration Services (SSIS) +You can run SSIS packages on Linux. For more info, see the [blog post announcing SSIS support for Linux](https://blogs.msdn.microsoft.com/ssis/2017/05/17/ssis-helsinki-is-available-in-sql-server-vnext-ctp2-1/). Please note the following known issues with this release. + +- The **mssql-server-is** package is only supported on Ubuntu at this time. + +- The following features are not supported when running SSIS packages on Linux: + - SSIS Catalog DB + - Schedule Packages execution by SQL Agent + - Windows Authentication + - Third-party components + - Third-party ODBC drivers + - ODBC Connection Manager, Source, and Destination (supported with SSIS on Linux CTP 2.1 Refresh) + - Change Data Capture (CDC) + - Scale Out + - Azure Feature Pack + - Hadoop and HDFS Support + - Microsoft Connector for SAP BW + +With SSIS on Linux CTP 2.1 Refresh, your SSIS packages can use ODBC connections on Linux. For more info, see the [blog post announcing ODBC support on Linux](https://blogs.msdn.microsoft.com/ssis/2017/06/16/odbc-is-supported-in-ssis-on-linux-ssis-helsinki-ctp2-1-refresh/). + +#### SQL Server Management Studio (SSMS) +The following limitations apply to SSMS on Windows connected to SQL Server on Linux. + +- Maintenance plans are not supported. + +- Management Data Warehouse (MDW) and the data collector in SSMS are not supported. + +- SSMS UI components that have Windows Authentication or Windows event log options do not work with Linux. You can still use these features with other options, such as SQL logins. + +- Number of log files to retain cannot be modified. + +### Next steps +To begin using SQL Server on Linux, see [Get started with SQL Server on Linux](sql-server-linux-get-started-tutorial.md). +
    +
    + +![Separation bar grapic](./media/sql-server-linux-release-notes/seperationbar3.png) + ## CTP 2.1 (May 2017) The SQL Server engine version for this release is 14.0.600.250. diff --git a/docs/linux/sql-server-linux-setup-full-text-search.md b/docs/linux/sql-server-linux-setup-full-text-search.md index 0425bf62395..ac65575b7c0 100644 --- a/docs/linux/sql-server-linux-setup-full-text-search.md +++ b/docs/linux/sql-server-linux-setup-full-text-search.md @@ -92,7 +92,7 @@ If you need an offline installation, locate the Full-text Search package downloa ## Supported languages -Full-Text Search uses [word breakers](https://msdn.microsoft.com/library/ms142509.aspx) that determine how to identify individual words based on language. You can get a list of registered word breakers by querying the **sys.fulltext_languages** catalog view. Word breakers for the following languages are installed with SQL Server 2017 CTP 2.1: +Full-Text Search uses [word breakers](https://msdn.microsoft.com/library/ms142509.aspx) that determine how to identify individual words based on language. You can get a list of registered word breakers by querying the **sys.fulltext_languages** catalog view. Word breakers for the following languages are installed with SQL Server 2017 RC0: | Language | Language ID | |---|---| @@ -154,7 +154,7 @@ Full-Text Search uses [word breakers](https://msdn.microsoft.com/library/ms14250 Full-Text Search also works with text stored in binary files. But in this case, an installed filter is required to process the file. For more information about filters, see [Configure and Manage Filters for Search](https://msdn.microsoft.com/library/ms142499.aspx). -You can see a list of installed filters by calling **sp_help_fulltext_system_components 'filter'**. For SQL Server 2017 CTP 2.1, the following filters are installed: +You can see a list of installed filters by calling **sp_help_fulltext_system_components 'filter'**. For SQL Server 2017 RC0, the following filters are installed: | Component Name | Class ID | Version | |---|---|---| diff --git a/docs/linux/sql-server-linux-setup-red-hat.md b/docs/linux/sql-server-linux-setup-red-hat.md index 9e529d16cbd..9183e28535e 100644 --- a/docs/linux/sql-server-linux-setup-red-hat.md +++ b/docs/linux/sql-server-linux-setup-red-hat.md @@ -1,7 +1,7 @@ --- # required metadata title: Install SQL Server on Red Hat Enterprise Linux | Microsoft Docs -description: Describes how to install SQL Server 2017 CTP 2.1 on Red Hat Enterprise Linux. +description: Describes how to install SQL Server 2017 RC0 on Red Hat Enterprise Linux. author: rothja ms.author: jroth manager: jhubbard @@ -25,7 +25,7 @@ ms.assetid: 92503f59-96dc-4f6a-b1b0-d135c43e935e --- # Install SQL Server on Red Hat Enterprise Linux -This topic provides a walkthrough of how to install SQL Server 2017 CTP 2.1 on Red Hat Enterprise Linux (RHEL). +This topic provides a walkthrough of how to install SQL Server 2017 RC0 on Red Hat Enterprise Linux (RHEL). > [!NOTE] > You need at least 3.25GB of memory to run SQL Server on Linux. For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). diff --git a/docs/linux/sql-server-linux-setup-sql-agent.md b/docs/linux/sql-server-linux-setup-sql-agent.md index 56852da8e18..27d650f92ce 100644 --- a/docs/linux/sql-server-linux-setup-sql-agent.md +++ b/docs/linux/sql-server-linux-setup-sql-agent.md @@ -29,7 +29,7 @@ ms.assetid: 77f16adc-e6cb-4a57-82f3-7b9780369868 The following steps install SQL Server Agent (**mssql-server-agent**) on Linux. The [SQL Server Agent](https://docs.microsoft.com/sql/ssms/agent/sql-server-agent) runs scheduled SQL Server jobs. For information on the features supported for this release of the SQL Server Agent, see the [Release Notes](sql-server-linux-release-notes.md). > [!NOTE] -> Before installing SQL Server Agent, first [install SQL Server CTP 2.1+](sql-server-linux-setup.md#platforms). This configures the keys and repositories that you use when you install the **mssql-server-agent** package. +> Before installing SQL Server Agent, first [install SQL Server RC0+](sql-server-linux-setup.md#platforms). This configures the keys and repositories that you use when you install the **mssql-server-agent** package. Install the SQL Server Agent for your platform: diff --git a/docs/linux/sql-server-linux-setup-suse-linux-enterprise-server.md b/docs/linux/sql-server-linux-setup-suse-linux-enterprise-server.md index 1b43dfae69e..0fba5bfe42c 100644 --- a/docs/linux/sql-server-linux-setup-suse-linux-enterprise-server.md +++ b/docs/linux/sql-server-linux-setup-suse-linux-enterprise-server.md @@ -1,7 +1,7 @@ --- # required metadata title: Install SQL Server on SUSE Linux Enterprise Server | Microsoft Docs -description: Describes how to install SQL Server 2017 CTP 2.1 on SUSE Linux Enterprise Server. +description: Describes how to install SQL Server 2017 RC0 on SUSE Linux Enterprise Server. author: rothja ms.author: jroth manager: jhubbard @@ -25,7 +25,7 @@ ms.assetid: 31ddfb80-f75c-4f51-8540-de6213cb68b8 --- # Install SQL Server on SUSE Linux Enterprise Server -This topic provides a walkthrough of how to install SQL Server 2017 CTP 2.1 on SUSE Linux Enterprise Server (SLES) v12 SP2. +This topic provides a walkthrough of how to install SQL Server 2017 RC0 on SUSE Linux Enterprise Server (SLES) v12 SP2. > [!NOTE] > You need at least 3.25GB of memory to run SQL Server on Linux. Also, the file system must be **XFS** or **EXT4**. Other file systems, such as **BTRFS**, are unsupported. For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). diff --git a/docs/linux/sql-server-linux-setup-ubuntu.md b/docs/linux/sql-server-linux-setup-ubuntu.md index 6d6ebb5775a..5a333d11f14 100644 --- a/docs/linux/sql-server-linux-setup-ubuntu.md +++ b/docs/linux/sql-server-linux-setup-ubuntu.md @@ -26,7 +26,7 @@ ms.assetid: 31c8c92e-12fe-4728-9b95-4bc028250d85 --- # Install SQL Server on Ubuntu -This topic provides a walkthrough of how to install SQL Server 2017 CTP 2.1 on Ubuntu 16.04. +This topic provides a walkthrough of how to install SQL Server 2017 RC0 on Ubuntu 16.04. > [!NOTE] > You need at least 3.25GB of memory to run SQL Server on Linux. For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). diff --git a/docs/linux/sql-server-linux-setup.md b/docs/linux/sql-server-linux-setup.md index 22ed38905f4..f0353ed24e7 100644 --- a/docs/linux/sql-server-linux-setup.md +++ b/docs/linux/sql-server-linux-setup.md @@ -2,7 +2,7 @@ # required metadata title: Install SQL Server on Linux | Microsoft Docs -description: SQL Server 2017 CTP 2.1 now runs on Linux. This topic provides an overview on how to install SQL Server on Linux with links to the guides for specific platforms. +description: SQL Server 2017 RC0 now runs on Linux. This topic provides an overview on how to install SQL Server on Linux with links to the guides for specific platforms. author: rothja ms.author: jroth manager: jhubbard @@ -26,11 +26,11 @@ ms.assetid: 565156c3-7256-4e63-aaf0-884522ef2a52 --- # Install SQL Server on Linux -SQL Server 2017 CTP 2.1 is supported on Red Hat Enterprise Linux, SUSE Linux Enterprise Server, and Ubuntu. It is also available as a Docker image which can run on Docker Engine on Linux or Docker for Windows/Mac. The topics in this section provide tutorials and general guidance for installing SQL Server 2017 CTP 2.1 on Linux. +SQL Server 2017 RC0 is supported on Red Hat Enterprise Linux, SUSE Linux Enterprise Server, and Ubuntu. It is also available as a Docker image which can run on Docker Engine on Linux or Docker for Windows/Mac. The topics in this section provide tutorials and general guidance for installing SQL Server 2017 RC0 on Linux. ## Supported platforms -SQL Server 2017 CTP 2.1 is supported on the following platforms: +SQL Server 2017 RC0 is supported on the following platforms: | Platform | Supported version(s) | Get |-----|-----|----- diff --git a/docs/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure.md b/docs/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure.md index c5c42666179..c3b1ec7ddfd 100644 --- a/docs/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure.md +++ b/docs/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure.md @@ -319,7 +319,7 @@ At this point both instances of SQL Server are configured to run with the databa sudo pcs cluster start --all ``` - > RHEL HA add-on has fencing agents for VMWare and KVM. Fencing needs to be disabled on all other hypervisors. Disabling fencing agents is not recommended in production environments. As of CTP 2.1 timeframe, there are no fencing agents for HyperV or cloud environments. If you are running one of these configurations, you need to disable fencing. \**This is NOT recommended in a production system!** + > RHEL HA add-on has fencing agents for VMWare and KVM. Fencing needs to be disabled on all other hypervisors. Disabling fencing agents is not recommended in production environments. As of RC0 timeframe, there are no fencing agents for HyperV or cloud environments. If you are running one of these configurations, you need to disable fencing. \**This is NOT recommended in a production system!** The following command disables the fencing agents. diff --git a/docs/linux/sql-server-linux-whats-new.md b/docs/linux/sql-server-linux-whats-new.md index 8d04a52d449..64c5cfbc42b 100644 --- a/docs/linux/sql-server-linux-whats-new.md +++ b/docs/linux/sql-server-linux-whats-new.md @@ -2,12 +2,12 @@ --- # required metadata -title: What's New for SQL Server 2017 CTP 2.1 on Linux | Microsoft Docs +title: What's New for SQL Server 2017 RC0 on Linux | Microsoft Docs description: This topic highlights what's new for the current release of SQL Server 2017 on Linux. author: rothja ms.author: jroth manager: jhubbard -ms.date: 05/17/2017 +ms.date: 06/28/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -28,6 +28,12 @@ ms.assetid: 456b6f31-6b97-4e31-80ab-b40151ec4868 This topic describes what's new for SQL Server 2017 running on Linux. +## RC0 + +The RC0 release contains the following improvements and fixes: + +- TBD. + ## CTP 2.1 The CTP 2.1 release contains the following improvements and fixes: From 38013cb4b119270ea75d11aeea02cd480598606a Mon Sep 17 00:00:00 2001 From: Ed Macauley Date: Thu, 22 Jun 2017 08:55:10 -0700 Subject: [PATCH 144/336] creating install scripts --- .../linux/sample-unattended-install-redhat.md | 154 +++++++++++++++++ docs/linux/sample-unattended-install-suse.md | 155 +++++++++++++++++ .../linux/sample-unattended-install-ubuntu.md | 157 ++++++++++++++++++ 3 files changed, 466 insertions(+) create mode 100644 docs/linux/sample-unattended-install-redhat.md create mode 100644 docs/linux/sample-unattended-install-suse.md create mode 100644 docs/linux/sample-unattended-install-ubuntu.md diff --git a/docs/linux/sample-unattended-install-redhat.md b/docs/linux/sample-unattended-install-redhat.md new file mode 100644 index 00000000000..e02e86cd361 --- /dev/null +++ b/docs/linux/sample-unattended-install-redhat.md @@ -0,0 +1,154 @@ +--- +title: SQL Server Unattended Install on Red Hat Enterprise Linux | Microsoft Docs +description: SQL Server Script Sample - Unattended Install on Red Hat Enterprise Linux +services: sql-database +documentationcenter: sql-database +author: edmacauley +manager: +editor: +tags: azure-service-management + +ms.assetid: +ms.service: sql-database +ms.custom: mvc +ms.devlang: azurecli +ms.topic: sample +ms.tgt_pltfrm: sql-database +ms.workload: database +ms.date: 6/19/2017 +ms.author: edmacauley +--- + +# Install SQL Server on Red Hat Enterprise Linux + +This sample Bash script installs SQL Server 2017 CTP 2.1 on Red Hat Enterprise Linux (RHEL) without interactive input. + +> [!NOTE] +> You need at least 3.25 GB of memory to run SQL Server on Linux. Also, the file system must be **XFS** or **EXT4**. Other file systems, such as **BTRFS**, are unsupported. For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). + +## Sample script + +```bash +#!/bin/bash + +# Use the following variables to control your install: + +# Password for the SA user (required) +SA_PASSWORD='' + +# Install SQL Server Agent (recommended) +SQL_INSTALL_AGENT='y' + +# Install SQL Server Full Text Search (optional) +# SQL_INSTALL_FULLTEXT='y' + +# Create an additional user with sysadmin privileges (optional) +# SQL_INSTALL_USER='' +# SQL_INSTALL_USER_PASSWORD='' + +if [ -z $SA_PASSWORD ] +then + echo Environment variable SA_PASSWORD must be set for unattended install + exit 1 +fi + +echo Adding Microsoft repositories... +sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server.repo +sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/7/prod.repo + +echo Running yum update -y... +sudo yum update -y + +echo Installing SQL Server... +sudo yum install -y mssql-server + +echo Running mssql-conf setup... +sudo SA_PASSWORD=$SA_PASSWORD \ + /opt/mssql/bin/mssql-conf -n setup accept-eula + +echo Installing mssql-tools and unixODBC developer... +sudo ACCEPT_EULA=Y yum install -y mssql-tools unixodbc-dev + +# Add SQL Server tools to the path by default: +echo Adding SQL Server tools to your path... +echo PATH="$PATH:/opt/mssql-tools/bin" >> ~/.bash_profile +echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc + +# Optional SQL Server Agent installation: +if [ ! -z $SQL_INSTALL_AGENT ] +then + echo Installing SQL Server Agent... + sudo yum install -y mssql-server-agent +fi + +# Optional SQL Server Full Text Search installation: +if [ ! -z $SQL_INSTALL_FULLTEXT ] +then + echo Installing SQL Server Full-Text Search... + sudo yum install -y mssql-server-fts +fi + +# Configure firewall to allow TCP port 1433: +echo Configuring firewall to allow traffic on port 1433... +sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent +sudo firewall-cmd --reload + +# Example of setting post-installation configuration options +# Set trace flags 1204 and 1222 for deadlock tracing: +echo Setting trace flags... +sudo /opt/mssql/bin/mssql-conf traceflag 1204 1222 on + +# Restart SQL Server after making configuration changes: +echo Restarting SQL Server... +sudo systemctl restart mssql-server + +# Connect to server and get the version: +counter=1 +errstatus=1 +while [ $counter -le 5 ] && [ $errstatus = 1 ] +do + echo Waiting for SQL Server to start... + sleep 5s + /opt/mssql-tools/bin/sqlcmd \ + -S localhost \ + -U SA \ + -P $SA_PASSWORD \ + -Q "SELECT @@VERSION" 2>/dev/null + errstatus=$? + ((counter++)) +done + +# Display error if connection failed: +if [ $errstatus = 1 ] +then + echo Cannot connect to SQL Server, installation aborted + exit $errstatus +fi + +# Optional new user creation: +if [ ! -z $SQL_INSTALL_USER ] && [ ! -z $SQL_INSTALL_USER_PASSWORD ] +then + echo Creating user $SQL_INSTALL_USER + /opt/mssql-tools/bin/sqlcmd \ + -S localhost \ + -U SA \ + -P $SA_PASSWORD \ + -Q "CREATE LOGIN [$SQL_INSTALL_USER] WITH PASSWORD=N'$SQL_INSTALL_USER_PASSWORD', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=ON, CHECK_POLICY=ON; ALTER SERVER ROLE [sysadmin] ADD MEMBER [$SQL_INSTALL_USER]" +fi + +echo Done! +``` + +## Next steps + +Simplify your unattended installs by creating a Bash script that sets the proper environment variables, instead of doing it inline. + +```bash +#!/bin/bash +export SA_PASSWORD='' +export SQL_INSTALL_AGENT='y' +export SQL_INSTALL_USER='' +export SQL_INSTALL_USER_PASSWORD='' +``` + +For more information about SQL Server on Linux, see [SQL Server on Linux overview](sql-server-linux-overview.md). \ No newline at end of file diff --git a/docs/linux/sample-unattended-install-suse.md b/docs/linux/sample-unattended-install-suse.md new file mode 100644 index 00000000000..c5baf358a8e --- /dev/null +++ b/docs/linux/sample-unattended-install-suse.md @@ -0,0 +1,155 @@ +--- +title: SQL Server Unattended Install on SUSE Linux Enterprise Server | Microsoft Docs +description: SQL Server Script Sample - Unattended Install on SUSE Linux Enterprise Server +services: sql-database +documentationcenter: sql-database +author: edmacauley +manager: +editor: +tags: azure-service-management + +ms.assetid: +ms.service: sql-database +ms.custom: mvc +ms.devlang: azurecli +ms.topic: sample +ms.tgt_pltfrm: sql-database +ms.workload: database +ms.date: 6/19/2017 +ms.author: edmacauley +--- + +# Install SQL Server on SUSE Linux Enterprise Server + +This sample Bash script installs SQL Server 2017 CTP 2.1 on SUSE Linux Enterprise Server (SLES) v12 SP2 without interactive input. + +> [!NOTE] +> SQL Server 2017 CTP 2.1 requires libsss_nss_idmap0, which is not provided by the default SLES repositories. You can install it from the SLES v12 SP2 SDK. + +> You need at least 3.25 GB of memory to run SQL Server on Linux. Also, the file system must be **XFS** or **EXT4**. Other file systems, such as **BTRFS**, are unsupported. For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). + +## Sample script + +```bash +#!/bin/bash + +# Use the following variables to control your install: + +# Password for the SA user (required) +SA_PASSWORD='' + +# Install SQL Server Agent (recommended) +SQL_INSTALL_AGENT='y' + +# Install SQL Server Full Text Search (optional) +# SQL_INSTALL_FULLTEXT='y' + +# Create an additional user with sysadmin privileges (optional) +# SQL_INSTALL_USER='' +# SQL_INSTALL_USER_PASSWORD='' + +if [ -z $SA_PASSWORD ] +then + echo Environment variable SA_PASSWORD must be set for unattended install + exit 1 +fi + +echo Adding Microsoft repositories... +sudo zypper addrepo -fc https://packages.microsoft.com/config/sles/12/mssql-server.repo +sudo zypper addrepo -fc https://packages.microsoft.com/config/sles/12/prod.repo +sudo zypper --gpg-auto-import-keys refresh + +echo Installing SQL Server... +sudo zypper install -y mssql-server + +echo Running mssql-conf setup... +sudo SA_PASSWORD=$SA_PASSWORD \ + /opt/mssql/bin/mssql-conf -n setup accept-eula + +echo Installing mssql-tools and unixODBC developer... +sudo ACCEPT_EULA=Y zypper install -y mssql-tools unixODBC-devel + +# Add SQL Server tools to the path by default: +echo Adding SQL Server tools to your path... +echo PATH="$PATH:/opt/mssql-tools/bin" >> ~/.bash_profile +echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc + +# Optional SQL Server Agent installation: +if [ ! -z $SQL_INSTALL_AGENT ] +then + echo Installing SQL Server Agent... + sudo zypper install -y mssql-server-agent +fi + +# Optional SQL Server Full Text Search installation: +if [ ! -z $SQL_INSTALL_FULLTEXT ] +then + echo Installing SQL Server Full-Text Search... + sudo zypper install -y mssql-server-fts +fi + +# Configure firewall to allow TCP port 1433: +echo Configuring SuSEfirewall2 to allow traffic on port 1433... +sudo SuSEfirewall2 open INT TCP 1433 +sudo SuSEfirewall2 stop +sudo SuSEfirewall2 start + +# Example of setting post-installation configuration options +# Set trace flags 1204 and 1222 for deadlock tracing: +echo Setting trace flags... +sudo /opt/mssql/bin/mssql-conf traceflag 1204 1222 on + +# Restart SQL Server after making configuration changes: +echo Restarting SQL Server... +sudo systemctl restart mssql-server + +# Connect to server and get the version: +counter=1 +errstatus=1 +while [ $counter -le 5 ] && [ $errstatus = 1 ] +do + echo Waiting for SQL Server to start... + sleep 5s + /opt/mssql-tools/bin/sqlcmd \ + -S localhost \ + -U SA \ + -P $SA_PASSWORD \ + -Q "SELECT @@VERSION" 2>/dev/null + errstatus=$? + ((counter++)) +done + +# Display error if connection failed: +if [ $errstatus = 1 ] +then + echo Cannot connect to SQL Server, installation aborted + exit $errstatus +fi + +# Optional new user creation: +if [ ! -z $SQL_INSTALL_USER ] && [ ! -z $SQL_INSTALL_USER_PASSWORD ] +then + echo Creating user $SQL_INSTALL_USER + /opt/mssql-tools/bin/sqlcmd \ + -S localhost \ + -U SA \ + -P $SA_PASSWORD \ + -Q "CREATE LOGIN [$SQL_INSTALL_USER] WITH PASSWORD=N'$SQL_INSTALL_USER_PASSWORD', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=ON, CHECK_POLICY=ON; ALTER SERVER ROLE [sysadmin] ADD MEMBER [$SQL_INSTALL_USER]" +fi + +echo Done! +``` + +## Next steps + +Simplify your unattended installs by creating a Bash script that sets the proper environment variables, instead of doing it inline. + +```bash +#!/bin/bash +export SA_PASSWORD='' +export SQL_INSTALL_AGENT='y' +export SQL_INSTALL_USER='' +export SQL_INSTALL_USER_PASSWORD='' +``` + +For more information about SQL Server on Linux, see [SQL Server on Linux overview](sql-server-linux-overview.md). \ No newline at end of file diff --git a/docs/linux/sample-unattended-install-ubuntu.md b/docs/linux/sample-unattended-install-ubuntu.md new file mode 100644 index 00000000000..2d9e7e3ae4f --- /dev/null +++ b/docs/linux/sample-unattended-install-ubuntu.md @@ -0,0 +1,157 @@ +--- +title: SQL Server Unattended Install on Ubuntu | Microsoft Docs +description: SQL Server Script Sample - Unattended Install on Ubuntu +services: sql-database +documentationcenter: sql-database +author: edmacauley +manager: +editor: +tags: azure-service-management + +ms.assetid: +ms.service: sql-database +ms.custom: mvc +ms.devlang: azurecli +ms.topic: sample +ms.tgt_pltfrm: sql-database +ms.workload: database +ms.date: 6/19/2017 +ms.author: edmacauley +--- + +# Install SQL Server on Ubuntu + +This sample Bash script installs SQL Server 2017 CTP 2.1 on Ubuntu 16.04 without interactive input. + +> [!NOTE] +> You need at least 3.25 GB of memory to run SQL Server on Linux. Also, the file system must be **XFS** or **EXT4**. Other file systems, such as **BTRFS**, are unsupported. For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). + +## Sample script + +```bash +#!/bin/bash + +# Use the following variables to control your install: + +# Password for the SA user (required) +SA_PASSWORD='' + +# Install SQL Server Agent (recommended) +SQL_INSTALL_AGENT='y' + +# Install SQL Server Full Text Search (optional) +# SQL_INSTALL_FULLTEXT='y' + +# Create an additional user with sysadmin privileges (optional) +# SQL_INSTALL_USER='' +# SQL_INSTALL_USER_PASSWORD='' + +if [ -z $SA_PASSWORD ] +then + echo Environment variable SA_PASSWORD must be set for unattended install + exit 1 +fi + +echo Adding Microsoft repositories... +sudo curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - +repoargs="$(curl https://packages.microsoft.com/config/ubuntu/16.04/mssql-server.list)" +sudo add-apt-repository "${repoargs}" +repoargs="$(curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list)" +sudo add-apt-repository "${repoargs}" + +echo Running apt-get update -y... +sudo apt-get update -y + +echo Installing SQL Server... +sudo apt-get install -y mssql-server + +echo Running mssql-conf setup... +sudo SA_PASSWORD=$SA_PASSWORD \ + /opt/mssql/bin/mssql-conf -n setup accept-eula + +echo Installing mssql-tools and unixODBC developer... +sudo ACCEPT_EULA=Y apt-get install -y mssql-tools unixodbc-dev + +# Add SQL Server tools to the path by default: +echo Adding SQL Server tools to your path... +echo PATH="$PATH:/opt/mssql-tools/bin" >> ~/.bash_profile +echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc + +# Optional SQL Server Agent installation: +if [ ! -z $SQL_INSTALL_AGENT ] +then + echo Installing SQL Server Agent... + sudo apt-get install -y mssql-server-agent +fi + +# Optional SQL Server Full Text Search installation: +if [ ! -z $SQL_INSTALL_FULLTEXT ] +then + echo Installing SQL Server Full-Text Search... + sudo apt-get install -y mssql-server-fts +fi + +# Configure firewall to allow TCP port 1433: +echo Configuring UFW to allow traffic on port 1433... +sudo ufw allow 1433/tcp +sudo ufw reload + +# Example of setting post-installation configuration options +# Set trace flags 1204 and 1222 for deadlock tracing: +echo Setting trace flags... +sudo /opt/mssql/bin/mssql-conf traceflag 1204 1222 on + +# Restart SQL Server after making configuration changes: +echo Restarting SQL Server... +sudo systemctl restart mssql-server + +# Connect to server and get the version: +counter=1 +errstatus=1 +while [ $counter -le 5 ] && [ $errstatus = 1 ] +do + echo Waiting for SQL Server to start... + sleep 5s + /opt/mssql-tools/bin/sqlcmd \ + -S localhost \ + -U SA \ + -P $SA_PASSWORD \ + -Q "SELECT @@VERSION" 2>/dev/null + errstatus=$? + ((counter++)) +done + +# Display error if connection failed: +if [ $errstatus = 1 ] +then + echo Cannot connect to SQL Server, installation aborted + exit $errstatus +fi + +# Optional new user creation: +if [ ! -z $SQL_INSTALL_USER ] && [ ! -z $SQL_INSTALL_USER_PASSWORD ] +then + echo Creating user $SQL_INSTALL_USER + /opt/mssql-tools/bin/sqlcmd \ + -S localhost \ + -U SA \ + -P $SA_PASSWORD \ + -Q "CREATE LOGIN [$SQL_INSTALL_USER] WITH PASSWORD=N'$SQL_INSTALL_USER_PASSWORD', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=ON, CHECK_POLICY=ON; ALTER SERVER ROLE [sysadmin] ADD MEMBER [$SQL_INSTALL_USER]" +fi + +echo Done! +``` + +## Next steps + +Simplify your unattended installs by creating a Bash script that sets the proper environment variables, instead of doing it inline. + +```bash +#!/bin/bash +export SA_PASSWORD='' +export SQL_INSTALL_AGENT='y' +export SQL_INSTALL_USER='' +export SQL_INSTALL_USER_PASSWORD='' +``` + +For more information about SQL Server on Linux, see [SQL Server on Linux overview](sql-server-linux-overview.md). \ No newline at end of file From 4fb1332bcef6eb1a12205b33924e8eee2845fcb8 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Thu, 22 Jun 2017 10:39:58 -0700 Subject: [PATCH 145/336] Whats new full, removed linux dmvs --- docs/sql-server/what-s-new-in-sql-server-2017.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/sql-server/what-s-new-in-sql-server-2017.md b/docs/sql-server/what-s-new-in-sql-server-2017.md index 5b2ecc1151e..0824a9fb173 100644 --- a/docs/sql-server/what-s-new-in-sql-server-2017.md +++ b/docs/sql-server/what-s-new-in-sql-server-2017.md @@ -1,7 +1,7 @@ --- title: "What's new in SQL Server 2017 | Microsoft Docs" ms.custom: "" -ms.date: "06/1/2017" +ms.date: "06/22/2017" ms.prod: "sql-server-2017" ms.reviewer: "" ms.suite: "" @@ -49,7 +49,6 @@ SQL Server 2017 includes many new Database Engine features, enhancements, and pe - [sys.dm_db_log_info](../relational-databases/system-dynamic-management-views/sys-dm-db-log-info-transact-sql.md) exposes VLF information to monitor, alert, and avert potential transaction log issues. (CTP 2.0) - [sys.dm_db_stats_histogram](../relational-databases/system-dynamic-management-views/sys-dm-db-stats-histogram-transact-sql.md) is a new dynamic management view for examining statistics. (CTP 1.3) - **sys.dm_os_host_info** provides operating system information for both Windows and Linux. (CTP 1.0) - - Five new dynamic management views return information about Linux processes. For more information, see [Linux Process Dynamic Management Views](../relational-databases/system-dynamic-management-views/linux-process-dynamic-management-views-transact-sql.md). (CTP 1.3) - The **Database Tuning Advisor (DTA)** has additional options and improved performance. (CTP 1.2) - **In-memory enhancements** include support for computed columns in memory-optimized tables, full support for JSON functions in natively compiled modules, and the CROSS APPLY operator in natively compiled modules. (CTP 1.1) - New **string functions** are CONCAT_WS, TRANSLATE, and TRIM, and WITHIN GROUP is now supported for the STRING_AGG function. (CTP 1.1) From e43b0e9a610af32e66f77251d441edafd498e49d Mon Sep 17 00:00:00 2001 From: Ed Macauley Date: Thu, 22 Jun 2017 10:40:56 -0700 Subject: [PATCH 146/336] adding test files to toc --- docs/linux/TOC.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index 8714726d729..2d010e9f6ef 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -4,6 +4,11 @@ ## [What's new in this release?](sql-server-linux-whats-new.md) # Quickstarts ## [Create DB - Ubuntu](quickstart-install-connect-ubuntu.md) +# Samples +## Unattended Install +### [Red Hat Enterprise Linux](sample-unattended-install-redhat.md) +### [SUSE Linux Enterprise Server](sample-unattended-install-suse.md) +### [Ubuntu](sample-unattended-install-ubuntu.md) # [Get Started](sql-server-linux-get-started-tutorial.md) ## [Install SQL Server](sql-server-linux-setup.md) ### [Install on Red Hat Enterprise Linux](sql-server-linux-setup-red-hat.md) From 9cf0f56788548daf31c80cbe66cbc4675c307533 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Thu, 22 Jun 2017 10:42:57 -0700 Subject: [PATCH 147/336] What's new 2017 dbeng, removed linux dmvs --- .../what-s-new-in-sql-server-2017-database-engine.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md b/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md index 5a4a7c4f948..6fc41766d32 100644 --- a/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md +++ b/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md @@ -1,7 +1,7 @@ --- title: "What's New in SQL Server 2017 (Database Engine) | Microsoft Docs" ms.custom: "" -ms.date: "06/17/2017" +ms.date: "06/22/2017" ms.prod: "sql-server-2017" ms.reviewer: "" ms.suite: "" @@ -48,7 +48,6 @@ manager: "jhubbard" - Temporal Tables Retention Policy support added, - New DMV SYS.DM_DB_STATS_HISTOGRAM - Online non-clustered columnstore index build and rebuild support added -- Five new dynamic management views to return information about Linux process. For more information, see [Linux Process Dynamic Management Views](../../relational-databases/system-dynamic-management-views/linux-process-dynamic-management-views-transact-sql.md). - [sys.dm_db_stats_histogram (Transact-SQL)](../../relational-databases/system-dynamic-management-views/sys-dm-db-stats-histogram-transact-sql.md) is added for examining statistics. - The Database Tuning Advisor (DTA) released with SQL Server Management Studio version 16.4, when analyzing SQL Server 2016 and later, has additional options. - Improved performance. For more information, see [Performance Improvements using Database Engine Tuning Advisor (DTA) recommendations](../../relational-databases/performance/performance-improvements-using-dta-recommendations.md). From 2d168f3d2c74083070181f9a8f436c161d77dc2d Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Thu, 22 Jun 2017 15:54:49 -0400 Subject: [PATCH 148/336] Adding Encrypted Connections topic to TOC --- docs/linux/TOC.md | 1 + .../sql-server-linux-encrypted-connections.md | 28 ++++++++----------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index 67479d58818..cd9f0212244 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -53,5 +53,6 @@ #### [Configure AG](sql-server-linux-availability-group-configure-rs.md) # [Security](sql-server-linux-security-overview.md) ## [Get started with security features](sql-server-linux-security-get-started.md) +## [Encrypting Connections to SQL Server on Linux](sql-server-linux-encrypted-connections.md) # [Optimize Performance](sql-server-linux-performance-get-started.md) # [Troubleshoot](sql-server-linux-troubleshooting-guide.md) diff --git a/docs/linux/sql-server-linux-encrypted-connections.md b/docs/linux/sql-server-linux-encrypted-connections.md index 311559e38a1..e641dce7b06 100644 --- a/docs/linux/sql-server-linux-encrypted-connections.md +++ b/docs/linux/sql-server-linux-encrypted-connections.md @@ -1,25 +1,19 @@ --- -title: "Encrypting Connections to SQL Server on Linux | Microsoft Docs" -description: "This topic describes Encrypting Connections to SQL Server on Linux." -author: "tmullaney" -ms.date: "06/14/2017" -ms.author: "thmullan;rickbyh" -manager: "jhubbard" -ms.topic: "article" -ms.prod: "sql-linux" -ms.technology: "database-engine" +title: Encrypting Connections to SQL Server on Linux | Microsoft Docs +description: This topic describes Encrypting Connections to SQL Server on Linux. +author: tmullaney +ms.date: 06/14/2017 +ms.author: thmullan;rickbyh +manager: jhubbard +ms.topic: article +ms.prod: sql-linux +ms.technology: database-engine ms.assetid: helpviewer_keywords: - "Linux, encrypted connections" -# ROBOTS: "" -# audience: "" -# ms.devlang: "" -# ms.reviewer: "" -# ms.suite: "" -# ms.tgt_pltfrm: "" -# ms.custom: "" --- -# Encrypting Connections to SQL Server on Linux +# Encrypting Connections to SQL Server on Linux + [!INCLUDE[tsql-appliesto-sslinx-only_md](../../docs/includes/tsql-appliesto-sslinx-only_md.md)] [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] on Linux can use Transport Layer Security (TLS) to encrypt data that is transmitted across a network between a client application and an instance of [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)]. [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] supports the same TLS protocols on both Windows and Linux: TLS 1.2, 1.1, and 1.0. However, the steps to configure TLS are specific to the operating system on which [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] is running.  From 040baa54a52e13cb377b2476d10212c907271aa5 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Thu, 22 Jun 2017 16:11:28 -0400 Subject: [PATCH 149/336] Shortening TOC label --- docs/linux/TOC.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index cd9f0212244..c2177d3863b 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -53,6 +53,6 @@ #### [Configure AG](sql-server-linux-availability-group-configure-rs.md) # [Security](sql-server-linux-security-overview.md) ## [Get started with security features](sql-server-linux-security-get-started.md) -## [Encrypting Connections to SQL Server on Linux](sql-server-linux-encrypted-connections.md) +## [Encrypting Connections](sql-server-linux-encrypted-connections.md) # [Optimize Performance](sql-server-linux-performance-get-started.md) # [Troubleshoot](sql-server-linux-troubleshooting-guide.md) From ce0e3335dfa562d01f7d6d0cc04ad2f757c461d9 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Thu, 22 Jun 2017 17:12:44 -0400 Subject: [PATCH 150/336] Scoping out MVC structure --- docs/linux/TOC.md | 110 ++++++++++++++++++++++++---------------------- 1 file changed, 57 insertions(+), 53 deletions(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index 2d010e9f6ef..6681730b40c 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -4,61 +4,65 @@ ## [What's new in this release?](sql-server-linux-whats-new.md) # Quickstarts ## [Create DB - Ubuntu](quickstart-install-connect-ubuntu.md) +# Tutorials # Samples ## Unattended Install ### [Red Hat Enterprise Linux](sample-unattended-install-redhat.md) ### [SUSE Linux Enterprise Server](sample-unattended-install-suse.md) ### [Ubuntu](sample-unattended-install-ubuntu.md) -# [Get Started](sql-server-linux-get-started-tutorial.md) -## [Install SQL Server](sql-server-linux-setup.md) -### [Install on Red Hat Enterprise Linux](sql-server-linux-setup-red-hat.md) -### [Install on SUSE Linux Enterprise Server](sql-server-linux-setup-suse-linux-enterprise-server.md) -### [Install on Ubuntu](sql-server-linux-setup-ubuntu.md) -### [Run the Docker image](sql-server-linux-setup-docker.md) -### [Provision a SQL Server VM in Azure](sql-server-linux-azure-virtual-machine.md) -## [Install Optional Packages]() -### [Install SQL Server tools](sql-server-linux-setup-tools.md) -### [Install SQL Server Agent](sql-server-linux-setup-sql-agent.md) -### [Install SQL Server Full-Text Search](sql-server-linux-setup-full-text-search.md) -## [Connect and query](sql-server-linux-connect-and-query-sqlcmd.md) -# [Develop](sql-server-linux-develop-overview.md) -## [Connectivity libraries](sql-server-linux-develop-connectivity-libraries.md) -## [Visual Studio Code](sql-server-linux-develop-use-vscode.md) -## [Use SSMS](sql-server-linux-develop-use-ssms.md) -## [Use SSDT](sql-server-linux-develop-use-ssdt.md) -# [Manage](sql-server-linux-management-overview.md) -## [Configure with mssql-conf](sql-server-linux-configure-mssql-conf.md) -## [Configure with environment variables](sql-server-linux-configure-environment-variables.md) -## [Use SSMS to manage](sql-server-linux-manage-ssms.md) -## [Use PowerShell to manage](sql-server-linux-manage-powershell.md) -## [Create and run jobs](sql-server-linux-run-sql-server-agent-job.md) -## [Use log shipping](sql-server-linux-use-log-shipping.md) -# [Migrate](sql-server-linux-migrate-overview.md) -## [Restore from Windows](sql-server-linux-migrate-restore-database.md) -## [Export and import a BACPAC with SqlPackage](sql-server-linux-migrate-sqlpackage.md) -## [Export and import a BACPAC with SSMS](sql-server-linux-migrate-ssms.md) -## [Migrate with SQL Server Migration Assistant](sql-server-linux-migrate-ssma.md) -## [Bulk copy with bcp](sql-server-linux-migrate-bcp.md) -## [Load data with (SSIS)](sql-server-linux-migrate-ssis.md) -# [Configure Business Continuity](sql-server-linux-business-continuity-dr.md) -## [Backup and Restore](sql-server-linux-backup-and-restore-database.md) -### [Virtual Device Interface - Linux](sql-server-linux-backup-vdi-specification.md) -## [Failover Cluster Instance](sql-server-linux-shared-disk-cluster-configure.md) -### [Red Hat Enterprise Linux]() -#### [Configure (HA add-on)](sql-server-linux-shared-disk-cluster-red-hat-7-configure.md) -#### [Operate (HA add-on)](sql-server-linux-shared-disk-cluster-red-hat-7-operate.md) -### [SUSE Linux Enterprise Server]() -#### [Configure (HA add-on)](sql-server-linux-shared-disk-cluster-sles-configure.md) -## [Availability Groups](sql-server-linux-availability-group-overview.md) -### [Create for high availability]() -#### [Configure AG](sql-server-linux-availability-group-configure-ha.md) -#### [Configure on RHEL](sql-server-linux-availability-group-cluster-rhel.md) -#### [Configure on SUSE](sql-server-linux-availability-group-cluster-sles.md) -#### [Configure on Ubuntu](sql-server-linux-availability-group-cluster-ubuntu.md) -#### [Operate](sql-server-linux-availability-group-failover-ha.md) -### [Create for read-scale only]() -#### [Configure AG](sql-server-linux-availability-group-configure-rs.md) -# [Security](sql-server-linux-security-overview.md) -## [Get started with security features](sql-server-linux-security-get-started.md) -# [Optimize Performance](sql-server-linux-performance-get-started.md) -# [Troubleshoot](sql-server-linux-troubleshooting-guide.md) +# Concepts +## [Get Started](sql-server-linux-get-started-tutorial.md) +### [Install SQL Server](sql-server-linux-setup.md) +#### [Install on Red Hat Enterprise Linux](sql-server-linux-setup-red-hat.md) +#### [Install on SUSE Linux Enterprise Server](sql-server-linux-setup-suse-linux-enterprise-server.md) +#### [Install on Ubuntu](sql-server-linux-setup-ubuntu.md) +#### [Run the Docker image](sql-server-linux-setup-docker.md) +#### [Provision a SQL Server VM in Azure](sql-server-linux-azure-virtual-machine.md) +### [Install Optional Packages]() +#### [Install SQL Server tools](sql-server-linux-setup-tools.md) +#### [Install SQL Server Agent](sql-server-linux-setup-sql-agent.md) +#### [Install SQL Server Full-Text Search](sql-server-linux-setup-full-text-search.md) +### [Connect and query](sql-server-linux-connect-and-query-sqlcmd.md) +## [Develop](sql-server-linux-develop-overview.md) +### [Connectivity libraries](sql-server-linux-develop-connectivity-libraries.md) +### [Visual Studio Code](sql-server-linux-develop-use-vscode.md) +### [Use SSMS](sql-server-linux-develop-use-ssms.md) +### [Use SSDT](sql-server-linux-develop-use-ssdt.md) +## [Manage](sql-server-linux-management-overview.md) +### [Configure with mssql-conf](sql-server-linux-configure-mssql-conf.md) +### [Configure with environment variables](sql-server-linux-configure-environment-variables.md) +### [Use SSMS to manage](sql-server-linux-manage-ssms.md) +### [Use PowerShell to manage](sql-server-linux-manage-powershell.md) +### [Create and run jobs](sql-server-linux-run-sql-server-agent-job.md) +### [Use log shipping](sql-server-linux-use-log-shipping.md) +## [Migrate](sql-server-linux-migrate-overview.md) +### [Restore from Windows](sql-server-linux-migrate-restore-database.md) +### [Export and import a BACPAC with SqlPackage](sql-server-linux-migrate-sqlpackage.md) +### [Export and import a BACPAC with SSMS](sql-server-linux-migrate-ssms.md) +### [Migrate with SQL Server Migration Assistant](sql-server-linux-migrate-ssma.md) +### [Bulk copy with bcp](sql-server-linux-migrate-bcp.md) +### [Load data with (SSIS)](sql-server-linux-migrate-ssis.md) +## [Configure Business Continuity](sql-server-linux-business-continuity-dr.md) +### [Backup and Restore](sql-server-linux-backup-and-restore-database.md) +#### [Virtual Device Interface - Linux](sql-server-linux-backup-vdi-specification.md) +### [Failover Cluster Instance](sql-server-linux-shared-disk-cluster-configure.md) +#### [Red Hat Enterprise Linux]() +##### [Configure (HA add-on)](sql-server-linux-shared-disk-cluster-red-hat-7-configure.md) +##### [Operate (HA add-on)](sql-server-linux-shared-disk-cluster-red-hat-7-operate.md) +#### [SUSE Linux Enterprise Server]() +##### [Configure (HA add-on)](sql-server-linux-shared-disk-cluster-sles-configure.md) +### [Availability Groups](sql-server-linux-availability-group-overview.md) +#### [Create for high availability]() +##### [Configure AG](sql-server-linux-availability-group-configure-ha.md) +##### [Configure on RHEL](sql-server-linux-availability-group-cluster-rhel.md) +##### [Configure on SUSE](sql-server-linux-availability-group-cluster-sles.md) +##### [Configure on Ubuntu](sql-server-linux-availability-group-cluster-ubuntu.md) +##### [Operate](sql-server-linux-availability-group-failover-ha.md) +#### [Create for read-scale only]() +##### [Configure AG](sql-server-linux-availability-group-configure-rs.md) +## [Security](sql-server-linux-security-overview.md) +### [Get started with security features](sql-server-linux-security-get-started.md) +## [Optimize Performance](sql-server-linux-performance-get-started.md) +## [Troubleshoot](sql-server-linux-troubleshooting-guide.md) +# How-to Guides +# Resources \ No newline at end of file From 6b344914257c39d335b0884112a24de3e5168e7c Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Fri, 23 Jun 2017 11:01:40 -0400 Subject: [PATCH 151/336] More MVC changes --- docs/linux/TOC.md | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index 6681730b40c..e2e602d4848 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -4,28 +4,25 @@ ## [What's new in this release?](sql-server-linux-whats-new.md) # Quickstarts ## [Create DB - Ubuntu](quickstart-install-connect-ubuntu.md) +## Create DB - Red Hat Enterprise Linux +## Create DB - SUSE Linux Enterprise Server +## Create DB - Docker # Tutorials +## Migrate +### [Migrate from Windows](sql-server-linux-migrate-restore-database.md) +### Migrate from other data sources +## [Secure the database](sql-server-linux-security-get-started.md) +## [Optimize Performance](sql-server-linux-performance-get-started.md) +## [Use Visual Studio Code](sql-server-linux-develop-use-vscode.md) # Samples ## Unattended Install ### [Red Hat Enterprise Linux](sample-unattended-install-redhat.md) ### [SUSE Linux Enterprise Server](sample-unattended-install-suse.md) ### [Ubuntu](sample-unattended-install-ubuntu.md) # Concepts -## [Get Started](sql-server-linux-get-started-tutorial.md) -### [Install SQL Server](sql-server-linux-setup.md) -#### [Install on Red Hat Enterprise Linux](sql-server-linux-setup-red-hat.md) -#### [Install on SUSE Linux Enterprise Server](sql-server-linux-setup-suse-linux-enterprise-server.md) -#### [Install on Ubuntu](sql-server-linux-setup-ubuntu.md) -#### [Run the Docker image](sql-server-linux-setup-docker.md) -#### [Provision a SQL Server VM in Azure](sql-server-linux-azure-virtual-machine.md) -### [Install Optional Packages]() -#### [Install SQL Server tools](sql-server-linux-setup-tools.md) -#### [Install SQL Server Agent](sql-server-linux-setup-sql-agent.md) -#### [Install SQL Server Full-Text Search](sql-server-linux-setup-full-text-search.md) -### [Connect and query](sql-server-linux-connect-and-query-sqlcmd.md) ## [Develop](sql-server-linux-develop-overview.md) ### [Connectivity libraries](sql-server-linux-develop-connectivity-libraries.md) -### [Visual Studio Code](sql-server-linux-develop-use-vscode.md) +### [Use Visual Studio Code](sql-server-linux-develop-use-vscode.md) ### [Use SSMS](sql-server-linux-develop-use-ssms.md) ### [Use SSDT](sql-server-linux-develop-use-ssdt.md) ## [Manage](sql-server-linux-management-overview.md) @@ -42,6 +39,18 @@ ### [Migrate with SQL Server Migration Assistant](sql-server-linux-migrate-ssma.md) ### [Bulk copy with bcp](sql-server-linux-migrate-bcp.md) ### [Load data with (SSIS)](sql-server-linux-migrate-ssis.md) +## [Security](sql-server-linux-security-overview.md) +### [Get started with security features](sql-server-linux-security-get-started.md) +# How-to Guides +## [Installation](sql-server-linux-setup.md) +### [Install on Red Hat Enterprise Linux](sql-server-linux-setup-red-hat.md) +### [Install on SUSE Linux Enterprise Server](sql-server-linux-setup-suse-linux-enterprise-server.md) +### [Install on Ubuntu](sql-server-linux-setup-ubuntu.md) +### [Run the Docker image](sql-server-linux-setup-docker.md) +### Install Optional Packages +#### [Install SQL Server tools](sql-server-linux-setup-tools.md) +#### [Install SQL Server Agent](sql-server-linux-setup-sql-agent.md) +#### [Install SQL Server Full-Text Search](sql-server-linux-setup-full-text-search.md) ## [Configure Business Continuity](sql-server-linux-business-continuity-dr.md) ### [Backup and Restore](sql-server-linux-backup-and-restore-database.md) #### [Virtual Device Interface - Linux](sql-server-linux-backup-vdi-specification.md) @@ -60,9 +69,5 @@ ##### [Operate](sql-server-linux-availability-group-failover-ha.md) #### [Create for read-scale only]() ##### [Configure AG](sql-server-linux-availability-group-configure-rs.md) -## [Security](sql-server-linux-security-overview.md) -### [Get started with security features](sql-server-linux-security-get-started.md) -## [Optimize Performance](sql-server-linux-performance-get-started.md) ## [Troubleshoot](sql-server-linux-troubleshooting-guide.md) -# How-to Guides # Resources \ No newline at end of file From 876a7f2d830ab9def4ddb8421d326c0d0895b2eb Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Fri, 23 Jun 2017 12:23:13 -0400 Subject: [PATCH 152/336] Streamlining some headers --- docs/linux/TOC.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index e2e602d4848..f05c1468afa 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -3,17 +3,16 @@ ## [Release notes](sql-server-linux-release-notes.md) ## [What's new in this release?](sql-server-linux-whats-new.md) # Quickstarts +## Create DB - Red Hat +## Create DB - SUSE ## [Create DB - Ubuntu](quickstart-install-connect-ubuntu.md) -## Create DB - Red Hat Enterprise Linux -## Create DB - SUSE Linux Enterprise Server ## Create DB - Docker # Tutorials -## Migrate -### [Migrate from Windows](sql-server-linux-migrate-restore-database.md) -### Migrate from other data sources -## [Secure the database](sql-server-linux-security-get-started.md) -## [Optimize Performance](sql-server-linux-performance-get-started.md) -## [Use Visual Studio Code](sql-server-linux-develop-use-vscode.md) +## 1 - [Migrate from Windows](sql-server-linux-migrate-restore-database.md) +## 1 - Migrate other data sources +## 2 - [Secure the database](sql-server-linux-security-get-started.md) +## 3 - [Optimize Performance](sql-server-linux-performance-get-started.md) +## 4 - [Use Visual Studio Code](sql-server-linux-develop-use-vscode.md) # Samples ## Unattended Install ### [Red Hat Enterprise Linux](sample-unattended-install-redhat.md) From 4ed1dfcc1b719ac68c9452271f3700abf2522af0 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Fri, 23 Jun 2017 12:29:47 -0400 Subject: [PATCH 153/336] Fixing formating issue --- docs/linux/TOC.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index f05c1468afa..dc96e0fab34 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -8,11 +8,11 @@ ## [Create DB - Ubuntu](quickstart-install-connect-ubuntu.md) ## Create DB - Docker # Tutorials -## 1 - [Migrate from Windows](sql-server-linux-migrate-restore-database.md) +## [1 - Migrate from Windows](sql-server-linux-migrate-restore-database.md) ## 1 - Migrate other data sources -## 2 - [Secure the database](sql-server-linux-security-get-started.md) -## 3 - [Optimize Performance](sql-server-linux-performance-get-started.md) -## 4 - [Use Visual Studio Code](sql-server-linux-develop-use-vscode.md) +## [2 - Secure the database](sql-server-linux-security-get-started.md) +## [3 - Optimize Performance](sql-server-linux-performance-get-started.md) +## [4 - Use Visual Studio Code](sql-server-linux-develop-use-vscode.md) # Samples ## Unattended Install ### [Red Hat Enterprise Linux](sample-unattended-install-redhat.md) From dddfd28117c0f014472b9259ecb7f87bd347cb09 Mon Sep 17 00:00:00 2001 From: Anna Shrestinian Date: Fri, 23 Jun 2017 12:24:25 -0700 Subject: [PATCH 154/336] Add files via upload Docs for how to turn off telemetry on sql server on linux. --- ...erver-linux-configure-customer-feedback.md | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 docs/linux/sql-server-linux-configure-customer-feedback.md diff --git a/docs/linux/sql-server-linux-configure-customer-feedback.md b/docs/linux/sql-server-linux-configure-customer-feedback.md new file mode 100644 index 00000000000..ae0a4e09fb4 --- /dev/null +++ b/docs/linux/sql-server-linux-configure-customer-feedback.md @@ -0,0 +1,36 @@ +# Configure SQL Server on Linux to send feedback to Microsoft + +By default, Microsoft SQL Server collects information about how its customers are using the application. Specifically, SQL Server collects information about the installation experience, usage, and performance. This information helps Microsoft improve the product to better meet customer needs. For example, Microsoft collects information about what kinds of error codes customers encounter so that we can fix related bugs, improve our documentation about how to use SQL Server, and determine whether features should be added to the product to better serve customers. + +This document provides details about what kinds of information are collected and about how to configure Microsoft SQL Server on Linux to send that collected information to Microsoft. SQL Server 2017 includes a privacy statement that explains what information we do and do not collect from users. Please read the privacy statement. (link) + +Specifically, Microsoft does not send any of the following types of information through this mechanism: +- Any values from inside user tables +- Any logon credentials or other authentication information +- Personally Identifiable Information (PII) + +SQL Server 2017 always collects and sends information about the installation experience from the setup process so that we can quickly find and fix any installation problems that the customer is experiencing. SQL Server 2017 can be configured not to send information (on a per-server instance basis) to Microsoft through the SQL Server configuration file + +> [!NOTE] +> You can disable the sending of information to Microsoft only in paid versions of SQL Server. You cannot disable this functionality in Developer, Enterprise Evaluation, and Express editions of SQL Server 2016. + +## Disable Customer Feedback +Th CustomerFeedback value in the SQL Server configuration file defines if SQL Server sends feedback to Microsoft. By default, this value is set to true. To change the value, run the following commands: + +1. Navigate into the directory with the mssql.conf file: + ```bash + sudo cd /var/opt/mssql/ + ``` +2. Open the mssql.conf file in your favorite text editor. + +3. Change the value of CustomerFeedback from true to false: + + [Telemetry] + + CustomerFeedback=false + +4. Restart the SQL Server service: + + ```bash + sudo systemctl restart mssql-server + ``` From 391474fb585d22c752bceac90fd081a55d962a25 Mon Sep 17 00:00:00 2001 From: Anna Shrestinian Date: Fri, 23 Jun 2017 12:27:32 -0700 Subject: [PATCH 155/336] Delete sql-server-linux-configure-customer-feedback.md --- ...erver-linux-configure-customer-feedback.md | 36 ------------------- 1 file changed, 36 deletions(-) delete mode 100644 docs/linux/sql-server-linux-configure-customer-feedback.md diff --git a/docs/linux/sql-server-linux-configure-customer-feedback.md b/docs/linux/sql-server-linux-configure-customer-feedback.md deleted file mode 100644 index ae0a4e09fb4..00000000000 --- a/docs/linux/sql-server-linux-configure-customer-feedback.md +++ /dev/null @@ -1,36 +0,0 @@ -# Configure SQL Server on Linux to send feedback to Microsoft - -By default, Microsoft SQL Server collects information about how its customers are using the application. Specifically, SQL Server collects information about the installation experience, usage, and performance. This information helps Microsoft improve the product to better meet customer needs. For example, Microsoft collects information about what kinds of error codes customers encounter so that we can fix related bugs, improve our documentation about how to use SQL Server, and determine whether features should be added to the product to better serve customers. - -This document provides details about what kinds of information are collected and about how to configure Microsoft SQL Server on Linux to send that collected information to Microsoft. SQL Server 2017 includes a privacy statement that explains what information we do and do not collect from users. Please read the privacy statement. (link) - -Specifically, Microsoft does not send any of the following types of information through this mechanism: -- Any values from inside user tables -- Any logon credentials or other authentication information -- Personally Identifiable Information (PII) - -SQL Server 2017 always collects and sends information about the installation experience from the setup process so that we can quickly find and fix any installation problems that the customer is experiencing. SQL Server 2017 can be configured not to send information (on a per-server instance basis) to Microsoft through the SQL Server configuration file - -> [!NOTE] -> You can disable the sending of information to Microsoft only in paid versions of SQL Server. You cannot disable this functionality in Developer, Enterprise Evaluation, and Express editions of SQL Server 2016. - -## Disable Customer Feedback -Th CustomerFeedback value in the SQL Server configuration file defines if SQL Server sends feedback to Microsoft. By default, this value is set to true. To change the value, run the following commands: - -1. Navigate into the directory with the mssql.conf file: - ```bash - sudo cd /var/opt/mssql/ - ``` -2. Open the mssql.conf file in your favorite text editor. - -3. Change the value of CustomerFeedback from true to false: - - [Telemetry] - - CustomerFeedback=false - -4. Restart the SQL Server service: - - ```bash - sudo systemctl restart mssql-server - ``` From f8f28f58b2fe63f516219749ceeb88b6f0de1b9a Mon Sep 17 00:00:00 2001 From: Anna Shrestinian Date: Fri, 23 Jun 2017 13:57:54 -0700 Subject: [PATCH 156/336] Add files via upload Docs for telemetry and local audit --- ...erver-linux-configure-customer-feedback.md | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 docs/linux/sql-server-linux-configure-customer-feedback.md diff --git a/docs/linux/sql-server-linux-configure-customer-feedback.md b/docs/linux/sql-server-linux-configure-customer-feedback.md new file mode 100644 index 00000000000..f0a08e8c524 --- /dev/null +++ b/docs/linux/sql-server-linux-configure-customer-feedback.md @@ -0,0 +1,63 @@ +# Configure SQL Server on Linux to send feedback to Microsoft + +By default, Microsoft SQL Server collects information about how its customers are using the application. Specifically, SQL Server collects information about the installation experience, usage, and performance. This information helps Microsoft improve the product to better meet customer needs. For example, Microsoft collects information about what kinds of error codes customers encounter so that we can fix related bugs, improve our documentation about how to use SQL Server, and determine whether features should be added to the product to better serve customers. + +This document provides details about what kinds of information are collected and about how to configure Microsoft SQL Server on Linux to send that collected information to Microsoft. SQL Server 2017 includes a privacy statement that explains what information we do and do not collect from users. Please read the privacy statement. + +Specifically, Microsoft does not send any of the following types of information through this mechanism: +- Any values from inside user tables +- Any logon credentials or other authentication information +- Personally Identifiable Information (PII) + +SQL Server 2017 always collects and sends information about the installation experience from the setup process so that we can quickly find and fix any installation problems that the customer is experiencing. SQL Server 2017 can be configured not to send information (on a per-server instance basis) to Microsoft through the SQL Server configuration file + +> [!NOTE] +> You can disable the sending of information to Microsoft only in paid versions of SQL Server. You cannot disable this functionality in Developer, Enterprise Evaluation, and Express editions of SQL Server 2016. + +## Disable Customer Feedback +The CustomerFeedback value in the SQL Server configuration file defines if SQL Server sends feedback to Microsoft. By default, this value is set to true. To change the value, run the following commands: + +1. Navigate into the directory with the mssql.conf file: + ```bash + sudo cd /var/opt/mssql/ + ``` +2. Open the mssql.conf file in your favorite text editor. + +3. Change the value of CustomerFeedback from true to false: + + [Telemetry] + + CustomerFeedback=false + +4. Restart the SQL Server service: + + ```bash + sudo systemctl restart mssql-server + ``` + +## Local Audit for SQL Server on Linux Usage Feedback Collection + +Microsoft SQL Server 2017 contains Internet-enabled features that can collect and send information about your computer or device ("standard computer information") to Microsoft. The Local Audit component of [SQL Server Usage Feedback collection](link to Telemetry docs) can write data collected by the service to a designated folder, representing the data (logs) that will be sent to Microsoft. The purpose of the Local Audit is to allow customers to see all data Microsoft collects with this feature, for compliance, regulatory or privacy validation reasons. + +In SQL Server on Linux, Local Audit is configurable at instance level for SQL Server Database Engine. Other SQL Server components and SQL Server Tools do not have Local Audit capability for usage feedback collection. + +### Enable Local Audit +The addition of a line to the SQL Server configuration file enables Local Audit. To enable Local Audit run the following commands: + +1. Navigate into the directory with the mssql.conf file: + ```bash + sudo cd /var/opt/mssql/ + ``` +2. Open the mssql.conf file in your favorite text editor. + +3. Add the following line under [Telemetry] changing the value of Userrequestedlocalauditdirectory to be the directory you want the files in. + + [Telemetry] + + Userrequestedlocalauditdirectory=/your/directory/ + +4. Restart the SQL Server service: + + ```bash + sudo systemctl restart mssql-server + ``` From d3202c81b7313069a3fcfd854dbe9cd051bc6a21 Mon Sep 17 00:00:00 2001 From: Anna Shrestinian Date: Fri, 23 Jun 2017 14:01:05 -0700 Subject: [PATCH 157/336] Update and rename sql-server-linux-configure-customer-feedback.md to sql-server-linux-customer-feedback.md --- ...stomer-feedback.md => sql-server-linux-customer-feedback.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename docs/linux/{sql-server-linux-configure-customer-feedback.md => sql-server-linux-customer-feedback.md} (96%) diff --git a/docs/linux/sql-server-linux-configure-customer-feedback.md b/docs/linux/sql-server-linux-customer-feedback.md similarity index 96% rename from docs/linux/sql-server-linux-configure-customer-feedback.md rename to docs/linux/sql-server-linux-customer-feedback.md index f0a08e8c524..fb0d8445c74 100644 --- a/docs/linux/sql-server-linux-configure-customer-feedback.md +++ b/docs/linux/sql-server-linux-customer-feedback.md @@ -1,4 +1,4 @@ -# Configure SQL Server on Linux to send feedback to Microsoft +# Customer Feedback for SQL Server on Linux By default, Microsoft SQL Server collects information about how its customers are using the application. Specifically, SQL Server collects information about the installation experience, usage, and performance. This information helps Microsoft improve the product to better meet customer needs. For example, Microsoft collects information about what kinds of error codes customers encounter so that we can fix related bugs, improve our documentation about how to use SQL Server, and determine whether features should be added to the product to better serve customers. From d2201a563f2ceffa16a132517715cb33b40d33db Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 23 Jun 2017 16:09:10 -0700 Subject: [PATCH 158/336] Add listener IP address. 0.0.0.0 --- .../ss-linux-cluster-availability-group-create-prereq.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/includes/ss-linux-cluster-availability-group-create-prereq.md b/docs/includes/ss-linux-cluster-availability-group-create-prereq.md index 2e268b0870d..8331852cb1b 100644 --- a/docs/includes/ss-linux-cluster-availability-group-create-prereq.md +++ b/docs/includes/ss-linux-cluster-availability-group-create-prereq.md @@ -145,11 +145,14 @@ Database mirroring endpoints use Transmission Control Protocol (TCP) to send and The following Transact-SQL creates a listening endpoint named `Hadr_endpoint` for the availability group. It starts the endpoint, and gives connect permission to the user that you created. Before you run the script, replace the values between `**< ... >**`. +>[!NOTE] +>For this release, do not use a different IP address for the listener IP. We are working on a fix for this issue, but the only acceptable value for now is '0.0.0.0'. + Update the following Transact-SQL for your environment on all SQL Server instances: ```Transact-SQL CREATE ENDPOINT [Hadr_endpoint] - AS TCP (LISTENER_PORT = **<5022>**) + AS TCP (LISTENER_IP = (0.0.0.0), LISTENER_PORT = **<5022>**) FOR DATA_MIRRORING ( ROLE = ALL, AUTHENTICATION = CERTIFICATE dbm_certificate, From cb1f3638591987f1500d508181233c5bfd756e99 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Mon, 26 Jun 2017 11:03:19 -0400 Subject: [PATCH 159/336] Making changes for RC0 --- docs/linux/index.md | 2 +- .../sql-server-linux-azure-virtual-machine.md | 2 +- ...erver-linux-backup-and-restore-database.md | 4 +-- ...sql-server-linux-business-continuity-dr.md | 6 ++--- ...r-linux-configure-environment-variables.md | 2 +- .../sql-server-linux-configure-mssql-conf.md | 2 +- ...l-server-linux-connect-and-query-sqlcmd.md | 2 +- .../sql-server-linux-develop-overview.md | 8 +++--- .../sql-server-linux-develop-use-ssdt.md | 2 +- .../sql-server-linux-develop-use-ssms.md | 2 +- .../sql-server-linux-get-started-tutorial.md | 4 +-- .../sql-server-linux-manage-powershell.md | 14 +++++------ docs/linux/sql-server-linux-manage-ssms.md | 10 ++++---- .../sql-server-linux-management-overview.md | 2 +- docs/linux/sql-server-linux-migrate-bcp.md | 2 +- .../sql-server-linux-migrate-overview.md | 2 +- ...l-server-linux-migrate-restore-database.md | 6 ++--- .../sql-server-linux-migrate-sqlpackage.md | 2 +- docs/linux/sql-server-linux-migrate-ssma.md | 4 +-- docs/linux/sql-server-linux-migrate-ssms.md | 2 +- docs/linux/sql-server-linux-overview.md | 4 +-- docs/linux/sql-server-linux-release-notes.md | 25 ++++++++----------- ...sql-server-linux-setup-full-text-search.md | 4 +-- docs/linux/sql-server-linux-setup-red-hat.md | 4 +-- .../linux/sql-server-linux-setup-sql-agent.md | 2 +- ...inux-setup-suse-linux-enterprise-server.md | 4 +-- docs/linux/sql-server-linux-setup-ubuntu.md | 2 +- docs/linux/sql-server-linux-setup.md | 6 ++--- ...shared-disk-cluster-red-hat-7-configure.md | 2 +- docs/linux/sql-server-linux-whats-new.md | 24 +++++++----------- 30 files changed, 74 insertions(+), 83 deletions(-) diff --git a/docs/linux/index.md b/docs/linux/index.md index 981d8c43860..06755852be6 100644 --- a/docs/linux/index.md +++ b/docs/linux/index.md @@ -4,7 +4,7 @@ layout: LandingPage #SQL Server on Linux Documentation -SQL Server 2017 RC0 runs on Linux! Learn about the core relational database capabilities in this release of SQL Server, and how to install, manage, secure, and develop for this new release. +SQL Server 2017 RC1 runs on Linux! Learn about the core relational database capabilities in this release of SQL Server, and how to install, manage, secure, and develop for this new release.
    • diff --git a/docs/linux/sql-server-linux-azure-virtual-machine.md b/docs/linux/sql-server-linux-azure-virtual-machine.md index 563f4fc0a56..e5a5a64550a 100644 --- a/docs/linux/sql-server-linux-azure-virtual-machine.md +++ b/docs/linux/sql-server-linux-azure-virtual-machine.md @@ -24,7 +24,7 @@ ms.assetid: 222e23b2-51e7-429b-b8e5-61e0ebe7df9b # ms.custom: H1Hack27Feb2017 --- # Create a Linux SQL Server 2017 virtual machine with the Azure portal -Azure provides Linux virtual machine images that have SQL Server 2017 RC0 installed. This topic provides a short walkthrough on how to use the Azure portal to create a Linux SQL Server virtual machine. +Azure provides Linux virtual machine images that have SQL Server 2017 RC1 installed. This topic provides a short walkthrough on how to use the Azure portal to create a Linux SQL Server virtual machine. ## Create a Linux VM with SQL Server installed diff --git a/docs/linux/sql-server-linux-backup-and-restore-database.md b/docs/linux/sql-server-linux-backup-and-restore-database.md index 8e511d91bf5..7fbefb06f6e 100644 --- a/docs/linux/sql-server-linux-backup-and-restore-database.md +++ b/docs/linux/sql-server-linux-backup-and-restore-database.md @@ -26,7 +26,7 @@ ms.assetid: d30090fb-889f-466e-b793-5f284fccc4e6 --- # Backup and restore SQL Server databases on Linux -You can take backups of databases from SQL Server 2017 RC0 on Linux with the same tools as other platforms. On a Linux server, you can use `sqlcmd` to connect to the SQL Server and take backups. From Windows, you can connect to SQL Server on Linux and take backups with the user interface. The backup functionality is the same across platforms. For example, you can backup databases locally, to remote drives, or to [Microsoft Azure Blob storage service](http://msdn.microsoft.com/library/dn435916.aspx). +You can take backups of databases from SQL Server 2017 RC1 on Linux with the same tools as other platforms. On a Linux server, you can use `sqlcmd` to connect to the SQL Server and take backups. From Windows, you can connect to SQL Server on Linux and take backups with the user interface. The backup functionality is the same across platforms. For example, you can backup databases locally, to remote drives, or to [Microsoft Azure Blob storage service](http://msdn.microsoft.com/library/dn435916.aspx). ## Backup with sqlcmd @@ -81,7 +81,7 @@ You can use SSMS from a Windows computer to connect to a Linux database and take The following steps walk through taking a backup with SSMS. -1. Start SSMS and connect to your server in SQL Server 2017 RC0 on Linux. +1. Start SSMS and connect to your server in SQL Server 2017 RC1 on Linux. 1. In Object Explorer, right-click on your database, Click **Tasks**, and then click **Back Up...**. diff --git a/docs/linux/sql-server-linux-business-continuity-dr.md b/docs/linux/sql-server-linux-business-continuity-dr.md index b853fbb7f69..305fcaae6fc 100644 --- a/docs/linux/sql-server-linux-business-continuity-dr.md +++ b/docs/linux/sql-server-linux-business-continuity-dr.md @@ -28,7 +28,7 @@ ms.assetid: c75717c8-c677-4033-8ca6-d0ac93aee04d SQL Server on Linux allows organizations to achieve a wide array of service-level agreement goals to accommodate various business requirements. -The simplest solutions leverage virtualization technologies to achieve a high degree of resiliency against host-level failures, fault tolerance against hardware failures, as well as elasticity and resource maximization. These systems can run on-premises, in a private or public cloud, or hybrid environments. The simplest form of disaster recovery and protection is the database backup. Simple solutions available in SQL Server 2017 RC0 include: +The simplest solutions leverage virtualization technologies to achieve a high degree of resiliency against host-level failures, fault tolerance against hardware failures, as well as elasticity and resource maximization. These systems can run on-premises, in a private or public cloud, or hybrid environments. The simplest form of disaster recovery and protection is the database backup. Simple solutions available in SQL Server 2017 RC1 include: - **VM Failover** - Resilience against guest and OS level failures @@ -42,7 +42,7 @@ The simplest solutions leverage virtualization technologies to achieve a high de - Disaster recovery protection - RTO in minutes to hours -Standard high-availability and disaster recovery techniques provide instance-level protection combined with a reliable shared storage infrastructure. For SQL Server 2017 RC0 standard high-availability includes: +Standard high-availability and disaster recovery techniques provide instance-level protection combined with a reliable shared storage infrastructure. For SQL Server 2017 RC1 standard high-availability includes: - [**Failover Cluster**](sql-server-linux-shared-disk-cluster-configure.md) - Instance level protection @@ -53,4 +53,4 @@ Standard high-availability and disaster recovery techniques provide instance-lev ## Summary -SQL Server 2017 RC0 on Linux includes virtualization, backup and restore, and failover clusters to support high-availability and disaster recovery. \ No newline at end of file +SQL Server 2017 RC1 on Linux includes virtualization, backup and restore, and failover clusters to support high-availability and disaster recovery. \ No newline at end of file diff --git a/docs/linux/sql-server-linux-configure-environment-variables.md b/docs/linux/sql-server-linux-configure-environment-variables.md index 10d7dc447be..e8b1f6167d0 100644 --- a/docs/linux/sql-server-linux-configure-environment-variables.md +++ b/docs/linux/sql-server-linux-configure-environment-variables.md @@ -25,7 +25,7 @@ ms.assetid: --- # Configure SQL Server settings with environment variables on Linux -You can use several different environment variables to configure SQL Server 2017 RC0 on Linux. This topic provides a list of the settings that are configurable using environment variables. +You can use several different environment variables to configure SQL Server 2017 RC1 on Linux. This topic provides a list of the settings that are configurable using environment variables. > [!IMPORTANT] > At this time, the environment variables only configure [SQL Server running in Docker](sql-server-linux-setup-docker.md). To configure the SQL Server service outside of a Docker scenario, see [Configure SQL Server on Linux with the mssql-conf tool](sql-server-linux-configure-mssql-conf.md). diff --git a/docs/linux/sql-server-linux-configure-mssql-conf.md b/docs/linux/sql-server-linux-configure-mssql-conf.md index 19f523ad3b2..f11b3232753 100644 --- a/docs/linux/sql-server-linux-configure-mssql-conf.md +++ b/docs/linux/sql-server-linux-configure-mssql-conf.md @@ -25,7 +25,7 @@ ms.custom: H1Hack27Feb2017 --- # Configure SQL Server on Linux with the mssql-conf tool -**mssql-conf** is a configuration script that installs with SQL Server 2017 RC0 for Red Hat Enterprise Linux, SUSE Linux Enterprise Server, and Ubuntu. You can use this utility to set the following parameters: +**mssql-conf** is a configuration script that installs with SQL Server 2017 RC1 for Red Hat Enterprise Linux, SUSE Linux Enterprise Server, and Ubuntu. You can use this utility to set the following parameters: - [TCP port](#tcpport): Change the port where SQL Server will listen for connections. - [Default data directory](#datadir): Change the directory where the new SQL Server database data files (.mdf) are created. diff --git a/docs/linux/sql-server-linux-connect-and-query-sqlcmd.md b/docs/linux/sql-server-linux-connect-and-query-sqlcmd.md index 0bc938e8994..f3b2b1f26cb 100644 --- a/docs/linux/sql-server-linux-connect-and-query-sqlcmd.md +++ b/docs/linux/sql-server-linux-connect-and-query-sqlcmd.md @@ -26,7 +26,7 @@ ms.custom: H1Hack27Feb2017 --- # Connect to SQL Server on Linux and run Transact-SQL queries -This topic provides connection requirements and guidance for SQL Server 2017 RC0 running on Linux. In most cases, the connection requirements and processes do not differ across platforms. This topic approaches the subject in the context of Linux and then points to other resources. +This topic provides connection requirements and guidance for SQL Server 2017 RC1 running on Linux. In most cases, the connection requirements and processes do not differ across platforms. This topic approaches the subject in the context of Linux and then points to other resources. This topic is a walk-through. In this walk-through, you will use [sqlcmd](https://msdn.microsoft.com/library/ms162773.aspx) to connect to SQL Server 2017 on Linux. After successfully connecting, you will use Transact-SQL (T-SQL) queries to create and populate a small database. diff --git a/docs/linux/sql-server-linux-develop-overview.md b/docs/linux/sql-server-linux-develop-overview.md index caa669b7a23..72c35c51ab3 100644 --- a/docs/linux/sql-server-linux-develop-overview.md +++ b/docs/linux/sql-server-linux-develop-overview.md @@ -25,7 +25,7 @@ ms.custom: H1Hack27Feb2017 --- # How to get started developing applications for SQL Server on Linux -You can create applications that connect to and use SQL Server 2017 RC0 on Linux from a variety of programming languages, such as C#, Java, Node.js, PHP, Python, Ruby, and C++. You can also use popular web frameworks and Object Relational Mapping (ORM) frameworks. +You can create applications that connect to and use SQL Server 2017 RC1 on Linux from a variety of programming languages, such as C#, Java, Node.js, PHP, Python, Ruby, and C++. You can also use popular web frameworks and Object Relational Mapping (ORM) frameworks. > [!TIP] > These same development options also enable you to target SQL Server on other platforms. Applications can target SQL Server running on-premises or in the cloud, on Linux, Windows, or Docker on macOS. Or you can target Azure SQL Database and Azure SQL Data Warehouse. @@ -38,16 +38,16 @@ The best way to get started and build applications with SQL Server is to try it - Try the code samples. > [!TIP] -> If you want to develop for SQL Server 2017 RC0 on Docker, take a look at the **macOS** tutorials. +> If you want to develop for SQL Server 2017 RC1 on Docker, take a look at the **macOS** tutorials. ## Create new applications If you're creating a new application, take a look at a list of the [Connectivity libraries](sql-server-linux-develop-connectivity-libraries.md) for a summary of the connectors and popular frameworks available for various programming languages. ## Use existing applications -If you have an existing database application, you can simply change its connection string to target SQL Server 2017 RC0 on Linux. Make sure to read about the [Known Issues](sql-server-linux-release-notes.md) in SQL Server 2017 RC0 on Linux. +If you have an existing database application, you can simply change its connection string to target SQL Server 2017 RC1 on Linux. Make sure to read about the [Known Issues](sql-server-linux-release-notes.md) in SQL Server 2017 RC1 on Linux. ## Use existing SQL tools on Windows with SQL Server on Linux -Tools that currently run on Windows such as SSMS, SSDT, and PowerShell, also work with SQL Server 2017 RC0 on Linux. Although they do not run natively on Linux, you can still manage remote SQL Server instances on Linux. +Tools that currently run on Windows such as SSMS, SSDT, and PowerShell, also work with SQL Server 2017 RC1 on Linux. Although they do not run natively on Linux, you can still manage remote SQL Server instances on Linux. See the following topics for more information: diff --git a/docs/linux/sql-server-linux-develop-use-ssdt.md b/docs/linux/sql-server-linux-develop-use-ssdt.md index e46ac26b355..ab78a54fec3 100644 --- a/docs/linux/sql-server-linux-develop-use-ssdt.md +++ b/docs/linux/sql-server-linux-develop-use-ssdt.md @@ -42,7 +42,7 @@ SQL Server Data Tools (SSDT) turns Visual Studio into a powerful development and ## Upgrade SQL Server Data Tools to SSDT 17.0 RC release -SQL Server 2017 RC0 on Linux is supported by SSDT version 17.0 RC or later. +SQL Server 2017 RC1 on Linux is supported by SSDT version 17.0 RC or later. 1. [Download and Install SSDT 17.0 RC1]. diff --git a/docs/linux/sql-server-linux-develop-use-ssms.md b/docs/linux/sql-server-linux-develop-use-ssms.md index 5edbcf773c1..a4a323fa99f 100644 --- a/docs/linux/sql-server-linux-develop-use-ssms.md +++ b/docs/linux/sql-server-linux-develop-use-ssms.md @@ -26,7 +26,7 @@ ms.assetid: 30cc4564-f389-4707-9b25-8ba782cc5150 --- # Use SQL Server Management Studio (SSMS) on Windows to manage SQL Server on Linux -This topic shows how to use [SQL Server Management Studio (SSMS)](https://msdn.microsoft.com/library/mt238290.aspx) to connect to SQL Server 2017 RC0 on Linux. SSMS is a Windows application, so use SSMS when you have a Windows machine that can connect to a remote SQL Server instance on Linux. +This topic shows how to use [SQL Server Management Studio (SSMS)](https://msdn.microsoft.com/library/mt238290.aspx) to connect to SQL Server 2017 RC1 on Linux. SSMS is a Windows application, so use SSMS when you have a Windows machine that can connect to a remote SQL Server instance on Linux. After successfully connecting, you run a simple Transact-SQL (T-SQL) query to verify communication with the database. diff --git a/docs/linux/sql-server-linux-get-started-tutorial.md b/docs/linux/sql-server-linux-get-started-tutorial.md index b82cb3ed7cb..1e2d46a1162 100644 --- a/docs/linux/sql-server-linux-get-started-tutorial.md +++ b/docs/linux/sql-server-linux-get-started-tutorial.md @@ -26,13 +26,13 @@ ms.custom: H1Hack27Feb2017 --- # Find resources for installing and using SQL Server on Linux -Get started using SQL Server 2017 RC0 on Linux. Here are basic steps with links to how-to information. +Get started using SQL Server 2017 RC1 on Linux. Here are basic steps with links to how-to information. ## 1: Install Linux If you do not already have a Linux machine, install Linux on a physical server or a virtual machine (VM). Review the [Release notes](sql-server-linux-release-notes.md) on supported platforms and requirements. > [!NOTE] -> One option is to create use a pre-configured Linux VM in Azure. In addition to OS-only VMs, there is also a VM image with SQL Server 2017 RC0 already installed. For more information, see [Provision a Linux VM in Azure for SQL Server](sql-server-linux-azure-virtual-machine.md). +> One option is to create use a pre-configured Linux VM in Azure. In addition to OS-only VMs, there is also a VM image with SQL Server 2017 RC1 already installed. For more information, see [Provision a Linux VM in Azure for SQL Server](sql-server-linux-azure-virtual-machine.md). ## 2: Install SQL Server Next, set up SQL Server 2017 on your Linux machine, or run the Docker image, using one of the following guides: diff --git a/docs/linux/sql-server-linux-manage-powershell.md b/docs/linux/sql-server-linux-manage-powershell.md index fe01ae5486d..8ac937a580a 100644 --- a/docs/linux/sql-server-linux-manage-powershell.md +++ b/docs/linux/sql-server-linux-manage-powershell.md @@ -26,15 +26,15 @@ ms.assetid: a3492ce1-5d55-4505-983c-d6da8d1a94ad --- # Use PowerShell on Windows to Manage SQL Server on Linux -This topic introduces [SQL Server PowerShell](https://msdn.microsoft.com/en-us/library/mt740629.aspx) and walks you through a couple of examples on how to use it with SQL Server 2017 RC0 on Linux. PowerShell support for SQL Server is currently available on Windows, so you can use it when you have a Windows machine that can connect to a remote SQL Server instance on Linux. +This topic introduces [SQL Server PowerShell](https://msdn.microsoft.com/en-us/library/mt740629.aspx) and walks you through a couple of examples on how to use it with SQL Server 2017 RC1 on Linux. PowerShell support for SQL Server is currently available on Windows, so you can use it when you have a Windows machine that can connect to a remote SQL Server instance on Linux. ## Install the newest version of SQL PowerShell on Windows -[SQL PowerShell](https://msdn.microsoft.com/en-us/library/mt740629.aspx) on Windows is included with [SQL Server Management Studio (SSMS)](https://msdn.microsoft.com/en-us/library/hh213248.aspx). When working with SQL Server, you should always use the most recent version of SSMS and SQL PowerShell. The latest version of SSMS is continually updated and optimized and currently works with SQL Server 2017 RC0 on Linux. To download and install the latest version, see [Download SQL Server Management Studio](https://msdn.microsoft.com/library/mt238290.aspx). To stay up-to-date, the latest version of SSMS prompts you when there is a new version available to download. +[SQL PowerShell](https://msdn.microsoft.com/en-us/library/mt740629.aspx) on Windows is included with [SQL Server Management Studio (SSMS)](https://msdn.microsoft.com/en-us/library/hh213248.aspx). When working with SQL Server, you should always use the most recent version of SSMS and SQL PowerShell. The latest version of SSMS is continually updated and optimized and currently works with SQL Server 2017 RC1 on Linux. To download and install the latest version, see [Download SQL Server Management Studio](https://msdn.microsoft.com/library/mt238290.aspx). To stay up-to-date, the latest version of SSMS prompts you when there is a new version available to download. ## Before you begin -Read the [Known Issues](sql-server-linux-release-notes.md) for SQL Server 2017 RC0 on Linux. +Read the [Known Issues](sql-server-linux-release-notes.md) for SQL Server 2017 RC1 on Linux. ## Launch PowerShell and import the *sqlserver* module @@ -72,12 +72,12 @@ Manifest 20.0 SqlServer {Add-SqlAvailabilityDatabase, Add-SqlAvailab Let's use PowerShell on Windows to connect to your SQL Server 2017 instance on Linux and display a couple of server properties. Copy and paste the commands below at the PowerShell prompt. When you run these commands, PowerShell will: -- Display the *Windows PowerShell credential request* dialog that prompts you for the credentials (*SQL username* and *SQL password*) to connect to your SQL Server 2017 RC0 instance on Linux +- Display the *Windows PowerShell credential request* dialog that prompts you for the credentials (*SQL username* and *SQL password*) to connect to your SQL Server 2017 RC1 instance on Linux - Load the SQL Server Management Objects (SMO) assembly - Create an instance of the [Server](https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.server.aspx) object - Connect to the **Server** and display a few properties -Remember to replace **\** with the IP address or the hostname of your SQL Server 2017 RC0 instance on Linux. +Remember to replace **\** with the IP address or the hostname of your SQL Server 2017 RC1 instance on Linux. ```powershell # Prompt for credentials to login into SQL Server @@ -113,11 +113,11 @@ HostDistribution : Ubuntu Let's use PowerShell on Windows to examine error logs connect on your SQL Server 2017 instance on Linux. We will also use the **Out-GridView** cmdlet to show information from the error logs in a grid view display. Copy and paste the commands below at the PowerShell prompt. They might take a few minutes to run. These commands do the following: -- Display the *Windows PowerShell credential request* dialog that prompts you for the credentials (*SQL username* and *SQL password*) to connect to your SQL Server 2017 RC0 instance on Linux +- Display the *Windows PowerShell credential request* dialog that prompts you for the credentials (*SQL username* and *SQL password*) to connect to your SQL Server 2017 RC1 instance on Linux - Use the **Get-SqlErrorLog** cmdlet to connect to the SQL Server 2017 instance on Linux and retrieve error logs since **Yesterday** - Pipe the output to the **Out-GridView** cmdlet -Remember to replace **\** with the IP address or the hostname of your SQL Server 2017 RC0 instance on Linux. +Remember to replace **\** with the IP address or the hostname of your SQL Server 2017 RC1 instance on Linux. ```powershell # Prompt for credentials to login into SQL Server diff --git a/docs/linux/sql-server-linux-manage-ssms.md b/docs/linux/sql-server-linux-manage-ssms.md index 74259b3fba0..e524c1bd132 100644 --- a/docs/linux/sql-server-linux-manage-ssms.md +++ b/docs/linux/sql-server-linux-manage-ssms.md @@ -46,14 +46,14 @@ When working with SQL Server, you should always use the most recent version of S ## Before you begin - See [Use SSMS on Windows to connect to SQL Server on Linux](sql-server-linux-develop-use-ssms.md) for how to Connect and Query using SSMS -- Read the [Known Issues](sql-server-linux-release-notes.md) for SQL Server 2017 RC0 on Linux +- Read the [Known Issues](sql-server-linux-release-notes.md) for SQL Server 2017 RC1 on Linux ## Create and manage databases -While connected to the *master* database, you can create databases on the server and modify or drop existing databases. The following steps describe how to accomplish several common database management tasks through Management Studio. To perform these tasks, make sure you are connected to the *master* database with the server-level principal login that you created when you set up SQL Server 2017 RC0 on Linux. +While connected to the *master* database, you can create databases on the server and modify or drop existing databases. The following steps describe how to accomplish several common database management tasks through Management Studio. To perform these tasks, make sure you are connected to the *master* database with the server-level principal login that you created when you set up SQL Server 2017 RC1 on Linux. ### Create a new database -1. Start SSMS and connect to your server in SQL Server 2017 RC0 on Linux +1. Start SSMS and connect to your server in SQL Server 2017 RC1 on Linux 2. In Object Explorer, right-click on the *Databases* folder, and then click *New Database..." @@ -63,7 +63,7 @@ The new database is successfully created in your server. If you prefer to create ### Drop a database -1. Start SSMS and connect to your server in SQL Server 2017 RC0 on Linux +1. Start SSMS and connect to your server in SQL Server 2017 RC1 on Linux 2. In Object Explorer, expand the *Databases* folder to see a list of all the database on the server. @@ -77,7 +77,7 @@ The database is successfully dropped from your server. If you prefer to drop a d The [Activity Monitor](https://msdn.microsoft.com/en-us/library/hh212951.aspx) tool is built-in into SQL Server Management Studio (SSMS) and displays information about SQL Server processes and how these processes affect the current instance of SQL Server. -1. Start SSMS and connect to your server in SQL Server 2017 RC0 on Linux +1. Start SSMS and connect to your server in SQL Server 2017 RC1 on Linux 2. In Object Explorer, right-click the *server* node, and then click *Activity Monitor* diff --git a/docs/linux/sql-server-linux-management-overview.md b/docs/linux/sql-server-linux-management-overview.md index 0121c11951f..8895d7da76a 100644 --- a/docs/linux/sql-server-linux-management-overview.md +++ b/docs/linux/sql-server-linux-management-overview.md @@ -26,7 +26,7 @@ ms.custom: H1Hack27Feb2017 --- # Choose the right tool to manage SQL Server on Linux -There are several ways to manage SQL Server 2017 RC0 on Linux. The following section provide a quick overview of different management tools and techniques with pointers to more resources. +There are several ways to manage SQL Server 2017 RC1 on Linux. The following section provide a quick overview of different management tools and techniques with pointers to more resources. ## mssql-conf The **mssql-conf** tool configures SQL Server on Linux. For more information, see [Configure SQL Server on Linux with mssql-conf](sql-server-linux-configure-mssql-conf.md). diff --git a/docs/linux/sql-server-linux-migrate-bcp.md b/docs/linux/sql-server-linux-migrate-bcp.md index b17d3bfade3..476aec04a2c 100644 --- a/docs/linux/sql-server-linux-migrate-bcp.md +++ b/docs/linux/sql-server-linux-migrate-bcp.md @@ -25,7 +25,7 @@ ms.assetid: 7b93d0d7-7946-4b78-b33a-57d6307cdfa9 --- # Bulk copy data with bcp to SQL Server on Linux -This topic shows how to use the [bcp](https://msdn.microsoft.com/en-us/library/ms162802.aspx) command line utility to bulk copy data between an instance of SQL Server 2017 RC0 on Linux and a data file in a user-specified format. +This topic shows how to use the [bcp](https://msdn.microsoft.com/en-us/library/ms162802.aspx) command line utility to bulk copy data between an instance of SQL Server 2017 RC1 on Linux and a data file in a user-specified format. You can use `bcp` to import large numbers of rows into SQL Server tables or to export data from SQL Server tables into data files. Except when used with the queryout option, `bcp` requires no knowledge of Transact-SQL. The `bcp` command line utility works with Microsoft SQL Server running on-premises or in the cloud, on Linux, Windows or Docker and Azure SQL Database and Azure SQL Data Warehouse. diff --git a/docs/linux/sql-server-linux-migrate-overview.md b/docs/linux/sql-server-linux-migrate-overview.md index e4fcc6808dc..e3d6326dfea 100644 --- a/docs/linux/sql-server-linux-migrate-overview.md +++ b/docs/linux/sql-server-linux-migrate-overview.md @@ -26,7 +26,7 @@ ms.custom: H1Hack27Feb2017 --- # Migrate databases and structured data to SQL Server on Linux -You can migrate your databases and data to SQL Server 2017 RC0 running on Linux. The method you choose to use depends on the source data and your specific scenario. The following sections provide best practices for various migration scenarios. +You can migrate your databases and data to SQL Server 2017 RC1 running on Linux. The method you choose to use depends on the source data and your specific scenario. The following sections provide best practices for various migration scenarios. ## Migrate from SQL Server on Windows If you want to migrate SQL Server databases on Windows to SQL Server 2017 on Linux, the recommended technique is to use SQL Server backup and restore. diff --git a/docs/linux/sql-server-linux-migrate-restore-database.md b/docs/linux/sql-server-linux-migrate-restore-database.md index 6cd08cf38bd..e78f5516a46 100644 --- a/docs/linux/sql-server-linux-migrate-restore-database.md +++ b/docs/linux/sql-server-linux-migrate-restore-database.md @@ -2,7 +2,7 @@ # required metadata title: Migrate a SQL Server database from Windows to Linux | Microsoft Docs -description: This topic shows how to take a SQL Server database backup on Windows and restore it to a Linux machine running SQL Server 2017 RC0. +description: This topic shows how to take a SQL Server database backup on Windows and restore it to a Linux machine running SQL Server 2017 RC1. author: MikeRayMSFT ms.author: mikeray manager: jhubbard @@ -26,14 +26,14 @@ ms.assetid: 9ac64d1a-9fe5-446e-93c3-d17b8f55a28f --- # Migrate a SQL Server database from Windows to Linux using backup and restore -SQL Server's backup and restore feature is the recommended way to migrate a database from SQL Server on Windows to SQL Server 2017 RC0 on Linux. This topic provides step-by-step instructions for this technique. In this tutorial, you will: +SQL Server's backup and restore feature is the recommended way to migrate a database from SQL Server on Windows to SQL Server 2017 RC1 on Linux. This topic provides step-by-step instructions for this technique. In this tutorial, you will: - Download the AdventureWorks backup file on a Windows machine - Transfer the backup to your Linux machine - Restore the database using Transact-SQL commands > [!NOTE] -> This tutorial assumes that you have installed [SQL Server 2017 RC0](sql-server-linux-setup.md) and the [SQL Server Tools](sql-server-linux-setup-tools.md) on your target Linux server. +> This tutorial assumes that you have installed [SQL Server 2017 RC1](sql-server-linux-setup.md) and the [SQL Server Tools](sql-server-linux-setup-tools.md) on your target Linux server. ## Download the AdventureWorks database backup diff --git a/docs/linux/sql-server-linux-migrate-sqlpackage.md b/docs/linux/sql-server-linux-migrate-sqlpackage.md index cbde2980b87..dd12403bac9 100644 --- a/docs/linux/sql-server-linux-migrate-sqlpackage.md +++ b/docs/linux/sql-server-linux-migrate-sqlpackage.md @@ -25,7 +25,7 @@ ms.assetid: e239793b-e630-4110-81cc-19b1ef8bb8b0 --- # Export and import a database on Linux with sqlpackage -This topic shows how to the **sqlpackage** tool to export and import databases to SQL Server 2017 RC0 on Linux. +This topic shows how to the **sqlpackage** tool to export and import databases to SQL Server 2017 RC1 on Linux. > [!NOTE] > If you are migrating a database from one SQL Server instance to another, the recommendation is to use [Backup and restore](sql-server-linux-migrate-restore-database.md). diff --git a/docs/linux/sql-server-linux-migrate-ssma.md b/docs/linux/sql-server-linux-migrate-ssma.md index ba2b3e2533d..81cc8897f6a 100644 --- a/docs/linux/sql-server-linux-migrate-ssma.md +++ b/docs/linux/sql-server-linux-migrate-ssma.md @@ -25,9 +25,9 @@ ms.custom: H1Hack27Feb2017 --- # Automate database migration to Linux with the SQL Server Migration Assistant -This topic introduces [SQL Server Migration Assistant (SSMA)](http://msdn.microsoft.com/library/mt613434.aspx) that helps you easily migrate databases to SQL Server 2017 RC0 on Linux from Microsoft Access, DB2, MySQL, Oracle and Sybase. SSMA is a Windows application, so use SSMA when you have a Windows machine that can connect to a remote SQL Server instance on Linux. +This topic introduces [SQL Server Migration Assistant (SSMA)](http://msdn.microsoft.com/library/mt613434.aspx) that helps you easily migrate databases to SQL Server 2017 RC1 on Linux from Microsoft Access, DB2, MySQL, Oracle and Sybase. SSMA is a Windows application, so use SSMA when you have a Windows machine that can connect to a remote SQL Server instance on Linux. -SSMA supports a variety of source databases including Oracle, MySQL, Sybase, DB2 and Microsoft Access to SQL Server 2017 RC0 on Linux and helps automate migration tasks such as: +SSMA supports a variety of source databases including Oracle, MySQL, Sybase, DB2 and Microsoft Access to SQL Server 2017 RC1 on Linux and helps automate migration tasks such as: - assess your source database - convert the source database schema to Microsoft SQL Server schema - migrate the schema diff --git a/docs/linux/sql-server-linux-migrate-ssms.md b/docs/linux/sql-server-linux-migrate-ssms.md index 8a6dd105425..f6f9227de9a 100644 --- a/docs/linux/sql-server-linux-migrate-ssms.md +++ b/docs/linux/sql-server-linux-migrate-ssms.md @@ -25,7 +25,7 @@ ms.custom: H1Hack27Feb2017 --- # Export and import a database on Linux with SQL Server Management Studio on Windows -This topic shows how to use [SQL Server Management Studio (SSMS)](https://msdn.microsoft.com/library/mt238290.aspx) to export and import a database on SQL Server 2017 RC0 on Linux. SSMS is a Windows application, so use SSMS when you have a Windows machine that can connect to a remote SQL Server instance on Linux. +This topic shows how to use [SQL Server Management Studio (SSMS)](https://msdn.microsoft.com/library/mt238290.aspx) to export and import a database on SQL Server 2017 RC1 on Linux. SSMS is a Windows application, so use SSMS when you have a Windows machine that can connect to a remote SQL Server instance on Linux. You should always install and use the most recent version of SQL Server Management Studio (SSMS) as described in [Use SSMS on Windows to connect to SQL Server on Linux](sql-server-linux-develop-use-ssms.md) diff --git a/docs/linux/sql-server-linux-overview.md b/docs/linux/sql-server-linux-overview.md index 544d1d70d76..98bdd466fcc 100644 --- a/docs/linux/sql-server-linux-overview.md +++ b/docs/linux/sql-server-linux-overview.md @@ -6,7 +6,7 @@ description: This topic describes how SQL Server runs on Linux and provides info author: rothja ms.author: jroth manager: jhubbard -ms.date: 06/28/2017 +ms.date: 07/19/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -26,7 +26,7 @@ ms.assetid: 9dcc6a90-0add-42c2-815b-862e4e2a21ac --- # SQL Server on Linux -SQL Server now runs on Linux! This latest release, SQL Server 2017 RC0, runs on Linux and is in +SQL Server now runs on Linux! This latest release, SQL Server 2017 RC1, runs on Linux and is in many ways simply SQL Server. It’s the same SQL Server database engine, with many similar features and services regardless of your operating system. - [Install SQL Server on Linux](sql-server-linux-setup.md). diff --git a/docs/linux/sql-server-linux-release-notes.md b/docs/linux/sql-server-linux-release-notes.md index ca52a1128bd..4fd7e9684be 100644 --- a/docs/linux/sql-server-linux-release-notes.md +++ b/docs/linux/sql-server-linux-release-notes.md @@ -6,7 +6,7 @@ description: This topic contains the release notes and supported features for SQ author: rothja ms.author: jroth manager: jhubbard -ms.date: 06/28/2017 +ms.date: 07/19/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -26,13 +26,13 @@ ms.assetid: 1314744f-fcaf-46db-800e-2918fa7e1b6c --- # Release notes for SQL Server 2017 on Linux -The following release notes apply to SQL Server 2017 running on Linux. This release supports many of the SQL Server database engine features for Linux. The topic below is broken into sections for each release, beginning with the most recent release, RC0. See the information in each section for supported platforms, tools, features, and known issues. +The following release notes apply to SQL Server 2017 running on Linux. This release supports many of the SQL Server database engine features for Linux. The topic below is broken into sections for each release, beginning with the most recent release, RC1. See the information in each section for supported platforms, tools, features, and known issues. The following table lists the releases of SQL Server 2017 covered in this topic. | Release | Version | Release date | |-----|-----|-----| -| [RC0](#rc0) | 00.0.000.000 | 6-2017 | +| [RC1](#RC1) | 00.0.000.000 | 7-2017 | | [CTP 2.1](#ctp21) | 14.0.600.250 | 5-2017 | | [CTP 2.0](#ctp20) | 14.0.500.272 | 4-2017 | | [CTP 1.4](#ctp14) | 14.0.405.198 | 3-2017 | @@ -41,7 +41,7 @@ The following table lists the releases of SQL Server 2017 covered in this topic. | [CTP 1.1](#ctp11) | 14.0.100.187 | 12-2016 | | [CTP 1.0](#ctp10) | 14.0.1.246 | 11-2016 | -## RC0 (June 2017) +## RC1 (July 2017) The SQL Server engine version for this release is 00.0.000.000. ### Supported platforms @@ -83,13 +83,19 @@ The following features and services are not available on Linux at this time. The | Area | Unsupported feature or service | |-----|-----| -| **Database engine** | Replication | +| **Database engine** | Transactional replication | +|   | Merge replication | |   | Stretch DB | |   | Polybase | |   | Distributed Query | |   | System extended stored procedures (XP_CMDSHELL, etc.) | |   | Filetable | |   | CLR assemblies with the EXTERNAL_ACCESS or UNSAFE permission set | +| **SQL Server Agent** | Subsystems: CmdExec, PowerShell, Queue Reader , SSIS, SSAS, SSRS | +|   | Alerts | +|   | Log Reader Agent | +|   | Change Data Capture | +|   | Managed Backup | | **High Availability** | Database mirroring | | **Security** | Active Directory Authentication | |   | Windows Authentication | @@ -138,15 +144,6 @@ The following sections describe known issues with this release of SQL Server 201 #### Full-Text Search - Not all filters are available with this release, including filters for Office documents. For a list of supported filters, see [Install SQL Server Full-Text Search on Linux](sql-server-linux-setup-full-text-search.md#filters). -#### SQL Agent -- The following components and subsystems of SQL Agent jobs are not currently supported on Linux: - - - Subsystems: CmdExec, PowerShell, Replication Distributor, Snapshot, Merge, Queue Reader, SSIS, SSAS, SSRS - - Alerts - - DB Mail - - Log Reader Agent - - Change Data Capture - #### SqlPackage - Using SqlPackage requires specifying an absolute path for files. Using relative paths will map the files under the "/tmp/sqlpackage.\/system/system32" folder. diff --git a/docs/linux/sql-server-linux-setup-full-text-search.md b/docs/linux/sql-server-linux-setup-full-text-search.md index ac65575b7c0..187aa837ac2 100644 --- a/docs/linux/sql-server-linux-setup-full-text-search.md +++ b/docs/linux/sql-server-linux-setup-full-text-search.md @@ -92,7 +92,7 @@ If you need an offline installation, locate the Full-text Search package downloa ## Supported languages -Full-Text Search uses [word breakers](https://msdn.microsoft.com/library/ms142509.aspx) that determine how to identify individual words based on language. You can get a list of registered word breakers by querying the **sys.fulltext_languages** catalog view. Word breakers for the following languages are installed with SQL Server 2017 RC0: +Full-Text Search uses [word breakers](https://msdn.microsoft.com/library/ms142509.aspx) that determine how to identify individual words based on language. You can get a list of registered word breakers by querying the **sys.fulltext_languages** catalog view. Word breakers for the following languages are installed with SQL Server 2017 RC1: | Language | Language ID | |---|---| @@ -154,7 +154,7 @@ Full-Text Search uses [word breakers](https://msdn.microsoft.com/library/ms14250 Full-Text Search also works with text stored in binary files. But in this case, an installed filter is required to process the file. For more information about filters, see [Configure and Manage Filters for Search](https://msdn.microsoft.com/library/ms142499.aspx). -You can see a list of installed filters by calling **sp_help_fulltext_system_components 'filter'**. For SQL Server 2017 RC0, the following filters are installed: +You can see a list of installed filters by calling **sp_help_fulltext_system_components 'filter'**. For SQL Server 2017 RC1, the following filters are installed: | Component Name | Class ID | Version | |---|---|---| diff --git a/docs/linux/sql-server-linux-setup-red-hat.md b/docs/linux/sql-server-linux-setup-red-hat.md index 9183e28535e..22b5058dc84 100644 --- a/docs/linux/sql-server-linux-setup-red-hat.md +++ b/docs/linux/sql-server-linux-setup-red-hat.md @@ -1,7 +1,7 @@ --- # required metadata title: Install SQL Server on Red Hat Enterprise Linux | Microsoft Docs -description: Describes how to install SQL Server 2017 RC0 on Red Hat Enterprise Linux. +description: Describes how to install SQL Server 2017 RC1 on Red Hat Enterprise Linux. author: rothja ms.author: jroth manager: jhubbard @@ -25,7 +25,7 @@ ms.assetid: 92503f59-96dc-4f6a-b1b0-d135c43e935e --- # Install SQL Server on Red Hat Enterprise Linux -This topic provides a walkthrough of how to install SQL Server 2017 RC0 on Red Hat Enterprise Linux (RHEL). +This topic provides a walkthrough of how to install SQL Server 2017 RC1 on Red Hat Enterprise Linux (RHEL). > [!NOTE] > You need at least 3.25GB of memory to run SQL Server on Linux. For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). diff --git a/docs/linux/sql-server-linux-setup-sql-agent.md b/docs/linux/sql-server-linux-setup-sql-agent.md index 27d650f92ce..4233ad1c2b0 100644 --- a/docs/linux/sql-server-linux-setup-sql-agent.md +++ b/docs/linux/sql-server-linux-setup-sql-agent.md @@ -29,7 +29,7 @@ ms.assetid: 77f16adc-e6cb-4a57-82f3-7b9780369868 The following steps install SQL Server Agent (**mssql-server-agent**) on Linux. The [SQL Server Agent](https://docs.microsoft.com/sql/ssms/agent/sql-server-agent) runs scheduled SQL Server jobs. For information on the features supported for this release of the SQL Server Agent, see the [Release Notes](sql-server-linux-release-notes.md). > [!NOTE] -> Before installing SQL Server Agent, first [install SQL Server RC0+](sql-server-linux-setup.md#platforms). This configures the keys and repositories that you use when you install the **mssql-server-agent** package. +> Before installing SQL Server Agent, first [install SQL Server RC1+](sql-server-linux-setup.md#platforms). This configures the keys and repositories that you use when you install the **mssql-server-agent** package. Install the SQL Server Agent for your platform: diff --git a/docs/linux/sql-server-linux-setup-suse-linux-enterprise-server.md b/docs/linux/sql-server-linux-setup-suse-linux-enterprise-server.md index 0fba5bfe42c..31a2b247440 100644 --- a/docs/linux/sql-server-linux-setup-suse-linux-enterprise-server.md +++ b/docs/linux/sql-server-linux-setup-suse-linux-enterprise-server.md @@ -1,7 +1,7 @@ --- # required metadata title: Install SQL Server on SUSE Linux Enterprise Server | Microsoft Docs -description: Describes how to install SQL Server 2017 RC0 on SUSE Linux Enterprise Server. +description: Describes how to install SQL Server 2017 RC1 on SUSE Linux Enterprise Server. author: rothja ms.author: jroth manager: jhubbard @@ -25,7 +25,7 @@ ms.assetid: 31ddfb80-f75c-4f51-8540-de6213cb68b8 --- # Install SQL Server on SUSE Linux Enterprise Server -This topic provides a walkthrough of how to install SQL Server 2017 RC0 on SUSE Linux Enterprise Server (SLES) v12 SP2. +This topic provides a walkthrough of how to install SQL Server 2017 RC1 on SUSE Linux Enterprise Server (SLES) v12 SP2. > [!NOTE] > You need at least 3.25GB of memory to run SQL Server on Linux. Also, the file system must be **XFS** or **EXT4**. Other file systems, such as **BTRFS**, are unsupported. For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). diff --git a/docs/linux/sql-server-linux-setup-ubuntu.md b/docs/linux/sql-server-linux-setup-ubuntu.md index 5a333d11f14..8ecb1aa3bb2 100644 --- a/docs/linux/sql-server-linux-setup-ubuntu.md +++ b/docs/linux/sql-server-linux-setup-ubuntu.md @@ -26,7 +26,7 @@ ms.assetid: 31c8c92e-12fe-4728-9b95-4bc028250d85 --- # Install SQL Server on Ubuntu -This topic provides a walkthrough of how to install SQL Server 2017 RC0 on Ubuntu 16.04. +This topic provides a walkthrough of how to install SQL Server 2017 RC1 on Ubuntu 16.04. > [!NOTE] > You need at least 3.25GB of memory to run SQL Server on Linux. For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). diff --git a/docs/linux/sql-server-linux-setup.md b/docs/linux/sql-server-linux-setup.md index f0353ed24e7..8f00bc1307c 100644 --- a/docs/linux/sql-server-linux-setup.md +++ b/docs/linux/sql-server-linux-setup.md @@ -2,7 +2,7 @@ # required metadata title: Install SQL Server on Linux | Microsoft Docs -description: SQL Server 2017 RC0 now runs on Linux. This topic provides an overview on how to install SQL Server on Linux with links to the guides for specific platforms. +description: SQL Server 2017 RC1 now runs on Linux. This topic provides an overview on how to install SQL Server on Linux with links to the guides for specific platforms. author: rothja ms.author: jroth manager: jhubbard @@ -26,11 +26,11 @@ ms.assetid: 565156c3-7256-4e63-aaf0-884522ef2a52 --- # Install SQL Server on Linux -SQL Server 2017 RC0 is supported on Red Hat Enterprise Linux, SUSE Linux Enterprise Server, and Ubuntu. It is also available as a Docker image which can run on Docker Engine on Linux or Docker for Windows/Mac. The topics in this section provide tutorials and general guidance for installing SQL Server 2017 RC0 on Linux. +SQL Server 2017 RC1 is supported on Red Hat Enterprise Linux, SUSE Linux Enterprise Server, and Ubuntu. It is also available as a Docker image which can run on Docker Engine on Linux or Docker for Windows/Mac. The topics in this section provide tutorials and general guidance for installing SQL Server 2017 RC1 on Linux. ## Supported platforms -SQL Server 2017 RC0 is supported on the following platforms: +SQL Server 2017 RC1 is supported on the following platforms: | Platform | Supported version(s) | Get |-----|-----|----- diff --git a/docs/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure.md b/docs/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure.md index c3b1ec7ddfd..a2fb311bb73 100644 --- a/docs/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure.md +++ b/docs/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure.md @@ -319,7 +319,7 @@ At this point both instances of SQL Server are configured to run with the databa sudo pcs cluster start --all ``` - > RHEL HA add-on has fencing agents for VMWare and KVM. Fencing needs to be disabled on all other hypervisors. Disabling fencing agents is not recommended in production environments. As of RC0 timeframe, there are no fencing agents for HyperV or cloud environments. If you are running one of these configurations, you need to disable fencing. \**This is NOT recommended in a production system!** + > RHEL HA add-on has fencing agents for VMWare and KVM. Fencing needs to be disabled on all other hypervisors. Disabling fencing agents is not recommended in production environments. As of RC1 timeframe, there are no fencing agents for HyperV or cloud environments. If you are running one of these configurations, you need to disable fencing. \**This is NOT recommended in a production system!** The following command disables the fencing agents. diff --git a/docs/linux/sql-server-linux-whats-new.md b/docs/linux/sql-server-linux-whats-new.md index 64c5cfbc42b..879d8c6d5b9 100644 --- a/docs/linux/sql-server-linux-whats-new.md +++ b/docs/linux/sql-server-linux-whats-new.md @@ -2,37 +2,31 @@ --- # required metadata -title: What's New for SQL Server 2017 RC0 on Linux | Microsoft Docs +title: What's New for SQL Server 2017 RC1 on Linux | Microsoft Docs description: This topic highlights what's new for the current release of SQL Server 2017 on Linux. author: rothja ms.author: jroth manager: jhubbard -ms.date: 06/28/2017 +ms.date: 07/19/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine ms.assetid: 456b6f31-6b97-4e31-80ab-b40151ec4868 -# optional metadata - -# keywords: "" -# ROBOTS: "" -# audience: "" -# ms.devlang: "" -# ms.reviewer: "" -# ms.suite: "" -# ms.tgt_pltfrm: "" -# ms.custom: "" --- + # What's new for SQL Server 2017 on Linux This topic describes what's new for SQL Server 2017 running on Linux. -## RC0 +## RC1 -The RC0 release contains the following improvements and fixes: +The RC1 release contains the following improvements and fixes: -- TBD. +- Enabled Transparent Layer Security (TLS) for encrypted connections. For more information, see [Encrypting Connections to SQL Server on Linux](sql-server-linux-encrypted-connections.md). +- Enabled Windows Authentication. +- Enabled [DB Mail](../relational-databases/database-mail/database-mail.md). +- Added IPV6 support. ## CTP 2.1 From f5e9d011f769012126a7a9cc09945af72f16f976 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Mon, 26 Jun 2017 12:12:28 -0400 Subject: [PATCH 160/336] Adding resources and moving overview to top --- docs/linux/TOC.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index dc96e0fab34..45755356027 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -1,5 +1,5 @@ -# Overview ## [About SQL Server on Linux](sql-server-linux-overview.md) +# Overview ## [Release notes](sql-server-linux-release-notes.md) ## [What's new in this release?](sql-server-linux-whats-new.md) # Quickstarts @@ -69,4 +69,9 @@ #### [Create for read-scale only]() ##### [Configure AG](sql-server-linux-availability-group-configure-rs.md) ## [Troubleshoot](sql-server-linux-troubleshooting-guide.md) -# Resources \ No newline at end of file +# Resources +## [SQL Server Documentation](../sql-server/sql-server-technical-documentation.md) +## [Stack Overflow](http://stackoverflow.com/questions/tagged/sql-server) +## [MSDN Forums](https://social.msdn.microsoft.com/Forums/en-US/home?category=sqlserver) +## [Microsoft Connect](https://connect.microsoft.com/SQLServer/Feedback) +## [Reddit](https://connect.microsoft.com/SQLServer/Feedback) \ No newline at end of file From 99cef5a9549410ece32f37fd3f41f55717226014 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Mon, 26 Jun 2017 12:19:06 -0400 Subject: [PATCH 161/336] Fixing depth of first item --- docs/linux/TOC.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index 45755356027..139583bfb15 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -1,4 +1,4 @@ -## [About SQL Server on Linux](sql-server-linux-overview.md) +# [About SQL Server on Linux](sql-server-linux-overview.md) # Overview ## [Release notes](sql-server-linux-release-notes.md) ## [What's new in this release?](sql-server-linux-whats-new.md) From d9f24d6aa9c835416f63be87cb3223c9291c30f3 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Mon, 26 Jun 2017 13:42:59 -0400 Subject: [PATCH 162/336] Adjusting for feedback on TOC structure --- docs/linux/TOC.md | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index 139583bfb15..c778cb1202a 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -3,10 +3,10 @@ ## [Release notes](sql-server-linux-release-notes.md) ## [What's new in this release?](sql-server-linux-whats-new.md) # Quickstarts -## Create DB - Red Hat -## Create DB - SUSE -## [Create DB - Ubuntu](quickstart-install-connect-ubuntu.md) -## Create DB - Docker +## Install - Red Hat +## Install - SUSE +## [Install - Ubuntu](quickstart-install-connect-ubuntu.md) +## Install - Docker # Tutorials ## [1 - Migrate from Windows](sql-server-linux-migrate-restore-database.md) ## 1 - Migrate other data sources @@ -25,8 +25,6 @@ ### [Use SSMS](sql-server-linux-develop-use-ssms.md) ### [Use SSDT](sql-server-linux-develop-use-ssdt.md) ## [Manage](sql-server-linux-management-overview.md) -### [Configure with mssql-conf](sql-server-linux-configure-mssql-conf.md) -### [Configure with environment variables](sql-server-linux-configure-environment-variables.md) ### [Use SSMS to manage](sql-server-linux-manage-ssms.md) ### [Use PowerShell to manage](sql-server-linux-manage-powershell.md) ### [Create and run jobs](sql-server-linux-run-sql-server-agent-job.md) @@ -41,15 +39,16 @@ ## [Security](sql-server-linux-security-overview.md) ### [Get started with security features](sql-server-linux-security-get-started.md) # How-to Guides -## [Installation](sql-server-linux-setup.md) -### [Install on Red Hat Enterprise Linux](sql-server-linux-setup-red-hat.md) -### [Install on SUSE Linux Enterprise Server](sql-server-linux-setup-suse-linux-enterprise-server.md) -### [Install on Ubuntu](sql-server-linux-setup-ubuntu.md) -### [Run the Docker image](sql-server-linux-setup-docker.md) -### Install Optional Packages +## Install and configure +### [Install](sql-server-linux-setup.md) +#### [Install SQL Server](sql-server-linux-setup.md) #### [Install SQL Server tools](sql-server-linux-setup-tools.md) #### [Install SQL Server Agent](sql-server-linux-setup-sql-agent.md) #### [Install SQL Server Full-Text Search](sql-server-linux-setup-full-text-search.md) +#### [Docker configuration](sql-server-linux-setup-docker.md) +### [Configure](sql-server-linux-configure-mssql-conf.md) +#### [Configure with mssql-conf](sql-server-linux-configure-mssql-conf.md) +#### [Configure with environment variables](sql-server-linux-configure-environment-variables.md) ## [Configure Business Continuity](sql-server-linux-business-continuity-dr.md) ### [Backup and Restore](sql-server-linux-backup-and-restore-database.md) #### [Virtual Device Interface - Linux](sql-server-linux-backup-vdi-specification.md) From 90dc2e8a9a4f530fc47169ff373c2f2562d395d7 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Mon, 26 Jun 2017 13:45:30 -0400 Subject: [PATCH 163/336] Minor change --- docs/linux/TOC.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index c778cb1202a..8e2fea393bf 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -73,4 +73,4 @@ ## [Stack Overflow](http://stackoverflow.com/questions/tagged/sql-server) ## [MSDN Forums](https://social.msdn.microsoft.com/Forums/en-US/home?category=sqlserver) ## [Microsoft Connect](https://connect.microsoft.com/SQLServer/Feedback) -## [Reddit](https://connect.microsoft.com/SQLServer/Feedback) \ No newline at end of file +## [Reddit](https://connect.microsoft.com/SQLServer/Feedback) From 09d9eaa88b121e24aed8b879c9c14482e13b9654 Mon Sep 17 00:00:00 2001 From: Anna Shrestinian Date: Mon, 26 Jun 2017 10:46:11 -0700 Subject: [PATCH 164/336] Update sql-server-linux-customer-feedback.md --- .../sql-server-linux-customer-feedback.md | 47 +++++++++---------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/docs/linux/sql-server-linux-customer-feedback.md b/docs/linux/sql-server-linux-customer-feedback.md index fb0d8445c74..efb486ca0c6 100644 --- a/docs/linux/sql-server-linux-customer-feedback.md +++ b/docs/linux/sql-server-linux-customer-feedback.md @@ -9,27 +9,20 @@ Specifically, Microsoft does not send any of the following types of information - Any logon credentials or other authentication information - Personally Identifiable Information (PII) -SQL Server 2017 always collects and sends information about the installation experience from the setup process so that we can quickly find and fix any installation problems that the customer is experiencing. SQL Server 2017 can be configured not to send information (on a per-server instance basis) to Microsoft through the SQL Server configuration file +SQL Server 2017 always collects and sends information about the installation experience from the setup process so that we can quickly find and fix any installation problems that the customer is experiencing. SQL Server 2017 can be configured not to send information (on a per-server instance basis) to Microsoft through **mssql-conf**. mssql-conf is a configuration script that installs with SQL Server 2017 for Red Hat Enterprise Linux, SUSE Linux Enterprise Server, and Ubuntu. > [!NOTE] > You can disable the sending of information to Microsoft only in paid versions of SQL Server. You cannot disable this functionality in Developer, Enterprise Evaluation, and Express editions of SQL Server 2016. ## Disable Customer Feedback -The CustomerFeedback value in the SQL Server configuration file defines if SQL Server sends feedback to Microsoft. By default, this value is set to true. To change the value, run the following commands: +This option will let you change if SQL Server sends feedback to Microsoft or not. By default, this value is set to true. To change the value, run the following commands: + +1. Run the mssql-conf script as root with the "set" command for "telemetry.customerfeedback": -1. Navigate into the directory with the mssql.conf file: ```bash - sudo cd /var/opt/mssql/ + sudo /opt/mssql/bin/mssql-conf set customerfeedback false ``` -2. Open the mssql.conf file in your favorite text editor. - -3. Change the value of CustomerFeedback from true to false: - - [Telemetry] - - CustomerFeedback=false - -4. Restart the SQL Server service: +2. Restart the SQL Server service as instructed by the configuration utility: ```bash sudo systemctl restart mssql-server @@ -37,26 +30,32 @@ The CustomerFeedback value in the SQL Server configuration file defines if SQL S ## Local Audit for SQL Server on Linux Usage Feedback Collection -Microsoft SQL Server 2017 contains Internet-enabled features that can collect and send information about your computer or device ("standard computer information") to Microsoft. The Local Audit component of [SQL Server Usage Feedback collection](link to Telemetry docs) can write data collected by the service to a designated folder, representing the data (logs) that will be sent to Microsoft. The purpose of the Local Audit is to allow customers to see all data Microsoft collects with this feature, for compliance, regulatory or privacy validation reasons. +Microsoft SQL Server 2017 contains Internet-enabled features that can collect and send information about your computer or device ("standard computer information") to Microsoft. The Local Audit component of SQL Server Usage Feedback collection can write data collected by the service to a designated folder, representing the data (logs) that will be sent to Microsoft. The purpose of the Local Audit is to allow customers to see all data Microsoft collects with this feature, for compliance, regulatory or privacy validation reasons. In SQL Server on Linux, Local Audit is configurable at instance level for SQL Server Database Engine. Other SQL Server components and SQL Server Tools do not have Local Audit capability for usage feedback collection. ### Enable Local Audit -The addition of a line to the SQL Server configuration file enables Local Audit. To enable Local Audit run the following commands: +This option enables Local Audit and will let you set the directory where the Local Audit logs are created. + +1. Create the directory where the Local Audit logs will reside. For example, we will use /tmp/audit: + + ```bash + sudo mkdir /tmp/audit + ``` + +2. Change the owner and group of the directory to the "mssql" user: -1. Navigate into the directory with the mssql.conf file: ```bash - sudo cd /var/opt/mssql/ + sudo chown mssql /tmp/audit + sudo chgrp mssql /tmp/audit ``` -2. Open the mssql.conf file in your favorite text editor. -3. Add the following line under [Telemetry] changing the value of Userrequestedlocalauditdirectory to be the directory you want the files in. - - [Telemetry] - - Userrequestedlocalauditdirectory=/your/directory/ +3. Run the mssql-conf script as root with the "set" command for "telemetry.userrequestedlocalauditdirectory": -4. Restart the SQL Server service: + ```bash + sudo /opt/mssql/bin/mssql-conf set userrequestedlocalauditdirectory /tmp/audit + ``` +4. Restart the SQL Server service as instructed by the configuration utility: ```bash sudo systemctl restart mssql-server From 7f5159690892c0af4269e808095e3ca5d49ec2a1 Mon Sep 17 00:00:00 2001 From: Anna Shrestinian Date: Mon, 26 Jun 2017 10:56:41 -0700 Subject: [PATCH 165/336] Update sql-server-linux-configure-mssql-conf.md added links for the 2 telemetry commands --- docs/linux/sql-server-linux-configure-mssql-conf.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-configure-mssql-conf.md b/docs/linux/sql-server-linux-configure-mssql-conf.md index 883de97ca6f..13a64d92920 100644 --- a/docs/linux/sql-server-linux-configure-mssql-conf.md +++ b/docs/linux/sql-server-linux-configure-mssql-conf.md @@ -37,7 +37,8 @@ ms.custom: H1Hack27Feb2017 - [High Availability](#hadr): Enable Availability Groups. - [Set traceflags](#traceflags): Set the traceflags that the service is going to use. - [Set collation](#collation): Set a new collation for SQL Server on Linux. - +- [Set customer feedback](sql-server-linux-customer-feedback.md): Change if SQL Server sends feedback to Microsoft or not. +- [Set Local Audit directory](sql-server-linux-customer-feedback.md): Set a a directory to add Local Audit files. The following sections show examples of how to use mssql-conf for each of these scenarios. > [!TIP] From 56d56ea0227371b6c5d83cb53bd99e103a793665 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Mon, 26 Jun 2017 13:57:13 -0400 Subject: [PATCH 166/336] Reformatting changes --- docs/linux/TOC.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index 8e2fea393bf..4e9f0f93668 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -40,15 +40,15 @@ ### [Get started with security features](sql-server-linux-security-get-started.md) # How-to Guides ## Install and configure -### [Install](sql-server-linux-setup.md) +### [Install] #### [Install SQL Server](sql-server-linux-setup.md) #### [Install SQL Server tools](sql-server-linux-setup-tools.md) #### [Install SQL Server Agent](sql-server-linux-setup-sql-agent.md) #### [Install SQL Server Full-Text Search](sql-server-linux-setup-full-text-search.md) -#### [Docker configuration](sql-server-linux-setup-docker.md) -### [Configure](sql-server-linux-configure-mssql-conf.md) +### [Configure] #### [Configure with mssql-conf](sql-server-linux-configure-mssql-conf.md) #### [Configure with environment variables](sql-server-linux-configure-environment-variables.md) +#### [Configure Docker](sql-server-linux-setup-docker.md) ## [Configure Business Continuity](sql-server-linux-business-continuity-dr.md) ### [Backup and Restore](sql-server-linux-backup-and-restore-database.md) #### [Virtual Device Interface - Linux](sql-server-linux-backup-vdi-specification.md) From 677add18fcacb114f3666dcf62f36859b338cd2f Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Mon, 26 Jun 2017 14:31:09 -0400 Subject: [PATCH 167/336] Minor fixes --- docs/linux/TOC.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index 4e9f0f93668..a1b554e295e 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -40,12 +40,12 @@ ### [Get started with security features](sql-server-linux-security-get-started.md) # How-to Guides ## Install and configure -### [Install] +### Install #### [Install SQL Server](sql-server-linux-setup.md) #### [Install SQL Server tools](sql-server-linux-setup-tools.md) #### [Install SQL Server Agent](sql-server-linux-setup-sql-agent.md) #### [Install SQL Server Full-Text Search](sql-server-linux-setup-full-text-search.md) -### [Configure] +### Configure #### [Configure with mssql-conf](sql-server-linux-configure-mssql-conf.md) #### [Configure with environment variables](sql-server-linux-configure-environment-variables.md) #### [Configure Docker](sql-server-linux-setup-docker.md) From d71120606463c3803f97b409c50d15876ea52544 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Mon, 26 Jun 2017 13:56:22 -0700 Subject: [PATCH 168/336] Added editiona and components of SQL Server 2017 --- ...tions-and-components-of-sql-server-2016.md | 2 +- ...tions-and-components-of-sql-server-2017.md | 377 ++++++++++++++++++ 2 files changed, 378 insertions(+), 1 deletion(-) create mode 100644 docs/sql-server/editions-and-components-of-sql-server-2017.md diff --git a/docs/sql-server/editions-and-components-of-sql-server-2016.md b/docs/sql-server/editions-and-components-of-sql-server-2016.md index 7814e4d7428..8b24e9594d4 100644 --- a/docs/sql-server/editions-and-components-of-sql-server-2016.md +++ b/docs/sql-server/editions-and-components-of-sql-server-2016.md @@ -1,5 +1,5 @@ --- -title: "Editions and supported features of SQL Server | Microsoft Docs" +title: "Editions and supported features of SQL Server 2016 | Microsoft Docs" ms.custom: - "SQL2016_New_Updated" ms.date: "05/24/2017" diff --git a/docs/sql-server/editions-and-components-of-sql-server-2017.md b/docs/sql-server/editions-and-components-of-sql-server-2017.md new file mode 100644 index 00000000000..57b8599a968 --- /dev/null +++ b/docs/sql-server/editions-and-components-of-sql-server-2017.md @@ -0,0 +1,377 @@ +--- +title: "Editions and supported features of SQL Server 2017 | Microsoft Docs" +ms.custom: + - "SQL2016_New_Updated" + - "SQL2017_New_Updated" +ms.date: "06/26/2017" +ms.prod: "sql-server-2017" +ms.reviewer: "" +ms.suite: "" +ms.technology: + - "server-general" +ms.tgt_pltfrm: "" +ms.topic: "article" +helpviewer_keywords: + - "Enterprise Edition [SQL Server]" + - "Developer Edition [SQL Server]" + - "32-bit vs. 64-bit editions [SQL Server]" + - "default components" + - "Workgroup Edition [SQL Server]" + - "Internet servers [SQL Server]" + - "installing SQL Server, components" + - "Setup [SQL Server], components" + - "SQL Server, editions" + - "SQL Server, components" + - "client/server applications [SQL Server]" + - "editions [SQL Server]" + - "versions [SQL Server]" + - "Setup [SQL Server], editions" + - "SQL Server Installation Wizard" + - "components [SQL Server]" + - "Standard Edition [SQL Server]" + - "64-bit edition [SQL Server]" + - "IIS [SQL Server]" + - "installing SQL Server, editions" + - "editions [SQL Server], about edition options" + - "Setup [SQL Server]" +ms.assetid: +caps.latest.revision: 121 +author: "MikeRayMSFT" +ms.author: "mikeray" +manager: "jhubbard" +--- +# Editions and supported features of SQL Server + + + +This topic provides details of features supported by the various editions of SQL Server 2017. + +For information about older versions, see: + +* [SQL Server 2016](editions-and-components-of-sql-server-2016.md). +* [SQL Server 2014](http://msdn.microsoft.com/en-us/library/cc645993(v=sql.120).aspx). + +Installation requirements vary based on your application needs. The different editions of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] accommodate the unique performance, runtime, and price requirements of organizations and individuals. The [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] components that you install also depend on your specific requirements. The following sections help you understand how to make the best choice among the editions and components available in [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)]. + +The SQL Server Evaluation edition is available for a 180-day trial period. + +For the latest release notes and what's new information, see the following: +- [SQL Server 2017 release notes](../sql-server/sql-server-2017-release-notes.md) +- [What's new in SQL Server 2017](../sql-server/what-s-new-in-sql-server-2017.md) + +### Try SQL Server! + +> [![Download from Evaluation Center](../analysis-services/media/download.png)](https://www.microsoft.com/en-us/evalcenter/evaluate-sql-server-2017-ctp/) **[Download SQL Server 2017 CTP from the Evaluation Center](https://www.microsoft.com/evalcenter/evaluate-sql-server-2017-ctp/)** + + + +## [!INCLUDE[ssNoVersion](../includes/ssNoVersion-md.md)] Editions + The following table describes the editions of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)]. + +|[!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] edition|Definition| +|---------------------------------------|----------------| +|Enterprise|The premium offering, [!INCLUDE[ssNoVersion](../includes/ssNoVersion-md.md)] Enterprise edition delivers comprehensive high-end datacenter capabilities with blazing-fast performance, unlimited virtualization, and end-to-end business intelligence — enabling high service levels for mission-critical workloads and end user access to data insights.| +|Standard|[!INCLUDE[ssNoVersion](../includes/ssNoVersion-md.md)] Standard edition delivers basic data management and business intelligence database for departments and small organizations to run their applications and supports common development tools for on-premise and cloud — enabling effective database management with minimal IT resources.| +|Web|[!INCLUDE[ssNoVersion](../includes/ssNoVersion-md.md)] Web edition is a low total-cost-of-ownership option for Web hosters and Web VAPs to provide scalability, affordability, and manageability capabilities for small to large scale Web properties.| +|Developer|[!INCLUDE[ssNoVersion](../includes/ssNoVersion-md.md)] Developer edition lets developers build any kind of application on top of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)]. It includes all the functionality of Enterprise edition, but is licensed for use as a development and test system, not as a production server. [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] Developer is an ideal choice for people who build
      [!INCLUDE[ssNoVersion](../includes/ssNoVersion-md.md)] and test applications.| +|Express editions|Express edition is the entry-level, free database and is ideal for learning and building desktop and small server data-driven applications. It is the best choice for independent software vendors, developers, and hobbyists building client applications. If you need more advanced database features, [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] Express can be seamlessly upgraded to other higher end versions of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)]. [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] Express LocalDB, a lightweight version of Express that has all of its programmability features, yet runs in user mode and has a fast, zero-configuration installation and a short list of prerequisites.| + +## Using [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] with an Internet Server + On an Internet server, such as a server that is running Internet Information Services (IIS), you will typically install the [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] client tools. Client tools include the client connectivity components used by an application connecting to an instance of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)]. + +> **NOTE:** Although you can install an instance of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] on a computer that is running IIS, this is typically done only for small Web sites that have a single server computer. Most Web sites have their middle-tier IIS systems on one server or a cluster of servers, and their databases on a separate server or federation of servers. + +## Using [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] with Client/Server Applications + You can install just the [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] client components on a computer that is running client/server applications that connect directly to an instance of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)]. A client components installation is also a good option if you administer an instance of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] on a database server, or if you plan to develop [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] applications. + + The client tools option installs the following [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] features: backward compatibility components, [!INCLUDE[ssBIDevStudio](../includes/ssbidevstudio-md.md)], connectivity components, management tools, software development kit, and [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] Books Online components. For more information, see [Install SQL Server](../database-engine/install-windows/install-sql-server.md). + +## Deciding Among [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] Components + Use the Feature Selection page of the [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] Installation Wizard to select the components to include in an installation of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)]. By default, none of the features in the tree are selected. + + Use the information in the following tables to determine the set of features that best fits your needs. + +|Server components|Description| +|-----------------------|-----------------| +|[!INCLUDE[ssDEnoversion](../includes/ssdenoversion-md.md)]|[!INCLUDE[ssDEnoversion](../includes/ssdenoversion-md.md)] includes the [!INCLUDE[ssDE](../includes/ssde-md.md)], the core service for storing, processing, and securing data, replication, full-text search, tools for managing relational and XML data, in database analytics integration, and Polybase integration for access to Hadoop and other heterogeneous data sources, and the [!INCLUDE[ssDQSnoversion](../includes/ssdqsnoversion-md.md)] (DQS) server.| +|[!INCLUDE[ssASnoversion](../includes/ssasnoversion-md.md)]|[!INCLUDE[ssASnoversion](../includes/ssasnoversion-md.md)] includes the tools for creating and managing online analytical processing (OLAP) and data mining applications.| +|[!INCLUDE[ssRSnoversion](../includes/ssrsnoversion-md.md)]|[!INCLUDE[ssRSnoversion](../includes/ssrsnoversion-md.md)] includes server and client components for creating, managing, and deploying tabular, matrix, graphical, and free-form reports. [!INCLUDE[ssRSnoversion](../includes/ssrsnoversion-md.md)] is also an extensible platform that you can use to develop report applications.| +|[!INCLUDE[ssISnoversion](../includes/ssisnoversion-md.md)]|[!INCLUDE[ssISnoversion](../includes/ssisnoversion-md.md)] is a set of graphical tools and programmable objects for moving, copying, and transforming data. It also includes the [!INCLUDE[ssDQSnoversion](../includes/ssdqsnoversion-md.md)] (DQS) component for [!INCLUDE[ssISnoversion](../includes/ssisnoversion-md.md)].| +|[!INCLUDE[ssMDSshort](../includes/ssmdsshort-md.md)]|[!INCLUDE[ssMDSshort](../includes/ssmdsshort-md.md)] (MDS) is the [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] solution for master data management. MDS can be configured to manage any domain (products, customers, accounts) and includes hierarchies, granular security, transactions, data versioning, and business rules, as well as an [!INCLUDE[ssMDSXLS](../includes/ssmdsxls-md.md)] that can be used to manage data.| +|[!INCLUDE[rsql_productname](../includes/rsql-productname-md.md)]|[!INCLUDE[rsql_productname](../includes/rsql-productname-md.md)] supports distributed, scalable R solutions on multiple platforms and using multiple enterprise data sources, including Linux, Hadoop, and Teradata.| + +|Management tools|Description| +|----------------------|-----------------| +|[!INCLUDE[ssManStudioFull](../includes/ssmanstudiofull-md.md)]|[!INCLUDE[ssManStudioFull](../includes/ssmanstudiofull-md.md)] is an integrated environment to access, configure, manage, administer, and develop components of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)]. [!INCLUDE[ssManStudio](../includes/ssmanstudio-md.md)] lets developers and administrators of all skill levels use [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)].

      Download and install
      [!INCLUDE[ssManStudio](../includes/ssmanstudio-md.md)] from [Download SQL Server Management Studio](http://msdn.microsoft.com/library/mt238290.aspx)| +|[!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] Configuration Manager|[!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] Configuration Manager provides basic configuration management for [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] services, server protocols, client protocols, and client aliases.| +|[!INCLUDE[ssSqlProfiler](../includes/sssqlprofiler-md.md)]|[!INCLUDE[ssSqlProfiler](../includes/sssqlprofiler-md.md)] provides a graphical user interface to monitor an instance of the [!INCLUDE[ssDE](../includes/ssde-md.md)] or [!INCLUDE[ssASnoversion](../includes/ssasnoversion-md.md)].| +|[!INCLUDE[ssDE](../includes/ssde-md.md)] Tuning Advisor|[!INCLUDE[ssDE](../includes/ssde-md.md)] Tuning Advisor helps create optimal sets of indexes, indexed views, and partitions.| +|Data Quality Client|Provides a highly simple and intuitive graphical user interface to connect to the DQS server, and perform data cleansing operations. It also allows you to centrally monitor various activities performed during the data cleansing operation.| +|[!INCLUDE[ssBIDevStudio](../includes/ssbidevstudio-md.md)]|[!INCLUDE[ssBIDevStudio](../includes/ssbidevstudio-md.md)] provides an IDE for building solutions for the Business Intelligence components: [!INCLUDE[ssASnoversion](../includes/ssasnoversion-md.md)], [!INCLUDE[ssRSnoversion](../includes/ssrsnoversion-md.md)], and [!INCLUDE[ssISnoversion](../includes/ssisnoversion-md.md)].

      (Formerly called Business Intelligence Development Studio).

      [!INCLUDE[ssBIDevStudio](../includes/ssbidevstudio-md.md)] also includes "Database Projects", which provides an integrated environment for database developers to carry out all their database design work for any [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] platform (both on and off premise) within Visual Studio. Database developers can use the enhanced Server Explorer in Visual Studio to easily create or edit database objects and data, or execute queries.| +|Connectivity Components|Installs components for communication between clients and servers, and network libraries for DB-Library, ODBC, and OLE DB.| + +|Documentation|Description| +|-------------------|-----------------| +|[!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] Books Online|Core documentation for [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)].| + +**Developer and Evaluation Editions** +For features supported by Developer and Evaluation editions, see features listed for the SQL Server Enterprise Edition in the tables below. + +The Developer edition continues to support only 1 client for [SQL Server Distributed Replay](../tools/distributed-replay/sql-server-distributed-replay.md). + +## Scale Limits + +|Feature|Enterprise|Standard|Web|Express with Advanced Services|Express| +|-------------|----------------|--------------|---------|------------------------------------|------------------------| +|Maximum compute capacity used by a single instance - [!INCLUDE[ssDEnoversion](../includes/ssdenoversion-md.md)]1|Operating system maximum|Limited to lesser of 4 sockets or 24 cores|Limited to lesser of 4 sockets or 16 cores|Limited to lesser of 1 socket or 4 cores|Limited to lesser of 1 socket or 4 cores| +|Maximum compute capacity used by a single instance - [!INCLUDE[ssASnoversion](../includes/ssasnoversion-md.md)] or [!INCLUDE[ssRSnoversion](../includes/ssrsnoversion-md.md)]|Operating system maximum|Limited to lesser of 4 sockets or 24 cores|Limited to lesser of 4 sockets or 16 cores|Limited to lesser of 1 socket or 4 cores|Limited to lesser of 1 socket or 4 cores| +|Maximum memory for buffer pool per instance of [!INCLUDE[ssDEnoversion](../includes/ssdenoversion-md.md)]|Operating System Maximum|128 GB|64 GB|1410 MB|1410 MB| +|Maximum memory for Columnstore segment cache per instance of [!INCLUDE[ssDEnoversion](../includes/ssdenoversion-md.md)]|Unlimited memory| 32 GB2| 16 GB2| 352 MB2| 352 MB2| +|Maximum memory-optimized data size per database in [!INCLUDE[ssDEnoversion](../includes/ssdenoversion-md.md)]|Unlimited memory| 32 GB2| 16 GB2| 352 MB2| 352 MB2| +|Maximum memory utilized per instance of [!INCLUDE[ssASnoversion](../includes/ssasnoversion-md.md)]|Operating System Maximum|Tabular: 16 GB

      MOLAP: 64 GB|N/A|N/A|N/A| +|Maximum memory utilized per instance of [!INCLUDE[ssRSnoversion](../includes/ssrsnoversion-md.md)]|Operating System Maximum|64 GB|64 GB|4 GB|N/A| +|Maximum relational database size|524 PB|524 PB|524 PB|10 GB|10 GB| + +1 Enterprise Edition with Server + Client Access License (CAL) based licensing (not available for new agreements) is limited to a maximum of 20 cores per SQL Server instance. There are no limits under the Core-based Server Licensing model. For more information, see [Compute Capacity Limits by Edition of SQL Server](../sql-server/compute-capacity-limits-by-edition-of-sql-server.md). + +2 Applies to [!INCLUDE[ssSQL15](../includes/sssql15-md.md)] SP1. + +## RDBMS High Availability + +|Feature|Enterprise|Standard|Web|Express with Advanced Services|Express| +|-------------|----------------|--------------|---------|------------------------------------|------------------------| +|Server core support 1|Yes|Yes|Yes|Yes|Yes| +|Log shipping|Yes|Yes|Yes|No|No| +|Database mirroring|Yes|Yes

      Full safety only|Witness only|Witness only|Witness only| +|Backup compression|Yes|Yes|No|No|No| +|Database snapshot|Yes|Yes|Yes|Yes|Yes| +|Always On failover cluster instances|Yes

      Number of nodes is the operating system maximum|Yes

      Support for 2 nodes|No|No|No| +|Always On availability groups|Yes

      Up to 8 secondary replicas, including 2 synchronous secondary replicas|No|No|No|No| +|Basic availability groups 2|No|Yes

      Support for 2 nodes|No|No|No| +|Online page and file restore|Yes|No|No|No|No| +|Online indexing|Yes|No|No|No|No| +|Online schema change|Yes|No|No|No|No| +|Fast recovery|Yes|No|No|No|No| +|Mirrored backups|Yes|No|No|No|No| +|Hot add memory and CPU|Yes|No|No|No|No| +|Database recovery advisor|Yes|Yes|Yes|Yes|Yes| +|Encrypted backup|Yes|Yes|No|No|No| +|Hybrid backup to Windows Azure (backup to URL)|Yes|Yes|No|No|No| + + 1 For more information on installing SQL Server on Server Core, see [Install SQL Server on Server Core](../database-engine/install-windows/install-sql-server-on-server-core.md). + +2 For more information about Basic availability groups, see [Basic Availability Groups](../database-engine/availability-groups/windows/basic-availability-groups-always-on-availability-groups.md). + +## RDBMS Scalability and Performance + +|Feature|Enterprise|Standard|Web|Express with Advanced Services|Express| +|-------------|----------------|--------------|---------|------------------------------------|------------------------| +|Columnstore 1|Yes|Yes|Yes|Yes|Yes| +|In-Memory OLTP 1|Yes|Yes|Yes|Yes, 2|Yes| +|Stretch Database|Yes|Yes|Yes|Yes|Yes| +|Persistent Main Memory|Yes|Yes|Yes|Yes|Yes| +|Multi-instance support|50|50|50|50|50| +|Table and index partitioning|Yes|Yes|Yes|Yes|Yes| +|Data compression|Yes|Yes|Yes|Yes|Yes| +|Resource Governor|Yes|No|No|No|No| +|Partitioned Table Parallelism|Yes|No|No|No|No| +|Multiple Filestream containers|Yes|Yes|Yes|Yes|Yes| +|NUMA Aware and Large Page Memory and Buffer Array Allocation|Yes|No|No|No|No| +|Buffer Pool Extension|Yes|Yes|No|No|No| +|IO Resource Governance|Yes|No|No|No|No| +|Delayed Durability|Yes|Yes|Yes|Yes|Yes| + +1 In-Memory OLTP data size and Columnstore segment cache are limited to the amount of memory specified by edition in the Scale Limits section. The max degrees of parallelism is limited. The degrees of process parallelism (DOP) for an index build is limited to 2 DOP for the Standard Edition and 1 DOP for the Web and Express Editions. This refers to columnstore indexes created over disk-based tables and memory-optimized tables. + +2 This feature is not included in the LocalDB installation option. +## RDBMS Security + +|Feature|Enterprise|Standard|Web|Express|Express with Advanced Services| +|-------------|----------------|--------------|---------|-------------|------------------------------------| +|Row-level security|Yes|Yes|Yes|Yes|Yes| +|Always Encrypted|Yes|Yes|Yes|Yes|Yes| +|Dynamic data masking|Yes|Yes|Yes|Yes|Yes| +|Basic auditing|Yes|Yes|Yes|Yes|Yes| +|Fine grained auditing|Yes|Yes|Yes|Yes|Yes| +|Transparent database encryption|Yes|No|No|No|No| +|Extensible key management|Yes|No|No|No|No| +|User-defined roles|Yes|Yes|Yes|Yes|Yes| +|Contained databases|Yes|Yes|Yes|Yes|Yes| +|Encryption for backups|Yes|Yes|No|No|No| + +## Replication + +|Feature|Enterprise|Standard|Web|Express with Advanced Services|Express| +|-------------|----------------|--------------|---------|------------------------------------|------------------------| +|Heterogeneous subscribers|Yes|Yes|No|No|No| +|Merge replication|Yes|Yes|Yes (Subscriber only)|Yes (Subscriber only)|Yes (Subscriber only)| +|Oracle publishing|Yes|No|No|No|No| +|Peer to peer transactional replication|Yes|No|No|No|No| +|Snapshot replication|Yes|Yes|Yes (Subscriber only)|Yes (Subscriber only)|Yes (Subscriber only)| +|SQL Server change tracking|Yes|Yes|Yes|Yes|Yes| +|Transactional replication|Yes|Yes|Yes (Subscriber only)|Yes (Subscriber only)|Yes (Subscriber only)| +|Transactional replication to Azure|Yes|Yes|No|No|No| +|Transactional replication updateable subscription|Yes|No|No|No|No| + +## Management Tools + +|Feature|Enterprise|Standard|Web|Express with Advanced Services|Express| +|-------------|----------------|--------------|---------|------------------------------------|------------------------| +|SQL Management Objects (SMO)|Yes|Yes|Yes|Yes|Yes| +|SQL Configuration Manager|Yes|Yes|Yes|Yes|Yes| +|SQL CMD (Command Prompt tool)|Yes|Yes|Yes|Yes|Yes| +|Distributed Replay - Admin Tool|Yes|Yes|Yes|Yes|No| +|Distribute Replay - Client|Yes|Yes|Yes|No|No| +|Distributed Replay - Controller|Yes (Up to 16 clients)|Yes (1 client)|Yes (1 client)|No|No| +|SQL Profiler|Yes|Yes|No 1|No 1|No 1| +|SQL Server Agent|Yes|Yes|Yes|No|No| +|Microsoft System Center Operations Manager Management Pack|Yes|Yes|Yes|No|No| +|Database Tuning Advisor (DTA)|Yes|Yes 2|Yes 2|No|No| + + 1 SQL Server Web, SQL Server Express, SQL Server Express with Tools, and SQL Server Express with Advanced Services can be profiled using SQL Server Standard and SQL Server Enterprise editions. + + 2 Tuning enabled only on Standard edition features + +## RDBMS Manageability + +|Feature|Enterprise|Standard|Web|Express with Advanced Services|Express| +|-------------|----------------|--------------|---------|------------------------------------|------------------------| +|User instances|No|No|No|Yes|Yes| +|LocalDB|No|No|No|Yes|No| +|Dedicated admin connection|Yes|Yes|Yes|Yes with trace flag|Yes with trace flag| +|PowerShell scripting support|Yes|Yes|Yes|Yes|Yes| +|SysPrep support 1|Yes|Yes|Yes|Yes|Yes| +|Support for data-tier application component operations - extract, deploy, upgrade, delete|Yes|Yes|Yes|Yes|Yes| +|Policy automation (check on schedule and change)|Yes|Yes|Yes|No|No| +|Performance data collector|Yes|Yes|Yes|No|No| +|Able to enroll as a managed instance in multi-instance management|Yes|Yes|Yes|No|No| +|Standard performance reports|Yes|Yes|Yes|No|No| +|Plan guides and plan freezing for plan guides|Yes|Yes|Yes|No|No| +|Direct query of indexed views (using NOEXPAND hint)|Yes|Yes|Yes|Yes|Yes| +|Automatic indexed views maintenance|Yes|Yes|Yes|No|No| +|Distributed partitioned views|Yes|No|No|No|No| +|Parallel indexed operations|Yes|No|No|No|No| +|Automatic use of indexed view by query optimizer|Yes|No|No|No|No| +|Parallel consistency check|Yes|No|No|No|No| +|SQL Server Utility Control Point|Yes|No|No|No|No| +|Buffer pool extension|Yes|Yes|No|No|No| + + 1 For more information, see [Considerations for Installing SQL Server Using SysPrep](../database-engine/install-windows/considerations-for-installing-sql-server-using-sysprep.md). + +## Development Tools + +|Feature|Enterprise|Standard|Web|Express with Advanced Services|Express| +|-------------|----------------|--------------|---------|------------------------------------|------------------------| +|Microsoft Visual Studio integration|Yes|Yes|Yes|Yes|Yes| +|Intellisense (Transact-SQL and MDX)|Yes|Yes|Yes|Yes|Yes| +|SQL Server Data Tools (SSDT)|Yes|Yes|Yes|Yes|No| +|MDX edit, debug, and design tools|Yes|Yes|No|No|No| + +## Programmability + +|Feature|Enterprise|Standard|Web|Express with Advanced Services|Express +|-------------|----------------|--------------|---------|------------------------------------|------------------------| +|Basic R integration|Yes|Yes|Yes|Yes|No| +|Advanced R integration|Yes|No|No|No|No| +|R Server (Standalone)|Yes|No|No|No|No| +|Polybase compute node|Yes|Yes 1|Yes 1, 2|Yes 1, 2|Yes 1, | +|Polybase head node|Yes|No|No|No|No| +|JSON|Yes|Yes|Yes|Yes|Yes| +|Query Store|Yes|Yes|Yes|Yes|Yes| +|Temporal|Yes|Yes|Yes|Yes|Yes| +|Common Language Runtime (CLR) Integration|Yes|Yes|Yes|Yes|Yes| +|Native XML support|Yes|Yes|Yes|Yes|Yes| +|XML indexing|Yes|Yes|Yes|Yes|Yes| +|MERGE & UPSERT capabilities|Yes|Yes|Yes|Yes|Yes| +|FILESTREAM support|Yes|Yes|Yes|Yes|Yes| +|FileTable|Yes|Yes|Yes|Yes|Yes| +|Date and Time datatypes|Yes|Yes|Yes|Yes|Yes| +|Internationalization support|Yes|Yes|Yes|Yes|Yes| +|Full-text and semantic search|Yes|Yes|Yes|Yes|No| +|Specification of language in query|Yes|Yes|Yes|Yes|No| +|Service Broker (messaging)|Yes|Yes|No (Client only)|No (Client only)|No (Client only)| +|Transact-SQL endpoints|Yes|Yes|Yes|No|No| + +1 Scale out with multiple compute nodes requires a head node. + +## Integration Services + +For info about the Integration Services (SSIS) features supported by the editions of [!INCLUDE[ssNoVersion_md](../includes/ssnoversion-md.md)], see [Integration Services Features Supported by the Editions of SQL Server](../integration-services/integration-services-features-supported-by-the-editions-of-sql-server.md). + +## Master Data Services + For information about the [!INCLUDE[ssMDSshort_md](../includes/ssmdsshort-md.md)] and Data Quality Services features supported by the editions of [!INCLUDE[ssNoVersion_md](../includes/ssNoVersion_md.md)], see [Master Data Services and Data Quality Services Features Supported by the Editions of SQL Server](../master-data-services/master-data-services-and-data-quality-services-features-support.md). + + +## Data Warehouse + +|Feature|Enterprise|Standard|Web|Express with Advanced Services|Express| +|-------------|----------------|--------------|---------|------------------------------------|------------------------| +|Create cubes without a database|Yes|Yes|No|No|No | +|Auto-generate staging and data warehouse schema|Yes|Yes|No|No|No| +|Change data capture|Yes|Yes|No|No|No| +|Star join query optimizations|Yes|No|No|No|No| +|Scalable read-only Analysis Services configuration|Yes|No|No|No|No| +|Parallel query processing on partitioned tables and indexes|Yes|No|No|No|No| +|Global batch aggregation|Yes|No|No|No|No| + +## Analysis Services + +For information about the Analysis Services features supported by the editions of [!INCLUDE[ssNoVersion_md](../includes/ssNoVersion_md.md)], see [Analysis Services Features Supported by the Editions of SQL Server](../analysis-services/analysis-services-features-supported-by-the-editions-of-sql-server-2016.md). + +## BI Semantic Model (Multi Dimensional) + +For information about the Analysis Services features supported by the editions of [!INCLUDE[ssNoVersion_md](../includes/ssNoVersion_md.md)], see [Analysis Services Features Supported by the Editions of SQL Server](../analysis-services/analysis-services-features-supported-by-the-editions-of-sql-server-2016.md). + +## BI Semantic Model (Tabular) + +For information about the Analysis Services features supported by the editions of [!INCLUDE[ssNoVersion_md](../includes/ssNoVersion_md.md)], see [Analysis Services Features Supported by the Editions of SQL Server](../analysis-services/analysis-services-features-supported-by-the-editions-of-sql-server-2016.md). + +## Power Pivot for SharePoint + +For information about the Power Pivot for SharePoint features supported by the editions of [!INCLUDE[ssNoVersion_md](../includes/ssNoVersion_md.md)], see [Analysis Services Features Supported by the Editions of SQL Server](../analysis-services/analysis-services-features-supported-by-the-editions-of-sql-server-2016.md). + +## Data Mining + +For information about the Data Mining features supported by the editions of [!INCLUDE[ssNoVersion_md](../includes/ssNoVersion_md.md)], see [Analysis Services Features Supported by the Editions of SQL Server](../analysis-services/analysis-services-features-supported-by-the-editions-of-sql-server-2016.md). + +## Reporting Services + +For information about the Reporting Services features supported by the editions of [!INCLUDE[ssNoVersion_md](../includes/ssNoVersion_md.md)], see [Reporting Services Features Supported by the Editions of SQL Server](../reporting-services/reporting-services-features-supported-by-the-editions-of-sql-server-2016.md). + +## Business Intelligence Clients + +For information about the Business Intelligence Client features supported by the editions of [!INCLUDE[ssNoVersion_md](../includes/ssNoVersion_md.md)], see [Analysis Services Features Supported by the Editions of SQL Server](../analysis-services/analysis-services-features-supported-by-the-editions-of-sql-server-2016.md) or [Reporting Services Features Supported by the Editions of SQL Server](../reporting-services/reporting-services-features-supported-by-the-editions-of-sql-server-2016.md). + +## Spatial and Location Services + +|Feature Name|Enterprise|Standard|Web|Express with Advanced Services|Express| +|------------------|----------------|--------------|---------|------------------------------------|------------------------| +|Spatial indexes|Yes|Yes|Yes|Yes|Yes| +|Planar and geodetic datatypes|Yes|Yes|Yes|Yes|Yes| +|Advanced spatial libraries|Yes|Yes|Yes|Yes|Yes| +|Import/export of industry-standard spatial data formats|Yes|Yes|Yes|Yes|Yes| + +## Additional Database Services + +|Feature Name|Enterprise|Standard|Web|Express with Advanced Services|Express| +|------------------|----------------|--------------|---------|------------------------------------|------------------------| +|[!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] Migration Assistant|Yes|Yes|Yes|Yes|Yes| +|Database mail|Yes|Yes|Yes|No|No| + +## Other Components + +|Feature Name|Enterprise|Standard|Web|Express with Advanced Services|Express| +|------------------|----------------|--------------|---------|------------------------------------|------------------------| +|StreamInsight|StreamInsight Premium Edition|StreamInsight Standard Edition|StreamInsight Standard Edition|No|No| +|StreamInsight HA|StreamInsight Premium Edition|No|No|No|No| + +> [![Download SSMS](../analysis-services/media/download.png)](https://msdn.microsoft.com/library/mt238290.aspx) **[Download the latest version of SQL Server Management Studio](https://msdn.microsoft.com/library/mt238290.aspx)** + +## See Also + [Product Specifications for SQL Server](http://msdn.microsoft.com/library/6445fd53-6844-4170-a86b-7fe76a9f64cb) + [Installation for SQL Server](../database-engine/install-windows/installation-for-sql-server-2016.md) + + + From 60fbb09d062f50c310654ac9d6d1fbede5c2270c Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Mon, 26 Jun 2017 13:57:54 -0700 Subject: [PATCH 169/336] Remove extraneous sub footnote. --- docs/sql-server/editions-and-components-of-sql-server-2017.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sql-server/editions-and-components-of-sql-server-2017.md b/docs/sql-server/editions-and-components-of-sql-server-2017.md index 57b8599a968..1e7bd6134de 100644 --- a/docs/sql-server/editions-and-components-of-sql-server-2017.md +++ b/docs/sql-server/editions-and-components-of-sql-server-2017.md @@ -276,7 +276,7 @@ The Developer edition continues to support only 1 client for [SQL Server Distrib |Basic R integration|Yes|Yes|Yes|Yes|No| |Advanced R integration|Yes|No|No|No|No| |R Server (Standalone)|Yes|No|No|No|No| -|Polybase compute node|Yes|Yes 1|Yes 1, 2|Yes 1, 2|Yes 1, | +|Polybase compute node|Yes|Yes 1|Yes 1, 2|Yes 1,|Yes 1, | |Polybase head node|Yes|No|No|No|No| |JSON|Yes|Yes|Yes|Yes|Yes| |Query Store|Yes|Yes|Yes|Yes|Yes| From e531d50026e97f010a08db8b65e821f8b5e35778 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Mon, 26 Jun 2017 14:31:13 -0700 Subject: [PATCH 170/336] Updated extra subheadings. --- .../editions-and-components-of-sql-server-2017.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/sql-server/editions-and-components-of-sql-server-2017.md b/docs/sql-server/editions-and-components-of-sql-server-2017.md index 1e7bd6134de..6496f6752e3 100644 --- a/docs/sql-server/editions-and-components-of-sql-server-2017.md +++ b/docs/sql-server/editions-and-components-of-sql-server-2017.md @@ -128,16 +128,14 @@ The Developer edition continues to support only 1 client for [SQL Server Distrib |Maximum compute capacity used by a single instance - [!INCLUDE[ssDEnoversion](../includes/ssdenoversion-md.md)]1|Operating system maximum|Limited to lesser of 4 sockets or 24 cores|Limited to lesser of 4 sockets or 16 cores|Limited to lesser of 1 socket or 4 cores|Limited to lesser of 1 socket or 4 cores| |Maximum compute capacity used by a single instance - [!INCLUDE[ssASnoversion](../includes/ssasnoversion-md.md)] or [!INCLUDE[ssRSnoversion](../includes/ssrsnoversion-md.md)]|Operating system maximum|Limited to lesser of 4 sockets or 24 cores|Limited to lesser of 4 sockets or 16 cores|Limited to lesser of 1 socket or 4 cores|Limited to lesser of 1 socket or 4 cores| |Maximum memory for buffer pool per instance of [!INCLUDE[ssDEnoversion](../includes/ssdenoversion-md.md)]|Operating System Maximum|128 GB|64 GB|1410 MB|1410 MB| -|Maximum memory for Columnstore segment cache per instance of [!INCLUDE[ssDEnoversion](../includes/ssdenoversion-md.md)]|Unlimited memory| 32 GB2| 16 GB2| 352 MB2| 352 MB2| -|Maximum memory-optimized data size per database in [!INCLUDE[ssDEnoversion](../includes/ssdenoversion-md.md)]|Unlimited memory| 32 GB2| 16 GB2| 352 MB2| 352 MB2| +|Maximum memory for Columnstore segment cache per instance of [!INCLUDE[ssDEnoversion](../includes/ssdenoversion-md.md)]|Unlimited memory| 32 GB| 16 GB| 352 MB| 352 MB| +|Maximum memory-optimized data size per database in [!INCLUDE[ssDEnoversion](../includes/ssdenoversion-md.md)]|Unlimited memory| 32 GB| 16 GB| 352 MB| 352 MB| |Maximum memory utilized per instance of [!INCLUDE[ssASnoversion](../includes/ssasnoversion-md.md)]|Operating System Maximum|Tabular: 16 GB

      MOLAP: 64 GB|N/A|N/A|N/A| |Maximum memory utilized per instance of [!INCLUDE[ssRSnoversion](../includes/ssrsnoversion-md.md)]|Operating System Maximum|64 GB|64 GB|4 GB|N/A| |Maximum relational database size|524 PB|524 PB|524 PB|10 GB|10 GB| 1 Enterprise Edition with Server + Client Access License (CAL) based licensing (not available for new agreements) is limited to a maximum of 20 cores per SQL Server instance. There are no limits under the Core-based Server Licensing model. For more information, see [Compute Capacity Limits by Edition of SQL Server](../sql-server/compute-capacity-limits-by-edition-of-sql-server.md). - -2 Applies to [!INCLUDE[ssSQL15](../includes/sssql15-md.md)] SP1. - + ## RDBMS High Availability |Feature|Enterprise|Standard|Web|Express with Advanced Services|Express| From 363cd51e9da43b2e2fac40ed32a7e56e5126885f Mon Sep 17 00:00:00 2001 From: Anna Shrestinian Date: Mon, 26 Jun 2017 16:17:58 -0700 Subject: [PATCH 171/336] Update sql-server-linux-customer-feedback.md I added metadata. How do I get the ms.assetid:? --- .../sql-server-linux-customer-feedback.md | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/docs/linux/sql-server-linux-customer-feedback.md b/docs/linux/sql-server-linux-customer-feedback.md index efb486ca0c6..75a42832431 100644 --- a/docs/linux/sql-server-linux-customer-feedback.md +++ b/docs/linux/sql-server-linux-customer-feedback.md @@ -1,3 +1,28 @@ +--- +# required metadata + +title: Configure RHEL Cluster for SQL Server Availability Group | Microsoft Docs +description: +author: annashres +ms.author: anshrest +manager: jhubbard +ms.date: 06/26/2017 +ms.topic: article +ms.prod: sql-linux +ms.technology: database-engine +ms.assetid: + +# optional metadata +# keywords: "" +# ROBOTS: "" +# audience: "" +# ms.devlang: "" +# ms.reviewer: "" +# ms.suite: "" +# ms.tgt_pltfrm: "" +# ms.custom: "" + +--- # Customer Feedback for SQL Server on Linux By default, Microsoft SQL Server collects information about how its customers are using the application. Specifically, SQL Server collects information about the installation experience, usage, and performance. This information helps Microsoft improve the product to better meet customer needs. For example, Microsoft collects information about what kinds of error codes customers encounter so that we can fix related bugs, improve our documentation about how to use SQL Server, and determine whether features should be added to the product to better serve customers. From 29bb4e05c83a51908352fecde9511294c1b7bcc5 Mon Sep 17 00:00:00 2001 From: Anna Shrestinian Date: Mon, 26 Jun 2017 16:20:49 -0700 Subject: [PATCH 172/336] Update sql-server-linux-customer-feedback.md --- docs/linux/sql-server-linux-customer-feedback.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-customer-feedback.md b/docs/linux/sql-server-linux-customer-feedback.md index 75a42832431..06791813cbe 100644 --- a/docs/linux/sql-server-linux-customer-feedback.md +++ b/docs/linux/sql-server-linux-customer-feedback.md @@ -40,7 +40,7 @@ SQL Server 2017 always collects and sends information about the installation exp > You can disable the sending of information to Microsoft only in paid versions of SQL Server. You cannot disable this functionality in Developer, Enterprise Evaluation, and Express editions of SQL Server 2016. ## Disable Customer Feedback -This option will let you change if SQL Server sends feedback to Microsoft or not. By default, this value is set to true. To change the value, run the following commands: +This option lets you change if SQL Server sends feedback to Microsoft or not. By default, this value is set to true. To change the value, run the following commands: 1. Run the mssql-conf script as root with the "set" command for "telemetry.customerfeedback": @@ -60,7 +60,7 @@ Microsoft SQL Server 2017 contains Internet-enabled features that can collect an In SQL Server on Linux, Local Audit is configurable at instance level for SQL Server Database Engine. Other SQL Server components and SQL Server Tools do not have Local Audit capability for usage feedback collection. ### Enable Local Audit -This option enables Local Audit and will let you set the directory where the Local Audit logs are created. +This option enables Local Audit and lets you set the directory where the Local Audit logs are created. 1. Create the directory where the Local Audit logs will reside. For example, we will use /tmp/audit: From 81d16f09a3b6507c74db323daa48f6ca9560d263 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 27 Jun 2017 08:40:45 -0700 Subject: [PATCH 173/336] Added entry for TOC --- docs/sql-server/TOC.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/sql-server/TOC.md b/docs/sql-server/TOC.md index bde2a7707ca..5afded93f45 100644 --- a/docs/sql-server/TOC.md +++ b/docs/sql-server/TOC.md @@ -3,7 +3,8 @@ # Overview ## [What's New in SQL Server 2016](what-s-new-in-sql-server-2016.md) ## [What's New in SQL Server 2017](what-s-new-in-sql-server-2017.md) -## [Editions and supported features of SQL Server](editions-and-components-of-sql-server-2016.md) +## [Editions and supported features of SQL Server 2016](editions-and-components-of-sql-server-2016.md) +## [Editions and supported features of SQL Server 2017](editions-and-components-of-sql-server-2017.md) ## [Maximum Capacity Specifications for SQL Server](maximum-capacity-specifications-for-sql-server.md) ## [Compute Capacity Limits by Edition of SQL Server](compute-capacity-limits-by-edition-of-sql-server.md) ## [Customer Experience Improvement Program](customer-experience-improvement-program-for-sql-server-data-tools.md) From 5639d17f3f9d21a51837b23e07386296ff4269fd Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 27 Jun 2017 08:48:26 -0700 Subject: [PATCH 174/336] Corrected blocking issues from publication desk. --- ...tions-and-components-of-sql-server-2017.md | 44 ++++++++++--------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/docs/sql-server/editions-and-components-of-sql-server-2017.md b/docs/sql-server/editions-and-components-of-sql-server-2017.md index 6496f6752e3..4456bc538d3 100644 --- a/docs/sql-server/editions-and-components-of-sql-server-2017.md +++ b/docs/sql-server/editions-and-components-of-sql-server-2017.md @@ -49,7 +49,7 @@ This topic provides details of features supported by the various editions of SQL For information about older versions, see: * [SQL Server 2016](editions-and-components-of-sql-server-2016.md). -* [SQL Server 2014](http://msdn.microsoft.com/en-us/library/cc645993(v=sql.120).aspx). +* [SQL Server 2014](http://msdn.microsoft.com/library/cc645993(v=sql.120).aspx). Installation requirements vary based on your application needs. The different editions of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] accommodate the unique performance, runtime, and price requirements of organizations and individuals. The [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] components that you install also depend on your specific requirements. The following sections help you understand how to make the best choice among the editions and components available in [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)]. @@ -67,7 +67,7 @@ For the latest release notes and what's new information, see the following: > ![Azure Virtual Machine small](../analysis-services/media/azure-virtual-machine-small.png) **[Spin up a Virtual Machine with SQL Server 2016 already installed](https://azuremarketplace.microsoft.com/marketplace/apps/Microsoft.SQL2016SP1-WS2016?tab=Overview?wt.mc_id=sqL16_vm)** ---> -## [!INCLUDE[ssNoVersion](../includes/ssNoVersion-md.md)] Editions +## [!INCLUDE[ssNoVersion](../includes/ssNoVersion-md.md)] editions The following table describes the editions of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)]. |[!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] edition|Definition| @@ -81,14 +81,15 @@ For the latest release notes and what's new information, see the following: ## Using [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] with an Internet Server On an Internet server, such as a server that is running Internet Information Services (IIS), you will typically install the [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] client tools. Client tools include the client connectivity components used by an application connecting to an instance of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)]. -> **NOTE:** Although you can install an instance of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] on a computer that is running IIS, this is typically done only for small Web sites that have a single server computer. Most Web sites have their middle-tier IIS systems on one server or a cluster of servers, and their databases on a separate server or federation of servers. +>[!NOTE] +>Although you can install an instance of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] on a computer that is running IIS, this is typically done only for small Web sites that have a single server computer. Most Web sites have their middle-tier IIS systems on one server or a cluster of servers, and their databases on a separate server or federation of servers. -## Using [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] with Client/Server Applications +## Using [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] with client/server applications You can install just the [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] client components on a computer that is running client/server applications that connect directly to an instance of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)]. A client components installation is also a good option if you administer an instance of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] on a database server, or if you plan to develop [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] applications. The client tools option installs the following [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] features: backward compatibility components, [!INCLUDE[ssBIDevStudio](../includes/ssbidevstudio-md.md)], connectivity components, management tools, software development kit, and [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] Books Online components. For more information, see [Install SQL Server](../database-engine/install-windows/install-sql-server.md). -## Deciding Among [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] Components +## Deciding among [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] components Use the Feature Selection page of the [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] Installation Wizard to select the components to include in an installation of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)]. By default, none of the features in the tree are selected. Use the information in the following tables to determine the set of features that best fits your needs. @@ -121,7 +122,7 @@ For features supported by Developer and Evaluation editions, see features listed The Developer edition continues to support only 1 client for [SQL Server Distributed Replay](../tools/distributed-replay/sql-server-distributed-replay.md). -## Scale Limits +## Scale limits |Feature|Enterprise|Standard|Web|Express with Advanced Services|Express| |-------------|----------------|--------------|---------|------------------------------------|------------------------| @@ -136,7 +137,7 @@ The Developer edition continues to support only 1 client for [SQL Server Distrib 1 Enterprise Edition with Server + Client Access License (CAL) based licensing (not available for new agreements) is limited to a maximum of 20 cores per SQL Server instance. There are no limits under the Core-based Server Licensing model. For more information, see [Compute Capacity Limits by Edition of SQL Server](../sql-server/compute-capacity-limits-by-edition-of-sql-server.md). -## RDBMS High Availability +## RDBMS high availability |Feature|Enterprise|Standard|Web|Express with Advanced Services|Express| |-------------|----------------|--------------|---------|------------------------------------|------------------------| @@ -162,7 +163,7 @@ The Developer edition continues to support only 1 client for [SQL Server Distrib 2 For more information about Basic availability groups, see [Basic Availability Groups](../database-engine/availability-groups/windows/basic-availability-groups-always-on-availability-groups.md). -## RDBMS Scalability and Performance +## RDBMS scalability and performance |Feature|Enterprise|Standard|Web|Express with Advanced Services|Express| |-------------|----------------|--------------|---------|------------------------------------|------------------------| @@ -184,7 +185,8 @@ The Developer edition continues to support only 1 client for [SQL Server Distrib 1 In-Memory OLTP data size and Columnstore segment cache are limited to the amount of memory specified by edition in the Scale Limits section. The max degrees of parallelism is limited. The degrees of process parallelism (DOP) for an index build is limited to 2 DOP for the Standard Edition and 1 DOP for the Web and Express Editions. This refers to columnstore indexes created over disk-based tables and memory-optimized tables. 2 This feature is not included in the LocalDB installation option. -## RDBMS Security + +## RDBMS security |Feature|Enterprise|Standard|Web|Express|Express with Advanced Services| |-------------|----------------|--------------|---------|-------------|------------------------------------| @@ -213,7 +215,7 @@ The Developer edition continues to support only 1 client for [SQL Server Distrib |Transactional replication to Azure|Yes|Yes|No|No|No| |Transactional replication updateable subscription|Yes|No|No|No|No| -## Management Tools +## Management tools |Feature|Enterprise|Standard|Web|Express with Advanced Services|Express| |-------------|----------------|--------------|---------|------------------------------------|------------------------| @@ -232,7 +234,7 @@ The Developer edition continues to support only 1 client for [SQL Server Distrib 2 Tuning enabled only on Standard edition features -## RDBMS Manageability +## RDBMS manageability |Feature|Enterprise|Standard|Web|Express with Advanced Services|Express| |-------------|----------------|--------------|---------|------------------------------------|------------------------| @@ -258,7 +260,7 @@ The Developer edition continues to support only 1 client for [SQL Server Distrib 1 For more information, see [Considerations for Installing SQL Server Using SysPrep](../database-engine/install-windows/considerations-for-installing-sql-server-using-sysprep.md). -## Development Tools +## Development tools |Feature|Enterprise|Standard|Web|Express with Advanced Services|Express| |-------------|----------------|--------------|---------|------------------------------------|------------------------| @@ -302,7 +304,7 @@ For info about the Integration Services (SSIS) features supported by the edition For information about the [!INCLUDE[ssMDSshort_md](../includes/ssmdsshort-md.md)] and Data Quality Services features supported by the editions of [!INCLUDE[ssNoVersion_md](../includes/ssNoVersion_md.md)], see [Master Data Services and Data Quality Services Features Supported by the Editions of SQL Server](../master-data-services/master-data-services-and-data-quality-services-features-support.md). -## Data Warehouse +## Data warehouse |Feature|Enterprise|Standard|Web|Express with Advanced Services|Express| |-------------|----------------|--------------|---------|------------------------------------|------------------------| @@ -318,11 +320,11 @@ For info about the Integration Services (SSIS) features supported by the edition For information about the Analysis Services features supported by the editions of [!INCLUDE[ssNoVersion_md](../includes/ssNoVersion_md.md)], see [Analysis Services Features Supported by the Editions of SQL Server](../analysis-services/analysis-services-features-supported-by-the-editions-of-sql-server-2016.md). -## BI Semantic Model (Multi Dimensional) +## BI semantic model (Multi Dimensional) For information about the Analysis Services features supported by the editions of [!INCLUDE[ssNoVersion_md](../includes/ssNoVersion_md.md)], see [Analysis Services Features Supported by the Editions of SQL Server](../analysis-services/analysis-services-features-supported-by-the-editions-of-sql-server-2016.md). -## BI Semantic Model (Tabular) +## BI semantic model (Tabular) For information about the Analysis Services features supported by the editions of [!INCLUDE[ssNoVersion_md](../includes/ssNoVersion_md.md)], see [Analysis Services Features Supported by the Editions of SQL Server](../analysis-services/analysis-services-features-supported-by-the-editions-of-sql-server-2016.md). @@ -330,7 +332,7 @@ For information about the Analysis Services features supported by the editions o For information about the Power Pivot for SharePoint features supported by the editions of [!INCLUDE[ssNoVersion_md](../includes/ssNoVersion_md.md)], see [Analysis Services Features Supported by the Editions of SQL Server](../analysis-services/analysis-services-features-supported-by-the-editions-of-sql-server-2016.md). -## Data Mining +## Data mining For information about the Data Mining features supported by the editions of [!INCLUDE[ssNoVersion_md](../includes/ssNoVersion_md.md)], see [Analysis Services Features Supported by the Editions of SQL Server](../analysis-services/analysis-services-features-supported-by-the-editions-of-sql-server-2016.md). @@ -338,11 +340,11 @@ For information about the Data Mining features supported by the editions of [!IN For information about the Reporting Services features supported by the editions of [!INCLUDE[ssNoVersion_md](../includes/ssNoVersion_md.md)], see [Reporting Services Features Supported by the Editions of SQL Server](../reporting-services/reporting-services-features-supported-by-the-editions-of-sql-server-2016.md). -## Business Intelligence Clients +## Business intelligence clients For information about the Business Intelligence Client features supported by the editions of [!INCLUDE[ssNoVersion_md](../includes/ssNoVersion_md.md)], see [Analysis Services Features Supported by the Editions of SQL Server](../analysis-services/analysis-services-features-supported-by-the-editions-of-sql-server-2016.md) or [Reporting Services Features Supported by the Editions of SQL Server](../reporting-services/reporting-services-features-supported-by-the-editions-of-sql-server-2016.md). -## Spatial and Location Services +## Spatial and location services |Feature Name|Enterprise|Standard|Web|Express with Advanced Services|Express| |------------------|----------------|--------------|---------|------------------------------------|------------------------| @@ -351,14 +353,14 @@ For information about the Business Intelligence Client features supported by the |Advanced spatial libraries|Yes|Yes|Yes|Yes|Yes| |Import/export of industry-standard spatial data formats|Yes|Yes|Yes|Yes|Yes| -## Additional Database Services +## Additional database services |Feature Name|Enterprise|Standard|Web|Express with Advanced Services|Express| |------------------|----------------|--------------|---------|------------------------------------|------------------------| |[!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] Migration Assistant|Yes|Yes|Yes|Yes|Yes| |Database mail|Yes|Yes|Yes|No|No| -## Other Components +## Other components |Feature Name|Enterprise|Standard|Web|Express with Advanced Services|Express| |------------------|----------------|--------------|---------|------------------------------------|------------------------| @@ -367,7 +369,7 @@ For information about the Business Intelligence Client features supported by the > [![Download SSMS](../analysis-services/media/download.png)](https://msdn.microsoft.com/library/mt238290.aspx) **[Download the latest version of SQL Server Management Studio](https://msdn.microsoft.com/library/mt238290.aspx)** -## See Also +## Next steps [Product Specifications for SQL Server](http://msdn.microsoft.com/library/6445fd53-6844-4170-a86b-7fe76a9f64cb) [Installation for SQL Server](../database-engine/install-windows/installation-for-sql-server-2016.md) From 95d3726bc522e1863b45afb332efdf8391550ad2 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 27 Jun 2017 08:50:41 -0700 Subject: [PATCH 175/336] Added version to H1 --- docs/sql-server/editions-and-components-of-sql-server-2016.md | 2 +- docs/sql-server/editions-and-components-of-sql-server-2017.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/sql-server/editions-and-components-of-sql-server-2016.md b/docs/sql-server/editions-and-components-of-sql-server-2016.md index 8b24e9594d4..0ccbfadcdd7 100644 --- a/docs/sql-server/editions-and-components-of-sql-server-2016.md +++ b/docs/sql-server/editions-and-components-of-sql-server-2016.md @@ -39,7 +39,7 @@ author: "MikeRayMSFT" ms.author: "mikeray" manager: "jhubbard" --- -# Editions and supported features of SQL Server +# Editions and supported features of SQL Server 2016 [!INCLUDE[tsql-appliesto-ss2016-xxxx-xxxx-xxx_md](../includes/tsql-appliesto-ss2016-xxxx-xxxx-xxx-md.md)] diff --git a/docs/sql-server/editions-and-components-of-sql-server-2017.md b/docs/sql-server/editions-and-components-of-sql-server-2017.md index 4456bc538d3..91793f6bed9 100644 --- a/docs/sql-server/editions-and-components-of-sql-server-2017.md +++ b/docs/sql-server/editions-and-components-of-sql-server-2017.md @@ -40,7 +40,7 @@ author: "MikeRayMSFT" ms.author: "mikeray" manager: "jhubbard" --- -# Editions and supported features of SQL Server +# Editions and supported features of SQL Server 2017 From 0513e218787075d3974984a41253dde7ab0425c1 Mon Sep 17 00:00:00 2001 From: Anna Shrestinian Date: Tue, 27 Jun 2017 09:19:19 -0700 Subject: [PATCH 176/336] Update sql-server-linux-configure-mssql-conf.md --- docs/linux/sql-server-linux-configure-mssql-conf.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-configure-mssql-conf.md b/docs/linux/sql-server-linux-configure-mssql-conf.md index 13a64d92920..a97ca802309 100644 --- a/docs/linux/sql-server-linux-configure-mssql-conf.md +++ b/docs/linux/sql-server-linux-configure-mssql-conf.md @@ -37,7 +37,7 @@ ms.custom: H1Hack27Feb2017 - [High Availability](#hadr): Enable Availability Groups. - [Set traceflags](#traceflags): Set the traceflags that the service is going to use. - [Set collation](#collation): Set a new collation for SQL Server on Linux. -- [Set customer feedback](sql-server-linux-customer-feedback.md): Change if SQL Server sends feedback to Microsoft or not. +- [Set customer feedback](sql-server-linux-customer-feedback.md): Choose whether or not SQL Server sends feedback to Microsoft. - [Set Local Audit directory](sql-server-linux-customer-feedback.md): Set a a directory to add Local Audit files. The following sections show examples of how to use mssql-conf for each of these scenarios. From 5667cb354474779ceea53fc9bcad8caaf2d52f32 Mon Sep 17 00:00:00 2001 From: Anna Shrestinian Date: Tue, 27 Jun 2017 09:23:37 -0700 Subject: [PATCH 177/336] Update sql-server-linux-customer-feedback.md --- docs/linux/sql-server-linux-customer-feedback.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-customer-feedback.md b/docs/linux/sql-server-linux-customer-feedback.md index 06791813cbe..a9a99a6bff6 100644 --- a/docs/linux/sql-server-linux-customer-feedback.md +++ b/docs/linux/sql-server-linux-customer-feedback.md @@ -47,7 +47,7 @@ This option lets you change if SQL Server sends feedback to Microsoft or not. By ```bash sudo /opt/mssql/bin/mssql-conf set customerfeedback false ``` -2. Restart the SQL Server service as instructed by the configuration utility: +2. Restart the SQL Server service: ```bash sudo systemctl restart mssql-server @@ -80,7 +80,7 @@ This option enables Local Audit and lets you set the directory where the Local A ```bash sudo /opt/mssql/bin/mssql-conf set userrequestedlocalauditdirectory /tmp/audit ``` -4. Restart the SQL Server service as instructed by the configuration utility: +4. Restart the SQL Server service: ```bash sudo systemctl restart mssql-server From b14530f6a0c5e9e4ae27682dee880c148fc91116 Mon Sep 17 00:00:00 2001 From: Anna Shrestinian Date: Wed, 28 Jun 2017 09:36:09 -0700 Subject: [PATCH 178/336] Update TOC.md --- docs/linux/TOC.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index 9ae46a68fdd..0969e9e5ddf 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -54,3 +54,4 @@ ## [Get started with security features](sql-server-linux-security-get-started.md) # [Optimize Performance](sql-server-linux-performance-get-started.md) # [Troubleshoot](sql-server-linux-troubleshooting-guide.md) +# [Customer Feedback](sql-server-linux-customer-feedback.md) From 3eb4aae9076a20beee4d7685bbf23ae24bf36a0b Mon Sep 17 00:00:00 2001 From: Anna Shrestinian Date: Wed, 28 Jun 2017 09:37:38 -0700 Subject: [PATCH 179/336] Update sql-server-linux-customer-feedback.md --- docs/linux/sql-server-linux-customer-feedback.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-customer-feedback.md b/docs/linux/sql-server-linux-customer-feedback.md index a9a99a6bff6..9d8122e8648 100644 --- a/docs/linux/sql-server-linux-customer-feedback.md +++ b/docs/linux/sql-server-linux-customer-feedback.md @@ -1,7 +1,7 @@ --- # required metadata -title: Configure RHEL Cluster for SQL Server Availability Group | Microsoft Docs +title: Customer Feedback for SQL Server on Linux | Microsoft Docs description: author: annashres ms.author: anshrest From 5254d80ecd89b5db9f01c34f8c3749dfea13c8e3 Mon Sep 17 00:00:00 2001 From: Carla Sabotta Date: Wed, 28 Jun 2017 15:31:13 -0700 Subject: [PATCH 180/336] created include file and added to quickstart --- docs/includes/create-query-data-md.md | 79 +++++++++++++++++++ .../quickstart-install-connect-ubuntu.md | 76 +----------------- 2 files changed, 80 insertions(+), 75 deletions(-) create mode 100644 docs/includes/create-query-data-md.md diff --git a/docs/includes/create-query-data-md.md b/docs/includes/create-query-data-md.md new file mode 100644 index 00000000000..2845ecd60b7 --- /dev/null +++ b/docs/includes/create-query-data-md.md @@ -0,0 +1,79 @@ +## Create and query data +The following sections walk you through using **sqlcmd** and Transact-SQL to create a new database, add data, and run a simple query. + +### Create a new database + +The following steps create a new database named `TestDB`. + +1. From the **sqlcmd** command prompt, paste the following Transact-SQL command to create a test database: + + ```sql + CREATE DATABASE TestDB + ``` + +1. On the next line, write a query to return the name of all of the databases on your server: + + ```sql + SELECT Name from sys.Databases + ``` + +1. The previous two commands were not executed immediately. You must type `GO` on a new line to execute the previous commands: + + ```sql + GO + ``` + +### Insert data + +Next create a new table, `Inventory`, and insert two new rows. + +1. From the **sqlcmd** command prompt, switch context to the new `TestDB` database: + + ```sql + USE TestDB + ``` + +1. Create new table named `Inventory`: + + ```sql + CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT) + ``` + +1. Insert data into the new table: + + ```sql + INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154); + ``` + +1. Type `GO` to execute the previous commands: + + ```sql + GO + ``` + +### Select data + +Now, run a query to return data from the `Inventory` table. + +1. From the **sqlcmd** commandd prompt, enter a query that returns rows from the `Inventory` table where the quantity is greater than 152: + + ```sql + SELECT * FROM Inventory WHERE quantity > 152; + ``` + +1. Execute the command: + + ```sql + GO + ``` + +### Exit the sqlcmd command prompt + +To end your **sqlcmd** session, type `QUIT`: + +```sql +QUIT +``` + + + diff --git a/docs/linux/quickstart-install-connect-ubuntu.md b/docs/linux/quickstart-install-connect-ubuntu.md index 077e8f11d16..6f314ecdfba 100644 --- a/docs/linux/quickstart-install-connect-ubuntu.md +++ b/docs/linux/quickstart-install-connect-ubuntu.md @@ -115,82 +115,8 @@ The following steps use **sqlcmd** to locally connect to your new SQL Server ins 1. If you get a connection failure, first attempt to diagnose the problem from the error message. Then review the [connection troubleshooting recommendations](sql-server-linux-troubleshooting-guide.md#connection). -## Create and query data -The following sections walk you through using **sqlcmd** and Transact-SQL to create a new database, add data, and run a simple query. +[!INCLUDE [create-query-data-md](../includes/create-query-data-md.md)] -### Create a new database - -The following steps create a new database named `TestDB`. - -1. From the **sqlcmd** command prompt, paste the following Transact-SQL command to create a test database: - - ```sql - CREATE DATABASE TestDB - ``` - -1. On the next line, write a query to return the name of all of the databases on your server: - - ```sql - SELECT Name from sys.Databases - ``` - -1. The previous two commands were not executed immediately. You must type `GO` on a new line to execute the previous commands: - - ```sql - GO - ``` - -### Insert data - -Next create a new table, `Inventory`, and insert two new rows. - -1. From the **sqlcmd** command prompt, switch context to the new `TestDB` database: - - ```sql - USE TestDB - ``` - -1. Create new table named `Inventory`: - - ```sql - CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT) - ``` - -1. Insert data into the new table: - - ```sql - INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154); - ``` - -1. Type `GO` to execute the previous commands: - - ```sql - GO - ``` - -### Select data - -Now, run a query to return data from the `Inventory` table. - -1. From the **sqlcmd** commandd prompt, enter a query that returns rows from the `Inventory` table where the quantity is greater than 152: - - ```sql - SELECT * FROM Inventory WHERE quantity > 152; - ``` - -1. Execute the command: - - ```sql - GO - ``` - -### Exit the sqlcmd command prompt - -To end your **sqlcmd** session, type `QUIT`: - -```sql -QUIT -``` ## Connect from Windows From 6c56f37be0ec5ce0e6b9c9312d09ef725527ae57 Mon Sep 17 00:00:00 2001 From: sabotta Date: Fri, 30 Jun 2017 17:37:53 -0700 Subject: [PATCH 181/336] two new quick start linux articles --- .../quickstart-install-connect-red-hat.md | 169 ++++++++++++++++++ .../quickstart-install-connect-suse-linux.md | 132 ++++++++++++++ 2 files changed, 301 insertions(+) create mode 100644 docs/linux/quickstart-install-connect-red-hat.md create mode 100644 docs/linux/quickstart-install-connect-suse-linux.md diff --git a/docs/linux/quickstart-install-connect-red-hat.md b/docs/linux/quickstart-install-connect-red-hat.md new file mode 100644 index 00000000000..ce858afa353 --- /dev/null +++ b/docs/linux/quickstart-install-connect-red-hat.md @@ -0,0 +1,169 @@ +--- +# required metadata +title: Get started with SQL Server 2017 on Red Hat Enterprise Linux | Microsoft Docs +description: Describes how to install SQL Server 2017 CTP 2.1 on Red Hat Enterprise Linux. +author: sabotta +ms.author: carlasab +manager: craigg +ms.date: 06/30/2017 +ms.topic: article +ms.prod: sql-linux +ms.technology: database-engine +ms.assetid: "" + +# optional metadata + +# keywords: "" +# ROBOTS: "" +# audience: "" +# ms.devlang: "" +# ms.reviewer: "" +# ms.suite: "" +# ms.tgt_pltfrm: "" +# ms.custom: "" + +--- +# Install SQL Server and create a database on Red Hat + +In this quick start tutorial, you first install SQL Server 2017 CTP 2.1 on Red Hat Enterprise Linux (RHEL). Then connect with **sqlcmd** to create your first database and run queries. + +## Prerequisites + +- You must have a Linux machine with at least 3.25GB of memory. +- For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). + + +## Install SQL Server + +To install the **mssql-server** package on RHEL, follow these steps: + +1. Enter superuser mode. + + ```bash + sudo su + ``` + +2. Download the Microsoft SQL Server Red Hat repository configuration file: + + ```bash + curl https://packages.microsoft.com/config/rhel/7/mssql-server.repo > /etc/yum.repos.d/mssql-server.repo + ``` + +3. Exit superuser mode. + + ```bash + exit + ``` + +4. Run the following commands to install SQL Server: + + ```bash + sudo yum install -y mssql-server + ``` + +5. After the package installation finishes, run **mssql-conf setup** and follow the prompts. Make sure to specify a strong password for the SA account (Minimum length 8 characters, including uppercase and lowercase letters, base 10 digits and/or non-alphanumeric symbols). + + ```bash + sudo /opt/mssql/bin/mssql-conf setup + ``` + +6. Once the configuration is done, verify that the service is running: + + ```bash + systemctl status mssql-server + ``` + +7. To allow remote connections, open the SQL Server port on the firewall on RHEL. The default SQL Server port is TCP 1433. If you are using **FirewallD** for your firewall, you can use the following commands: + + ```bash + sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent + sudo firewall-cmd --reload + ``` + + +## Install the SQL Server command-line tools +To create a database, you need to connect with a tool that can run Transact-SQL statements on SQL Server. The following steps install the **mssql-tools** on Red Hat Enterprise Linux. + + +1. Enter superuser mode. + + ```bash + sudo su + ``` + +1. Download the Microsoft Red Hat repository configuration file. + + ```bash + curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/msprod.repo + ``` + +1. Exit superuser mode. + + ```bash + exit + ``` + +1. If you had a previous version of **mssql-tools** installed, remove any older unixODBC packages. + + ```bash + sudo yum update + sudo yum remove unixODBC-utf16 unixODBC-utf16-devel + ``` + +1. Run the following commands to install **mssql-tools** with the unixODBC developer package. + + ```bash + sudo yum update + sudo yum install mssql-tools unixODBC-devel + ``` + + > [!Note] + > To update to the latest version of **mssql-tools** run the following commands: + > ```bash + > sudo yum check-update + > sudo yum update mssql-tools + > ``` + +1. For convenience, add `/opt/mssql-tools/bin/` to your **PATH** environment variable in a bash shell. + + To make **sqlcmd/bcp** accessible from the bash shell for login sessions, modify your **PATH** in the **~/.bash_profile** file with the following command: + + ```bash + echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile + ``` + + To make **sqlcmd/bcp** accessible from the bash shell for interactive/non-login sessions, modify the **PATH** in the **~/.bashrc** file with the following command: + + ```bash + echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc + source ~/.bashrc + ``` + +## Connect locally +The following steps use **sqlcmd** to locally connect to your new SQL Server instance. + +1. Run **sqlcmd** with parameters for your SQL Server name (-S), the user name (-U), and the password (-P). In this tutorial, you are connecting locally, so the server name is `localhost`. The user name is `SA` and the password is the one you provided for the SA account during setup. + + ```bash + sqlcmd -S localhost -U SA -P '' + ``` + + > [!TIP] + > You can omit the password on the command-line to be prompted to enter it. + + > [!TIP] + > If you later decide to connect remotely, specify the machine name or IP address for the **-S** parameter, and make sure port 1433 is open on your firewall. + +1. If successful, you should get to a **sqlcmd** command prompt: `1>`. + +1. If you get a connection failure, first attempt to diagnose the problem from the error message. Then review the [connection troubleshooting recommendations](sql-server-linux-troubleshooting-guide.md#connection). + +[!INCLUDE [create-query-data-md](../includes/create-query-data-md.md)] + + +## Next steps + +If you're new to T-SQL, see [Tutorial: Writing Transact-SQL Statements](https://msdn.microsoft.com/library/ms365303.aspx) and the [Transact-SQL Reference (Database Engine)](https://msdn.microsoft.com/library/bb510741.aspx). + +To explore other ways to connect and manage SQL Server, see [Visusal Studio Code](sql-server-linux-develop-use-vscode.md) and [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md). + diff --git a/docs/linux/quickstart-install-connect-suse-linux.md b/docs/linux/quickstart-install-connect-suse-linux.md new file mode 100644 index 00000000000..0825091c9a9 --- /dev/null +++ b/docs/linux/quickstart-install-connect-suse-linux.md @@ -0,0 +1,132 @@ +--- +# required metadata +title: Install SQL Server on SUSE Linux Enterprise Server | Microsoft Docs +description: Describes how to install SQL Server 2017 CTP 2.1 on SUSE Linux Enterprise Server. +author: sabotta +ms.author: carlasab +manager: craigg +ms.date: 06/30/2017 +ms.topic: article +ms.prod: sql-linux +ms.technology: database-engine +ms.assetid: "" + +# optional metadata + +# keywords: "" +# ROBOTS: "" +# audience: "" +# ms.devlang: "" +# ms.reviewer: "" +# ms.suite: "" +# ms.tgt_pltfrm: "" +# ms.custom: "" + +--- +# Install SQL Server and create a database on SUSE Linux Enterprise Server + +In this quick start tutorial, you first install SQL Server 2017 CTP 2.1 on SUSE Linux Enterprise Server (SLES) v12 SP2. Then connect with **sqlcmd** to create your first database and run queries. + +## Prerequisites +- You need at least 3.25GB of memory to run SQL Server on Linux. +- The file system must be **XFS** or **EXT4**. Other file systems, such as **BTRFS**, are unsupported. +- For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). + + +## Install SQL Server +To install the **mssql-server** package on SLES, follow these steps: + +1. Download the Microsoft SQL Server SLES repository configuration file: + + ```bash + sudo zypper addrepo -fc https://packages.microsoft.com/config/sles/12/mssql-server.repo + + sudo zypper --gpg-auto-import-keys refresh + ``` + +2. Run the following commands to install SQL Server: + + ```bash + sudo zypper install mssql-server + ``` + +3. After the package installation finishes, run **mssql-conf setup** and follow the prompts. Make sure to specify a strong password for the SA account (Minimum length 8 characters, including uppercase and lowercase letters, base 10 digits and/or non-alphanumeric symbols). + + ```bash + sudo /opt/mssql/bin/mssql-conf setup + ``` + +4. Once the configuration is done, verify that the service is running: + + ```bash + systemctl status mssql-server + ``` + +5. To allow remote connections, you may need to open the SQL Server TCP port on your firewall. The default SQL Server port is 1433. + +## Install the SQL Server command-line tools +To create a database, you need to connect with a tool that can run Transact-SQL statements on the SQL Server. The following steps install the **mssql-tools** on SUSE Linux Enterprise Server. + +1. Add the Microsoft SQL Server repository to Zypper. + + ```bash + sudo zypper addrepo -fc https://packages.microsoft.com/config/sles/12/prod.repo + sudo zypper --gpg-auto-import-keys refresh + ``` + +1. Install **mssql-tools** with the unixODBC developer package. + + ```bash + sudo zypper install mssql-tools unixODBC-devel + ``` + + > [!Note] + > To update to the latest version of **mssql-tools** run the following commands: + > ```bash + > sudo zypper refresh + > sudo zypper update mssql-tools + > ``` + +1. For convenience, add `/opt/mssql-tools/bin/` to your **PATH** environment variable in a bash shell. + + To make **sqlcmd/bcp** accessible from the bash shell for login sessions, modify your **PATH** in the **~/.bash_profile** file with the following command: + + ```bash + echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile + ``` + + To make **sqlcmd/bcp** accessible from the bash shell for interactive/non-login sessions, modify the **PATH** in the **~/.bashrc** file with the following command: + + ```bash + echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc + source ~/.bashrc + ``` + +## Connect locally +The following steps use **sqlcmd** to locally connect to your new SQL Server instance. + +1. Run **sqlcmd** with parameters for your SQL Server name (-S), the user name (-U), and the password (-P). In this tutorial, you are connecting locally, so the server name is `localhost`. The user name is `SA` and the password is the one you provided for the SA account during setup. + + ```bash + sqlcmd -S localhost -U SA -P '' + ``` + + > [!TIP] + > You can omit the password on the command-line to be prompted to enter it. + + > [!TIP] + > If you later decide to connect remotely, specify the machine name or IP address for the **-S** parameter, and make sure port 1433 is open on your firewall. + +1. If successful, you should get to a **sqlcmd** command prompt: `1>`. + +1. If you get a connection failure, first attempt to diagnose the problem from the error message. Then review the [connection troubleshooting recommendations](sql-server-linux-troubleshooting-guide.md#connection). + +[!INCLUDE [create-query-data-md](../includes/create-query-data-md.md)] + + +## Next steps + +If you're new to T-SQL, see [Tutorial: Writing Transact-SQL Statements](https://msdn.microsoft.com/library/ms365303.aspx) and the [Transact-SQL Reference (Database Engine)](https://msdn.microsoft.com/library/bb510741.aspx). + +To explore other ways to connect and manage SQL Server, see [Visusal Studio Code](sql-server-linux-develop-use-vscode.md) and [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md). + From bd1d2933f1376fe3ff97cab4be72088d2f673004 Mon Sep 17 00:00:00 2001 From: Sabotta Date: Fri, 30 Jun 2017 17:53:35 -0700 Subject: [PATCH 182/336] Update quickstart-install-connect-suse-linux.md --- docs/linux/quickstart-install-connect-suse-linux.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/quickstart-install-connect-suse-linux.md b/docs/linux/quickstart-install-connect-suse-linux.md index 0825091c9a9..f41ea034dfd 100644 --- a/docs/linux/quickstart-install-connect-suse-linux.md +++ b/docs/linux/quickstart-install-connect-suse-linux.md @@ -1,6 +1,6 @@ --- # required metadata -title: Install SQL Server on SUSE Linux Enterprise Server | Microsoft Docs +title: Get started with SQL Server 2017 on SUSE Linux Enterprise Server | Microsoft Docs description: Describes how to install SQL Server 2017 CTP 2.1 on SUSE Linux Enterprise Server. author: sabotta ms.author: carlasab From 7e5f841c455f381c4eb3809c375adb09c14373e7 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Mon, 3 Jul 2017 16:01:32 -0400 Subject: [PATCH 183/336] Updating TOC and include file for quickstarts --- docs/includes/create-query-data-md.md | 79 ------------ .../sql-linux-quickstart-connect-query.md | 113 ++++++++++++++++++ docs/linux/TOC.md | 4 +- .../quickstart-install-connect-red-hat.md | 31 +---- ....md => quickstart-install-connect-suse.md} | 31 +---- .../quickstart-install-connect-ubuntu.md | 42 +------ 6 files changed, 121 insertions(+), 179 deletions(-) delete mode 100644 docs/includes/create-query-data-md.md create mode 100644 docs/includes/sql-linux-quickstart-connect-query.md rename docs/linux/{quickstart-install-connect-suse-linux.md => quickstart-install-connect-suse.md} (69%) diff --git a/docs/includes/create-query-data-md.md b/docs/includes/create-query-data-md.md deleted file mode 100644 index 2845ecd60b7..00000000000 --- a/docs/includes/create-query-data-md.md +++ /dev/null @@ -1,79 +0,0 @@ -## Create and query data -The following sections walk you through using **sqlcmd** and Transact-SQL to create a new database, add data, and run a simple query. - -### Create a new database - -The following steps create a new database named `TestDB`. - -1. From the **sqlcmd** command prompt, paste the following Transact-SQL command to create a test database: - - ```sql - CREATE DATABASE TestDB - ``` - -1. On the next line, write a query to return the name of all of the databases on your server: - - ```sql - SELECT Name from sys.Databases - ``` - -1. The previous two commands were not executed immediately. You must type `GO` on a new line to execute the previous commands: - - ```sql - GO - ``` - -### Insert data - -Next create a new table, `Inventory`, and insert two new rows. - -1. From the **sqlcmd** command prompt, switch context to the new `TestDB` database: - - ```sql - USE TestDB - ``` - -1. Create new table named `Inventory`: - - ```sql - CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT) - ``` - -1. Insert data into the new table: - - ```sql - INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154); - ``` - -1. Type `GO` to execute the previous commands: - - ```sql - GO - ``` - -### Select data - -Now, run a query to return data from the `Inventory` table. - -1. From the **sqlcmd** commandd prompt, enter a query that returns rows from the `Inventory` table where the quantity is greater than 152: - - ```sql - SELECT * FROM Inventory WHERE quantity > 152; - ``` - -1. Execute the command: - - ```sql - GO - ``` - -### Exit the sqlcmd command prompt - -To end your **sqlcmd** session, type `QUIT`: - -```sql -QUIT -``` - - - diff --git a/docs/includes/sql-linux-quickstart-connect-query.md b/docs/includes/sql-linux-quickstart-connect-query.md new file mode 100644 index 00000000000..b9e7f6a1271 --- /dev/null +++ b/docs/includes/sql-linux-quickstart-connect-query.md @@ -0,0 +1,113 @@ +## Connect locally + +The following steps use **sqlcmd** to locally connect to your new SQL Server instance. + +1. Run **sqlcmd** with parameters for your SQL Server name (-S), the user name (-U), and the password (-P). In this tutorial, you are connecting locally, so the server name is `localhost`. The user name is `SA` and the password is the one you provided for the SA account during setup. + + ```bash + sqlcmd -S localhost -U SA -P '' + ``` + + > [!TIP] + > You can omit the password on the command-line to be prompted to enter it. + + > [!TIP] + > If you later decide to connect remotely, specify the machine name or IP address for the **-S** parameter, and make sure port 1433 is open on your firewall. + +1. If successful, you should get to a **sqlcmd** command prompt: `1>`. + +1. If you get a connection failure, first attempt to diagnose the problem from the error message. Then review the [connection troubleshooting recommendations](sql-server-linux-troubleshooting-guide.md#connection). + +## Create and query data +The following sections walk you through using **sqlcmd** and Transact-SQL to create a new database, add data, and run a simple query. + +### Create a new database + +The following steps create a new database named `TestDB`. + +1. From the **sqlcmd** command prompt, paste the following Transact-SQL command to create a test database: + + ```sql + CREATE DATABASE TestDB + ``` + +1. On the next line, write a query to return the name of all of the databases on your server: + + ```sql + SELECT Name from sys.Databases + ``` + +1. The previous two commands were not executed immediately. You must type `GO` on a new line to execute the previous commands: + + ```sql + GO + ``` + +### Insert data + +Next create a new table, `Inventory`, and insert two new rows. + +1. From the **sqlcmd** command prompt, switch context to the new `TestDB` database: + + ```sql + USE TestDB + ``` + +1. Create new table named `Inventory`: + + ```sql + CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT) + ``` + +1. Insert data into the new table: + + ```sql + INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154); + ``` + +1. Type `GO` to execute the previous commands: + + ```sql + GO + ``` + +### Select data + +Now, run a query to return data from the `Inventory` table. + +1. From the **sqlcmd** commandd prompt, enter a query that returns rows from the `Inventory` table where the quantity is greater than 152: + + ```sql + SELECT * FROM Inventory WHERE quantity > 152; + ``` + +1. Execute the command: + + ```sql + GO + ``` + +### Exit the sqlcmd command prompt + +To end your **sqlcmd** session, type `QUIT`: + +```sql +QUIT +``` + +## Connect from Windows + +It is important to note that SQL Server tools on Windows connect to SQL Server instances on Linux in the same way they would connect to any remote SQL Server instance. + +If you have a Windows machine that can connect to your Linux machine, try the same steps in this topic from a Windows command-prompt running **sqlcmd**. Just verify that you use the target Linux machine name or IP address rather than localhost, and make sure that TCP port 1433 is open. If you have any problems connecting from Windows, see [connection troubleshooting recommendations](sql-server-linux-troubleshooting-guide.md#connection). + +For other tools that run on Windows but connect to SQL Server on Linux, see: +- [SQL Server Management Studio (SSMS)](sql-server-linux-develop-use-ssms.md) +- [Windows PowerShell](sql-server-linux-manage-powershell.md) +- [SQL Server Data Tools (SSDT)](sql-server-linux-develop-use-ssdt.md) + +## Next Steps + +If you're new to T-SQL, see [Tutorial: Writing Transact-SQL Statements](https://msdn.microsoft.com/library/ms365303.aspx) and the [Transact-SQL Reference (Database Engine)](https://msdn.microsoft.com/library/bb510741.aspx). + +To explore other ways to connect and manage SQL Server, see [Visusal Studio Code](sql-server-linux-develop-use-vscode.md) and [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md). \ No newline at end of file diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index a1b554e295e..3d7fe5e8cd4 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -3,8 +3,8 @@ ## [Release notes](sql-server-linux-release-notes.md) ## [What's new in this release?](sql-server-linux-whats-new.md) # Quickstarts -## Install - Red Hat -## Install - SUSE +## [Install - Red Hat](quickstart-install-connect-red-hat.md) +## [Install - SUSE](quickstart-install-connect-suse.md) ## [Install - Ubuntu](quickstart-install-connect-ubuntu.md) ## Install - Docker # Tutorials diff --git a/docs/linux/quickstart-install-connect-red-hat.md b/docs/linux/quickstart-install-connect-red-hat.md index ce858afa353..18d65f90ee7 100644 --- a/docs/linux/quickstart-install-connect-red-hat.md +++ b/docs/linux/quickstart-install-connect-red-hat.md @@ -5,7 +5,7 @@ description: Describes how to install SQL Server 2017 CTP 2.1 on Red Hat Enterpr author: sabotta ms.author: carlasab manager: craigg -ms.date: 06/30/2017 +ms.date: 07/19/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -139,31 +139,4 @@ To create a database, you need to connect with a tool that can run Transact-SQL source ~/.bashrc ``` -## Connect locally -The following steps use **sqlcmd** to locally connect to your new SQL Server instance. - -1. Run **sqlcmd** with parameters for your SQL Server name (-S), the user name (-U), and the password (-P). In this tutorial, you are connecting locally, so the server name is `localhost`. The user name is `SA` and the password is the one you provided for the SA account during setup. - - ```bash - sqlcmd -S localhost -U SA -P '' - ``` - - > [!TIP] - > You can omit the password on the command-line to be prompted to enter it. - - > [!TIP] - > If you later decide to connect remotely, specify the machine name or IP address for the **-S** parameter, and make sure port 1433 is open on your firewall. - -1. If successful, you should get to a **sqlcmd** command prompt: `1>`. - -1. If you get a connection failure, first attempt to diagnose the problem from the error message. Then review the [connection troubleshooting recommendations](sql-server-linux-troubleshooting-guide.md#connection). - -[!INCLUDE [create-query-data-md](../includes/create-query-data-md.md)] - - -## Next steps - -If you're new to T-SQL, see [Tutorial: Writing Transact-SQL Statements](https://msdn.microsoft.com/library/ms365303.aspx) and the [Transact-SQL Reference (Database Engine)](https://msdn.microsoft.com/library/bb510741.aspx). - -To explore other ways to connect and manage SQL Server, see [Visusal Studio Code](sql-server-linux-develop-use-vscode.md) and [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md). - +[!INCLUDE [create-query-data-md](../includes/sql-linux-quickstart-connect-query.md)] diff --git a/docs/linux/quickstart-install-connect-suse-linux.md b/docs/linux/quickstart-install-connect-suse.md similarity index 69% rename from docs/linux/quickstart-install-connect-suse-linux.md rename to docs/linux/quickstart-install-connect-suse.md index f41ea034dfd..6297f235073 100644 --- a/docs/linux/quickstart-install-connect-suse-linux.md +++ b/docs/linux/quickstart-install-connect-suse.md @@ -5,7 +5,7 @@ description: Describes how to install SQL Server 2017 CTP 2.1 on SUSE Linux Ente author: sabotta ms.author: carlasab manager: craigg -ms.date: 06/30/2017 +ms.date: 07/19/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -102,31 +102,4 @@ To create a database, you need to connect with a tool that can run Transact-SQL source ~/.bashrc ``` -## Connect locally -The following steps use **sqlcmd** to locally connect to your new SQL Server instance. - -1. Run **sqlcmd** with parameters for your SQL Server name (-S), the user name (-U), and the password (-P). In this tutorial, you are connecting locally, so the server name is `localhost`. The user name is `SA` and the password is the one you provided for the SA account during setup. - - ```bash - sqlcmd -S localhost -U SA -P '' - ``` - - > [!TIP] - > You can omit the password on the command-line to be prompted to enter it. - - > [!TIP] - > If you later decide to connect remotely, specify the machine name or IP address for the **-S** parameter, and make sure port 1433 is open on your firewall. - -1. If successful, you should get to a **sqlcmd** command prompt: `1>`. - -1. If you get a connection failure, first attempt to diagnose the problem from the error message. Then review the [connection troubleshooting recommendations](sql-server-linux-troubleshooting-guide.md#connection). - -[!INCLUDE [create-query-data-md](../includes/create-query-data-md.md)] - - -## Next steps - -If you're new to T-SQL, see [Tutorial: Writing Transact-SQL Statements](https://msdn.microsoft.com/library/ms365303.aspx) and the [Transact-SQL Reference (Database Engine)](https://msdn.microsoft.com/library/bb510741.aspx). - -To explore other ways to connect and manage SQL Server, see [Visusal Studio Code](sql-server-linux-develop-use-vscode.md) and [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md). - +[!INCLUDE [create-query-data-md](../includes/sql-linux-quickstart-connect-query.md)] diff --git a/docs/linux/quickstart-install-connect-ubuntu.md b/docs/linux/quickstart-install-connect-ubuntu.md index 6f314ecdfba..4cacfb7c56a 100644 --- a/docs/linux/quickstart-install-connect-ubuntu.md +++ b/docs/linux/quickstart-install-connect-ubuntu.md @@ -4,7 +4,7 @@ description: This quick start tutorial shows how to install SQL Server on Ubuntu author: rothja ms.author: jroth manager: jhubbard -ms.date: 06/19/2017 +ms.date: 07/19/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -95,42 +95,4 @@ To create a database, you need to connect with a tool that can run Transact-SQL > [!TIP] > **Sqlcmd** is just one tool for connecting to SQL Server to run queries and perform management and development tasks. Other tools include [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md) and [Visusal Studio Code](sql-server-linux-develop-use-vscode.md). -## Connect locally - -The following steps use **sqlcmd** to locally connect to your new SQL Server instance. - -1. Run **sqlcmd** with parameters for your SQL Server name (-S), the user name (-U), and the password (-P). In this tutorial, you are connecting locally, so the server name is `localhost`. The user name is `SA` and the password is the one you provided for the SA account during setup. - - ```bash - sqlcmd -S localhost -U SA -P '' - ``` - - > [!TIP] - > You can omit the password on the command-line to be prompted to enter it. - - > [!TIP] - > If you later decide to connect remotely, specify the machine name or IP address for the **-S** parameter, and make sure port 1433 is open on your firewall. - -1. If successful, you should get to a **sqlcmd** command prompt: `1>`. - -1. If you get a connection failure, first attempt to diagnose the problem from the error message. Then review the [connection troubleshooting recommendations](sql-server-linux-troubleshooting-guide.md#connection). - -[!INCLUDE [create-query-data-md](../includes/create-query-data-md.md)] - - -## Connect from Windows - -It is important to note that SQL Server tools on Windows connect to SQL Server instances on Linux in the same way they would connect to any remote SQL Server instance. - -If you have a Windows machine that can connect to your Linux machine, try the same steps in this topic from a Windows command-prompt running **sqlcmd**. Just verify that you use the target Linux machine name or IP address rather than localhost, and make sure that TCP port 1433 is open. If you have any problems connecting from Windows, see [connection troubleshooting recommendations](sql-server-linux-troubleshooting-guide.md#connection). - -For other tools that run on Windows but connect to SQL Server on Linux, see: -- [SQL Server Management Studio (SSMS)](sql-server-linux-develop-use-ssms.md) -- [Windows PowerShell](sql-server-linux-manage-powershell.md) -- [SQL Server Data Tools (SSDT)](sql-server-linux-develop-use-ssdt.md) - -## Next Steps - -If you're new to T-SQL, see [Tutorial: Writing Transact-SQL Statements](https://msdn.microsoft.com/library/ms365303.aspx) and the [Transact-SQL Reference (Database Engine)](https://msdn.microsoft.com/library/bb510741.aspx). - -To explore other ways to connect and manage SQL Server, see [Visusal Studio Code](sql-server-linux-develop-use-vscode.md) and [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md). +[!INCLUDE [create-query-data-md](../includes/sql-linux-quickstart-connect-query.md)] From 96110ec9676420a766211c269965c3bad9623dff Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Mon, 3 Jul 2017 16:22:03 -0400 Subject: [PATCH 184/336] Fixing broken links --- .../sql-linux-quickstart-connect-query.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/includes/sql-linux-quickstart-connect-query.md b/docs/includes/sql-linux-quickstart-connect-query.md index b9e7f6a1271..7a5b8b1c75e 100644 --- a/docs/includes/sql-linux-quickstart-connect-query.md +++ b/docs/includes/sql-linux-quickstart-connect-query.md @@ -16,7 +16,7 @@ The following steps use **sqlcmd** to locally connect to your new SQL Server ins 1. If successful, you should get to a **sqlcmd** command prompt: `1>`. -1. If you get a connection failure, first attempt to diagnose the problem from the error message. Then review the [connection troubleshooting recommendations](sql-server-linux-troubleshooting-guide.md#connection). +1. If you get a connection failure, first attempt to diagnose the problem from the error message. Then review the [connection troubleshooting recommendations](../linux/sql-server-linux-troubleshooting-guide.md#connection). ## Create and query data The following sections walk you through using **sqlcmd** and Transact-SQL to create a new database, add data, and run a simple query. @@ -99,15 +99,16 @@ QUIT It is important to note that SQL Server tools on Windows connect to SQL Server instances on Linux in the same way they would connect to any remote SQL Server instance. -If you have a Windows machine that can connect to your Linux machine, try the same steps in this topic from a Windows command-prompt running **sqlcmd**. Just verify that you use the target Linux machine name or IP address rather than localhost, and make sure that TCP port 1433 is open. If you have any problems connecting from Windows, see [connection troubleshooting recommendations](sql-server-linux-troubleshooting-guide.md#connection). +If you have a Windows machine that can connect to your Linux machine, try the same steps in this topic from a Windows command-prompt running **sqlcmd**. Just verify that you use the target Linux machine name or IP address rather than localhost, and make sure that TCP port 1433 is open. If you have any problems connecting from Windows, see [connection troubleshooting recommendations](../linux/sql-server-linux-troubleshooting-guide.md#connection). For other tools that run on Windows but connect to SQL Server on Linux, see: -- [SQL Server Management Studio (SSMS)](sql-server-linux-develop-use-ssms.md) -- [Windows PowerShell](sql-server-linux-manage-powershell.md) -- [SQL Server Data Tools (SSDT)](sql-server-linux-develop-use-ssdt.md) + +- [SQL Server Management Studio (SSMS)](../linux/sql-server-linux-develop-use-ssms.md) +- [Windows PowerShell](../linux/sql-server-linux-manage-powershell.md) +- [SQL Server Data Tools (SSDT)](../linux/sql-server-linux-develop-use-ssdt.md) ## Next Steps -If you're new to T-SQL, see [Tutorial: Writing Transact-SQL Statements](https://msdn.microsoft.com/library/ms365303.aspx) and the [Transact-SQL Reference (Database Engine)](https://msdn.microsoft.com/library/bb510741.aspx). +If you're new to T-SQL, see [Tutorial: Writing Transact-SQL Statements](../t-sql/tutorial-writing-transact-sql-statements.md) and the [Transact-SQL Reference (Database Engine)](../t-sql/language-reference.md). -To explore other ways to connect and manage SQL Server, see [Visusal Studio Code](sql-server-linux-develop-use-vscode.md) and [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md). \ No newline at end of file +To explore other ways to connect and manage SQL Server, see [Visusal Studio Code](../linux/sql-server-linux-develop-use-vscode.md) and [SQL Server Management Studio](../linux/sql-server-linux-develop-use-ssms.md). \ No newline at end of file From 406fd20b08ee470e47eabe32cef6b9eef8ead2ab Mon Sep 17 00:00:00 2001 From: Tommy Mullaney Date: Mon, 3 Jul 2017 14:49:49 -0700 Subject: [PATCH 185/336] Add revisions from private preview customer feedback --- ...r-linux-active-directory-authentication.md | 114 ++++++++++++++---- 1 file changed, 93 insertions(+), 21 deletions(-) diff --git a/docs/linux/sql-server-linux-active-directory-authentication.md b/docs/linux/sql-server-linux-active-directory-authentication.md index ee3d8b6d4ed..14d564409e7 100644 --- a/docs/linux/sql-server-linux-active-directory-authentication.md +++ b/docs/linux/sql-server-linux-active-directory-authentication.md @@ -38,34 +38,78 @@ Before you configure AD Authentication, you need to: Numerous tools exist to help you join the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host machine to your AD domain. This walkthrough uses [realmd](https://www.freedesktop.org/software/realmd/docs/guide-active-directory-join.html), a popular open source package. If you haven't already, install both the **realmd** and Kerberos client packages on the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host machine using your Linux distribution's package manager: ```bash # RHEL -sudo yum install realmd -sudo yum install krb5-workstation +sudo yum install realmd krb5-workstation # SUSE -sudo zypper install realmd -sudo zypper install krb5-client +sudo zypper install realmd krb5-client # Ubuntu -sudo apt-get install realmd -sudo apt-get install krb5-user +sudo apt-get install realmd krb5-user ``` If the Kerberos client package installation prompts you for a realm name, enter your domain name in uppercase. -Run the following command to verify that the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host machine is configured to use the AD domain controller for DNS. For the rest of this walkthrough, you should replace "contoso.com" and "CONTOSO.COM" with your own domain. + +> [!NOTE] +> This walkthrough uses "contoso.com" and "CONTOSO.COM" as example domain and realm names, respectively. You should replace these with your own values. These commands are case-sensitive, so make sure you use uppercase wherever it is used in this walkthrough. + +Run the following command to verify that the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host machine is configured to use the AD domain controller for as a DNS nameserver: ```bash sudo realm discover contoso.com -v ``` -If no domains are found, you need to configure your machine to use your AD domain controller as a DNS nameserver. Make sure that your `/etc/resolv.conf` file contains a line like the following: +If your domain is not found, you need to configure your [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host machine to use your AD domain controller's IP address as a DNS nameserver. The specific steps to do this depend on your network device configuration, domain configuration, and Linux distribution. Here are some example approaches. + +### Example DNS configuration: Ubuntu +Edit the `/etc/network/interfaces` file so that your AD domain controller's IP address is listed as a dns-nameserver. For example: + +```/etc/network/interfaces +<...> +# The primary network interface +auth eth0 +iface eth0 inet dhcp +dns-nameservers **** +dns-search **** +``` +After editing this file, restart the network service: +```bash +sudo ifdown eth0 && sudo ifup eth0 +``` +Now check that your `/etc/resolv.conf` file contains a line like the following: ```Code -nameserver **** +nameserver **** ``` -Next, join the domain. You'll need to authenticate using an AD account that has sufficient privileges in AD to join a new machine to the domain: + +### Example DNS configuration: RHEL +Edit the `/etc/sysconfig/network-scripts/ifcfg-eth0` file (or other interface config file as appropriate) so that your AD domain controller's IP address is listed as a DNS server: + + ```/etc/sysconfig/network-scripts/ifcfg-eth0 +<...> +PEERDNS=no +DNS1=**** +``` +After editing this file, restart the network service: +```bash +sudo systemctl restart network +``` +Now check that your `/etc/resolv.conf` file contains a line like the following: +```Code +nameserver **** +``` + +### Join the domain +Once you've confirmed that your DNS is configured properly, join the domain by running the command below. You'll need to authenticate using an AD account that has sufficient privileges in AD to join a new machine to the domain. +Specifically, this command will create a new computer account in AD, create the `/etc/krb5.keytab` host keytab file, and configure the domain in `/etc/sssd/sssd.conf`: ```bash sudo realm join contoso.com -U 'user@CONTOSO.COM' -v - +<...> * Successfully enrolled machine in realm ``` -Specifically, this command creates a new computer account in AD, create the `/etc/krb5.keytab` host keytab file, and configure the domain in `/etc/sssd/sssd.conf`. If you see an error, "Necessary packages are not installed," then you should install those packages using your Linux distro's package manager before running the realm join command again. + +> [!NOTE] +> If you see an error, "Necessary packages are not installed," then you should install those packages using your Linux distro's package manager before running the `realm join` command again. +> +> If you receive an error, "Insufficient permissions to join the domain," then you will need to check with a domain administrator that you have sufficient permissions to join Linux machines to your domain. + + Verify that you can now gather information about a user from the domain, and that you can acquire a Kerberos ticket as that user: ```bash id user@contoso.com @@ -77,33 +121,63 @@ Password for user@CONTOSO.COM: klist Ticket cache: FILE:/tmp/krb5cc_1000 Default principal: user@CONTOSO.COM - +<...> ``` + +> [!NOTE] +> If `id user@contoso.com` returns, "No such user," make sure that the SSSD service started successfully by running the command `sudo systemctl status sssd`. If the service is running and you still see the "No such user" error, try enabling verbose logging for SSSD. For more information, see the Red Hat documentation for [Troubleshooting SSSD](https://access.redhat.com/documentation/Red_Hat_Enterprise_Linux/7/html/System-Level_Authentication_Guide/trouble.html#SSSD-Troubleshooting). +> +> If `kinit user@CONTOSO.COM` returns, "KDC reply did not match expectations while getting initial credentials," make sure you specified the realm in uppercase. + For more information, see the Red Hat documentation for [Discovering and Joining Identity Domains](https://access.redhat.com/documentation/Red_Hat_Enterprise_Linux/7/html/Windows_Integration_Guide/realmd-domain.html). ## Step 2: Create AD user for [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] and set SPN -On your domain controller, run the [New-ADUser](https://technet.microsoft.com/library/ee617253.aspx) PowerShell command to create a new AD user with a password that never expires. You will be prompted to enter a new password for the account: +On your domain controller, run the [New-ADUser](https://technet.microsoft.com/library/ee617253.aspx) PowerShell command to create a new AD user with a password that never expires. This example names the account "mssql," but the account name can be anything you like. You will be prompted to enter a new password for the account: ```PowerShell +Import-Module ActiveDirectory + New-ADUser mssql -AccountPassword (Read-Host -AsSecureString "Enter Password") -PasswordNeverExpires $true -Enabled $true ``` -Now set the ServicePrincipalName (SPN) for this account using the `setspn.exe` tool. The SPN must be formatted exactly as specified in the following example: You can find the fully qualified domain name of the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host machine by running hostname `--fqdn` on the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host, and the TCP port should be 1433 unless you have configured [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] to use a different port number. + +> [!NOTE] +> It is a security best practice to have a dedicated AD account for SQL Server, so that SQL Server's credentials aren't shared with other services using the same account. However, you can reuse an existing AD account if you prefer, if you know the account's password (required to generate a keytab file in the next step). + +Now set the ServicePrincipalName (SPN) for this account using the `setspn.exe` tool. The SPN must be formatted exactly as specified in the following example: You can find the fully qualified domain name of the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host machine by running `hostname --all-fqdns` on the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host, and the TCP port should be 1433 unless you have configured [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] to use a different port number. ```PowerShell setspn -A MSSQLSvc/****:**** mssql ``` + +> [!NOTE] +> If you receive an error, "Insufficient access rights," then you need to check with a domain administrator that you have sufficient permissions to set an SPN on this account. +> +> If you change the TCP port in the future, then you will need to run the setspn command again with the new port number. You will also need to add the new SPN to the SQL Server service keytab by following the steps in the next section. + For more information, see [Register a Service Principal Name for Kerberos Connections](/sql/database-engine/configure-windows/register-a-service-principal-name-for-kerberos-connections.md). ## Step 3: Configure [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] service keytab -On the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host machine, create a keytab file for the AD user you just created. The `addent` command prompts you for a password. Enter the same password you used to create the AD user for [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)]. +First, check the Key Version Number (kvno) for the AD account created in the previous step. Usually it will be 2, but it could be another integer if you changed the account's password multiple times. On the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host machine, run the following: + +```bash +kinit user@CONTOSO.COM + +kvno MSSQLSvc/****:**** +``` + +Now create a keytab file for the AD user you created in the previous step. When prompted, enter the password for that AD account. ```bash sudo ktutil -ktutil: addent -password -p MSSQLSvc/****:****@CONTOSO.COM -k 2 -e aes256-cts-hmac-sha1-96 +ktutil: addent -password -p MSSQLSvc/****:****@CONTOSO.COM -k **** -e aes256-cts-hmac-sha1-96 + +ktutil: addent -password -p MSSQLSvc/****:****@CONTOSO.COM -k **** -e rc4-hmac + ktutil: wkt /var/opt/mssql/secrets/mssql.keytab + quit ``` > [!NOTE] -> If your domain controller is using Windows Server 2008 R2 or older, you should use `rc4-hmac` instead of `aes256-cts-hmac-sha1-96` as the encryption algorithm in the preceding `addent` command. For more information on which encryption algorithms are supported by different versions of Windows and Active Directory, see Network security: [Configure encryption types allowed for Kerberos Win7 only](https://docs.microsoft.com/windows/device-security/security-policy-settings/network-security-configure-encryption-types-allowed-for-kerberos). +> The ktutil tool does not validate the password, so make sure you enter it correctly. Anyone with access to this `keytab` file can impersonate [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] on the domain, so make sure you restrict access to the file such that only the `mssql` account has read access: ```bash @@ -119,11 +193,9 @@ sudo systemctl restart mssql-server ## Step 4: Create AD-based logins in Transact-SQL Connect to [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] and create a new, AD-based login: ```Transact-SQL -CREATE LOGIN [user@contoso.com] FROM EXTERNAL PROVIDER; +CREATE LOGIN [CONTOSO\user] FROM WINDOWS; ``` -> [!NOTE] -> Starting with [!INCLUDE[sssqlv14-md](../../docs/includes/sssqlv14-md.md)], the userPrincipalName (UPN) `login_name@DomainName` is the preferred format for creating AD-based logins. However, the pre-Windows 2000 user logon name format is also supported for compatibility: `CREATE LOGIN [CONTOSO\user] FROM WINDOWS;` Verify that the login is now listed in the [sys.server_principals](/sql/relational-databases/system-catalog-views/sys-server-principals-transact-sql.mc) system catalog view: ```Transact-SQL SELECT name FROM sys.server_principals; From fe5216dee0038ac193090c18f484ffbaa346728c Mon Sep 17 00:00:00 2001 From: Tommy Mullaney Date: Mon, 3 Jul 2017 14:56:26 -0700 Subject: [PATCH 186/336] Small edits --- .../sql-server-linux-active-directory-authentication.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/linux/sql-server-linux-active-directory-authentication.md b/docs/linux/sql-server-linux-active-directory-authentication.md index 14d564409e7..cfd464f70e7 100644 --- a/docs/linux/sql-server-linux-active-directory-authentication.md +++ b/docs/linux/sql-server-linux-active-directory-authentication.md @@ -4,7 +4,7 @@ title: "Active Directory Authentication with SQL Server on Linux | Microsoft Docs" description: "Configuration steps for AAD authentication for SQL Server on Linux" author: "tmullaney" -ms.date: "06/14/2017" +ms.date: "07/03/2017" ms.author: "thmullan;rickbyh" manager: "jhubbard" ms.topic: "article" @@ -105,7 +105,7 @@ sudo realm join contoso.com -U 'user@CONTOSO.COM' -v ``` > [!NOTE] -> If you see an error, "Necessary packages are not installed," then you should install those packages using your Linux distro's package manager before running the `realm join` command again. +> If you see an error, "Necessary packages are not installed," then you should install those packages using your Linux distribution's package manager before running the `realm join` command again. > > If you receive an error, "Insufficient permissions to join the domain," then you will need to check with a domain administrator that you have sufficient permissions to join Linux machines to your domain. @@ -221,7 +221,7 @@ sqlcmd -S mssql.contoso.com Log in to a domain-joined Windows client using your domain credentials. Make sure [!INCLUDE[ssmanstudiofull-md](../../docs/includes/ssmanstudiofull-md.md)] is installed, then connect to your [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] instance by specifying **Windows Authentication** in the **Connect to Server** dialog. ### AD Authentication using other client drivers -• JDBC: [Using Kerberos Integrated Authentication to Connect SQL Server](https://docs.microsoft.com/sql/connect/jdbc/using-kerberos-integrated-authentication-to-connect-to-sql-server]() +• JDBC: [Using Kerberos Integrated Authentication to Connect SQL Server](https://docs.microsoft.com/sql/connect/jdbc/using-kerberos-integrated-authentication-to-connect-to-sql-server]) • ODBC: [Using Integrated Authentication](https://docs.microsoft.com/sql/connect/odbc/linux/using-integrated-authentication) • ADO.NET: [Connection String Syntax](https://msdn.microsoft.com/library/ms254500.aspx) From 251ac314931f8be6a1ec93b24918fc9f67f1ee42 Mon Sep 17 00:00:00 2001 From: Owen Duncan Date: Thu, 6 Jul 2017 14:28:50 -0700 Subject: [PATCH 187/336] Update breaking-changes-to-analysis-services-features-in-sql-server-2016.md --- ...is-services-features-in-sql-server-2016.md | 44 ++++--------------- 1 file changed, 8 insertions(+), 36 deletions(-) diff --git a/docs/analysis-services/breaking-changes-to-analysis-services-features-in-sql-server-2016.md b/docs/analysis-services/breaking-changes-to-analysis-services-features-in-sql-server-2016.md index a03f5b54230..feae3876451 100644 --- a/docs/analysis-services/breaking-changes-to-analysis-services-features-in-sql-server-2016.md +++ b/docs/analysis-services/breaking-changes-to-analysis-services-features-in-sql-server-2016.md @@ -1,9 +1,9 @@ --- -title: "Breaking Changes to Analysis Services Features in SQL Server 2016 | Microsoft Docs" +title: "Breaking Changes to Analysis Services Features in SQL Server 2017 | Microsoft Docs" ms.custom: - "SQL2016_New_Updated" -ms.date: "03/01/2017" -ms.prod: "sql-server-2016" +ms.date: "07/06/2017" +ms.prod: "sql-server-2017" ms.reviewer: "" ms.suite: "" ms.technology: @@ -19,41 +19,13 @@ author: "Minewiskan" ms.author: "owend" manager: "erikre" --- -# Breaking Changes to Analysis Services Features in SQL Server 2016 +# Breaking Changes to Analysis Services Features in SQL Server 2017 A *breaking change* causes a data model, application code, or script to no longer function after upgrading either the model or the server. + + There are no breaking changes between SQL Server 2016 Analysis Services and SQL Server 2017 Analysis Services. -> [!NOTE] -> In contrast, a *behavior change* is characterized as a code change that doesn't break a model or application, but does introduce a different behavior from a previous release. Examples of behavior changes might include changing a default value, or disallowing a configuration of properties or options that was previously allowed. To learn more about behavior changes in this release, see [Behavior Changes to Analysis Services Features in SQL Server 2016](../analysis-services/behavior-changes-to-analysis-services-features-in-sql-server-2016.md). -## .NET 4.0 version upgrade - Analysis Services Management Objects (AMO), ADOMD.NET, and Tabular Object Model (TOM) client libraries now target the .NET 4.0 runtime. This can be a breaking change for applications that target .NET 3.5. Applications using newer versions of these assemblies must now target .NET 4.0 or later. - -## AMO version upgrade - This release is a version upgrade for [Analysis Services Management Objects (AMO)](https://msdn.microsoft.com/library/mt436122.aspx) and is a breaking change under certain circumstances. Existing code and scripts that call into AMO will continue to run as before if you upgrade from a previous version. However, if you need to *recompile* your application and you are targeting a SQL Server 2016 Analysis Services instance, you must add the following namespace to make your code or script operational: - -``` - -using Microsoft.AnalysisServices; -using Microsoft.AnalysisServices.Core; - -``` - - The [Microsoft.AnalysisServices.Core](https://msdn.microsoft.com/library/microsoft.analysisservices.core.aspx) namespace is now required whenever you reference the Microsoft.AnalysisServices assembly in your code. Objects that were previously only in the **Microsoft.AnalysisServices** namespace are moved to the Core namespace in this release if the object is used the same way in both tabular and multidimensional scenarios. For example, server-related APIs are relocated to the Core namespace. - - Although there are now multiple namespaces, both exist in the same assembly (Microsoft.AnalysisServices.dll). - -## XEvent DISCOVER changes - To better support XEvent DISCOVER streaming in SSMS for [!INCLUDE[ssCurrent](../includes/sscurrent-md.md)], `DISCOVER_XEVENT_TRACE_DEFINITION` is replaced with the following XEvent traces: - -- DISCOVER_XEVENT_PACKAGES - -- DISCOVER_XEVENT_OBJECT - -- DISCOVER_XEVENT_OBJECT_COLUMNS - -- DISCOVER_XEVENT_SESSION_TARGETS - -## See Also +## See also [Analysis Services Backward Compatibility](../analysis-services/analysis-services-backward-compatibility.md) - \ No newline at end of file + From a661d301ec286db7019d7c4aed9fecd7ac5ef095 Mon Sep 17 00:00:00 2001 From: Owen Duncan Date: Thu, 6 Jul 2017 14:35:32 -0700 Subject: [PATCH 188/336] Update behavior-changes-to-analysis-services-features-in-sql-server-2016.md --- ...is-services-features-in-sql-server-2016.md | 39 ++++++------------- 1 file changed, 12 insertions(+), 27 deletions(-) diff --git a/docs/analysis-services/behavior-changes-to-analysis-services-features-in-sql-server-2016.md b/docs/analysis-services/behavior-changes-to-analysis-services-features-in-sql-server-2016.md index b7e565ff6fa..500b756b86a 100644 --- a/docs/analysis-services/behavior-changes-to-analysis-services-features-in-sql-server-2016.md +++ b/docs/analysis-services/behavior-changes-to-analysis-services-features-in-sql-server-2016.md @@ -1,9 +1,9 @@ --- -title: "Behavior Changes to Analysis Services Features in SQL Server 2016 | Microsoft Docs" +title: "Behavior Changes to Analysis Services Features in SQL Server 2017 | Microsoft Docs" ms.custom: - "SQL2016_New_Updated" -ms.date: "03/01/2017" -ms.prod: "sql-server-2016" +ms.date: "07/06/2017" +ms.prod: "sql-server-2017" ms.reviewer: "" ms.suite: "" ms.technology: @@ -16,32 +16,17 @@ author: "Minewiskan" ms.author: "owend" manager: "erikre" --- -# Behavior Changes to Analysis Services Features in SQL Server 2016 - A *behavior change* affects how features work or interact in the current version as compared to earlier versions of SQL Server. +# Behavior Changes to Analysis Services Features in SQL Server 2017 + A *behavior change* affects how features work or interact in the current version as compared to earlier versions of SQL Server. Revisions to default values, manual configuration required to complete an upgrade or restore functionality, or a new implementation of an existing feature are all examples of a behavior change in the product. + + There are no behavior changes between Analysis Services Features in SQL Server 2016 and Analysis Services Features in SQL Server 2017 - Revisions to default values, manual configuration required to complete an upgrade or restore functionality, or a new implementation of an existing feature are all examples of a behavior change in the product. - Feature behaviors that changed in this release, yet do not break an existing model or code post-upgrade, are listed here. + -> [!NOTE] -> In contrast with a *behavior change*, a *breaking change* is one that prevents a data model or application integrated with [!INCLUDE[ssASnoversion](../includes/ssasnoversion-md.md)] from running after upgrading a server, client tool, or model. To see the list, visit [Breaking Changes to Analysis Services Features in SQL Server 2016](../analysis-services/breaking-changes-to-analysis-services-features-in-sql-server-2016.md). +## See also + [Breaking changes to Analysis Services features in SQL Server 2017](../analysis-services/breaking-changes-to-analysis-services-features-in-sql-server-2016.md) + [Compatibility level for tabular models in Analysis Services](../analysis-services/tabular-models/compatibility-level-for-tabular-models-in-analysis-services.md) + -## Analysis Services in SharePoint mode - Running the Power Pivot Configuration wizard is no longer required as a post-installation task. This is true for all supported versions of SharePoint that load models from the current [!INCLUDE[ssCurrent](../includes/sscurrent-md.md)] release of [!INCLUDE[ssASnoversion](../includes/ssasnoversion-md.md)]. -## DirectQuery mode for Tabular models - *DirectQuery* is a data access mode for tabular models, where query execution is performed on a backend relational database, retrieving a result set in real time. It's often used for very large datasets that cannot fit in memory or when data is volatile and you want the most recent data returned in queries against a tabular model. - - DirectQuery has existed as a data access mode for the last several releases. In [!INCLUDE[ssCurrent](../includes/sscurrent-md.md)], the implementation has been slightly revised, assuming the tabular model is at compatibility level 1200 or higher. DirectQuery has fewer restrictions than before. It also has different database properties. - - If you are using DirectQuery in an existing tabular model, you can keep the model at its currently compatibility level of 1100 or 1103 and continue to use DirectQuery as its implemented for those levels. Alternatively, you can upgrade to 1200 or higher to benefit from enhancements made to DirectQuery. - - There is no in-place upgrade of a DirectQuery model because the settings from older compatibility levels do not have exact counterparts in the newer 1200 and higher compatibility levels. If you have an existing tabular model that runs in DirectQuery mode, you should open the model in SQL Server Data Tools, turn DirectQuery off, set the **Compatibility Level** property to 1200 or higher, and then reconfigure the DirectQuery properties. See [DirectQuery Mode (SSAS Tabular)](../analysis-services/tabular-models/directquery-mode-ssas-tabular.md) for details. - -## See Also - [Backward Compatibility_deleted](http://msdn.microsoft.com/library/15d9117e-e2fa-4985-99ea-66a117c1e9fd) - [Breaking Changes to Analysis Services Features in SQL Server 2016](../analysis-services/breaking-changes-to-analysis-services-features-in-sql-server-2016.md) - [Compatibility Level for Tabular models in Analysis Services](../analysis-services/tabular-models/compatibility-level-for-tabular-models-in-analysis-services.md) - [Download SQL Server Data Tools](https://msdn.microsoft.com/en-us/library/mt204009.aspx) - - \ No newline at end of file From e1f2ed40f1a100c93c5d68f6c7d24b0de61c3b66 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 6 Jul 2017 15:10:45 -0700 Subject: [PATCH 189/336] Updating configure AG for DTC --- ...lity-group-for-distributed-transactions.md | 151 ++++++++++++++++++ ...-on-availability-and-database-mirroring.md | 13 +- 2 files changed, 158 insertions(+), 6 deletions(-) create mode 100644 docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md new file mode 100644 index 00000000000..99ad05e02a3 --- /dev/null +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -0,0 +1,151 @@ +--- +title: "Configure Availability Group for Distributed Transactions | Microsoft Docs" +ms.custom: "" +ms.date: "09/29/2016" +ms.prod: "sql-server-2016" +ms.reviewer: "" +ms.suite: "" +ms.technology: + - "dbe-high-availability" +ms.tgt_pltfrm: "" +ms.topic: "article" +helpviewer_keywords: + - "database mirroring [SQL Server], interoperability" + - "cross-database transactions [SQL Server]" + - "transactions [database mirroring]" + - "Availability Groups [SQL Server], interoperability" + - "troubleshooting [SQL Server], cross-database transactions" +ms.assetid: 9f7ed895-ad65-43e3-ba08-00d7bff1456d +caps.latest.revision: 33 +author: "MikeRayMSFT" +ms.author: "mikeray" +manager: "jhubbard" +--- +# Configure Availability Group for Distributed Transactions +[!INCLUDE[tsql-appliesto-ssvnxt-xxxx-xxxx-xxx](../../../includes/tsql-appliesto-ssvnxt-xxxx-xxxx-xxx.md)] + +This article explains how to configure an availability group for distributed transactions + +## Support for distributed transactions + +SQL Server 2017 supports distributed transactions for databases in availability groups. This support includes cross-database transactions, for example, databases on the same instance of SQL Server. In order to prevent in-doubt transactions after an availability group fails over, configure the availability group for distributed transactions. + +>[!NOTE] +>SQL Server does not prevent distributed transactions for databases in an availability group - even when the availability group is not configured for distributed transactions. However, databases in an availability group that are not configured for distributed transactions are vulnerable to in-doubt transactions under specific scenarios. + +## Create an availability group for distributed transactions + +To create an availability group for distributed transactions, include `DTC_SUPPORT = PER_DB` in the availability group definition. The example script below creates an availability group for distributed transactions. + +```transact-sql +CREATE AVAILABILITY GROUP My AG + WITH ( + DTC_SUPPORT = PER_DB + ) +... +``` + +>[!NOTE] +>You can create an availability group for distributed transactions on SQL Server 2016 or later. + +## Alter an availability group for distributed transactions + +To alter an availability group for distributed transactions, include `DTC_SUPPORT = PER_DB` in the `ALTER AVAILABILITY GROUP` script. The example script changes the availability group to support distributed transactions. + +```transact-sql +ALTER AVAILABILITY GROUP My AG + WITH ( + DTC_SUPPORT = PER_DB + ); +``` + +>[!NOTE] +>You can alter an availability group for distributed transactions on SQL Server 2017 or later. On SQL Server 2016 you cannot alter an availability group for distributed transactions. To change the setting drop, and recreate the availability group with the `DTC_SUPPORT = PER_DB` setting. + +## Effects of configuring an availability group for distributed transactions + +In order to participate in distributed transactions, an instance of SQL Server enlists with a distributed transaction coordinator (DTC) service. Normally the instance of SQL Server enlists with the DTC service on the local server. The DTC service assigns the instance of SQL Server a resource manager identification (RMID). In the default configuration, all databases on an instance of SQL Server use the same RMID. + +When a database is in an availability group, the read-write copy of the database - or primary replica - may move to a different instance of SQL Server. To support this movement, each database must have a unique RMID. When an availability group is configured with `DTC_SUPPORT = PER_DB` SQL Server registers and RMID for each database in the availability group with the DTC service. + +### Handling unresolved transaction + +Distributed transaction coordinator (DTC) distributed transactions follow a 2-phase commit protocol (2PC). + +- **Prepare phase** + + When DTC receives a commit request, it sends a prepare command to all the resource managers involved in the transaction. Each resource manager then ensures that the transaction is durable (e.g. hardening log to disk). As each resource manager completes the prepare phase, it returns success or failure to the transaction manager. + +- **Commit phase** + + If DTC receives successful prepares from all the resource managers, it sends commit commands to all resource managers. The resource managers can then complete the commit. If all resource managers report a successful commit, then DTC sends a success notification to the application. If any resource manager reported a failure to prepare, DTC sends a rollback command to each resource manager and indicates the failure of the commit to the application. + +See more information at: + +- [DTC Administration Guide](http://msdn.microsoft.com/library/ms681291.aspx) +- [DTC Developers Guide](http://msdn.microsoft.com/library/ms679938.aspx) +- [DTC Programmers Reference](http://msdn.microsoft.com/library/ms686108.aspx) + +SQL Server uses a resource manager identifier to uniquely identify the database as resource manager in conjunction with DTC. SQL Server will not be able to resolve the outcome of the transactions that are in prepared state while actions that result in change of resource manager identifier occur. The actions include: +- Adding new database to the availability group +- Removing a database from the availability group +- Updating the dtc_support option for the availability group + +During these actions, SQL Server enlists first with DTC with the old resource manager identifier. The identifier is changed following the action and SQL Server will try to determine the transaction outcome using the new resource manager identifier. This will fail as the new identifier is not recognized by the DTC. As of SQL Server 2017 CTP2.0, SQL Server will presume transactions in 'prepared' state are aborted in this case. +An option to let users choose the outcome of the transactions in this corner case is being worked on and will be available in the upcoming preview release. + + +## SQL Server 2016 and before: Support for cross-database transactions within the same SQL Server instance + +In SQL Server 2016 and before, cross-database transactions within the same SQL Server instance are not supported for availability groups. This means that no two databases in a cross-database transaction may be hosted by the same SQL Server instance. This is true even if those databases are part of the same availability group. + +Cross-database transactions are also not supported for database mirroring. + +## SQL Server 2016: Support for distributed transactions +Distributed transactions are supported with availability groups. This applies to distributed transactions between databases hosted by two different SQL Server instances. It also applies to distributed transactions between SQL Server and another DTC-compliant server. + +Microsoft Distributed Transaction Coordinator (MSDTC or DTC) is a Windows service that provides transaction infrastructure for distributed systems. MSDTC permits client applications to include multiple data sources in one transaction which then is committed across all servers included in the transaction. For example, you can use MSDTC to coordinate transactions that span multiple databases on different servers. + +SQL Server 2016 introduces the capability to use distributed transactions where one or more of the databases in the transaction are in an availability group. Prior to SQL Server 2016 distributed transactions were not supported for databases in availability groups. SQL Server 2016 can register a resource manager per database. This new capability is why distributed transactions can include databases in availability groups. + + + The following requirements must be met: + +- Availability groups must be running on Windows Server 2016 or Windows Server 2012 R2. For Windows Server 2012 R2, you must install the update in KB3090973 available at [https://support.microsoft.com/en-us/kb/3090973](https://support.microsoft.com/en-us/kb/3090973). + +- Availability groups must be created with the **CREATE AVAILABILITY GROUP** command and the **WITH DTC_SUPPORT = PER_DB** clause. You cannot currently alter an existing availability group. + +- All instances of SQL Server that will participate in the availability group must be SQL Server 2016 or later. + + + ## Non-support for distributed transactions + Specific cases where distributed transactions are not supported include: + + - In SQL Server 2016 and prior, where more than one database involved in the transaction is in the same availability group. + + - In SQL Server 2016 and prior, where at least one database is in an availability group and another database is on the same instance of SQL Server. + + - Where the availability group was not created with enable distributed transaction. + + - Database mirroring. + + ## Recommendation + In production environments you should cluster the DTC service. If you do not cluster the DTC service, SQL Server will use the local DTC service. With the local DTC service, the overall availability of the solution is reduced. When DTC is clustered, in-process transactions can be recovered if the cluster node fails. + + > [!IMPORTANT] + > Determine the appropriate default outcome of transactions that DTC is unable to resolve for your environment. For information on how to configure the default outcome see [in-doubt xact resolution Server Configuration Option](../../../database-engine/configure-windows/in-doubt-xact-resolution-server-configuration-option.md). + +## Example scenario with database mirroring + The following database mirroring example illustrates how a logical inconsistency could occur. In this example, an application uses a cross-database transaction to insert two rows of data: one row is inserted into a table in a mirrored database, A, and the other row is inserted into a table in another database, B. Database A is being mirrored in high-safety mode with automatic failover. While the transaction is being committed, database A becomes unavailable, and the mirroring session automatically fails over to the mirror of database A. + + After the failover, the cross-database transaction might be successfully committed on database B but not on the failed-over database. This would occur if the original principal server for database A had not sent the log for the cross-database transaction to the mirror server before the failure. After the failover, that transaction would not exist on the new principal server. Databases A and B would become inconsistent, because the data inserted in database B remains intact, but the data inserted in database A has been lost. + + A similar scenario can occur while using a MS DTC transaction. For example, after failover, the new principal contacts MS DTC. But MS DTC has no knowledge of the new principal server, and it terminates any transactions that are "preparing to commit," which are considered committed in other databases. + +> [!NOTE] +> Using Database Mirroring with DTC or using availability groups with DTC in ways not approved in this topic is not supported. This does not imply that aspects of the product unrelated to DTC are unsupported; however, any issues arising from the improper use of distributed transactions will not be supported. + +## See Also + [Always On availability groups: Interoperability (SQL Server)](../../../database-engine/availability-groups/windows/always-on-availability-groups-interoperability-sql-server.md) + + diff --git a/docs/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md b/docs/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md index 6cb004e773d..8a8becfd0a0 100644 --- a/docs/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md +++ b/docs/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md @@ -1,7 +1,7 @@ --- title: "Transactions - Always On Availability Groups and Database Mirroring | Microsoft Docs" ms.custom: "" -ms.date: "09/29/2016" +ms.date: "07/06/2017" ms.prod: "sql-server-2016" ms.reviewer: "" ms.suite: "" @@ -28,7 +28,10 @@ This topic describes cross-database and distributed transactions support for Alw ## Support for distributed transactions -SQL Server 2017 supports distributed transactions for databases in availability groups. This support includes cross-database transactions, for example, databases on the same instance of SQL Server. Distributed transactions are not supported for databases configured for database mirroring. +SQL Server 2017 supports distributed transactions for databases in availability groups. This support includes databases on the same instance of SQL Server or databases on different instances of SQL Server. Distributed transactions are not supported for databases configured for database mirroring. + +>[!NOTE] +>[!INCLUDE[SQL Server 2016]](../../../includes/sssql15-md.md)]SQL Server 2016 included limited support for distributed transactions in for databases in an availability group. Distributed transactions using databases in an availability group were supported as long as no other databases in the transaction were in the same instance of SQL Server. For more information, see [SQL Server 2016 DTC Support In Availability Groups](http://blogs.technet.microsoft.com/dataplatform/2016/01/25/sql-server-2016-dtc-support-in-availability-gr) ### Handling unresolved transaction @@ -48,14 +51,12 @@ See more information at: - [DTC Developers Guide](http://msdn.microsoft.com/library/ms679938.aspx) - [DTC Programmers Reference](http://msdn.microsoft.com/library/ms686108.aspx) -SQL Server uses a resource manager identifier to uniquely identify the database as resource manager in conjunction with DTC. SQL Server will not be able to resolve the outcome of the transactions that are in prepared state while actions that result in change of resource manager identifier occur. The actions include: +SQL Server uses a resource manager identifier (RMID) to uniquely identify the database as resource manager in conjunction with DTC. SQL Server can not resolve the outcome of the transactions that are in prepared state while actions that result in change of RMDID occur. The actions include: - Adding new database to the availability group - Removing a database from the availability group - Updating the dtc_support option for the availability group -During these actions, SQL Server enlists first with DTC with the old resource manager identifier. The identifier is changed following the action and SQL Server will try to determine the transaction outcome using the new resource manager identifier. This will fail as the new identifier is not recognized by the DTC. As of SQL Server 2017 CTP2.0, SQL Server will presume transactions in 'prepared' state are aborted in this case. -An option to let users choose the outcome of the transactions in this corner case is being worked on and will be available in the upcoming preview release. - +During these actions, SQL Server enlists first with DTC with the old resource manager identifier. The identifier is changed following the action and SQL Server will try to determine the transaction outcome using the new resource manager identifier. This will fail as the new RMID is not recognized by the DTC. ## SQL Server 2016 and before: Support for cross-database transactions within the same SQL Server instance From 7752c26c760733391ae2ae568b75044aee8314c9 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 7 Jul 2017 07:34:21 -0700 Subject: [PATCH 190/336] Updating topic to remove overlap with Tx and DB mirror --- ...lity-group-for-distributed-transactions.md | 114 +++++------------- 1 file changed, 28 insertions(+), 86 deletions(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index 99ad05e02a3..045ee03d015 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -33,119 +33,61 @@ SQL Server 2017 supports distributed transactions for databases in availability >[!NOTE] >SQL Server does not prevent distributed transactions for databases in an availability group - even when the availability group is not configured for distributed transactions. However, databases in an availability group that are not configured for distributed transactions are vulnerable to in-doubt transactions under specific scenarios. +All instances of SQL Server that will participate in the distributed transaction must be SQL Server 2016 or later. + +Availability groups must be running on Windows Server 2016 or Windows Server 2012 R2. For Windows Server 2012 R2, you must install the update in KB3090973 available at [https://support.microsoft.com/en-us/kb/3090973](https://support.microsoft.com/en-us/kb/3090973). + ## Create an availability group for distributed transactions -To create an availability group for distributed transactions, include `DTC_SUPPORT = PER_DB` in the availability group definition. The example script below creates an availability group for distributed transactions. +You can create an availability group for distributed transactions on SQL Server 2016 or later. To create an availability group for distributed transactions, include `DTC_SUPPORT = PER_DB` in the availability group definition. The example script below creates an availability group for distributed transactions. ```transact-sql -CREATE AVAILABILITY GROUP My AG +CREATE AVAILABILITY GROUP MyAG WITH ( DTC_SUPPORT = PER_DB ) -... + FOR DATABASE DB1, DB2 + REPLICA ON + Server1 WITH ( + ENDPOINT_URL = 'TCP://Server1:5022', + AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, + FAILOVER_MODE = AUTOMATIC + ) + Server2 WITH ( + ENDPOINT_URL = 'TCP://Server2:5022', + AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, + FAILOVER_MODE = AUTOMATIC + ) ``` >[!NOTE] ->You can create an availability group for distributed transactions on SQL Server 2016 or later. +>The script above is a simple example of an availability group and is not designed for any specific production environment. ## Alter an availability group for distributed transactions -To alter an availability group for distributed transactions, include `DTC_SUPPORT = PER_DB` in the `ALTER AVAILABILITY GROUP` script. The example script changes the availability group to support distributed transactions. +You can alter an availability group for distributed transactions on SQL Server 2017 or later. To alter an availability group for distributed transactions, include `DTC_SUPPORT = PER_DB` in the `ALTER AVAILABILITY GROUP` script. The example script changes the availability group to support distributed transactions. ```transact-sql -ALTER AVAILABILITY GROUP My AG +ALTER AVAILABILITY GROUP MyaAG WITH ( DTC_SUPPORT = PER_DB ); ``` >[!NOTE] ->You can alter an availability group for distributed transactions on SQL Server 2017 or later. On SQL Server 2016 you cannot alter an availability group for distributed transactions. To change the setting drop, and recreate the availability group with the `DTC_SUPPORT = PER_DB` setting. +>On SQL Server 2016 you cannot alter an availability group for distributed transactions. To change the setting drop, and recreate the availability group with the `DTC_SUPPORT = PER_DB` setting. ## Effects of configuring an availability group for distributed transactions -In order to participate in distributed transactions, an instance of SQL Server enlists with a distributed transaction coordinator (DTC) service. Normally the instance of SQL Server enlists with the DTC service on the local server. The DTC service assigns the instance of SQL Server a resource manager identification (RMID). In the default configuration, all databases on an instance of SQL Server use the same RMID. - -When a database is in an availability group, the read-write copy of the database - or primary replica - may move to a different instance of SQL Server. To support this movement, each database must have a unique RMID. When an availability group is configured with `DTC_SUPPORT = PER_DB` SQL Server registers and RMID for each database in the availability group with the DTC service. - -### Handling unresolved transaction - -Distributed transaction coordinator (DTC) distributed transactions follow a 2-phase commit protocol (2PC). - -- **Prepare phase** - - When DTC receives a commit request, it sends a prepare command to all the resource managers involved in the transaction. Each resource manager then ensures that the transaction is durable (e.g. hardening log to disk). As each resource manager completes the prepare phase, it returns success or failure to the transaction manager. - -- **Commit phase** - - If DTC receives successful prepares from all the resource managers, it sends commit commands to all resource managers. The resource managers can then complete the commit. If all resource managers report a successful commit, then DTC sends a success notification to the application. If any resource manager reported a failure to prepare, DTC sends a rollback command to each resource manager and indicates the failure of the commit to the application. +In order to participate in distributed transactions, an instance of SQL Server enlists with a distributed transaction coordinator (DTC) service. Normally the instance of SQL Server enlists with the DTC service on the local server. The DTC service assigns the instance of SQL Server a resource manager identification (RMID). In the default configuration, all databases on an instance of SQL Server use the same RMID. The instance of SQL Server is the *resource manager* for DTC transactions. -See more information at: +When a database is in an availability group, the read-write copy of the database - or primary replica - may move to a different instance of SQL Server. To support distributed transactions during this movement, each database must have a unique RMID. When an availability group is configured with `DTC_SUPPORT = PER_DB` SQL Server registers an RMID for each database in the availability group with the DTC service. In this configuration, the database is the resource manager for DTC transactions. -- [DTC Administration Guide](http://msdn.microsoft.com/library/ms681291.aspx) -- [DTC Developers Guide](http://msdn.microsoft.com/library/ms679938.aspx) -- [DTC Programmers Reference](http://msdn.microsoft.com/library/ms686108.aspx) - -SQL Server uses a resource manager identifier to uniquely identify the database as resource manager in conjunction with DTC. SQL Server will not be able to resolve the outcome of the transactions that are in prepared state while actions that result in change of resource manager identifier occur. The actions include: -- Adding new database to the availability group -- Removing a database from the availability group -- Updating the dtc_support option for the availability group - -During these actions, SQL Server enlists first with DTC with the old resource manager identifier. The identifier is changed following the action and SQL Server will try to determine the transaction outcome using the new resource manager identifier. This will fail as the new identifier is not recognized by the DTC. As of SQL Server 2017 CTP2.0, SQL Server will presume transactions in 'prepared' state are aborted in this case. -An option to let users choose the outcome of the transactions in this corner case is being worked on and will be available in the upcoming preview release. - - -## SQL Server 2016 and before: Support for cross-database transactions within the same SQL Server instance - -In SQL Server 2016 and before, cross-database transactions within the same SQL Server instance are not supported for availability groups. This means that no two databases in a cross-database transaction may be hosted by the same SQL Server instance. This is true even if those databases are part of the same availability group. - -Cross-database transactions are also not supported for database mirroring. - -## SQL Server 2016: Support for distributed transactions -Distributed transactions are supported with availability groups. This applies to distributed transactions between databases hosted by two different SQL Server instances. It also applies to distributed transactions between SQL Server and another DTC-compliant server. - -Microsoft Distributed Transaction Coordinator (MSDTC or DTC) is a Windows service that provides transaction infrastructure for distributed systems. MSDTC permits client applications to include multiple data sources in one transaction which then is committed across all servers included in the transaction. For example, you can use MSDTC to coordinate transactions that span multiple databases on different servers. +## See Also -SQL Server 2016 introduces the capability to use distributed transactions where one or more of the databases in the transaction are in an availability group. Prior to SQL Server 2016 distributed transactions were not supported for databases in availability groups. SQL Server 2016 can register a resource manager per database. This new capability is why distributed transactions can include databases in availability groups. - - The following requirements must be met: - -- Availability groups must be running on Windows Server 2016 or Windows Server 2012 R2. For Windows Server 2012 R2, you must install the update in KB3090973 available at [https://support.microsoft.com/en-us/kb/3090973](https://support.microsoft.com/en-us/kb/3090973). - -- Availability groups must be created with the **CREATE AVAILABILITY GROUP** command and the **WITH DTC_SUPPORT = PER_DB** clause. You cannot currently alter an existing availability group. +[Distributed Transactions](http://docs.microsoft.com/dotnet/framework/data/adonet/distributed-transactions) -- All instances of SQL Server that will participate in the availability group must be SQL Server 2016 or later. - - - ## Non-support for distributed transactions - Specific cases where distributed transactions are not supported include: - - - In SQL Server 2016 and prior, where more than one database involved in the transaction is in the same availability group. - - - In SQL Server 2016 and prior, where at least one database is in an availability group and another database is on the same instance of SQL Server. - - - Where the availability group was not created with enable distributed transaction. - - - Database mirroring. - - ## Recommendation - In production environments you should cluster the DTC service. If you do not cluster the DTC service, SQL Server will use the local DTC service. With the local DTC service, the overall availability of the solution is reduced. When DTC is clustered, in-process transactions can be recovered if the cluster node fails. - - > [!IMPORTANT] - > Determine the appropriate default outcome of transactions that DTC is unable to resolve for your environment. For information on how to configure the default outcome see [in-doubt xact resolution Server Configuration Option](../../../database-engine/configure-windows/in-doubt-xact-resolution-server-configuration-option.md). - -## Example scenario with database mirroring - The following database mirroring example illustrates how a logical inconsistency could occur. In this example, an application uses a cross-database transaction to insert two rows of data: one row is inserted into a table in a mirrored database, A, and the other row is inserted into a table in another database, B. Database A is being mirrored in high-safety mode with automatic failover. While the transaction is being committed, database A becomes unavailable, and the mirroring session automatically fails over to the mirror of database A. - - After the failover, the cross-database transaction might be successfully committed on database B but not on the failed-over database. This would occur if the original principal server for database A had not sent the log for the cross-database transaction to the mirror server before the failure. After the failover, that transaction would not exist on the new principal server. Databases A and B would become inconsistent, because the data inserted in database B remains intact, but the data inserted in database A has been lost. - - A similar scenario can occur while using a MS DTC transaction. For example, after failover, the new principal contacts MS DTC. But MS DTC has no knowledge of the new principal server, and it terminates any transactions that are "preparing to commit," which are considered committed in other databases. - -> [!NOTE] -> Using Database Mirroring with DTC or using availability groups with DTC in ways not approved in this topic is not supported. This does not imply that aspects of the product unrelated to DTC are unsupported; however, any issues arising from the improper use of distributed transactions will not be supported. - -## See Also - [Always On availability groups: Interoperability (SQL Server)](../../../database-engine/availability-groups/windows/always-on-availability-groups-interoperability-sql-server.md) - +[Always On availability groups: Interoperability (SQL Server)](../../../database-engine/availability-groups/windows/always-on-availability-groups-interoperability-sql-server.md) +[Transactions - Always On availability groups and Database Mirroring](transactions-always-on-availability-and-database-mirroring.md) From 9b504121e1527f157f734e670c84a6832fd1f985 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 7 Jul 2017 07:45:32 -0700 Subject: [PATCH 191/336] Added 2016 exclusion. --- ...configure-availability-group-for-distributed-transactions.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index 045ee03d015..8e366d87f5b 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -30,6 +30,8 @@ This article explains how to configure an availability group for distributed tra SQL Server 2017 supports distributed transactions for databases in availability groups. This support includes cross-database transactions, for example, databases on the same instance of SQL Server. In order to prevent in-doubt transactions after an availability group fails over, configure the availability group for distributed transactions. +SQL Server 2016 also supports distributed transactions for databases in availability groups, however this support does not include transactions involving two or more databases on the same instance of SQL Server. + >[!NOTE] >SQL Server does not prevent distributed transactions for databases in an availability group - even when the availability group is not configured for distributed transactions. However, databases in an availability group that are not configured for distributed transactions are vulnerable to in-doubt transactions under specific scenarios. From 80806a4f5b2afdcf681fb2673cc87c52e2ea62c9 Mon Sep 17 00:00:00 2001 From: Tommy Mullaney Date: Fri, 7 Jul 2017 11:48:16 -0700 Subject: [PATCH 192/336] Fixing file permissions --- docs/linux/sql-server-linux-active-directory-authentication.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-active-directory-authentication.md b/docs/linux/sql-server-linux-active-directory-authentication.md index cfd464f70e7..f775496d0f1 100644 --- a/docs/linux/sql-server-linux-active-directory-authentication.md +++ b/docs/linux/sql-server-linux-active-directory-authentication.md @@ -182,7 +182,7 @@ quit Anyone with access to this `keytab` file can impersonate [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] on the domain, so make sure you restrict access to the file such that only the `mssql` account has read access: ```bash sudo chown mssql:mssql /var/opt/mssql/secrets/mssql.keytab -sudo chmod 600 /var/opt/mssql/secrets/mssql.keytab +sudo chmod 400 /var/opt/mssql/secrets/mssql.keytab ``` Next, configure [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] to use this `keytab` file for Kerberos authentication: ```bash From 1249ac67ec289b2d397dcd09c828b414e4e59015 Mon Sep 17 00:00:00 2001 From: Tommy Mullaney Date: Fri, 7 Jul 2017 11:49:18 -0700 Subject: [PATCH 193/336] Fix file permissions --- docs/linux/sql-server-linux-encrypted-connections.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-encrypted-connections.md b/docs/linux/sql-server-linux-encrypted-connections.md index e641dce7b06..d096e501f5a 100644 --- a/docs/linux/sql-server-linux-encrypted-connections.md +++ b/docs/linux/sql-server-linux-encrypted-connections.md @@ -35,7 +35,7 @@ Use `mssql-conf` to configure TLS for an instance of [!INCLUDE[ssNoVersion](../. |--- |--- | |`network.forceencryption` |If 1, then [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] forces all connections to be encrypted. By default, this option is 0. |  |`network.tlscert` |The absolute path to the certificate file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:   `/etc/ssl/certs/mssql.pem`  The certificate file must be accessible by the mssql account. Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 600 `. |  -|`network.tlskey` |The absolute path to the private key file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:  `/etc/ssl/private/mssql.key`  The certificate file must be accessible by the mssql account. Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 600 `. | +|`network.tlskey` |The absolute path to the private key file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:  `/etc/ssl/private/mssql.key`  The certificate file must be accessible by the mssql account. Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 400 `. | |`network.tlsprotocols` |A comma-separated list of which TLS protocols are allowed by SQL Server. [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] always attempts to negotiate the strongest allowed protocol. If a client does not support any allowed protocol, [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] rejects the connection attempt.  For compatibility, all supported protocols are allowed by default (1.2, 1.1, 1.0).  If your clients support TLS 1.2, Microsoft recommends allowing only TLS 1.2. |  |`network.tlsciphers` |Specifies which ciphers are allowed by [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] for TLS. This string must be formatted per [OpenSSL's cipher list format](https://www.openssl.org/docs/man1.0.2/apps/ciphers.html). In general, you should not need to change this option. 
      By default, the following ciphers are allowed: 
      `ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA` |   | | | @@ -54,7 +54,7 @@ Open a command terminal on the Linux machine where [!INCLUDE[ssNoVersion](../../ - Restrict access to `mssql`  ``` sudo chown mssql:mssql mssql.pem mssql.key - sudo chmod 600 mssql.pem mssql.key + sudo chmod 400 mssql.pem mssql.key ```   - Move to system SSL directories (optional) From 871b74d662621a9bdb0b01ad3daba2070f75320e Mon Sep 17 00:00:00 2001 From: Tommy Mullaney Date: Fri, 7 Jul 2017 11:50:44 -0700 Subject: [PATCH 194/336] Fix file permissions --- docs/linux/sql-server-linux-configure-mssql-conf.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-configure-mssql-conf.md b/docs/linux/sql-server-linux-configure-mssql-conf.md index 78fe6bf6777..386a19c4260 100644 --- a/docs/linux/sql-server-linux-configure-mssql-conf.md +++ b/docs/linux/sql-server-linux-configure-mssql-conf.md @@ -209,8 +209,8 @@ Use mssql-conf to configure TLS for an instance of SQL Server running on Linux. |Option |Description | |--- |--- | |`network.forceencryption` |If 1, then [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] forces all connections to be encrypted. By default, this option is 0. |  -|`network.tlscert` |The absolute path to the certificate file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:   `/etc/ssl/certs/mssql.pem`  The certificate file must be accessible by the mssql account. Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 600 `. |  -|`network.tlskey` |The absolute path to the private key file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:  `/etc/ssl/private/mssql.key`  The certificate file must be accessible by the mssql account. Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 600 `. | +|`network.tlscert` |The absolute path to the certificate file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:   `/etc/ssl/certs/mssql.pem`  The certificate file must be accessible by the mssql account. Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 400 `. |  +|`network.tlskey` |The absolute path to the private key file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:  `/etc/ssl/private/mssql.key`  The certificate file must be accessible by the mssql account. Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 400 `. | |`network.tlsprotocols` |A comma-separated list of which TLS protocols are allowed by SQL Server. [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] always attempts to negotiate the strongest allowed protocol. If a client does not support any allowed protocol, [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] rejects the connection attempt.  For compatibility, all supported protocols are allowed by default (1.2, 1.1, 1.0).  If your clients support TLS 1.2, Microsoft recommends allowing only TLS 1.2. |  |`network.tlsciphers` |Specifies which ciphers are allowed by [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] for TLS. This string must be formatted per [OpenSSL's cipher list format](https://www.openssl.org/docs/man1.0.2/apps/ciphers.html). In general, you should not need to change this option. 
      By default, the following ciphers are allowed: 
      `ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA` |   | | | From 44b85754944d6657de4734dd70c61ba0c272e666 Mon Sep 17 00:00:00 2001 From: Tommy Mullaney Date: Fri, 7 Jul 2017 11:51:40 -0700 Subject: [PATCH 195/336] Fix for both cert and priv key --- docs/linux/sql-server-linux-encrypted-connections.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-encrypted-connections.md b/docs/linux/sql-server-linux-encrypted-connections.md index d096e501f5a..c3d2c477fa3 100644 --- a/docs/linux/sql-server-linux-encrypted-connections.md +++ b/docs/linux/sql-server-linux-encrypted-connections.md @@ -34,7 +34,7 @@ Use `mssql-conf` to configure TLS for an instance of [!INCLUDE[ssNoVersion](../. |Option |Description | |--- |--- | |`network.forceencryption` |If 1, then [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] forces all connections to be encrypted. By default, this option is 0. |  -|`network.tlscert` |The absolute path to the certificate file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:   `/etc/ssl/certs/mssql.pem`  The certificate file must be accessible by the mssql account. Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 600 `. |  +|`network.tlscert` |The absolute path to the certificate file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:   `/etc/ssl/certs/mssql.pem`  The certificate file must be accessible by the mssql account. Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 400 `. |  |`network.tlskey` |The absolute path to the private key file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:  `/etc/ssl/private/mssql.key`  The certificate file must be accessible by the mssql account. Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 400 `. | |`network.tlsprotocols` |A comma-separated list of which TLS protocols are allowed by SQL Server. [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] always attempts to negotiate the strongest allowed protocol. If a client does not support any allowed protocol, [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] rejects the connection attempt.  For compatibility, all supported protocols are allowed by default (1.2, 1.1, 1.0).  If your clients support TLS 1.2, Microsoft recommends allowing only TLS 1.2. |  |`network.tlsciphers` |Specifies which ciphers are allowed by [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] for TLS. This string must be formatted per [OpenSSL's cipher list format](https://www.openssl.org/docs/man1.0.2/apps/ciphers.html). In general, you should not need to change this option. 
      By default, the following ciphers are allowed: 
      `ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA` |   From 76864fb185574b21d9b5e82d9bfba1de815f74fa Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 7 Jul 2017 11:56:37 -0700 Subject: [PATCH 196/336] Added more depth to the description. --- ...lity-group-for-distributed-transactions.md | 59 +++++++++++++++++-- 1 file changed, 55 insertions(+), 4 deletions(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index 8e366d87f5b..0023c0080bc 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -15,7 +15,7 @@ helpviewer_keywords: - "transactions [database mirroring]" - "Availability Groups [SQL Server], interoperability" - "troubleshooting [SQL Server], cross-database transactions" -ms.assetid: 9f7ed895-ad65-43e3-ba08-00d7bff1456d +ms.assetid: caps.latest.revision: 33 author: "MikeRayMSFT" ms.author: "mikeray" @@ -30,7 +30,7 @@ This article explains how to configure an availability group for distributed tra SQL Server 2017 supports distributed transactions for databases in availability groups. This support includes cross-database transactions, for example, databases on the same instance of SQL Server. In order to prevent in-doubt transactions after an availability group fails over, configure the availability group for distributed transactions. -SQL Server 2016 also supports distributed transactions for databases in availability groups, however this support does not include transactions involving two or more databases on the same instance of SQL Server. +SQL Server 2016 also supports distributed transactions for databases in availability groups, however this support does not include transactions involving two or more databases on the server. >[!NOTE] >SQL Server does not prevent distributed transactions for databases in an availability group - even when the availability group is not configured for distributed transactions. However, databases in an availability group that are not configured for distributed transactions are vulnerable to in-doubt transactions under specific scenarios. @@ -81,9 +81,60 @@ ALTER AVAILABILITY GROUP MyaAG ## Effects of configuring an availability group for distributed transactions -In order to participate in distributed transactions, an instance of SQL Server enlists with a distributed transaction coordinator (DTC) service. Normally the instance of SQL Server enlists with the DTC service on the local server. The DTC service assigns the instance of SQL Server a resource manager identification (RMID). In the default configuration, all databases on an instance of SQL Server use the same RMID. The instance of SQL Server is the *resource manager* for DTC transactions. +In order to participate in distributed transactions, an instance of SQL Server enlists with a distributed transaction coordinator (DTC) service. Normally the instance of SQL Server enlists with the DTC service on the local server. The DTC service assigns the instance of SQL Server a resource manager identification (RMID). In the default configuration, all databases on an instance of SQL Server use the same RMID. The instance of SQL Server is a *resource manager* for DTC transactions. + +When a database is in an availability group, the read-write copy of the database - or primary replica - may move to a different instance of SQL Server. To support distributed transactions during this movement, each database must have a unique RMID. When an availability group is configured with `DTC_SUPPORT = PER_DB` SQL Server registers an RMID for each database in the availability group with the DTC service. In this configuration, the database is a resource manager for DTC transactions. + +## How distributed transactions work + +The following list explains how distributed transactions work. + +1. When an application requires a distributed transaction, it connects to a DTC service to begin the transaction. The client owns the DTC transaction. The DTC service is one resource manager. +2. The client then connects to a SQL Server instance and enlists in the DTC transaction. Normally, the SQL Server instance is also the resource manager. If the database is in an availability group and registered for DTC support, the database is a resource manager. The SQL Server instance or database resource manager exchange transaction information with the DTC service. +3. The client does some work in the SQL Server instance under the DTC transaction. The SQL Server instance holds locks, and preserves references to the DTC transaction. +4. The client either disconnects or enlists in NULL. The client can disconnect from the SQL Server instance. The SQL Server instance unhooks the connection from the DTC transaction it is tracking. The transaction object remains in the list of SQL Server transactions because it is active. It stays active until the DTC resource manager indicates either abort or commit. +5. After the client has completed the work on all resources, the DTC service sends either abort or commit to the SQL Server instance - and any other resources in the transaction. +6. The SQL Server instance either commits or aborts the transaction and releases the locks. + +### Manage in-doubt transactions +When DTC support is not configured per database, a database in an availability group can have in-doubt transactions in the following cases: + +* Set distributed transaction support per database while transactions are in flight. +* Add or remove a database while transactions are in flight. +* Drop an availability group. + +If the cases above happen while `DTC_SUPPORT = NONE`, and the primary replica fails over to a new instance of SQL Server, the instance will try to contact the DTC service to identify the transaction result. The DTC service will not be able to identify the transaction result because the resource manager was registered under the instance of SQL Server that hosted the primary replica before fail over. The database will go into SUSPECT state. + +The new SQL Server error log has an entry like the example below: + +``` +Microsoft Distributed Transaction Coordinator (MS DTC) failed to reenlist citing that the database RMID does not match the RMID [xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx] associated with the transaction.  Please manually resolve the transaction. + SQL Server detected a DTC/KTM in-doubt transaction with UOW  {yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy}.Please resolve it following the guideline for Troubleshooting DTC Transactions. +``` + +The above example shows that the DTC service could not enlist the database from the new primary replica in the transaction that was created before failover. This is why the database is suspect. In order to recover the database you need to either commit or rollback the transaction manually. + +>[!WARNING] +>When you manually commit or rollback a transaction it can affect an application. Verify that the action of commit or rollback is consistent with your application requirements. Run one of the following scripts: + +* To commit the transaction, update the following script. Replace the `yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` with the in-doubt transaction UOW from the previous error message, and run: + + ```transact-sql + kill 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy' with commit + ``` + +* To rollback the transaction, update the following script. Replace the `yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` with the in-doubt transaction UOW from the previous error message, and run: + + ```transact-sql + kill 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy' with rollback + ``` + +After you commit or rollback the transaction, you can use `ALTER DATABASE` to set the database online. Update the following script. Set the database name for the name of the suspect database. For example: + + ```transact-sql + ALTER DATABASE [DB1] SET ONLINE + ``` -When a database is in an availability group, the read-write copy of the database - or primary replica - may move to a different instance of SQL Server. To support distributed transactions during this movement, each database must have a unique RMID. When an availability group is configured with `DTC_SUPPORT = PER_DB` SQL Server registers an RMID for each database in the availability group with the DTC service. In this configuration, the database is the resource manager for DTC transactions. ## See Also From 864c844ec82cf3b2e8bebdc814506dce1e46dc3e Mon Sep 17 00:00:00 2001 From: Tommy Mullaney Date: Fri, 7 Jul 2017 11:58:45 -0700 Subject: [PATCH 197/336] Update based on spec changes --- .../system-catalog-views/sys-trusted-assemblies-transact-sql.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md b/docs/relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md index 49b88e2e055..dcf1de5bde0 100644 --- a/docs/relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md +++ b/docs/relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md @@ -34,8 +34,8 @@ Contains a row for each trusted assembly for the server. |Column name |Data type |Description | |--- |--- |--- | -|clr_name |nvarchar(4000) |Canonical string that encodes the simple name, version number, culture, public key, and architecture of the assembly. This value uniquely identifies the assembly on the common language runtime (CLR) side. | |hash |varbinary(8000) |SHA2_512 hash of the assembly content. | +|description |nvarchar(4000) |Optional user-defined description of the assembly. Microsoft recommends using the canonical name that encodes the simple name, version number, culture, public key, and architecture of the assembly to trust. This value uniquely identifies the assembly on the common language runtime (CLR) side and is the same as the clr_name value in sys.assemblies. | |create_date |datetime2 |Date the assembly was added to the list of trusted assemblies. | |created_by |nvarchar(128) |Login name of the principal who added the assembly to the list. | | | | | From 2781537709d801a60a293a3583cf0cbf557df632 Mon Sep 17 00:00:00 2001 From: Tommy Mullaney Date: Fri, 7 Jul 2017 12:01:59 -0700 Subject: [PATCH 198/336] Update syntax based on spec changes --- .../sys-sp-add-trusted-assembly-transact-sql.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md b/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md index 4e653a6503f..e831ebc7ac1 100644 --- a/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md +++ b/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md @@ -35,8 +35,8 @@ Adds an assembly to the list of trusted assemblies for the server. ## Syntax ``` sp_add_trusted_assembly - [ @clr_name = ] 'clr_name', [ @hash = ] 'value' + [ , [ @description = ] 'description' ] ``` ## Remarks @@ -45,12 +45,12 @@ This procedure adds an assembly to [sys.trusted_assemblies](../../relational-da ## Arguments -[ @clr_name = ] '*clr_name*' -Canonical name that encodes the simple name, version number, culture, public key, and architecture of the assembly to trust. This value uniquely identifies the assembly on the common language runtime (CLR) side. The value is the same as the clr_name value in sys.assemblies. - [ @hash = ] '*value*' The SHA2_512 hash value of the assembly to add to the list of trusted assemblies for the server. Trusted assemblies may load when CLR strict security is enabled, even if the assembly is unsigned or the database is not marked as trustworthy. +[ @description = ] '*description*' +Optional user-defined description of the assembly. Microsoft recommends using the canonical name that encodes the simple name, version number, culture, public key, and architecture of the assembly to trust. This value uniquely identifies the assembly on the common language runtime (CLR) side and is the same as the clr_name value in sys.assemblies. + ## Permissions Requires membership in the `sysadmin` fixed server role or `CONTROL SERVER` permission. @@ -60,9 +60,8 @@ Requires membership in the `sysadmin` fixed server role or `CONTROL SERVER` perm The following example adds an assembly named `pointudt` to the list of trusted assemblies for the server. These values are available from [sys.assemblies](../../relational-databases/system-catalog-views/sys-assemblies-transact-sql.md). ``` -EXEC sp_add_trusted_assembly -N'pointudt, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarchitecture=msil', -0x8893AD6D78D14EE43DF482E2EAD44123E3A0B684A8873C3F7BF3B5E8D8F09503F3E62370CE742BBC96FE3394477214B84C7C1B0F7A04DCC788FA99C2C09DFCCC; +EXEC sp_add_trusted_assembly 0x8893AD6D78D14EE43DF482E2EAD44123E3A0B684A8873C3F7BF3B5E8D8F09503F3E62370CE742BBC96FE3394477214B84C7C1B0F7A04DCC788FA99C2C09DFCCC, +N'pointudt, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarchitecture=msil'; ``` ## See Also From 128a6cb157381ac1a1fe5f9caaf0a12dd38b8a7f Mon Sep 17 00:00:00 2001 From: Tommy Mullaney Date: Fri, 7 Jul 2017 12:06:23 -0700 Subject: [PATCH 199/336] Update syntax based on spec changes --- .../sys-sp-drop-trusted-assembly-transact-sql.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md b/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md index b51ed338422..626c3ee8b2a 100644 --- a/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md +++ b/docs/relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md @@ -35,13 +35,13 @@ Adds an assembly to the list of trusted assemblies for the server. ## Syntax ``` sp_drop_trusted_assembly - [ @clr_name = ] 'clr_name' + [ @hash = ] 'value' ``` ## Arguments -[ @clr_name = ] '*clr_name*' -Canonical name that encodes the simple name, version number, culture, public key, and architecture of the assembly to trust. This value uniquely identifies the assembly on the common language runtime (CLR) side. The value is the same as the clr_name value in sys.assemblies. +[ @hash = ] '*value*' +The SHA2_512 hash value of the assembly to add to the list of trusted assemblies for the server. Trusted assemblies may load when clr strict security is enabled, even if the assembly is unsigned or the database is not marked as trustworthy. ## Remarks @@ -53,11 +53,11 @@ Requires membership in the `sysadmin` fixed server role or `CONTROL SERVER` perm ## Examples -The following example drops an assembly named `pointudt` from the list of trusted assemblies for the server. +The following example drops an assembly hash from the list of trusted assemblies for the server. ``` EXEC sp_drop_trusted_assembly -N'pointudt, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarchitecture=msil'; +0x8893AD6D78D14EE43DF482E2EAD44123E3A0B684A8873C3F7BF3B5E8D8F09503F3E62370CE742BBC96FE3394477214B84C7C1B0F7A04DCC788FA99C2C09DFCCC; ``` ## See Also From 58546a17f728af0e1745a4b31875e975367ffffb Mon Sep 17 00:00:00 2001 From: Theano Petersen Date: Fri, 7 Jul 2017 22:24:20 -0700 Subject: [PATCH 200/336] redo toc --- docs/tools/sql-server-profiler/TOC.md | 77 +++++++++++++-------------- 1 file changed, 38 insertions(+), 39 deletions(-) diff --git a/docs/tools/sql-server-profiler/TOC.md b/docs/tools/sql-server-profiler/TOC.md index cb45aefa354..442b3931080 100644 --- a/docs/tools/sql-server-profiler/TOC.md +++ b/docs/tools/sql-server-profiler/TOC.md @@ -2,57 +2,56 @@ # [Run SQL Server Profiler](start-sql-server-profiler.md) # [SQL Server Profiler Templates and Permissions](sql-server-profiler-templates-and-permissions.md) ## [SQL Server Profiler Templates](sql-server-profiler-templates.md) +## [Create a Trace Template (SQL Server Profiler)](create-a-trace-template-sql-server-profiler.md) +## [Modify a Trace Template (SQL Server Profiler)](modify-a-trace-template-sql-server-profiler.md) +## [Modify Trace Templates](modify-trace-templates.md) +## [Derive a Template from a Running Trace (SQL Server Profiler)](derive-a-template-from-a-running-trace-sql-server-profiler.md) +## [Derive a Template from a Trace File or Trace Table (SQL Server Profiler)](derive-a-template-from-a-trace-file-or-trace-table-sql-server-profiler.md) +## [Export a Trace Template (SQL Server Profiler)](export-a-trace-template-sql-server-profiler.md) +## [Import a Trace Template (SQL Server Profiler)](import-a-trace-template-sql-server-profiler.md) ## [Permissions Required to Run SQL Server Profiler](permissions-required-to-run-sql-server-profiler.md) +# [Set Global Trace Options (SQL Server Profiler)](set-global-trace-options-sql-server-profiler.md) +## [Set Trace Definition Defaults (SQL Server Profiler)](set-trace-definition-defaults-sql-server-profiler.md) +## [Set Trace Display Defaults (SQL Server Profiler)](set-trace-display-defaults-sql-server-profiler.md) # [Create a Trace (SQL Server Profiler)](create-a-trace-sql-server-profiler.md) -## [Specify Events and Data Columns for a Trace File (SQL Server Profiler)](specify-events-and-data-columns-for-a-trace-file-sql-server-profiler.md) -## [Save Trace Results to a File (SQL Server Profiler)](save-trace-results-to-a-file-sql-server-profiler.md) -## [Save Trace Results to a Table (SQL Server Profiler)](save-trace-results-to-a-table-sql-server-profiler.md) -## [Filter Events in a Trace (SQL Server Profiler)](filter-events-in-a-trace-sql-server-profiler.md) -## [View Filter Information (SQL Server Profiler)](view-filter-information-sql-server-profiler.md) -## [Modify a Filter (SQL Server Profiler)](modify-a-filter-sql-server-profiler.md) -## [Set a Maximum File Size for a Trace File (SQL Server Profiler)](set-a-maximum-file-size-for-a-trace-file-sql-server-profiler.md) -## [Set a Maximum Table Size for a Trace Table (SQL Server Profiler)](set-a-maximum-table-size-for-a-trace-table-sql-server-profiler.md) +## [Create a Transact-SQL Script for Running a Trace (SQL Server Profiler)](create-a-transact-sql-script-for-running-a-trace-sql-server-profiler.md) # [Start a Trace](start-a-trace.md) ## [Start a Trace Automatically after Connecting to a Server (SQL Server Profiler)](start-a-trace-automatically-after-connecting-to-a-server-sql-server-profiler.md) -## [Filter Events Based on the Event Start Time (SQL Server Profiler)](filter-events-based-on-the-event-start-time-sql-server-profiler.md) -## [Filter Events Based on the Event End Time (SQL Server Profiler)](filter-events-based-on-the-event-end-time-sql-server-profiler.md) -## [Filter Server Process IDs (SPIDs) in a Trace (SQL Server Profiler)](filter-server-process-ids-spids-in-a-trace-sql-server-profiler.md) +# [Find a Value or Data Column While Tracing (SQL Server Profiler)](find-a-value-or-data-column-while-tracing-sql-server-profiler.md) +# [Organize Columns Displayed in a Trace (SQL Server Profiler)](organize-columns-displayed-in-a-trace-sql-server-profiler.md) +# [Extract a Script from a Trace (SQL Server Profiler)](extract-a-script-from-a-trace-sql-server-profiler.md) # [Pause a Trace (SQL Server Profiler)](pause-a-trace-sql-server-profiler.md) # [Stop a Trace (SQL Server Profiler)](stop-a-trace-sql-server-profiler.md) # [Run a Trace After It Has Been Paused or Stopped (SQL Server Profiler)](run-a-trace-after-it-has-been-paused-or-stopped-sql-server-profiler.md) # [Clear a Trace Window (SQL Server Profiler)](clear-a-trace-window-sql-server-profiler.md) # [Close a Trace Window (SQL Server Profiler)](close-a-trace-window-sql-server-profiler.md) -# [Set Trace Definition Defaults (SQL Server Profiler)](set-trace-definition-defaults-sql-server-profiler.md) -# [Set Trace Display Defaults (SQL Server Profiler)](set-trace-display-defaults-sql-server-profiler.md) -# [Open a Trace File (SQL Server Profiler)](open-a-trace-file-sql-server-profiler.md) -# [Open a Trace Table (SQL Server Profiler)](open-a-trace-table-sql-server-profiler.md) -# [Replay a Trace Table (SQL Server Profiler)](replay-a-trace-table-sql-server-profiler.md) -# [Replay a Trace File (SQL Server Profiler)](replay-a-trace-file-sql-server-profiler.md) -# [Replay a Single Event at a Time (SQL Server Profiler)](replay-a-single-event-at-a-time-sql-server-profiler.md) -# [Replay to a Breakpoint (SQL Server Profiler)](replay-to-a-breakpoint-sql-server-profiler.md) -# [Replay to a Cursor (SQL Server Profiler)](replay-to-a-cursor-sql-server-profiler.md) -# [Replay a Transact-SQL Script (SQL Server Profiler)](replay-a-transact-sql-script-sql-server-profiler.md) -# [Create a Trace Template (SQL Server Profiler)](create-a-trace-template-sql-server-profiler.md) -# [Modify a Trace Template (SQL Server Profiler)](modify-a-trace-template-sql-server-profiler.md) -# [Set Global Trace Options (SQL Server Profiler)](set-global-trace-options-sql-server-profiler.md) -# [Find a Value or Data Column While Tracing (SQL Server Profiler)](find-a-value-or-data-column-while-tracing-sql-server-profiler.md) -# [Derive a Template from a Running Trace (SQL Server Profiler)](derive-a-template-from-a-running-trace-sql-server-profiler.md) -# [Derive a Template from a Trace File or Trace Table (SQL Server Profiler)](derive-a-template-from-a-trace-file-or-trace-table-sql-server-profiler.md) -# [Create a Transact-SQL Script for Running a Trace (SQL Server Profiler)](create-a-transact-sql-script-for-running-a-trace-sql-server-profiler.md) -# [Export a Trace Template (SQL Server Profiler)](export-a-trace-template-sql-server-profiler.md) -# [Import a Trace Template (SQL Server Profiler)](import-a-trace-template-sql-server-profiler.md) -# [Extract a Script from a Trace (SQL Server Profiler)](extract-a-script-from-a-trace-sql-server-profiler.md) +# [View and Analyze Traces with SQL Server Profiler](view-and-analyze-traces-with-sql-server-profiler.md) +## [Analyze Deadlocks with SQL Server Profiler](analyze-deadlocks-with-sql-server-profiler.md) +## [Analyze Queries with SHOWPLAN Results in SQL Server Profiler](analyze-queries-with-showplan-results-in-sql-server-profiler.md) # [Correlate a Trace with Windows Performance Log Data (SQL Server Profiler)](correlate-a-trace-with-windows-performance-log-data-sql-server-profiler.md) -# [Organize Columns Displayed in a Trace (SQL Server Profiler)](organize-columns-displayed-in-a-trace-sql-server-profiler.md) -# [Save Traces and Trace Templates](save-traces-and-trace-templates.md) -# [Modify Trace Templates](modify-trace-templates.md) # [Correlate a Trace with Windows Performance Log Data](correlate-a-trace-with-windows-performance-log-data.md) -# [View and Analyze Traces with SQL Server Profiler](view-and-analyze-traces-with-sql-server-profiler.md) -# [Analyze Deadlocks with SQL Server Profiler](analyze-deadlocks-with-sql-server-profiler.md) -# [Analyze Queries with SHOWPLAN Results in SQL Server Profiler](analyze-queries-with-showplan-results-in-sql-server-profiler.md) -# [Filter Traces with SQL Server Profiler](filter-traces-with-sql-server-profiler.md) +# [Filter Traces with SQL Server Profiler](filter-traces-with-sql-server-profiler.md) # [Filter Events in a Trace (SQL Server Profiler)](filter-events-in-a-trace-sql-server-profiler.md) +## [View Filter Information (SQL Server Profiler)](view-filter-information-sql-server-profiler.md) +## [Modify a Filter (SQL Server Profiler)](modify-a-filter-sql-server-profiler.md) +## [Filter Events Based on the Event Start Time (SQL Server Profiler)](filter-events-based-on-the-event-start-time-sql-server-profiler.md) +## [Filter Events Based on the Event End Time (SQL Server Profiler)](filter-events-based-on-the-event-end-time-sql-server-profiler.md) +## [Filter Server Process IDs (SPIDs) in a Trace (SQL Server Profiler)](filter-server-process-ids-spids-in-a-trace-sql-server-profiler.md) +# [Save Traces and Trace Templates](save-traces-and-trace-templates.md) +# [Save Trace Results to a File (SQL Server Profiler)](save-trace-results-to-a-file-sql-server-profiler.md) +## [Set a Maximum File Size for a Trace File (SQL Server Profiler)](set-a-maximum-file-size-for-a-trace-file-sql-server-profiler.md) +## [Specify Events and Data Columns for a Trace File (SQL Server Profiler)](specify-events-and-data-columns-for-a-trace-file-sql-server-profiler.md) +# [Save Trace Results to a Table (SQL Server Profiler)](save-trace-results-to-a-table-sql-server-profiler.md) +## [Set a Maximum Table Size for a Trace Table (SQL Server Profiler)](set-a-maximum-table-size-for-a-trace-table-sql-server-profiler.md) +# [Open a Trace File (SQL Server Profiler)](open-a-trace-file-sql-server-profiler.md) +# [Open a Trace Table (SQL Server Profiler)](open-a-trace-table-sql-server-profiler.md) # [Replay Traces](replay-traces.md) ## [Replay Requirements](replay-requirements.md) ## [Replay Options (SQL Server Profiler)](replay-options-sql-server-profiler.md) ## [Considerations for Replaying Traces (SQL Server Profiler)](considerations-for-replaying-traces-sql-server-profiler.md) -# [SQL Server Profiler F1 Help](sql-server-profiler-f1-help.md) +## [Replay a Trace Table (SQL Server Profiler)](replay-a-trace-table-sql-server-profiler.md) +## [Replay a Trace File (SQL Server Profiler)](replay-a-trace-file-sql-server-profiler.md) +## [Replay a Single Event at a Time (SQL Server Profiler)](replay-a-single-event-at-a-time-sql-server-profiler.md) +## [Replay to a Breakpoint (SQL Server Profiler)](replay-to-a-breakpoint-sql-server-profiler.md) +## [Replay to a Cursor (SQL Server Profiler)](replay-to-a-cursor-sql-server-profiler.md) +## [Replay a Transact-SQL Script (SQL Server Profiler)](replay-a-transact-sql-script-sql-server-profiler.md) +# [SQL Server Profiler dialog box commands](sql-server-profiler-f1-help.md) From 56dfe520c66acb9c2941cb220e515a159b4bc597 Mon Sep 17 00:00:00 2001 From: Theano Petersen Date: Fri, 7 Jul 2017 22:25:36 -0700 Subject: [PATCH 201/336] more --- docs/tools/sql-server-profiler/TOC.md | 70 +++++++++++++-------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/docs/tools/sql-server-profiler/TOC.md b/docs/tools/sql-server-profiler/TOC.md index 442b3931080..a0894a60ce1 100644 --- a/docs/tools/sql-server-profiler/TOC.md +++ b/docs/tools/sql-server-profiler/TOC.md @@ -11,47 +11,47 @@ ## [Import a Trace Template (SQL Server Profiler)](import-a-trace-template-sql-server-profiler.md) ## [Permissions Required to Run SQL Server Profiler](permissions-required-to-run-sql-server-profiler.md) # [Set Global Trace Options (SQL Server Profiler)](set-global-trace-options-sql-server-profiler.md) -## [Set Trace Definition Defaults (SQL Server Profiler)](set-trace-definition-defaults-sql-server-profiler.md) -## [Set Trace Display Defaults (SQL Server Profiler)](set-trace-display-defaults-sql-server-profiler.md) -# [Create a Trace (SQL Server Profiler)](create-a-trace-sql-server-profiler.md) -## [Create a Transact-SQL Script for Running a Trace (SQL Server Profiler)](create-a-transact-sql-script-for-running-a-trace-sql-server-profiler.md) +## [Set Trace Definition Defaults](set-trace-definition-defaults-sql-server-profiler.md) +## [Set Trace Display Defaults](set-trace-display-defaults-sql-server-profiler.md) +# [Create a Trace](create-a-trace-sql-server-profiler.md) +## [Create a Transact-SQL Script for Running a Trace](create-a-transact-sql-script-for-running-a-trace-sql-server-profiler.md) # [Start a Trace](start-a-trace.md) -## [Start a Trace Automatically after Connecting to a Server (SQL Server Profiler)](start-a-trace-automatically-after-connecting-to-a-server-sql-server-profiler.md) -# [Find a Value or Data Column While Tracing (SQL Server Profiler)](find-a-value-or-data-column-while-tracing-sql-server-profiler.md) -# [Organize Columns Displayed in a Trace (SQL Server Profiler)](organize-columns-displayed-in-a-trace-sql-server-profiler.md) -# [Extract a Script from a Trace (SQL Server Profiler)](extract-a-script-from-a-trace-sql-server-profiler.md) -# [Pause a Trace (SQL Server Profiler)](pause-a-trace-sql-server-profiler.md) -# [Stop a Trace (SQL Server Profiler)](stop-a-trace-sql-server-profiler.md) -# [Run a Trace After It Has Been Paused or Stopped (SQL Server Profiler)](run-a-trace-after-it-has-been-paused-or-stopped-sql-server-profiler.md) -# [Clear a Trace Window (SQL Server Profiler)](clear-a-trace-window-sql-server-profiler.md) -# [Close a Trace Window (SQL Server Profiler)](close-a-trace-window-sql-server-profiler.md) +## [Start a Trace Automatically after Connecting to a Server](start-a-trace-automatically-after-connecting-to-a-server-sql-server-profiler.md) +# [Find a Value or Data Column While Tracing](find-a-value-or-data-column-while-tracing-sql-server-profiler.md) +# [Organize Columns Displayed in a Trace](organize-columns-displayed-in-a-trace-sql-server-profiler.md) +# [Extract a Script from a Trace](extract-a-script-from-a-trace-sql-server-profiler.md) +# [Pause a Trace](pause-a-trace-sql-server-profiler.md) +# [Stop a Trace](stop-a-trace-sql-server-profiler.md) +# [Run a Trace After It Has Been Paused or Stopped](run-a-trace-after-it-has-been-paused-or-stopped-sql-server-profiler.md) +# [Clear a Trace Window](clear-a-trace-window-sql-server-profiler.md) +# [Close a Trace Window](close-a-trace-window-sql-server-profiler.md) # [View and Analyze Traces with SQL Server Profiler](view-and-analyze-traces-with-sql-server-profiler.md) ## [Analyze Deadlocks with SQL Server Profiler](analyze-deadlocks-with-sql-server-profiler.md) ## [Analyze Queries with SHOWPLAN Results in SQL Server Profiler](analyze-queries-with-showplan-results-in-sql-server-profiler.md) -# [Correlate a Trace with Windows Performance Log Data (SQL Server Profiler)](correlate-a-trace-with-windows-performance-log-data-sql-server-profiler.md) +# [Correlate a Trace with Windows Performance Log Data](correlate-a-trace-with-windows-performance-log-data-sql-server-profiler.md) # [Correlate a Trace with Windows Performance Log Data](correlate-a-trace-with-windows-performance-log-data.md) -# [Filter Traces with SQL Server Profiler](filter-traces-with-sql-server-profiler.md) # [Filter Events in a Trace (SQL Server Profiler)](filter-events-in-a-trace-sql-server-profiler.md) -## [View Filter Information (SQL Server Profiler)](view-filter-information-sql-server-profiler.md) -## [Modify a Filter (SQL Server Profiler)](modify-a-filter-sql-server-profiler.md) -## [Filter Events Based on the Event Start Time (SQL Server Profiler)](filter-events-based-on-the-event-start-time-sql-server-profiler.md) -## [Filter Events Based on the Event End Time (SQL Server Profiler)](filter-events-based-on-the-event-end-time-sql-server-profiler.md) -## [Filter Server Process IDs (SPIDs) in a Trace (SQL Server Profiler)](filter-server-process-ids-spids-in-a-trace-sql-server-profiler.md) +# [Filter Traces with SQL Server Profiler](filter-traces-with-sql-server-profiler.md) # [Filter Events in a Trace](filter-events-in-a-trace-sql-server-profiler.md) +## [View Filter Information](view-filter-information-sql-server-profiler.md) +## [Modify a Filter](modify-a-filter-sql-server-profiler.md) +## [Filter Events Based on the Event Start Time](filter-events-based-on-the-event-start-time-sql-server-profiler.md) +## [Filter Events Based on the Event End Time](filter-events-based-on-the-event-end-time-sql-server-profiler.md) +## [Filter Server Process IDs (SPIDs) in a Trace](filter-server-process-ids-spids-in-a-trace-sql-server-profiler.md) # [Save Traces and Trace Templates](save-traces-and-trace-templates.md) -# [Save Trace Results to a File (SQL Server Profiler)](save-trace-results-to-a-file-sql-server-profiler.md) -## [Set a Maximum File Size for a Trace File (SQL Server Profiler)](set-a-maximum-file-size-for-a-trace-file-sql-server-profiler.md) -## [Specify Events and Data Columns for a Trace File (SQL Server Profiler)](specify-events-and-data-columns-for-a-trace-file-sql-server-profiler.md) -# [Save Trace Results to a Table (SQL Server Profiler)](save-trace-results-to-a-table-sql-server-profiler.md) -## [Set a Maximum Table Size for a Trace Table (SQL Server Profiler)](set-a-maximum-table-size-for-a-trace-table-sql-server-profiler.md) -# [Open a Trace File (SQL Server Profiler)](open-a-trace-file-sql-server-profiler.md) -# [Open a Trace Table (SQL Server Profiler)](open-a-trace-table-sql-server-profiler.md) +# [Save Trace Results to a File](save-trace-results-to-a-file-sql-server-profiler.md) +## [Set a Maximum File Size for a Trace File](set-a-maximum-file-size-for-a-trace-file-sql-server-profiler.md) +## [Specify Events and Data Columns for a Trace File](specify-events-and-data-columns-for-a-trace-file-sql-server-profiler.md) +# [Save Trace Results to a Table](save-trace-results-to-a-table-sql-server-profiler.md) +## [Set a Maximum Table Size for a Trace Table](set-a-maximum-table-size-for-a-trace-table-sql-server-profiler.md) +# [Open a Trace File](open-a-trace-file-sql-server-profiler.md) +# [Open a Trace Table](open-a-trace-table-sql-server-profiler.md) # [Replay Traces](replay-traces.md) ## [Replay Requirements](replay-requirements.md) -## [Replay Options (SQL Server Profiler)](replay-options-sql-server-profiler.md) -## [Considerations for Replaying Traces (SQL Server Profiler)](considerations-for-replaying-traces-sql-server-profiler.md) -## [Replay a Trace Table (SQL Server Profiler)](replay-a-trace-table-sql-server-profiler.md) -## [Replay a Trace File (SQL Server Profiler)](replay-a-trace-file-sql-server-profiler.md) -## [Replay a Single Event at a Time (SQL Server Profiler)](replay-a-single-event-at-a-time-sql-server-profiler.md) -## [Replay to a Breakpoint (SQL Server Profiler)](replay-to-a-breakpoint-sql-server-profiler.md) -## [Replay to a Cursor (SQL Server Profiler)](replay-to-a-cursor-sql-server-profiler.md) -## [Replay a Transact-SQL Script (SQL Server Profiler)](replay-a-transact-sql-script-sql-server-profiler.md) +## [Replay Options](replay-options-sql-server-profiler.md) +## [Considerations for Replaying Traces](considerations-for-replaying-traces-sql-server-profiler.md) +## [Replay a Trace Table](replay-a-trace-table-sql-server-profiler.md) +## [Replay a Trace File](replay-a-trace-file-sql-server-profiler.md) +## [Replay a Single Event at a Time](replay-a-single-event-at-a-time-sql-server-profiler.md) +## [Replay to a Breakpoint](replay-to-a-breakpoint-sql-server-profiler.md) +## [Replay to a Cursor](replay-to-a-cursor-sql-server-profiler.md) +## [Replay a Transact-SQL Script](replay-a-transact-sql-script-sql-server-profiler.md) # [SQL Server Profiler dialog box commands](sql-server-profiler-f1-help.md) From ea976ee20814d22b1e100da3030a750353d9a7e3 Mon Sep 17 00:00:00 2001 From: Theano Petersen Date: Fri, 7 Jul 2017 22:36:24 -0700 Subject: [PATCH 202/336] fix --- docs/tools/sql-server-profiler/TOC.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/docs/tools/sql-server-profiler/TOC.md b/docs/tools/sql-server-profiler/TOC.md index a0894a60ce1..7555a57010b 100644 --- a/docs/tools/sql-server-profiler/TOC.md +++ b/docs/tools/sql-server-profiler/TOC.md @@ -2,15 +2,15 @@ # [Run SQL Server Profiler](start-sql-server-profiler.md) # [SQL Server Profiler Templates and Permissions](sql-server-profiler-templates-and-permissions.md) ## [SQL Server Profiler Templates](sql-server-profiler-templates.md) -## [Create a Trace Template (SQL Server Profiler)](create-a-trace-template-sql-server-profiler.md) -## [Modify a Trace Template (SQL Server Profiler)](modify-a-trace-template-sql-server-profiler.md) +## [Create a Trace Template](create-a-trace-template-sql-server-profiler.md) +## [Modify a Trace Template](modify-a-trace-template-sql-server-profiler.md) ## [Modify Trace Templates](modify-trace-templates.md) -## [Derive a Template from a Running Trace (SQL Server Profiler)](derive-a-template-from-a-running-trace-sql-server-profiler.md) -## [Derive a Template from a Trace File or Trace Table (SQL Server Profiler)](derive-a-template-from-a-trace-file-or-trace-table-sql-server-profiler.md) -## [Export a Trace Template (SQL Server Profiler)](export-a-trace-template-sql-server-profiler.md) -## [Import a Trace Template (SQL Server Profiler)](import-a-trace-template-sql-server-profiler.md) +## [Derive a Template from a Running Trace](derive-a-template-from-a-running-trace-sql-server-profiler.md) +## [Derive a Template from a Trace File or Trace Table](derive-a-template-from-a-trace-file-or-trace-table-sql-server-profiler.md) +## [Export a Trace Template](export-a-trace-template-sql-server-profiler.md) +## [Import a Trace Template](import-a-trace-template-sql-server-profiler.md) ## [Permissions Required to Run SQL Server Profiler](permissions-required-to-run-sql-server-profiler.md) -# [Set Global Trace Options (SQL Server Profiler)](set-global-trace-options-sql-server-profiler.md) +# [Set Global Trace Options](set-global-trace-options-sql-server-profiler.md) ## [Set Trace Definition Defaults](set-trace-definition-defaults-sql-server-profiler.md) ## [Set Trace Display Defaults](set-trace-display-defaults-sql-server-profiler.md) # [Create a Trace](create-a-trace-sql-server-profiler.md) @@ -30,7 +30,8 @@ ## [Analyze Queries with SHOWPLAN Results in SQL Server Profiler](analyze-queries-with-showplan-results-in-sql-server-profiler.md) # [Correlate a Trace with Windows Performance Log Data](correlate-a-trace-with-windows-performance-log-data-sql-server-profiler.md) # [Correlate a Trace with Windows Performance Log Data](correlate-a-trace-with-windows-performance-log-data.md) -# [Filter Traces with SQL Server Profiler](filter-traces-with-sql-server-profiler.md) # [Filter Events in a Trace](filter-events-in-a-trace-sql-server-profiler.md) +# [Filter Traces with SQL Server Profiler](filter-traces-with-sql-server-profiler.md) +# [Filter Events in a Trace](filter-events-in-a-trace-sql-server-profiler.md) ## [View Filter Information](view-filter-information-sql-server-profiler.md) ## [Modify a Filter](modify-a-filter-sql-server-profiler.md) ## [Filter Events Based on the Event Start Time](filter-events-based-on-the-event-start-time-sql-server-profiler.md) From a65559ed325adc08b1ca25cf24a21799f2ea25c7 Mon Sep 17 00:00:00 2001 From: Theano Petersen Date: Fri, 7 Jul 2017 22:42:51 -0700 Subject: [PATCH 203/336] fix --- docs/tools/sql-server-profiler/TOC.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tools/sql-server-profiler/TOC.md b/docs/tools/sql-server-profiler/TOC.md index 7555a57010b..13c29473003 100644 --- a/docs/tools/sql-server-profiler/TOC.md +++ b/docs/tools/sql-server-profiler/TOC.md @@ -31,7 +31,7 @@ # [Correlate a Trace with Windows Performance Log Data](correlate-a-trace-with-windows-performance-log-data-sql-server-profiler.md) # [Correlate a Trace with Windows Performance Log Data](correlate-a-trace-with-windows-performance-log-data.md) # [Filter Traces with SQL Server Profiler](filter-traces-with-sql-server-profiler.md) -# [Filter Events in a Trace](filter-events-in-a-trace-sql-server-profiler.md) +## [Filter Events in a Trace](filter-events-in-a-trace-sql-server-profiler.md) ## [View Filter Information](view-filter-information-sql-server-profiler.md) ## [Modify a Filter](modify-a-filter-sql-server-profiler.md) ## [Filter Events Based on the Event Start Time](filter-events-based-on-the-event-start-time-sql-server-profiler.md) From d8309c74819e0c61f55a6b91dca54f2601691fb3 Mon Sep 17 00:00:00 2001 From: Theano Petersen Date: Sat, 8 Jul 2017 12:37:29 -0700 Subject: [PATCH 204/336] Update TOC.md --- docs/tools/sql-server-profiler/TOC.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tools/sql-server-profiler/TOC.md b/docs/tools/sql-server-profiler/TOC.md index 13c29473003..f61430a0f88 100644 --- a/docs/tools/sql-server-profiler/TOC.md +++ b/docs/tools/sql-server-profiler/TOC.md @@ -55,4 +55,4 @@ ## [Replay to a Breakpoint](replay-to-a-breakpoint-sql-server-profiler.md) ## [Replay to a Cursor](replay-to-a-cursor-sql-server-profiler.md) ## [Replay a Transact-SQL Script](replay-a-transact-sql-script-sql-server-profiler.md) -# [SQL Server Profiler dialog box commands](sql-server-profiler-f1-help.md) +# [SQL Server Profiler dialog boxes](sql-server-profiler-f1-help.md) From 09a8a0984d1cb5feb8cc6862d18f247bc71e4b03 Mon Sep 17 00:00:00 2001 From: Theano Petersen Date: Sat, 8 Jul 2017 13:03:02 -0700 Subject: [PATCH 205/336] Update what-s-new-in-sql-server-2017.md --- docs/sql-server/what-s-new-in-sql-server-2017.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/docs/sql-server/what-s-new-in-sql-server-2017.md b/docs/sql-server/what-s-new-in-sql-server-2017.md index 0824a9fb173..6d31f0fda03 100644 --- a/docs/sql-server/what-s-new-in-sql-server-2017.md +++ b/docs/sql-server/what-s-new-in-sql-server-2017.md @@ -24,12 +24,8 @@ SQL Server 2017 represents a major step towards making SQL Server a platform tha >**Run SQL Server on Linux!** For more information, see [SQL Server on Linux Documentation](https://docs.microsoft.com/sql/linux/) and [What's new for SQL Server 2017 on Linux](https://docs.microsoft.com/sql/linux/sql-server-linux-whats-new). ## Latest release -New in the **SQL Server 2017 Release Candidate** (RC0, June 2017): - -- -- -- - +**SQL Server 2017 Release Candidate** (RC1, July 2017) + ## SQL Server Database Engine SQL Server 2017 includes many new Database Engine features, enhancements, and performance improvements. From 1581bfec389f09ea8f8b63f33058890f7ee60d02 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Mon, 10 Jul 2017 08:59:57 -0700 Subject: [PATCH 206/336] What's new db eng --- .../what-s-new-in-sql-server-2017-database-engine.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md b/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md index 6fc41766d32..1d06991869f 100644 --- a/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md +++ b/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md @@ -1,7 +1,7 @@ --- title: "What's New in SQL Server 2017 (Database Engine) | Microsoft Docs" ms.custom: "" -ms.date: "06/22/2017" +ms.date: "07/10/2017" ms.prod: "sql-server-2017" ms.reviewer: "" ms.suite: "" @@ -21,10 +21,10 @@ manager: "jhubbard" **Note:** SQL Server 2017 also includes the features added in SQL Server 2016 service packs. For those items, see [What's New in SQL Server 2016 (Database Engine)](../../database-engine/configure-windows/what-s-new-in-sql-server-2016-database-engine.md). -## SQL Server Database Engine (CTP 3.0) +## SQL Server Database Engine (RC1) - CLR assemblies can now be added to a whitelist, as a work-around for the `clr strict security` feature described in CTP 2.0. [sp_add_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md), [sp_drop_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md), and [sys.trusted_asssemblies](../../relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md) are added to support the white list of trusted assemblies. -## SQL Server Database Engine (CTP 2.1 and earlier) +## SQL Server Database Engine (Previous CTP's) - CLR uses Code Access Security (CAS) in the .NET Framework, which is no longer supported as a security boundary. A CLR assembly created with `PERMISSION_SET = SAFE` may be able to access external system resources, call unmanaged code, and acquire sysadmin privileges. Beginning with [!INCLUDE[sssqlv14-md](../../includes/sssqlv14-md.md)], an `sp_configure` option called `clr strict security` is introduced to enhance the security of CLR assemblies. `clr strict security` is enabled by default, and treats `SAFE` and `EXTERNAL_ACCESS` assemblies as if they were marked `UNSAFE`. The `clr strict security` option can be disabled for backward compatibility, but this is not recommended. Microsoft recommends that all assemblies be signed by a certificate or asymmetric key with a corresponding login that has been granted `UNSAFE ASSEMBLY` permission in the master database. For more information, see [CLR strict security](clr-strict-security.md). - A new, DMF [sys.dm_db_log_stats](../../relational-databases/system-dynamic-management-views/sys-dm-db-log-stats-transact-sql.md), is introduced to expose summary level attributes and information on transaction log files; useful for monitoring the health of the transaction log. - Resumable online index rebuild. Resumable online index rebuild allows you to resume an online index rebuild operation from where it stopped after a failure (such as a failover to a replica or insufficient disk space). You can also pause and later resume an online index rebuild operation. For example, you might need to temporarily free up systems resources in order to execute a high priority task or complete the index rebuild in another maintenance window if the available maintenance windows is too short for a large table. Finally, resumable online index rebuild does not require significant log space, which allows you to perform log truncation while the resumable rebuild operation is running. See [ALTER INDEX](../../t-sql/statements/alter-index-transact-sql.md) and [Guidelines for online index operations](../../relational-databases/indexes/guidelines-for-online-index-operations.md). From 81d1e166ea273a73aff453275058bc5332eb4897 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Mon, 10 Jul 2017 09:04:53 -0700 Subject: [PATCH 207/336] Updated error messages to improve readability. --- ...lity-group-for-distributed-transactions.md | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index 0023c0080bc..c5e8f799a78 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -108,26 +108,35 @@ If the cases above happen while `DTC_SUPPORT = NONE`, and the primary replica fa The new SQL Server error log has an entry like the example below: ``` -Microsoft Distributed Transaction Coordinator (MS DTC) failed to reenlist citing that the database RMID does not match the RMID [xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx] associated with the transaction.  Please manually resolve the transaction. - SQL Server detected a DTC/KTM in-doubt transaction with UOW  {yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy}.Please resolve it following the guideline for Troubleshooting DTC Transactions. +Microsoft Distributed Transaction Coordinator (MS DTC) +failed to reenlist citing that the database RMID does +not match the RMID [xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx] +associated with the transaction.  Please manually resolve +the transaction. + +SQL Server detected a DTC/KTM in-doubt transaction with UOW  +{yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy}.Please resolve it +following the guideline for Troubleshooting DTC Transactions. ``` The above example shows that the DTC service could not enlist the database from the new primary replica in the transaction that was created before failover. This is why the database is suspect. In order to recover the database you need to either commit or rollback the transaction manually. >[!WARNING] ->When you manually commit or rollback a transaction it can affect an application. Verify that the action of commit or rollback is consistent with your application requirements. Run one of the following scripts: +>When you manually commit or rollback a transaction it can affect an application. Verify that the action of commit or rollback is consistent with your application requirements. -* To commit the transaction, update the following script. Replace the `yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` with the in-doubt transaction UOW from the previous error message, and run: +Run only one of the following scripts: - ```transact-sql - kill 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy' with commit - ``` + * To commit the transaction, update the following script. Replace the `yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` with the in-doubt transaction UOW from the previous error message, and run: -* To rollback the transaction, update the following script. Replace the `yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` with the in-doubt transaction UOW from the previous error message, and run: + ```transact-sql + kill 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy' with commit + ``` - ```transact-sql - kill 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy' with rollback - ``` + * To rollback the transaction, update the following script. Replace the `yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` with the in-doubt transaction UOW from the previous error message, and run: + + ```transact-sql + kill 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy' with rollback + ``` After you commit or rollback the transaction, you can use `ALTER DATABASE` to set the database online. Update the following script. Set the database name for the name of the suspect database. For example: From 04d8695547416b9df01c20b5d7481df59014b239 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Mon, 10 Jul 2017 09:31:47 -0700 Subject: [PATCH 208/336] Updated caps in T-SQL Samples. --- ...nfigure-availability-group-for-distributed-transactions.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index c5e8f799a78..841db9b987f 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -129,13 +129,13 @@ Run only one of the following scripts: * To commit the transaction, update the following script. Replace the `yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` with the in-doubt transaction UOW from the previous error message, and run: ```transact-sql - kill 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy' with commit + KILL 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy' WITH COMMIT ``` * To rollback the transaction, update the following script. Replace the `yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` with the in-doubt transaction UOW from the previous error message, and run: ```transact-sql - kill 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy' with rollback + KILL 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy' WITH ROLLBACK ``` After you commit or rollback the transaction, you can use `ALTER DATABASE` to set the database online. Update the following script. Set the database name for the name of the suspect database. For example: From fc582d245f228ec8d72f1d949306d040972c39ce Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Mon, 10 Jul 2017 10:31:25 -0700 Subject: [PATCH 209/336] Add changes. --- ...lity-group-for-distributed-transactions.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index 841db9b987f..174c10b2f2d 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -35,13 +35,13 @@ SQL Server 2016 also supports distributed transactions for databases in availabi >[!NOTE] >SQL Server does not prevent distributed transactions for databases in an availability group - even when the availability group is not configured for distributed transactions. However, databases in an availability group that are not configured for distributed transactions are vulnerable to in-doubt transactions under specific scenarios. -All instances of SQL Server that will participate in the distributed transaction must be SQL Server 2016 or later. +All instances of SQL Server that participate in the distributed transaction must be SQL Server 2016 or later. Availability groups must be running on Windows Server 2016 or Windows Server 2012 R2. For Windows Server 2012 R2, you must install the update in KB3090973 available at [https://support.microsoft.com/en-us/kb/3090973](https://support.microsoft.com/en-us/kb/3090973). ## Create an availability group for distributed transactions -You can create an availability group for distributed transactions on SQL Server 2016 or later. To create an availability group for distributed transactions, include `DTC_SUPPORT = PER_DB` in the availability group definition. The example script below creates an availability group for distributed transactions. +You can create an availability group for distributed transactions on SQL Server 2016 or later. To create an availability group for distributed transactions, include `DTC_SUPPORT = PER_DB` in the availability group definition. The following script creates an availability group for distributed transactions. ```transact-sql CREATE AVAILABILITY GROUP MyAG @@ -63,7 +63,7 @@ CREATE AVAILABILITY GROUP MyAG ``` >[!NOTE] ->The script above is a simple example of an availability group and is not designed for any specific production environment. +>The preceding script is a simple example of an availability group and is not designed for any specific production environment. ## Alter an availability group for distributed transactions @@ -83,7 +83,7 @@ ALTER AVAILABILITY GROUP MyaAG In order to participate in distributed transactions, an instance of SQL Server enlists with a distributed transaction coordinator (DTC) service. Normally the instance of SQL Server enlists with the DTC service on the local server. The DTC service assigns the instance of SQL Server a resource manager identification (RMID). In the default configuration, all databases on an instance of SQL Server use the same RMID. The instance of SQL Server is a *resource manager* for DTC transactions. -When a database is in an availability group, the read-write copy of the database - or primary replica - may move to a different instance of SQL Server. To support distributed transactions during this movement, each database must have a unique RMID. When an availability group is configured with `DTC_SUPPORT = PER_DB` SQL Server registers an RMID for each database in the availability group with the DTC service. In this configuration, the database is a resource manager for DTC transactions. +When a database is in an availability group, the read-write copy of the database - or primary replica - may move to a different instance of SQL Server. To support distributed transactions during this movement, each database must have a unique RMID. When an availability group is configured with `DTC_SUPPORT = PER_DB`, SQL Server registers an RMID for each database in the availability group with the DTC service. In this configuration, the database is a resource manager for DTC transactions. ## How distributed transactions work @@ -103,9 +103,9 @@ When DTC support is not configured per database, a database in an availability g * Add or remove a database while transactions are in flight. * Drop an availability group. -If the cases above happen while `DTC_SUPPORT = NONE`, and the primary replica fails over to a new instance of SQL Server, the instance will try to contact the DTC service to identify the transaction result. The DTC service will not be able to identify the transaction result because the resource manager was registered under the instance of SQL Server that hosted the primary replica before fail over. The database will go into SUSPECT state. +If the preceding cases happen while `DTC_SUPPORT = NONE`, and the primary replica fails over to a new instance of SQL Server, the instance tries to contact the DTC service to identify the transaction result. The DTC service cannot identify the transaction result because the resource manager was registered under the instance of SQL Server that hosted the primary replica before fail over. Therefore the database goes into SUSPECT state. -The new SQL Server error log has an entry like the example below: +The new SQL Server error log has an entry like the following example: ``` Microsoft Distributed Transaction Coordinator (MS DTC) @@ -119,26 +119,26 @@ SQL Server detected a DTC/KTM in-doubt transaction with UOW  following the guideline for Troubleshooting DTC Transactions. ``` -The above example shows that the DTC service could not enlist the database from the new primary replica in the transaction that was created before failover. This is why the database is suspect. In order to recover the database you need to either commit or rollback the transaction manually. +The preceding example shows that the DTC service could not enlist the database from the new primary replica in the transaction that was created before failover. This is why the database is suspect. In order to recover the database, either commit or rollback the transaction manually. >[!WARNING] >When you manually commit or rollback a transaction it can affect an application. Verify that the action of commit or rollback is consistent with your application requirements. Run only one of the following scripts: - * To commit the transaction, update the following script. Replace the `yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` with the in-doubt transaction UOW from the previous error message, and run: + * To commit the transaction, update the following script - replace the `yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` with the in-doubt transaction UOW from the previous error message, and run: ```transact-sql KILL 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy' WITH COMMIT ``` - * To rollback the transaction, update the following script. Replace the `yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` with the in-doubt transaction UOW from the previous error message, and run: + * To roll back the transaction, update the following script - replace the `yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` with the in-doubt transaction UOW from the previous error message, and run: ```transact-sql KILL 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy' WITH ROLLBACK ``` -After you commit or rollback the transaction, you can use `ALTER DATABASE` to set the database online. Update the following script. Set the database name for the name of the suspect database. For example: +After you commit or roll back the transaction, you can use `ALTER DATABASE` to set the database online. Update the following script. Set the database name for the name of the suspect database. For example: ```transact-sql ALTER DATABASE [DB1] SET ONLINE From edfc70057dbaedb6cd3ec5c27e2c64c644b9aa4c Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Mon, 10 Jul 2017 13:33:14 -0400 Subject: [PATCH 210/336] Removing Tutorials draft section from TOC --- docs/linux/TOC.md | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index e359092a8c8..00e4a601932 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -11,13 +11,6 @@ ## [Install - Ubuntu](quickstart-install-connect-ubuntu.md) ## Install - Docker -# Tutorials -## [1 - Migrate from Windows](sql-server-linux-migrate-restore-database.md) -## 1 - Migrate other data sources -## [2 - Secure the database](sql-server-linux-security-get-started.md) -## [3 - Optimize Performance](sql-server-linux-performance-get-started.md) -## [4 - Use Visual Studio Code](sql-server-linux-develop-use-vscode.md) - # Samples ## Unattended Install ### [Red Hat Enterprise Linux](sample-unattended-install-redhat.md) @@ -81,6 +74,8 @@ ### [Encrypting Connections](sql-server-linux-encrypted-connections.md) ## [Troubleshoot](sql-server-linux-troubleshooting-guide.md) +## [Optimize Performance](sql-server-linux-performance-get-started.md) + # Resources ## [SQL Server Documentation](../sql-server/sql-server-technical-documentation.md) ## [Stack Overflow](http://stackoverflow.com/questions/tagged/sql-server) From 136911dbd07b1738052b6a1b5fa83ed89cbe70ac Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Mon, 10 Jul 2017 10:43:54 -0700 Subject: [PATCH 211/336] Tried to improve acroinx. --- ...ure-availability-group-for-distributed-transactions.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index 174c10b2f2d..2087cabb4a5 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -119,26 +119,26 @@ SQL Server detected a DTC/KTM in-doubt transaction with UOW  following the guideline for Troubleshooting DTC Transactions. ``` -The preceding example shows that the DTC service could not enlist the database from the new primary replica in the transaction that was created before failover. This is why the database is suspect. In order to recover the database, either commit or rollback the transaction manually. +The preceding example shows that the DTC service could not enlist the database from the new primary replica in the transaction that was created before failover. The SQL Server instance cannot determine the result of the result of the distributed transaction so it marks the database as suspect. In order to recover the database, either commit or rollback the transaction manually. >[!WARNING] >When you manually commit or rollback a transaction it can affect an application. Verify that the action of commit or rollback is consistent with your application requirements. Run only one of the following scripts: - * To commit the transaction, update the following script - replace the `yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` with the in-doubt transaction UOW from the previous error message, and run: + * To commit the transaction, update and run the following script - replace the `yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` with the in-doubt transaction UOW from the previous error message, and run: ```transact-sql KILL 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy' WITH COMMIT ``` - * To roll back the transaction, update the following script - replace the `yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` with the in-doubt transaction UOW from the previous error message, and run: + * To roll back the transaction, update and run the following script - replace the `yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` with the in-doubt transaction UOW from the previous error message, and run: ```transact-sql KILL 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy' WITH ROLLBACK ``` -After you commit or roll back the transaction, you can use `ALTER DATABASE` to set the database online. Update the following script. Set the database name for the name of the suspect database. For example: +After you commit or roll back the transaction, you can use `ALTER DATABASE` to set the database online. Update and run the following script - set the database name for the name of the suspect database: ```transact-sql ALTER DATABASE [DB1] SET ONLINE From 1e66ab071777c1086a70d27d6383e13ec3583841 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Mon, 10 Jul 2017 13:54:11 -0400 Subject: [PATCH 212/336] Renaming configure TOC entries and moving Troubleshoot --- docs/linux/TOC.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index 00e4a601932..4d042fd6c29 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -26,8 +26,8 @@ ## Configure ### [Configure with mssql-conf](sql-server-linux-configure-mssql-conf.md) -### [Configure with environment variables](sql-server-linux-configure-environment-variables.md) -### [Configure Docker](sql-server-linux-setup-docker.md) +### [Environment variables](sql-server-linux-configure-environment-variables.md) +### [Docker](sql-server-linux-setup-docker.md) ### [Customer Feedback](sql-server-linux-customer-feedback.md) ## [Develop](sql-server-linux-develop-overview.md) @@ -72,11 +72,11 @@ ## [Security](sql-server-linux-security-overview.md) ### [Get started with security features](sql-server-linux-security-get-started.md) ### [Encrypting Connections](sql-server-linux-encrypted-connections.md) -## [Troubleshoot](sql-server-linux-troubleshooting-guide.md) ## [Optimize Performance](sql-server-linux-performance-get-started.md) # Resources +## [Troubleshoot](sql-server-linux-troubleshooting-guide.md) ## [SQL Server Documentation](../sql-server/sql-server-technical-documentation.md) ## [Stack Overflow](http://stackoverflow.com/questions/tagged/sql-server) ## [MSDN Forums](https://social.msdn.microsoft.com/Forums/en-US/home?category=sqlserver) From e8212573f3a25659127ed931d90ba39d24e576af Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Mon, 10 Jul 2017 12:08:51 -0700 Subject: [PATCH 213/336] Uploading to provide link destination --- ...vailability-group-for-distributed-transactions.md | 4 ++-- ...-always-on-availability-and-database-mirroring.md | 12 ++++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index 2087cabb4a5..1ceecf3338c 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -83,14 +83,14 @@ ALTER AVAILABILITY GROUP MyaAG In order to participate in distributed transactions, an instance of SQL Server enlists with a distributed transaction coordinator (DTC) service. Normally the instance of SQL Server enlists with the DTC service on the local server. The DTC service assigns the instance of SQL Server a resource manager identification (RMID). In the default configuration, all databases on an instance of SQL Server use the same RMID. The instance of SQL Server is a *resource manager* for DTC transactions. -When a database is in an availability group, the read-write copy of the database - or primary replica - may move to a different instance of SQL Server. To support distributed transactions during this movement, each database must have a unique RMID. When an availability group is configured with `DTC_SUPPORT = PER_DB`, SQL Server registers an RMID for each database in the availability group with the DTC service. In this configuration, the database is a resource manager for DTC transactions. +When a database is in an availability group, the read-write copy of the database - or primary replica - may move to a different instance of SQL Server. To support distributed transactions during this movement, each database must have a unique RMID. When an availability group has `DTC_SUPPORT = PER_DB`, SQL Server registers an RMID for each database in the availability group with the DTC service. In this configuration, the database is a resource manager for DTC transactions. ## How distributed transactions work The following list explains how distributed transactions work. 1. When an application requires a distributed transaction, it connects to a DTC service to begin the transaction. The client owns the DTC transaction. The DTC service is one resource manager. -2. The client then connects to a SQL Server instance and enlists in the DTC transaction. Normally, the SQL Server instance is also the resource manager. If the database is in an availability group and registered for DTC support, the database is a resource manager. The SQL Server instance or database resource manager exchange transaction information with the DTC service. +2. The client then connects to a SQL Server instance and enlists in the DTC transaction and creates another resource manager. Normally, the SQL Server instance this resource manager. If the database is in an availability group and registered for DTC support, the database is this resource manager. This resource manager exchanges transaction information with the DTC service. 3. The client does some work in the SQL Server instance under the DTC transaction. The SQL Server instance holds locks, and preserves references to the DTC transaction. 4. The client either disconnects or enlists in NULL. The client can disconnect from the SQL Server instance. The SQL Server instance unhooks the connection from the DTC transaction it is tracking. The transaction object remains in the list of SQL Server transactions because it is active. It stays active until the DTC resource manager indicates either abort or commit. 5. After the client has completed the work on all resources, the DTC service sends either abort or commit to the SQL Server instance - and any other resources in the transaction. diff --git a/docs/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md b/docs/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md index 8a8becfd0a0..09314efa590 100644 --- a/docs/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md +++ b/docs/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md @@ -33,17 +33,21 @@ SQL Server 2017 supports distributed transactions for databases in availability >[!NOTE] >[!INCLUDE[SQL Server 2016]](../../../includes/sssql15-md.md)]SQL Server 2016 included limited support for distributed transactions in for databases in an availability group. Distributed transactions using databases in an availability group were supported as long as no other databases in the transaction were in the same instance of SQL Server. For more information, see [SQL Server 2016 DTC Support In Availability Groups](http://blogs.technet.microsoft.com/dataplatform/2016/01/25/sql-server-2016-dtc-support-in-availability-gr) -### Handling unresolved transaction +## Distributed transactions -Distributed transaction coordinator (DTC) distributed transactions follow a 2-phase commit protocol (2PC). +Distributed transactions span two or more servers known as resource managers. The management of the transaction must be coordinated between the resource managers by a server component called a transaction manager. Each instance of the SQL Server Database Engine can operate as a resource manager in distributed transactions coordinated by transaction managers, such as Microsoft Distributed Transaction Coordinator (MS DTC), or other transaction managers that support the Open Group XA specification for distributed transaction processing. For more information, see the MS DTC documentation. + +A transaction within a single instance of the Database Engine that spans two or more databases is actually a distributed transaction. The instance manages the distributed transaction internally; to the user, it operates as a local transaction. + +At the application, a distributed transaction is managed much the same as a local transaction. At the end of the transaction, the application requests the transaction to be either committed or rolled back. A distributed commit must be managed differently by the transaction manager to minimize the risk that a network failure may result in some resource managers successfully committing while others roll back the transaction. This is achieved by managing the commit process in two phases (the prepare phase and the commit phase), which is known as a two-phase commit (2PC). - **Prepare phase** - When DTC receives a commit request, it sends a prepare command to all the resource managers involved in the transaction. Each resource manager then ensures that the transaction is durable (e.g. hardening log to disk). As each resource manager completes the prepare phase, it returns success or failure to the transaction manager. + When the transaction manager receives a commit request, it sends a prepare command to all of the resource managers involved in the transaction. Each resource manager then does everything required to make the transaction durable, and all buffers holding log images for the transaction are flushed to disk. As each resource manager completes the prepare phase, it returns success or failure of the prepare to the transaction manager. - **Commit phase** - If DTC receives successful prepares from all the resource managers, it sends commit commands to all resource managers. The resource managers can then complete the commit. If all resource managers report a successful commit, then DTC sends a success notification to the application. If any resource manager reported a failure to prepare, DTC sends a rollback command to each resource manager and indicates the failure of the commit to the application. + If the transaction manager receives successful prepares from all of the resource managers, it sends commit commands to each resource manager. The resource managers can then complete the commit. If all of the resource managers report a successful commit, the transaction manager then sends a success notification to the application. If any resource manager reported a failure to prepare, the transaction manager sends a rollback command to each resource manager and indicates the failure of the commit to the application. See more information at: From d2cc2757b0a29c68544eba69712644a6ea59cf83 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Mon, 10 Jul 2017 13:40:19 -0700 Subject: [PATCH 214/336] Added more detail based on feedback from Chaitanya Ravella --- ...lity-group-for-distributed-transactions.md | 48 ++++++++++++++----- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index 1ceecf3338c..b169f8ec259 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -28,12 +28,12 @@ This article explains how to configure an availability group for distributed tra ## Support for distributed transactions -SQL Server 2017 supports distributed transactions for databases in availability groups. This support includes cross-database transactions, for example, databases on the same instance of SQL Server. In order to prevent in-doubt transactions after an availability group fails over, configure the availability group for distributed transactions. +SQL Server 2017 supports distributed transactions for databases in availability groups. This support includes transactions containing multiple databases on the same instance of SQL Server as well as involving multiple instances. To enable the SQL Server service to get the outcome of in-doubt transactions from the distributed transaction coordinator (DTC) service after an availability group fails over, configure the availability group for distributed transactions. -SQL Server 2016 also supports distributed transactions for databases in availability groups, however this support does not include transactions involving two or more databases on the server. +SQL Server 2016 also supports distributed transactions for databases in availability groups, however this support does not include transactions involving two or more databases on the same server. The transactions can be between multiple databases from different servers. SQL Server 2016 does not support distributed transactions for databases in availability groups if more than one database is on the same server. >[!NOTE] ->SQL Server does not prevent distributed transactions for databases in an availability group - even when the availability group is not configured for distributed transactions. However, databases in an availability group that are not configured for distributed transactions are vulnerable to in-doubt transactions under specific scenarios. +>SQL Server does not prevent distributed transactions for databases in an availability group - even when the availability group is not configured for distributed transactions. However, databases in an availability group that are not configured for distributed transactions might not return the correct outcome from the DTC service for the in-doubt transactions under specific scenarios. All instances of SQL Server that participate in the distributed transaction must be SQL Server 2016 or later. @@ -81,15 +81,39 @@ ALTER AVAILABILITY GROUP MyaAG ## Effects of configuring an availability group for distributed transactions -In order to participate in distributed transactions, an instance of SQL Server enlists with a distributed transaction coordinator (DTC) service. Normally the instance of SQL Server enlists with the DTC service on the local server. The DTC service assigns the instance of SQL Server a resource manager identification (RMID). In the default configuration, all databases on an instance of SQL Server use the same RMID. The instance of SQL Server is a *resource manager* for DTC transactions. +Each entity participating in a distributed transaction is called a *resource manager*. Examples of resource managers include: -When a database is in an availability group, the read-write copy of the database - or primary replica - may move to a different instance of SQL Server. To support distributed transactions during this movement, each database must have a unique RMID. When an availability group has `DTC_SUPPORT = PER_DB`, SQL Server registers an RMID for each database in the availability group with the DTC service. In this configuration, the database is a resource manager for DTC transactions. +* A SQL Server instance. +* A database in an availability group that has been configured for distributed transactions. +* Other data sources. + +In order to participate in distributed transactions, an instance of SQL Server enlists with a DTC service. Normally the instance of SQL Server enlists with the DTC service on the local server. Each instance of SQL Server creates a resource manager identifier (RMID) and registers it with DTC. In the default configuration, all databases on an instance of SQL Server use the same RMID. + +When a database is in an availability group, the read-write copy of the database - or primary replica - may move to a different instance of SQL Server. To support distributed transactions during this movement, each database should act as a separate resource manager and must have a unique RMID. When an availability group has `DTC_SUPPORT = PER_DB`, SQL Server creates a resource manager for each database and registers with DTC using a unique RMID. In this configuration, the database is a resource manager for DTC transactions. + +For more detail on distributed transactions in SQL Server, see [Distributed transactions](transactions-always-on-availability-and-database-mirroring.md#distTran) + +## Distributed transactions + +Distributed transactions span two or more servers known as resource managers. The management of the transaction must be coordinated between the resource managers by a server component called a transaction manager. Each instance of the SQL Server Database Engine can operate as a resource manager in distributed transactions coordinated by transaction managers, such as Microsoft Distributed Transaction Coordinator (MS DTC), or other transaction managers that support the Open Group XA specification for distributed transaction processing. For more information, see the MS DTC documentation. + +A transaction within a single instance of the Database Engine that spans two or more databases is actually a distributed transaction. The instance manages the distributed transaction internally; to the user, it operates as a local transaction. + +At the application, a distributed transaction is managed much the same as a local transaction. At the end of the transaction, the application requests the transaction to be either committed or rolled back. A distributed commit must be managed differently by the transaction manager to minimize the risk that a network failure may result in some resource managers successfully committing while others roll back the transaction. This is achieved by managing the commit process in two phases (the prepare phase and the commit phase), which is known as a two-phase commit (2PC). + +- **Prepare phase** + + When the transaction manager receives a commit request, it sends a prepare command to all of the resource managers involved in the transaction. Each resource manager then does everything required to make the transaction durable, and all buffers holding log images for the transaction are flushed to disk. As each resource manager completes the prepare phase, it returns success or failure of the prepare to the transaction manager. + +- **Commit phase** + + If the transaction manager receives successful prepares from all of the resource managers, it sends commit commands to each resource manager. The resource managers can then complete the commit. If all of the resource managers report a successful commit, the transaction manager then sends a success notification to the application. If any resource manager reported a failure to prepare, the transaction manager sends a rollback command to each resource manager and indicates the failure of the commit to the application. ## How distributed transactions work The following list explains how distributed transactions work. -1. When an application requires a distributed transaction, it connects to a DTC service to begin the transaction. The client owns the DTC transaction. The DTC service is one resource manager. +1. When an application requires a distributed transaction, it connects to a DTC service to begin the transaction. The client owns the DTC transaction. The DTC service is the transaction manager. 2. The client then connects to a SQL Server instance and enlists in the DTC transaction and creates another resource manager. Normally, the SQL Server instance this resource manager. If the database is in an availability group and registered for DTC support, the database is this resource manager. This resource manager exchanges transaction information with the DTC service. 3. The client does some work in the SQL Server instance under the DTC transaction. The SQL Server instance holds locks, and preserves references to the DTC transaction. 4. The client either disconnects or enlists in NULL. The client can disconnect from the SQL Server instance. The SQL Server instance unhooks the connection from the DTC transaction it is tracking. The transaction object remains in the list of SQL Server transactions because it is active. It stays active until the DTC resource manager indicates either abort or commit. @@ -97,13 +121,14 @@ The following list explains how distributed transactions work. 6. The SQL Server instance either commits or aborts the transaction and releases the locks. ### Manage in-doubt transactions -When DTC support is not configured per database, a database in an availability group can have in-doubt transactions in the following cases: -* Set distributed transaction support per database while transactions are in flight. -* Add or remove a database while transactions are in flight. +When an availability group fails over, while distributed transactions are pending, the instance that hosts the primary replica contacts DTC to find out the results of the transactions. If databases in the availability group are not configured for distributed transactions, the RMID is the new SQL Server instance. The RMID when the transaction began was from the instance that held the primary replica before failover. The failover results in a changed RMID. The new SQL Server instance cannot get the transaction outcome from DTC for active transactions because the RMID hs changed. The following cases can result in a changed RMID: + +* Change `DTC_SUPPORT` for an availability group. +* Add or remove a database from an availability group. * Drop an availability group. -If the preceding cases happen while `DTC_SUPPORT = NONE`, and the primary replica fails over to a new instance of SQL Server, the instance tries to contact the DTC service to identify the transaction result. The DTC service cannot identify the transaction result because the resource manager was registered under the instance of SQL Server that hosted the primary replica before fail over. Therefore the database goes into SUSPECT state. +If the preceding cases happen while `DTC_SUPPORT = NONE`, and the primary replica fails over to a new instance of SQL Server, the instance tries to contact the DTC service to identify the transaction result. The DTC service cannot return the coutcome because the RMID that the database is using to get the outcome for in-doubt transactions during recovery was not enlisted before. Therefore the database goes into SUSPECT state. The new SQL Server error log has an entry like the following example: @@ -119,7 +144,7 @@ SQL Server detected a DTC/KTM in-doubt transaction with UOW  following the guideline for Troubleshooting DTC Transactions. ``` -The preceding example shows that the DTC service could not enlist the database from the new primary replica in the transaction that was created before failover. The SQL Server instance cannot determine the result of the result of the distributed transaction so it marks the database as suspect. In order to recover the database, either commit or rollback the transaction manually. +The preceding example shows that the DTC service could not enlist the database from the new primary replica in the transaction that was created after failover. The SQL Server instance cannot determine the result of the result of the distributed transaction so it marks the database as suspect. In order to recover the database, either commit or rollback the transaction manually. >[!WARNING] >When you manually commit or rollback a transaction it can affect an application. Verify that the action of commit or rollback is consistent with your application requirements. @@ -144,6 +169,7 @@ After you commit or roll back the transaction, you can use `ALTER DATABASE` to s ALTER DATABASE [DB1] SET ONLINE ``` +For more information about resolving in-doubt transactions, see [Resolve Transactions Manually](http://technet.microsoft.com/library/cc754134.aspx). ## See Also From bae19c1a75c062536a006dfc85a3d4be75bf4623 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Mon, 10 Jul 2017 14:33:33 -0700 Subject: [PATCH 215/336] Update with includes for specific versions. --- ...ailability-group-for-distributed-transactions.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index b169f8ec259..6279958bc9c 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -28,12 +28,13 @@ This article explains how to configure an availability group for distributed tra ## Support for distributed transactions -SQL Server 2017 supports distributed transactions for databases in availability groups. This support includes transactions containing multiple databases on the same instance of SQL Server as well as involving multiple instances. To enable the SQL Server service to get the outcome of in-doubt transactions from the distributed transaction coordinator (DTC) service after an availability group fails over, configure the availability group for distributed transactions. +[!INCLUDE[SQL2017](../../../includes/sssqlv14-md.md)] supports distributed transactions for databases in availability groups. This support includes transactions containing multiple databases on the same instance of SQL Server as well as involving multiple instances. You need to configure an availability group to support distributed transactions. This article explains how to configure the availability group for distributed transactions. -SQL Server 2016 also supports distributed transactions for databases in availability groups, however this support does not include transactions involving two or more databases on the same server. The transactions can be between multiple databases from different servers. SQL Server 2016 does not support distributed transactions for databases in availability groups if more than one database is on the same server. +[!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] also supports distributed transactions for databases in availability groups, however this support does not include transactions involving two or more databases on the same server. The transactions can be between multiple databases from different servers. [!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] does not support distributed transactions for databases in availability groups if more than one database is on the same server. ->[!NOTE] ->SQL Server does not prevent distributed transactions for databases in an availability group - even when the availability group is not configured for distributed transactions. However, databases in an availability group that are not configured for distributed transactions might not return the correct outcome from the DTC service for the in-doubt transactions under specific scenarios. +SQL Server does not prevent distributed transactions for databases in an availability group - even when the availability group is not configured for distributed transactions. However after failover, SQL Server may not be able to get the transaction outcome from the distributed transaction coordinator (DTC) service unless the availability group is configured for distributed transactions. To enable the SQL Server service to get the outcome of in-doubt transactions from the distributed transaction coordinator (DTC) service after an availability group fails over, configure the availability group for distributed transactions. + +## Prerequisites All instances of SQL Server that participate in the distributed transaction must be SQL Server 2016 or later. @@ -67,7 +68,7 @@ CREATE AVAILABILITY GROUP MyAG ## Alter an availability group for distributed transactions -You can alter an availability group for distributed transactions on SQL Server 2017 or later. To alter an availability group for distributed transactions, include `DTC_SUPPORT = PER_DB` in the `ALTER AVAILABILITY GROUP` script. The example script changes the availability group to support distributed transactions. +You can alter an availability group for distributed transactions on [!INCLUDE[SQL2017](../../../includes/sssqlv14-md.md)] or later. To alter an availability group for distributed transactions, include `DTC_SUPPORT = PER_DB` in the `ALTER AVAILABILITY GROUP` script. The example script changes the availability group to support distributed transactions. ```transact-sql ALTER AVAILABILITY GROUP MyaAG @@ -77,7 +78,7 @@ ALTER AVAILABILITY GROUP MyaAG ``` >[!NOTE] ->On SQL Server 2016 you cannot alter an availability group for distributed transactions. To change the setting drop, and recreate the availability group with the `DTC_SUPPORT = PER_DB` setting. +>On [!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] you cannot alter an availability group for distributed transactions. To change the setting drop, and recreate the availability group with the `DTC_SUPPORT = PER_DB` setting. ## Effects of configuring an availability group for distributed transactions From 4ae030ebfdda88549a6160023b62a6459011c673 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Mon, 10 Jul 2017 15:53:15 -0700 Subject: [PATCH 216/336] Added tokens for product names. --- ...lity-group-for-distributed-transactions.md | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index 6279958bc9c..85b95cbda12 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -28,21 +28,21 @@ This article explains how to configure an availability group for distributed tra ## Support for distributed transactions -[!INCLUDE[SQL2017](../../../includes/sssqlv14-md.md)] supports distributed transactions for databases in availability groups. This support includes transactions containing multiple databases on the same instance of SQL Server as well as involving multiple instances. You need to configure an availability group to support distributed transactions. This article explains how to configure the availability group for distributed transactions. +[!INCLUDE[SQL2017](../../../includes/sssqlv14-md.md)] supports distributed transactions for databases in availability groups. This support includes transactions containing multiple databases on the same instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] as well as involving multiple instances. You need to configure an availability group to support distributed transactions. This article explains how to configure the availability group for distributed transactions. [!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] also supports distributed transactions for databases in availability groups, however this support does not include transactions involving two or more databases on the same server. The transactions can be between multiple databases from different servers. [!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] does not support distributed transactions for databases in availability groups if more than one database is on the same server. -SQL Server does not prevent distributed transactions for databases in an availability group - even when the availability group is not configured for distributed transactions. However after failover, SQL Server may not be able to get the transaction outcome from the distributed transaction coordinator (DTC) service unless the availability group is configured for distributed transactions. To enable the SQL Server service to get the outcome of in-doubt transactions from the distributed transaction coordinator (DTC) service after an availability group fails over, configure the availability group for distributed transactions. +[!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] does not prevent distributed transactions for databases in an availability group - even when the availability group is not configured for distributed transactions. However when an availability group is not configured for distributed transactions, failover may not succeed in some situations. Specifically the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance may not be able to get the transaction outcome from the distributed transaction coordinator (DTC) service unless the availability group is configured for distributed transactions. To enable the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance to get the outcome of in-doubt transactions from the DTC service after an availability group fails over, configure the availability group for distributed transactions. ## Prerequisites -All instances of SQL Server that participate in the distributed transaction must be SQL Server 2016 or later. +All instances of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] that participate in the distributed transaction must be [!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] or later. Availability groups must be running on Windows Server 2016 or Windows Server 2012 R2. For Windows Server 2012 R2, you must install the update in KB3090973 available at [https://support.microsoft.com/en-us/kb/3090973](https://support.microsoft.com/en-us/kb/3090973). ## Create an availability group for distributed transactions -You can create an availability group for distributed transactions on SQL Server 2016 or later. To create an availability group for distributed transactions, include `DTC_SUPPORT = PER_DB` in the availability group definition. The following script creates an availability group for distributed transactions. +You can create an availability group for distributed transactions on [!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] or later. To create an availability group for distributed transactions, include `DTC_SUPPORT = PER_DB` in the availability group definition. The following script creates an availability group for distributed transactions. ```transact-sql CREATE AVAILABILITY GROUP MyAG @@ -84,19 +84,19 @@ ALTER AVAILABILITY GROUP MyaAG Each entity participating in a distributed transaction is called a *resource manager*. Examples of resource managers include: -* A SQL Server instance. +* A [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance. * A database in an availability group that has been configured for distributed transactions. * Other data sources. -In order to participate in distributed transactions, an instance of SQL Server enlists with a DTC service. Normally the instance of SQL Server enlists with the DTC service on the local server. Each instance of SQL Server creates a resource manager identifier (RMID) and registers it with DTC. In the default configuration, all databases on an instance of SQL Server use the same RMID. +In order to participate in distributed transactions, an instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] enlists with a DTC service. Normally the instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] enlists with the DTC service on the local server. Each instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] creates a resource manager identifier (RMID) and registers it with DTC. In the default configuration, all databases on an instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] use the same RMID. -When a database is in an availability group, the read-write copy of the database - or primary replica - may move to a different instance of SQL Server. To support distributed transactions during this movement, each database should act as a separate resource manager and must have a unique RMID. When an availability group has `DTC_SUPPORT = PER_DB`, SQL Server creates a resource manager for each database and registers with DTC using a unique RMID. In this configuration, the database is a resource manager for DTC transactions. +When a database is in an availability group, the read-write copy of the database - or primary replica - may move to a different instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)]. To support distributed transactions during this movement, each database should act as a separate resource manager and must have a unique RMID. When an availability group has `DTC_SUPPORT = PER_DB`, [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] creates a resource manager for each database and registers with DTC using a unique RMID. In this configuration, the database is a resource manager for DTC transactions. -For more detail on distributed transactions in SQL Server, see [Distributed transactions](transactions-always-on-availability-and-database-mirroring.md#distTran) +For more detail on distributed transactions in [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)], see [Distributed transactions](transactions-always-on-availability-and-database-mirroring.md#distTran) ## Distributed transactions -Distributed transactions span two or more servers known as resource managers. The management of the transaction must be coordinated between the resource managers by a server component called a transaction manager. Each instance of the SQL Server Database Engine can operate as a resource manager in distributed transactions coordinated by transaction managers, such as Microsoft Distributed Transaction Coordinator (MS DTC), or other transaction managers that support the Open Group XA specification for distributed transaction processing. For more information, see the MS DTC documentation. +Distributed transactions span two or more servers known as resource managers. The management of the transaction must be coordinated between the resource managers by a server component called a transaction manager. Each instance of the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] Database Engine can operate as a resource manager in distributed transactions coordinated by transaction managers, such as Microsoft Distributed Transaction Coordinator (MS DTC), or other transaction managers that support the Open Group XA specification for distributed transaction processing. For more information, see the MS DTC documentation. A transaction within a single instance of the Database Engine that spans two or more databases is actually a distributed transaction. The instance manages the distributed transaction internally; to the user, it operates as a local transaction. @@ -115,23 +115,23 @@ At the application, a distributed transaction is managed much the same as a loca The following list explains how distributed transactions work. 1. When an application requires a distributed transaction, it connects to a DTC service to begin the transaction. The client owns the DTC transaction. The DTC service is the transaction manager. -2. The client then connects to a SQL Server instance and enlists in the DTC transaction and creates another resource manager. Normally, the SQL Server instance this resource manager. If the database is in an availability group and registered for DTC support, the database is this resource manager. This resource manager exchanges transaction information with the DTC service. -3. The client does some work in the SQL Server instance under the DTC transaction. The SQL Server instance holds locks, and preserves references to the DTC transaction. -4. The client either disconnects or enlists in NULL. The client can disconnect from the SQL Server instance. The SQL Server instance unhooks the connection from the DTC transaction it is tracking. The transaction object remains in the list of SQL Server transactions because it is active. It stays active until the DTC resource manager indicates either abort or commit. -5. After the client has completed the work on all resources, the DTC service sends either abort or commit to the SQL Server instance - and any other resources in the transaction. -6. The SQL Server instance either commits or aborts the transaction and releases the locks. +2. The client then connects to a [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance and enlists in the DTC transaction and creates another resource manager. Normally, the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance this resource manager. If the database is in an availability group and registered for DTC support, the database is this resource manager. This resource manager exchanges transaction information with the DTC service. +3. The client does some work in the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance under the DTC transaction. The [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance holds locks, and preserves references to the DTC transaction. +4. The client either disconnects or enlists in NULL. The client can disconnect from the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance. The [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance unhooks the connection from the DTC transaction it is tracking. The transaction object remains in the list of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] transactions because it is active. It stays active until the DTC resource manager indicates either abort or commit. +5. After the client has completed the work on all resources, the DTC service sends either abort or commit to the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance - and any other resources in the transaction. +6. The [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance either commits or aborts the transaction and releases the locks. ### Manage in-doubt transactions -When an availability group fails over, while distributed transactions are pending, the instance that hosts the primary replica contacts DTC to find out the results of the transactions. If databases in the availability group are not configured for distributed transactions, the RMID is the new SQL Server instance. The RMID when the transaction began was from the instance that held the primary replica before failover. The failover results in a changed RMID. The new SQL Server instance cannot get the transaction outcome from DTC for active transactions because the RMID hs changed. The following cases can result in a changed RMID: +When an availability group fails over, while distributed transactions are pending, the instance that hosts the primary replica contacts DTC to find out the results of the transactions. If databases in the availability group are not configured for distributed transactions, the RMID is the new [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance. The RMID when the transaction began was from the instance that held the primary replica before failover. The failover results in a changed RMID. The new [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance cannot get the transaction outcome from DTC for active transactions because the RMID hs changed. The following cases can result in a changed RMID: * Change `DTC_SUPPORT` for an availability group. * Add or remove a database from an availability group. * Drop an availability group. -If the preceding cases happen while `DTC_SUPPORT = NONE`, and the primary replica fails over to a new instance of SQL Server, the instance tries to contact the DTC service to identify the transaction result. The DTC service cannot return the coutcome because the RMID that the database is using to get the outcome for in-doubt transactions during recovery was not enlisted before. Therefore the database goes into SUSPECT state. +If the preceding cases happen while `DTC_SUPPORT = NONE`, and the primary replica fails over to a new instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)], the instance tries to contact the DTC service to identify the transaction result. The DTC service cannot return the coutcome because the RMID that the database is using to get the outcome for in-doubt transactions during recovery was not enlisted before. Therefore the database goes into SUSPECT state. -The new SQL Server error log has an entry like the following example: +The new [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] error log has an entry like the following example: ``` Microsoft Distributed Transaction Coordinator (MS DTC) @@ -145,7 +145,7 @@ SQL Server detected a DTC/KTM in-doubt transaction with UOW  following the guideline for Troubleshooting DTC Transactions. ``` -The preceding example shows that the DTC service could not enlist the database from the new primary replica in the transaction that was created after failover. The SQL Server instance cannot determine the result of the result of the distributed transaction so it marks the database as suspect. In order to recover the database, either commit or rollback the transaction manually. +The preceding example shows that the DTC service could not enlist the database from the new primary replica in the transaction that was created after failover. The [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance cannot determine the result of the result of the distributed transaction so it marks the database as suspect. In order to recover the database, either commit or rollback the transaction manually. >[!WARNING] >When you manually commit or rollback a transaction it can affect an application. Verify that the action of commit or rollback is consistent with your application requirements. From d77a879e3b64cc8021e2ed2a205becdc6baacd11 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Mon, 10 Jul 2017 16:23:36 -0700 Subject: [PATCH 217/336] Updated conceptual information. --- ...lity-group-for-distributed-transactions.md | 48 ++++++++++--------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index 85b95cbda12..b36678840bf 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -32,7 +32,9 @@ This article explains how to configure an availability group for distributed tra [!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] also supports distributed transactions for databases in availability groups, however this support does not include transactions involving two or more databases on the same server. The transactions can be between multiple databases from different servers. [!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] does not support distributed transactions for databases in availability groups if more than one database is on the same server. -[!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] does not prevent distributed transactions for databases in an availability group - even when the availability group is not configured for distributed transactions. However when an availability group is not configured for distributed transactions, failover may not succeed in some situations. Specifically the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance may not be able to get the transaction outcome from the distributed transaction coordinator (DTC) service unless the availability group is configured for distributed transactions. To enable the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance to get the outcome of in-doubt transactions from the DTC service after an availability group fails over, configure the availability group for distributed transactions. +In a distributed transaction, client applications work with Microsoft Distributed Transaction Coordinator (MS DTC or DTC) to guarantee transactional consistency across multiple data sources. DTC is a service available on all supported operating systems. Normally a SQL Server instance is the resource manager for all databases in an instance. When a database is in an availability group, each database needs to be its own resource manager for distributed transactions. + +[!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] does not prevent distributed transactions for databases in an availability group - even when the availability group is not configured for distributed transactions. However when an availability group is not configured for distributed transactions, failover may not succeed in some situations. Specifically the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance may not be able to get the transaction outcome from DTC unless the availability group is configured for distributed transactions. To enable the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance to get the outcome of in-doubt transactions from the DTC after an availability group fails over, configure the availability group for distributed transactions. ## Prerequisites @@ -80,21 +82,7 @@ ALTER AVAILABILITY GROUP MyaAG >[!NOTE] >On [!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] you cannot alter an availability group for distributed transactions. To change the setting drop, and recreate the availability group with the `DTC_SUPPORT = PER_DB` setting. -## Effects of configuring an availability group for distributed transactions - -Each entity participating in a distributed transaction is called a *resource manager*. Examples of resource managers include: - -* A [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance. -* A database in an availability group that has been configured for distributed transactions. -* Other data sources. - -In order to participate in distributed transactions, an instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] enlists with a DTC service. Normally the instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] enlists with the DTC service on the local server. Each instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] creates a resource manager identifier (RMID) and registers it with DTC. In the default configuration, all databases on an instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] use the same RMID. - -When a database is in an availability group, the read-write copy of the database - or primary replica - may move to a different instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)]. To support distributed transactions during this movement, each database should act as a separate resource manager and must have a unique RMID. When an availability group has `DTC_SUPPORT = PER_DB`, [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] creates a resource manager for each database and registers with DTC using a unique RMID. In this configuration, the database is a resource manager for DTC transactions. - -For more detail on distributed transactions in [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)], see [Distributed transactions](transactions-always-on-availability-and-database-mirroring.md#distTran) - -## Distributed transactions +## Distributed transactions - technical concepts Distributed transactions span two or more servers known as resource managers. The management of the transaction must be coordinated between the resource managers by a server component called a transaction manager. Each instance of the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] Database Engine can operate as a resource manager in distributed transactions coordinated by transaction managers, such as Microsoft Distributed Transaction Coordinator (MS DTC), or other transaction managers that support the Open Group XA specification for distributed transaction processing. For more information, see the MS DTC documentation. @@ -110,17 +98,31 @@ At the application, a distributed transaction is managed much the same as a loca If the transaction manager receives successful prepares from all of the resource managers, it sends commit commands to each resource manager. The resource managers can then complete the commit. If all of the resource managers report a successful commit, the transaction manager then sends a success notification to the application. If any resource manager reported a failure to prepare, the transaction manager sends a rollback command to each resource manager and indicates the failure of the commit to the application. -## How distributed transactions work +### Detailed steps -The following list explains how distributed transactions work. +The following list explains how the application works with DTC to complete distributed transactions. -1. When an application requires a distributed transaction, it connects to a DTC service to begin the transaction. The client owns the DTC transaction. The DTC service is the transaction manager. -2. The client then connects to a [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance and enlists in the DTC transaction and creates another resource manager. Normally, the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance this resource manager. If the database is in an availability group and registered for DTC support, the database is this resource manager. This resource manager exchanges transaction information with the DTC service. +1. When an application requires a distributed transaction, it connects to a DTC to begin the transaction. The client owns the DTC transaction. DTC is the transaction manager. +2. The client then connects to a [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance and enlists in the DTC transaction and creates another resource manager. Normally, the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance this resource manager. If the database is in an availability group and registered for DTC support, the database is this resource manager. This resource manager exchanges transaction information with DTC. 3. The client does some work in the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance under the DTC transaction. The [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance holds locks, and preserves references to the DTC transaction. 4. The client either disconnects or enlists in NULL. The client can disconnect from the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance. The [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance unhooks the connection from the DTC transaction it is tracking. The transaction object remains in the list of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] transactions because it is active. It stays active until the DTC resource manager indicates either abort or commit. -5. After the client has completed the work on all resources, the DTC service sends either abort or commit to the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance - and any other resources in the transaction. +5. After the client has completed the work on all resources, DTC sends either abort or commit to the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance - and any other resources in the transaction. 6. The [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance either commits or aborts the transaction and releases the locks. +### Effects of configuring an availability group for distributed transactions + +Each entity participating in a distributed transaction is called a *resource manager*. Examples of resource managers include: + +* A [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance. +* A database in an availability group that has been configured for distributed transactions. +* Other data sources. + +In order to participate in distributed transactions, an instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] enlists with a DTC. Normally the instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] enlists with DTC on the local server. Each instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] creates a resource manager identifier (RMID) and registers it with DTC. In the default configuration, all databases on an instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] use the same RMID. + +When a database is in an availability group, the read-write copy of the database - or primary replica - may move to a different instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)]. To support distributed transactions during this movement, each database should act as a separate resource manager and must have a unique RMID. When an availability group has `DTC_SUPPORT = PER_DB`, [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] creates a resource manager for each database and registers with DTC using a unique RMID. In this configuration, the database is a resource manager for DTC transactions. + +For more detail on distributed transactions in [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)], see [Distributed transactions](transactions-always-on-availability-and-database-mirroring.md#distTran) + ### Manage in-doubt transactions When an availability group fails over, while distributed transactions are pending, the instance that hosts the primary replica contacts DTC to find out the results of the transactions. If databases in the availability group are not configured for distributed transactions, the RMID is the new [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance. The RMID when the transaction began was from the instance that held the primary replica before failover. The failover results in a changed RMID. The new [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance cannot get the transaction outcome from DTC for active transactions because the RMID hs changed. The following cases can result in a changed RMID: @@ -129,7 +131,7 @@ When an availability group fails over, while distributed transactions are pendin * Add or remove a database from an availability group. * Drop an availability group. -If the preceding cases happen while `DTC_SUPPORT = NONE`, and the primary replica fails over to a new instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)], the instance tries to contact the DTC service to identify the transaction result. The DTC service cannot return the coutcome because the RMID that the database is using to get the outcome for in-doubt transactions during recovery was not enlisted before. Therefore the database goes into SUSPECT state. +If the preceding cases happen while `DTC_SUPPORT = NONE`, and the primary replica fails over to a new instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)], the instance tries to contact DTC to identify the transaction result. DTC cannot return the coutcome because the RMID that the database is using to get the outcome for in-doubt transactions during recovery was not enlisted before. Therefore the database goes into SUSPECT state. The new [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] error log has an entry like the following example: @@ -145,7 +147,7 @@ SQL Server detected a DTC/KTM in-doubt transaction with UOW  following the guideline for Troubleshooting DTC Transactions. ``` -The preceding example shows that the DTC service could not enlist the database from the new primary replica in the transaction that was created after failover. The [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance cannot determine the result of the result of the distributed transaction so it marks the database as suspect. In order to recover the database, either commit or rollback the transaction manually. +The preceding example shows that DTC could not enlist the database from the new primary replica in the transaction that was created after failover. The [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance cannot determine the result of the result of the distributed transaction so it marks the database as suspect. In order to recover the database, either commit or rollback the transaction manually. >[!WARNING] >When you manually commit or rollback a transaction it can affect an application. Verify that the action of commit or rollback is consistent with your application requirements. From de7beffe0900c7bd144f8a1b90fde93606e6cb2a Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Mon, 10 Jul 2017 16:31:48 -0700 Subject: [PATCH 218/336] Still trying to improve acrolinx. --- ...igure-availability-group-for-distributed-transactions.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index b36678840bf..56424a1a700 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -34,7 +34,7 @@ This article explains how to configure an availability group for distributed tra In a distributed transaction, client applications work with Microsoft Distributed Transaction Coordinator (MS DTC or DTC) to guarantee transactional consistency across multiple data sources. DTC is a service available on all supported operating systems. Normally a SQL Server instance is the resource manager for all databases in an instance. When a database is in an availability group, each database needs to be its own resource manager for distributed transactions. -[!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] does not prevent distributed transactions for databases in an availability group - even when the availability group is not configured for distributed transactions. However when an availability group is not configured for distributed transactions, failover may not succeed in some situations. Specifically the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance may not be able to get the transaction outcome from DTC unless the availability group is configured for distributed transactions. To enable the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance to get the outcome of in-doubt transactions from the DTC after an availability group fails over, configure the availability group for distributed transactions. +[!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] does not prevent distributed transactions for databases in an availability group - even when the availability group is not configured for distributed transactions. However when an availability group is not configured for distributed transactions, failover may not succeed in some situations. Specifically the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance may not be able to get the transaction outcome from DTC. To enable the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance to get the outcome of in-doubt transactions from the DTC after failover, configure the availability group for distributed transactions. ## Prerequisites @@ -125,13 +125,13 @@ For more detail on distributed transactions in [!INCLUDE[SQLServer](../../../inc ### Manage in-doubt transactions -When an availability group fails over, while distributed transactions are pending, the instance that hosts the primary replica contacts DTC to find out the results of the transactions. If databases in the availability group are not configured for distributed transactions, the RMID is the new [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance. The RMID when the transaction began was from the instance that held the primary replica before failover. The failover results in a changed RMID. The new [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance cannot get the transaction outcome from DTC for active transactions because the RMID hs changed. The following cases can result in a changed RMID: +When an availability group fails over, while distributed transactions are pending, the instance that hosts the primary replica contacts DTC to find out the results of the transactions. If databases in the availability group are not configured for distributed transactions, the RMID is the new [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance. The RMID when the transaction began was from the instance that held the primary replica before failover. The failover results in a changed RMID. The new [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance cannot get the transaction outcome from DTC for active transactions because the RMID has changed. The following cases can result in a changed RMID: * Change `DTC_SUPPORT` for an availability group. * Add or remove a database from an availability group. * Drop an availability group. -If the preceding cases happen while `DTC_SUPPORT = NONE`, and the primary replica fails over to a new instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)], the instance tries to contact DTC to identify the transaction result. DTC cannot return the coutcome because the RMID that the database is using to get the outcome for in-doubt transactions during recovery was not enlisted before. Therefore the database goes into SUSPECT state. +If the preceding cases happen while `DTC_SUPPORT = NONE`, and the primary replica fails over to a new instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)], the instance tries to contact DTC to identify the transaction result. DTC cannot return the outcome because the RMID that the database is using to get the outcome for in-doubt transactions during recovery was not enlisted before. Therefore the database goes into SUSPECT state. The new [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] error log has an entry like the following example: From 7f6a4cacab12a260e85912cda293f27c1a8d7af4 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Mon, 10 Jul 2017 16:43:15 -0700 Subject: [PATCH 219/336] Raise manage in doubt transactions to H2 --- ...configure-availability-group-for-distributed-transactions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index 56424a1a700..d3681edadaa 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -123,7 +123,7 @@ When a database is in an availability group, the read-write copy of the database For more detail on distributed transactions in [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)], see [Distributed transactions](transactions-always-on-availability-and-database-mirroring.md#distTran) -### Manage in-doubt transactions +## Manage in-doubt transactions When an availability group fails over, while distributed transactions are pending, the instance that hosts the primary replica contacts DTC to find out the results of the transactions. If databases in the availability group are not configured for distributed transactions, the RMID is the new [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance. The RMID when the transaction began was from the instance that held the primary replica before failover. The failover results in a changed RMID. The new [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance cannot get the transaction outcome from DTC for active transactions because the RMID has changed. The following cases can result in a changed RMID: From 1004089609a5481c8793040b8f16cb1190bdc833 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 11 Jul 2017 08:51:17 -0700 Subject: [PATCH 220/336] Updated conceptual informaiton --- ...-availability-group-for-distributed-transactions.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index d3681edadaa..ff103c4a40d 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -28,11 +28,13 @@ This article explains how to configure an availability group for distributed tra ## Support for distributed transactions -[!INCLUDE[SQL2017](../../../includes/sssqlv14-md.md)] supports distributed transactions for databases in availability groups. This support includes transactions containing multiple databases on the same instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] as well as involving multiple instances. You need to configure an availability group to support distributed transactions. This article explains how to configure the availability group for distributed transactions. +[!INCLUDE[SQL2017](../../../includes/sssqlv14-md.md)] supports distributed transactions for databases in availability groups. This support includes transactions containing multiple databases on the same instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] as well as databases across multiple instances. [!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] also supports distributed transactions for databases in availability groups, however this support does not include transactions involving two or more databases on the same server. The transactions can be between multiple databases from different servers. [!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] does not support distributed transactions for databases in availability groups if more than one database is on the same server. -In a distributed transaction, client applications work with Microsoft Distributed Transaction Coordinator (MS DTC or DTC) to guarantee transactional consistency across multiple data sources. DTC is a service available on all supported operating systems. Normally a SQL Server instance is the resource manager for all databases in an instance. When a database is in an availability group, each database needs to be its own resource manager for distributed transactions. +In a distributed transaction, client applications work with Microsoft Distributed Transaction Coordinator (MS DTC or DTC) to guarantee transactional consistency across multiple data sources. DTC is a service available on all supported operating systems. For a distributed transaction, DTC is the *transaction coordinator*. Normally, a SQL Server instance is the *resource manager*. When a database is in an availability group, each database needs to be its own resource manager. + +Configure an availability group to support distributed transactions. Set the availability group to allow each database to register as a resource manager. This article explains how to configure an availability group so that each database can be a resource manager in DTC. [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] does not prevent distributed transactions for databases in an availability group - even when the availability group is not configured for distributed transactions. However when an availability group is not configured for distributed transactions, failover may not succeed in some situations. Specifically the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance may not be able to get the transaction outcome from DTC. To enable the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance to get the outcome of in-doubt transactions from the DTC after failover, configure the availability group for distributed transactions. @@ -84,9 +86,9 @@ ALTER AVAILABILITY GROUP MyaAG ## Distributed transactions - technical concepts -Distributed transactions span two or more servers known as resource managers. The management of the transaction must be coordinated between the resource managers by a server component called a transaction manager. Each instance of the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] Database Engine can operate as a resource manager in distributed transactions coordinated by transaction managers, such as Microsoft Distributed Transaction Coordinator (MS DTC), or other transaction managers that support the Open Group XA specification for distributed transaction processing. For more information, see the MS DTC documentation. +Distributed transactions span two or more databases. The management of the transaction must be coordinated between the resource managers by a server component called a transaction manager. Each instance of the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] Database Engine can operate as a resource manager in distributed transactions coordinated by transaction managers, such as Microsoft Distributed Transaction Coordinator (MS DTC), or other transaction managers that support the Open Group XA specification for distributed transaction processing. When an availability group is configured with `DTC_SUPPORT = PER_DB`, the databases can operate as resource managers. For more information, see the MS DTC documentation. -A transaction within a single instance of the Database Engine that spans two or more databases is actually a distributed transaction. The instance manages the distributed transaction internally; to the user, it operates as a local transaction. +A transaction within a single instance of the Database Engine that spans two or more databases is actually a distributed transaction. The instance manages the distributed transaction internally; to the user, it operates as a local transaction. On [!INCLUDE[SQL2017](../../../includes/sssqlv14-md.md)], databases in an availability group configured with `DTC_SUPPORT = PER_DB`, cross-database transactions within a single instance are still a distributed transactions. At the application, a distributed transaction is managed much the same as a local transaction. At the end of the transaction, the application requests the transaction to be either committed or rolled back. A distributed commit must be managed differently by the transaction manager to minimize the risk that a network failure may result in some resource managers successfully committing while others roll back the transaction. This is achieved by managing the commit process in two phases (the prepare phase and the commit phase), which is known as a two-phase commit (2PC). From f8cce418d59b29093a388babcd66c693263473ad Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 11 Jul 2017 09:04:45 -0700 Subject: [PATCH 221/336] Acrolinx fixes. --- ...igure-availability-group-for-distributed-transactions.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index ff103c4a40d..34e36e48c54 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -30,7 +30,7 @@ This article explains how to configure an availability group for distributed tra [!INCLUDE[SQL2017](../../../includes/sssqlv14-md.md)] supports distributed transactions for databases in availability groups. This support includes transactions containing multiple databases on the same instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] as well as databases across multiple instances. -[!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] also supports distributed transactions for databases in availability groups, however this support does not include transactions involving two or more databases on the same server. The transactions can be between multiple databases from different servers. [!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] does not support distributed transactions for databases in availability groups if more than one database is on the same server. +[!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] also supports distributed transactions for databases in availability groups, however this support does not include transactions involving two or more databases on the same server. The transactions can be between multiple databases from different servers. [!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] does not support distributed transactions for databases in availability groups when more than one database is on the same server. In a distributed transaction, client applications work with Microsoft Distributed Transaction Coordinator (MS DTC or DTC) to guarantee transactional consistency across multiple data sources. DTC is a service available on all supported operating systems. For a distributed transaction, DTC is the *transaction coordinator*. Normally, a SQL Server instance is the *resource manager*. When a database is in an availability group, each database needs to be its own resource manager. @@ -88,7 +88,7 @@ ALTER AVAILABILITY GROUP MyaAG Distributed transactions span two or more databases. The management of the transaction must be coordinated between the resource managers by a server component called a transaction manager. Each instance of the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] Database Engine can operate as a resource manager in distributed transactions coordinated by transaction managers, such as Microsoft Distributed Transaction Coordinator (MS DTC), or other transaction managers that support the Open Group XA specification for distributed transaction processing. When an availability group is configured with `DTC_SUPPORT = PER_DB`, the databases can operate as resource managers. For more information, see the MS DTC documentation. -A transaction within a single instance of the Database Engine that spans two or more databases is actually a distributed transaction. The instance manages the distributed transaction internally; to the user, it operates as a local transaction. On [!INCLUDE[SQL2017](../../../includes/sssqlv14-md.md)], databases in an availability group configured with `DTC_SUPPORT = PER_DB`, cross-database transactions within a single instance are still a distributed transactions. +A transaction within a single instance of the Database Engine that spans two or more databases is actually a distributed transaction. The instance manages the distributed transaction internally; to the user, it operates as a local transaction. On [!INCLUDE[SQL2017](../../../includes/sssqlv14-md.md)], databases in an availability group configured with `DTC_SUPPORT = PER_DB`, cross-database transactions within a single instance are still distributed transactions. At the application, a distributed transaction is managed much the same as a local transaction. At the end of the transaction, the application requests the transaction to be either committed or rolled back. A distributed commit must be managed differently by the transaction manager to minimize the risk that a network failure may result in some resource managers successfully committing while others roll back the transaction. This is achieved by managing the commit process in two phases (the prepare phase and the commit phase), which is known as a two-phase commit (2PC). @@ -149,7 +149,7 @@ SQL Server detected a DTC/KTM in-doubt transaction with UOW  following the guideline for Troubleshooting DTC Transactions. ``` -The preceding example shows that DTC could not enlist the database from the new primary replica in the transaction that was created after failover. The [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance cannot determine the result of the result of the distributed transaction so it marks the database as suspect. In order to recover the database, either commit or rollback the transaction manually. +The preceding example shows that DTC could not enlist the database from the new primary replica in the transaction that was created after failover. The [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance cannot determine the result of the distributed transaction so it marks the database as suspect. The transaction is marked as a unit of work (UOW) and referred to by a GUID. In order to recover the database, either commit or rollback the transaction manually. >[!WARNING] >When you manually commit or rollback a transaction it can affect an application. Verify that the action of commit or rollback is consistent with your application requirements. From 72601280130677814751d52cabc8dfe2eccdbb26 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 11 Jul 2017 09:06:59 -0700 Subject: [PATCH 222/336] Updated date. --- ...configure-availability-group-for-distributed-transactions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index 34e36e48c54..7959203f5e0 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -1,7 +1,7 @@ --- title: "Configure Availability Group for Distributed Transactions | Microsoft Docs" ms.custom: "" -ms.date: "09/29/2016" +ms.date: "07/11/2017" ms.prod: "sql-server-2016" ms.reviewer: "" ms.suite: "" From 7c1ca4cf2060f81c266dbc783414075fb7654ce4 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 11 Jul 2017 09:15:22 -0700 Subject: [PATCH 223/336] Clarified single instance case. --- ...configure-availability-group-for-distributed-transactions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index 7959203f5e0..9494cc2e955 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -88,7 +88,7 @@ ALTER AVAILABILITY GROUP MyaAG Distributed transactions span two or more databases. The management of the transaction must be coordinated between the resource managers by a server component called a transaction manager. Each instance of the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] Database Engine can operate as a resource manager in distributed transactions coordinated by transaction managers, such as Microsoft Distributed Transaction Coordinator (MS DTC), or other transaction managers that support the Open Group XA specification for distributed transaction processing. When an availability group is configured with `DTC_SUPPORT = PER_DB`, the databases can operate as resource managers. For more information, see the MS DTC documentation. -A transaction within a single instance of the Database Engine that spans two or more databases is actually a distributed transaction. The instance manages the distributed transaction internally; to the user, it operates as a local transaction. On [!INCLUDE[SQL2017](../../../includes/sssqlv14-md.md)], databases in an availability group configured with `DTC_SUPPORT = PER_DB`, cross-database transactions within a single instance are still distributed transactions. +A transaction within a single instance of the Database Engine that spans two or more databases is actually a distributed transaction. The instance manages the distributed transaction internally; to the user, it operates as a local transaction. [!INCLUDE[SQL2017](../../../includes/sssqlv14-md.md)] handles all cross-database transactions as distributed transactions when databases are in an availability group configured with `DTC_SUPPORT = PER_DB` - even within a single instance of SQL Server. At the application, a distributed transaction is managed much the same as a local transaction. At the end of the transaction, the application requests the transaction to be either committed or rolled back. A distributed commit must be managed differently by the transaction manager to minimize the risk that a network failure may result in some resource managers successfully committing while others roll back the transaction. This is achieved by managing the commit process in two phases (the prepare phase and the commit phase), which is known as a two-phase commit (2PC). From 778b78a947cad89af4c981a50ffddee03177cb62 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 11 Jul 2017 09:16:54 -0700 Subject: [PATCH 224/336] Whats new DBEng, correcting note format --- .../what-s-new-in-sql-server-2017-database-engine.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md b/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md index 1d06991869f..c8aa355b1f4 100644 --- a/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md +++ b/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md @@ -1,7 +1,7 @@ --- title: "What's New in SQL Server 2017 (Database Engine) | Microsoft Docs" ms.custom: "" -ms.date: "07/10/2017" +ms.date: "07/11/2017" ms.prod: "sql-server-2017" ms.reviewer: "" ms.suite: "" @@ -18,7 +18,8 @@ manager: "jhubbard" # What's New in SQL Server 2017 (Database Engine) [!INCLUDE[tsql-appliesto-ssvNxt-xxxx-xxxx-xxx](../../includes/tsql-appliesto-ssvnxt-xxxx-xxxx-xxx.md)] -**Note:** SQL Server 2017 also includes the features added in SQL Server 2016 service packs. For those items, see [What's New in SQL Server 2016 (Database Engine)](../../database-engine/configure-windows/what-s-new-in-sql-server-2016-database-engine.md). +> [!NOTE] +> SQL Server 2017 also includes the features added in SQL Server 2016 service packs. For those items, see [What's New in SQL Server 2016 (Database Engine)](../../database-engine/configure-windows/what-s-new-in-sql-server-2016-database-engine.md). ## SQL Server Database Engine (RC1) From d216d6c95f21313b356225b1b49feec5d3eac40a Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Tue, 11 Jul 2017 09:35:53 -0700 Subject: [PATCH 225/336] Added an intro paragraph. --- .../what-s-new-in-sql-server-2017-database-engine.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md b/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md index c8aa355b1f4..2b1563b94d2 100644 --- a/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md +++ b/docs/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md @@ -18,6 +18,8 @@ manager: "jhubbard" # What's New in SQL Server 2017 (Database Engine) [!INCLUDE[tsql-appliesto-ssvNxt-xxxx-xxxx-xxx](../../includes/tsql-appliesto-ssvnxt-xxxx-xxxx-xxx.md)] +This topic describes improvements made to the [!INCLUDE[ssdenoversion-md](../../includes/ssdenoversion-md.md)] for [!INCLUDE[sssqlv14-md](../../includes/sssqlv14-md.md)]. Click the links for more information on each item. + > [!NOTE] > SQL Server 2017 also includes the features added in SQL Server 2016 service packs. For those items, see [What's New in SQL Server 2016 (Database Engine)](../../database-engine/configure-windows/what-s-new-in-sql-server-2016-database-engine.md). From f1c9d614771a5849a272b97af59c804d60e9cd42 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 11 Jul 2017 10:24:03 -0700 Subject: [PATCH 226/336] Updated date to restart commits. --- ...configure-availability-group-for-distributed-transactions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index 9494cc2e955..3d40899d7fd 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -1,7 +1,7 @@ --- title: "Configure Availability Group for Distributed Transactions | Microsoft Docs" ms.custom: "" -ms.date: "07/11/2017" +ms.date: "07/12/2017" ms.prod: "sql-server-2016" ms.reviewer: "" ms.suite: "" From 1a1a950635fefeff89d7e21229afe58b0f514aa4 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Tue, 11 Jul 2017 13:25:02 -0400 Subject: [PATCH 227/336] Adding Docker quickstart --- .../quickstart-install-connect-docker.md | 259 ++++++++++++++++++ .../quickstart-install-connect-red-hat.md | 3 +- docs/linux/quickstart-install-connect-suse.md | 2 +- .../quickstart-install-connect-ubuntu.md | 2 +- 4 files changed, 263 insertions(+), 3 deletions(-) create mode 100644 docs/linux/quickstart-install-connect-docker.md diff --git a/docs/linux/quickstart-install-connect-docker.md b/docs/linux/quickstart-install-connect-docker.md new file mode 100644 index 00000000000..06a6f13aaa4 --- /dev/null +++ b/docs/linux/quickstart-install-connect-docker.md @@ -0,0 +1,259 @@ +--- +title: Get started with SQL Server 2017 on Docker | Microsoft Docs +description: This quick start tutorial shows how to use Docker to run the SQL Server 2017 container image. You then create and query a database with sqlcmd. +author: rothja +ms.author: jroth +manager: jhubbard +ms.date: 07/19/2017 +ms.topic: article +ms.prod: sql-linux +ms.technology: database-engine +--- +# Get started with SQL Server 2017 on Docker + +In this quick start tutorial, you use Docker to pull and run the SQL Server 2017 RC1 containter image, [mssql-server-linux](https://hub.docker.com/r/microsoft/mssql-server-linux/). Then connect with **sqlcmd** to create your first database and run queries. + +This image consists of SQL Server running on Linux based on Ubuntu 16.04. It can be used with the Docker Engine 1.8+ on Linux or on Docker for Mac/Windows. + +> [!NOTE] +> This quick start specifically focuses on using the mssql-server-linux image. The Windows image is not covered, but you can learn more about it on the [mssql-server-windows Docker Hub page](https://hub.docker.com/r/microsoft/mssql-server-windows/). + +## Prerequisites + +- Docker Engine 1.8+ on any supported Linux distribution or Docker for Mac/Windows. +- Minimum of 4 GB of disk space +- Minimum of 4 GB of RAM +- [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). + +> [!IMPORTANT] +> The default on Docker for Mac and Docker for Windows is 2 GB for the Moby VM, so you must change it to 4 GB. If you are running on Mac or Windows, use the procedures below in increase the memory. + +### Mac: Increase Docker memory to 4GB + +The following steps increase the memory for Docker for Mac to 4GB. + +1. Click the Docker logo on the top status bar. +1. Select **Preferences**. +1. Move the memory indicator to 4 GB or more. +1. Click the **restart** button at the button of the screen. + +### Windows: Increase Docker memory to 4GB + +The following steps increase the memory for Docker for Windows to 4GB. + +1. Right-click on the Docker icon from the task bar. +1. Click **Settings** under that menu. +1. Click the **Advanced** Tab. +1. Move the memory indicator to 4 GB or more. +1. Click the **Apply** button. + +## Pull and run the container image + +1. Pull the container image from Docker Hub. + + ```bash + docker pull microsoft/mssql-server-linux + ``` + + > [!TIP] + > For Linux, depending on your system and user configuration, you might need to preface each `docker` command with `sudo`. + +1. To run the container image with Docker, you can use the following command from a bash shell (Linux/macOS): + + ```bash + docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' -p 1401:1433 -d microsoft/mssql-server-linux + ``` + + If you are using Docker for Windows, use the following command from an elevated PowerShell command-prompt: + + ```PowerShell + docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" -p 1401:1433 -d microsoft/mssql-server-linux + ``` + + > [!NOTE] + > The only difference between the bash (Linux/macOS) example and the PowerShell (Windows) example is single quotes versus double-quotes around the environment variables. The docker run command fails if you use the wrong one. Throughout the remainder of this topic, bash and PowerShell code blocks are provided for convenience. If there is only one example, it works on all platforms, including Windows. + + The following table provides a description of the parameters in the previous `docker run` example: + + | Parameter | Description | + |-----|-----| + | **-e 'ACCEPT_EULA=Y'** | Set the **ACCEPT_EULA** variable to any value to confirm your acceptance of the [End-User Licensing Agreement](http://go.microsoft.com/fwlink/?LinkId=746388). Required setting for the SQL Server image. | + | **-e 'SA_PASSWORD=\'** | Specify your own strong password that is at least 8 characters and meets [SQL Server's password requirements](../relational-databases/security/password-policy.md). Required setting for the SQL Server image. | + | **-p 1401:1433** | Map a TCP port on the host environment (first value) with a TCP port in the container (second value). In this example, SQL Server is listening on TCP 1433 in the container and this is exposed to the port, 1401, on the host. | + | **microsoft/mssql-server-linux** | The SQL Server Linux container image. Unless otherwise specified, this defaults to the **latest** image. | + +1. To view your Docker containers, use the `docker ps` command. + + ```bash + docker ps -a + ``` + + You should see output similar to the following screenshot: + + ![Docker ps command output](./media/sql-server-linux-setup-docker/docker-ps-command.png) + +1. If the **STATUS** column shows a status of **Up**, then SQL Server is running in the container and listening on the port specified in the **PORTS** column. If the **STATUS** column for your SQL Server container shows **Exited**, see the [Troubleshooting](#troubleshooting) section. + +## Change the SA password + +The SA account is an system administrator on the SQL Server instance that gets created during setup. After creating your SQL Server container, the `SA_PASSWORD` environment variable you specified is discoverable by running `echo $SA_PASSWORD` in the container. For security purposes, change your SA password. + +1. Choose a strong password to use for the SA user. + +1. Use `docker exec` to run **sqlcmd** to change the password using Transact-SQL. + +> ```bash +> docker exec -it /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '' -Q 'ALTER LOGIN SA WITH PASSWORD="";' +> ``` + +## Connect to SQL Server + +The following steps use the SQL Server command-line tool, **sqlcmd**, inside the container to connect to SQL Server. + +1. Use the `docker exec -it` command to start an interactive bash shell inside your running container. In the following example `e69e056c702d` is the container ID. + + ```bash + docker exec -it e69e056c702d "bash" + ``` + + > [!TIP] + > You don't always have to specify the entire container id. You only have to specify enough characters to uniquely identify it. So in this example, it might be enough to use `e6` or `e69` rather than the full id. + +1. Once inside the container, connect locally with sqlcmd. Note that sqlcmd is not in the path by default, so you have to specify the full path. + + ```bash + /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '' + ``` + + > [!TIP] + > You can omit the password on the command-line to be prompted to enter it. + +1. If successful, you should get to a **sqlcmd** command prompt: `1>`. + +## Connect locally + +The following steps use **sqlcmd** to locally connect to your new SQL Server instance. + +1. Run **sqlcmd** with parameters for your SQL Server name (-S), the user name (-U), and the password (-P). In this tutorial, you are connecting locally, so the server name is `localhost`. The user name is `SA` and the password is the one you provided for the SA account during setup. + + ```bash + sqlcmd -S localhost -U SA -P '' + ``` + + > [!TIP] + > You can omit the password on the command-line to be prompted to enter it. + + > [!TIP] + > If you later decide to connect remotely, specify the machine name or IP address for the **-S** parameter, and make sure port 1433 is open on your firewall. + +1. If successful, you should get to a **sqlcmd** command prompt: `1>`. + +1. If you get a connection failure, first attempt to diagnose the problem from the error message. Then review the [connection troubleshooting recommendations](../linux/sql-server-linux-troubleshooting-guide.md#connection). + +## Create and query data +The following sections walk you through using **sqlcmd** and Transact-SQL to create a new database, add data, and run a simple query. + +### Create a new database + +The following steps create a new database named `TestDB`. + +1. From the **sqlcmd** command prompt, paste the following Transact-SQL command to create a test database: + + ```sql + CREATE DATABASE TestDB + ``` + +1. On the next line, write a query to return the name of all of the databases on your server: + + ```sql + SELECT Name from sys.Databases + ``` + +1. The previous two commands were not executed immediately. You must type `GO` on a new line to execute the previous commands: + + ```sql + GO + ``` + +### Insert data + +Next create a new table, `Inventory`, and insert two new rows. + +1. From the **sqlcmd** command prompt, switch context to the new `TestDB` database: + + ```sql + USE TestDB + ``` + +1. Create new table named `Inventory`: + + ```sql + CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT) + ``` + +1. Insert data into the new table: + + ```sql + INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154); + ``` + +1. Type `GO` to execute the previous commands: + + ```sql + GO + ``` + +### Select data + +Now, run a query to return data from the `Inventory` table. + +1. From the **sqlcmd** commandd prompt, enter a query that returns rows from the `Inventory` table where the quantity is greater than 152: + + ```sql + SELECT * FROM Inventory WHERE quantity > 152; + ``` + +1. Execute the command: + + ```sql + GO + ``` + +### Exit the sqlcmd command prompt + +1. To end your **sqlcmd** session, type `QUIT`: + + ```sql + QUIT + ``` + +1. To exit the interactive command-prompt in your container, type `exit`. Your container continues to run after you exit the interactive bash shell. + +## Connect from outside the container + +You can also connect to the SQL Server instance on your Docker machine from any external Linux, Windows, or macOS tool that supports SQL connections. + +The following steps uses **sqlcmd** outside of your container to connect to SQL Server running in the container. These steps assume that you already have the SQL Server command-line tools installed outside of your container. The same principals apply when using other tools, but the process of connecting will be unique to each tool. + +1. Find the IP address for the machine that hosts your container. On Linux, use **ifconfig** or **ip addr**. On Windows, use **ipconfig**. + +1. Run sqlcmd specifying the IP address and the port mapped to port 1433 in your container. In this example, that is port 1401 on the host machine. + + ```bash + sqlcmd -S 10.3.2.4,1401 -U SA -P '' + ``` + + ```PowerShell + sqlcmd -S 10.3.2.4,1401 -U SA -P "" + ``` + +1. Run Transact-SQL commands. When finished, type `QUIT`. + +Other common tools to connect to SQL Server include: + +- [Visual Studio Code](sql-server-linux-develop-use-vscode.md) +- [SQL Server Management Studio (SSMS) on Windows](sql-server-linux-develop-use-ssms.md) + +## Next steps + +After installing SQL Server on Linux, next see [how to connect to the server and run basic Transact-SQL queries](sql-server-linux-connect-and-query-sqlcmd.md). Also, check out the [mssql-docker GitHub repository](https://github.com/Microsoft/mssql-docker) for resources, feedback, and known issues. diff --git a/docs/linux/quickstart-install-connect-red-hat.md b/docs/linux/quickstart-install-connect-red-hat.md index 18d65f90ee7..d23f5982ee9 100644 --- a/docs/linux/quickstart-install-connect-red-hat.md +++ b/docs/linux/quickstart-install-connect-red-hat.md @@ -139,4 +139,5 @@ To create a database, you need to connect with a tool that can run Transact-SQL source ~/.bashrc ``` -[!INCLUDE [create-query-data-md](../includes/sql-linux-quickstart-connect-query.md)] +[!INCLUDE [Connect, create, and query data](../includes/sql-linux-quickstart-connect-query.md)] + diff --git a/docs/linux/quickstart-install-connect-suse.md b/docs/linux/quickstart-install-connect-suse.md index 6297f235073..9d5f8c4bf07 100644 --- a/docs/linux/quickstart-install-connect-suse.md +++ b/docs/linux/quickstart-install-connect-suse.md @@ -102,4 +102,4 @@ To create a database, you need to connect with a tool that can run Transact-SQL source ~/.bashrc ``` -[!INCLUDE [create-query-data-md](../includes/sql-linux-quickstart-connect-query.md)] +[!INCLUDE [Connect, create, and query data](../includes/sql-linux-quickstart-connect-query.md)] \ No newline at end of file diff --git a/docs/linux/quickstart-install-connect-ubuntu.md b/docs/linux/quickstart-install-connect-ubuntu.md index 4cacfb7c56a..d47851be6a6 100644 --- a/docs/linux/quickstart-install-connect-ubuntu.md +++ b/docs/linux/quickstart-install-connect-ubuntu.md @@ -95,4 +95,4 @@ To create a database, you need to connect with a tool that can run Transact-SQL > [!TIP] > **Sqlcmd** is just one tool for connecting to SQL Server to run queries and perform management and development tasks. Other tools include [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md) and [Visusal Studio Code](sql-server-linux-develop-use-vscode.md). -[!INCLUDE [create-query-data-md](../includes/sql-linux-quickstart-connect-query.md)] +[!INCLUDE [Connect, create, and query data](../includes/sql-linux-quickstart-connect-query.md)] \ No newline at end of file From 571b3c1291dc2fded88b04a7e41372ce726f40b2 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Tue, 11 Jul 2017 13:30:15 -0400 Subject: [PATCH 228/336] Spelling grammar and TOC changes --- docs/linux/TOC.md | 8 ++++---- .../quickstart-install-connect-docker.md | 20 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index 4d042fd6c29..15d906ff701 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -6,10 +6,10 @@ ## [New and recently updated articles](new-updated-linux.md) # Quickstarts -## [Install - Red Hat](quickstart-install-connect-red-hat.md) -## [Install - SUSE](quickstart-install-connect-suse.md) -## [Install - Ubuntu](quickstart-install-connect-ubuntu.md) -## Install - Docker +## [Install & Connect - Red Hat](quickstart-install-connect-red-hat.md) +## [Install & Connect - SUSE](quickstart-install-connect-suse.md) +## [Install & Connect - Ubuntu](quickstart-install-connect-ubuntu.md) +## [Install & Connect - Docker](quickstart-install-connect-docker.md) # Samples ## Unattended Install diff --git a/docs/linux/quickstart-install-connect-docker.md b/docs/linux/quickstart-install-connect-docker.md index 06a6f13aaa4..a7d1c38f2c0 100644 --- a/docs/linux/quickstart-install-connect-docker.md +++ b/docs/linux/quickstart-install-connect-docker.md @@ -11,7 +11,7 @@ ms.technology: database-engine --- # Get started with SQL Server 2017 on Docker -In this quick start tutorial, you use Docker to pull and run the SQL Server 2017 RC1 containter image, [mssql-server-linux](https://hub.docker.com/r/microsoft/mssql-server-linux/). Then connect with **sqlcmd** to create your first database and run queries. +In this quick start tutorial, you use Docker to pull and run the SQL Server 2017 RC1 container image, [mssql-server-linux](https://hub.docker.com/r/microsoft/mssql-server-linux/). Then connect with **sqlcmd** to create your first database and run queries. This image consists of SQL Server running on Linux based on Ubuntu 16.04. It can be used with the Docker Engine 1.8+ on Linux or on Docker for Mac/Windows. @@ -26,20 +26,20 @@ This image consists of SQL Server running on Linux based on Ubuntu 16.04. It can - [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). > [!IMPORTANT] -> The default on Docker for Mac and Docker for Windows is 2 GB for the Moby VM, so you must change it to 4 GB. If you are running on Mac or Windows, use the procedures below in increase the memory. +> The default on Docker for Mac and Docker for Windows is 2 GB for the Moby VM, so you must change it to 4 GB. If you are running on Mac or Windows, use the following procedures to increase the memory. -### Mac: Increase Docker memory to 4GB +### Mac: Increase Docker memory to 4 GB -The following steps increase the memory for Docker for Mac to 4GB. +The following steps increase the memory for Docker for Mac to 4 GB. 1. Click the Docker logo on the top status bar. 1. Select **Preferences**. 1. Move the memory indicator to 4 GB or more. 1. Click the **restart** button at the button of the screen. -### Windows: Increase Docker memory to 4GB +### Windows: Increase Docker memory to 4 GB -The following steps increase the memory for Docker for Windows to 4GB. +The following steps increase the memory for Docker for Windows to 4 GB. 1. Right-click on the Docker icon from the task bar. 1. Click **Settings** under that menu. @@ -96,7 +96,7 @@ The following steps increase the memory for Docker for Windows to 4GB. ## Change the SA password -The SA account is an system administrator on the SQL Server instance that gets created during setup. After creating your SQL Server container, the `SA_PASSWORD` environment variable you specified is discoverable by running `echo $SA_PASSWORD` in the container. For security purposes, change your SA password. +The SA account is a system administrator on the SQL Server instance that gets created during setup. After creating your SQL Server container, the `SA_PASSWORD` environment variable you specified is discoverable by running `echo $SA_PASSWORD` in the container. For security purposes, change your SA password. 1. Choose a strong password to use for the SA user. @@ -119,7 +119,7 @@ The following steps use the SQL Server command-line tool, **sqlcmd**, inside the > [!TIP] > You don't always have to specify the entire container id. You only have to specify enough characters to uniquely identify it. So in this example, it might be enough to use `e6` or `e69` rather than the full id. -1. Once inside the container, connect locally with sqlcmd. Note that sqlcmd is not in the path by default, so you have to specify the full path. +1. Once inside the container, connect locally with sqlcmd. Sqlcmd is not in the path by default, so you have to specify the full path. ```bash /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '' @@ -207,7 +207,7 @@ Next create a new table, `Inventory`, and insert two new rows. Now, run a query to return data from the `Inventory` table. -1. From the **sqlcmd** commandd prompt, enter a query that returns rows from the `Inventory` table where the quantity is greater than 152: +1. From the **sqlcmd** command prompt, enter a query that returns rows from the `Inventory` table where the quantity is greater than 152: ```sql SELECT * FROM Inventory WHERE quantity > 152; @@ -233,7 +233,7 @@ Now, run a query to return data from the `Inventory` table. You can also connect to the SQL Server instance on your Docker machine from any external Linux, Windows, or macOS tool that supports SQL connections. -The following steps uses **sqlcmd** outside of your container to connect to SQL Server running in the container. These steps assume that you already have the SQL Server command-line tools installed outside of your container. The same principals apply when using other tools, but the process of connecting will be unique to each tool. +The following steps use **sqlcmd** outside of your container to connect to SQL Server running in the container. These steps assume that you already have the SQL Server command-line tools installed outside of your container. The same principals apply when using other tools, but the process of connecting is unique to each tool. 1. Find the IP address for the machine that hosts your container. On Linux, use **ifconfig** or **ip addr**. On Windows, use **ipconfig**. From 6a806c0c2743063cd1107917f54fe148bdc1439d Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Tue, 11 Jul 2017 13:54:43 -0400 Subject: [PATCH 229/336] Consistency issues between quickstarts --- .../quickstart-install-connect-red-hat.md | 48 ++++++++----------- docs/linux/quickstart-install-connect-suse.md | 48 +++++++++---------- .../quickstart-install-connect-ubuntu.md | 4 +- 3 files changed, 45 insertions(+), 55 deletions(-) diff --git a/docs/linux/quickstart-install-connect-red-hat.md b/docs/linux/quickstart-install-connect-red-hat.md index d23f5982ee9..9964e5b016e 100644 --- a/docs/linux/quickstart-install-connect-red-hat.md +++ b/docs/linux/quickstart-install-connect-red-hat.md @@ -25,17 +25,20 @@ ms.assetid: "" --- # Install SQL Server and create a database on Red Hat -In this quick start tutorial, you first install SQL Server 2017 CTP 2.1 on Red Hat Enterprise Linux (RHEL). Then connect with **sqlcmd** to create your first database and run queries. +In this quick start tutorial, you first install SQL Server 2017 CTP 2.1 on Red Hat Enterprise Linux (RHEL) 7.3. Then connect with **sqlcmd** to create your first database and run queries. ## Prerequisites -- You must have a Linux machine with at least 3.25GB of memory. -- For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). +- You must have a RHEL 7.3 machine with at least 3.25 GB of memory. + + > [!TIP] + > To install RHEL, go to [http://access.redhat.com/products/red-hat-enterprise-linux/evaluation](http://access.redhat.com/products/red-hat-enterprise-linux/evaluation). You can also create RHEL virtual machines in Azure. For the basic process, see [Create a Linux virtual machine with the Azure CLI](https://docs.microsoft.com/azure/virtual-machines/linux/quick-create-cli). +- For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). ## Install SQL Server -To install the **mssql-server** package on RHEL, follow these steps: +To configure SQL Server on RHEL, run the following commands in a terminal to install the **mssql-server** package: 1. Enter superuser mode. @@ -43,47 +46,48 @@ To install the **mssql-server** package on RHEL, follow these steps: sudo su ``` -2. Download the Microsoft SQL Server Red Hat repository configuration file: +1. Download the Microsoft SQL Server Red Hat repository configuration file: ```bash curl https://packages.microsoft.com/config/rhel/7/mssql-server.repo > /etc/yum.repos.d/mssql-server.repo ``` - -3. Exit superuser mode. + +1. Exit superuser mode. ```bash exit ``` -4. Run the following commands to install SQL Server: +1. Run the following commands to install SQL Server: ```bash sudo yum install -y mssql-server ``` -5. After the package installation finishes, run **mssql-conf setup** and follow the prompts. Make sure to specify a strong password for the SA account (Minimum length 8 characters, including uppercase and lowercase letters, base 10 digits and/or non-alphanumeric symbols). +1. After the package installation finishes, run **mssql-conf setup** and follow the prompts. Make sure to specify a strong password for the SA account (Minimum length 8 characters, including uppercase and lowercase letters, base 10 digits and/or non-alphanumeric symbols). ```bash sudo /opt/mssql/bin/mssql-conf setup ``` -6. Once the configuration is done, verify that the service is running: +1. Once the configuration is done, verify that the service is running: ```bash systemctl status mssql-server ``` -7. To allow remote connections, open the SQL Server port on the firewall on RHEL. The default SQL Server port is TCP 1433. If you are using **FirewallD** for your firewall, you can use the following commands: +1. To allow remote connections, open the SQL Server port on the firewall on RHEL. The default SQL Server port is TCP 1433. If you are using **FirewallD** for your firewall, you can use the following commands: ```bash sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent sudo firewall-cmd --reload ``` +At this point, SQL Server is running on your RHEL machine and is ready to use! ## Install the SQL Server command-line tools -To create a database, you need to connect with a tool that can run Transact-SQL statements on SQL Server. The following steps install the **mssql-tools** on Red Hat Enterprise Linux. +To create a database, you need to connect with a tool that can run Transact-SQL statements on the SQL Server. The following steps install the SQL Server command-line tools, [sqlcmd](../tools/sqlcmd-utility.md) and [bcp](../tools/bcp-utility.md). 1. Enter superuser mode. @@ -117,27 +121,15 @@ To create a database, you need to connect with a tool that can run Transact-SQL sudo yum install mssql-tools unixODBC-devel ``` - > [!Note] - > To update to the latest version of **mssql-tools** run the following commands: - > ```bash - > sudo yum check-update - > sudo yum update mssql-tools - > ``` - -1. For convenience, add `/opt/mssql-tools/bin/` to your **PATH** environment variable in a bash shell. - - To make **sqlcmd/bcp** accessible from the bash shell for login sessions, modify your **PATH** in the **~/.bash_profile** file with the following command: +1. For convenience, add `/opt/mssql-tools/bin/` to your **PATH** environment variable. This enables you to run the tools without specifying the full path. Run the following commands to modify the **PATH** for both login sessions and interactive/non-login sessions: ```bash echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile - ``` - - To make **sqlcmd/bcp** accessible from the bash shell for interactive/non-login sessions, modify the **PATH** in the **~/.bashrc** file with the following command: - - ```bash echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc source ~/.bashrc ``` -[!INCLUDE [Connect, create, and query data](../includes/sql-linux-quickstart-connect-query.md)] +> [!TIP] +> **Sqlcmd** is just one tool for connecting to SQL Server to run queries and perform management and development tasks. Other tools include [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md) and [Visusal Studio Code](sql-server-linux-develop-use-vscode.md). +[!INCLUDE [Connect, create, and query data](../includes/sql-linux-quickstart-connect-query.md)] \ No newline at end of file diff --git a/docs/linux/quickstart-install-connect-suse.md b/docs/linux/quickstart-install-connect-suse.md index 9d5f8c4bf07..7b033cbdb53 100644 --- a/docs/linux/quickstart-install-connect-suse.md +++ b/docs/linux/quickstart-install-connect-suse.md @@ -28,13 +28,19 @@ ms.assetid: "" In this quick start tutorial, you first install SQL Server 2017 CTP 2.1 on SUSE Linux Enterprise Server (SLES) v12 SP2. Then connect with **sqlcmd** to create your first database and run queries. ## Prerequisites -- You need at least 3.25GB of memory to run SQL Server on Linux. + +- You must have a SLES v12 SP2 machine with at least 3.25 GB of memory. + + > [!TIP] + > To install SLES, go to [https://www.suse.com/products/server](https://www.suse.com/products/server). You can also create SLES virtual machines in Azure. For the basic process, see [Create a Linux virtual machine with the Azure CLI](https://docs.microsoft.com/azure/virtual-machines/linux/quick-create-cli). + - The file system must be **XFS** or **EXT4**. Other file systems, such as **BTRFS**, are unsupported. -- For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). +- For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). ## Install SQL Server -To install the **mssql-server** package on SLES, follow these steps: + +To configure SQL Server on SLES, run the following commands in a terminal to install the **mssql-server** package: 1. Download the Microsoft SQL Server SLES repository configuration file: @@ -43,26 +49,29 @@ To install the **mssql-server** package on SLES, follow these steps: sudo zypper --gpg-auto-import-keys refresh ``` - -2. Run the following commands to install SQL Server: + +1. Run the following commands to install SQL Server: ```bash sudo zypper install mssql-server ``` - -3. After the package installation finishes, run **mssql-conf setup** and follow the prompts. Make sure to specify a strong password for the SA account (Minimum length 8 characters, including uppercase and lowercase letters, base 10 digits and/or non-alphanumeric symbols). + +1. After the package installation finishes, run **mssql-conf setup** and follow the prompts. Make sure to specify a strong password for the SA account (Minimum length 8 characters, including uppercase and lowercase letters, base 10 digits and/or non-alphanumeric symbols). ```bash sudo /opt/mssql/bin/mssql-conf setup ``` -4. Once the configuration is done, verify that the service is running: + > [!IMPORTANT] + > If you plan to connect remotely, you might also need to open the SQL Server TCP port (default 1433) on your firewall. + +1. Once the configuration is done, verify that the service is running: ```bash systemctl status mssql-server ``` - -5. To allow remote connections, you may need to open the SQL Server TCP port on your firewall. The default SQL Server port is 1433. + +At this point, SQL Server is running on your SLES machine and is ready to use! ## Install the SQL Server command-line tools To create a database, you need to connect with a tool that can run Transact-SQL statements on the SQL Server. The following steps install the **mssql-tools** on SUSE Linux Enterprise Server. @@ -80,26 +89,15 @@ To create a database, you need to connect with a tool that can run Transact-SQL sudo zypper install mssql-tools unixODBC-devel ``` - > [!Note] - > To update to the latest version of **mssql-tools** run the following commands: - > ```bash - > sudo zypper refresh - > sudo zypper update mssql-tools - > ``` - -1. For convenience, add `/opt/mssql-tools/bin/` to your **PATH** environment variable in a bash shell. - - To make **sqlcmd/bcp** accessible from the bash shell for login sessions, modify your **PATH** in the **~/.bash_profile** file with the following command: +1. For convenience, add `/opt/mssql-tools/bin/` to your **PATH** environment variable. This enables you to run the tools without specifying the full path. Run the following commands to modify the **PATH** for both login sessions and interactive/non-login sessions: ```bash echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile - ``` - - To make **sqlcmd/bcp** accessible from the bash shell for interactive/non-login sessions, modify the **PATH** in the **~/.bashrc** file with the following command: - - ```bash echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc source ~/.bashrc ``` +> [!TIP] +> **Sqlcmd** is just one tool for connecting to SQL Server to run queries and perform management and development tasks. Other tools include [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md) and [Visusal Studio Code](sql-server-linux-develop-use-vscode.md). + [!INCLUDE [Connect, create, and query data](../includes/sql-linux-quickstart-connect-query.md)] \ No newline at end of file diff --git a/docs/linux/quickstart-install-connect-ubuntu.md b/docs/linux/quickstart-install-connect-ubuntu.md index d47851be6a6..9c3afe42449 100644 --- a/docs/linux/quickstart-install-connect-ubuntu.md +++ b/docs/linux/quickstart-install-connect-ubuntu.md @@ -15,7 +15,7 @@ In this quick start tutorial, you first install SQL Server 2017 CTP 2.1 on Ubunt ## Prerequisites -- You must have a Ubuntu machine with at least 3.25GB of memory. +- You must have a Ubuntu machine with at least 3.25 GB of memory. > [!TIP] > To install Ubuntu, go to [http://www.ubuntu.com/download/server](http://www.ubuntu.com/download/server). You can also create Ubuntu virtual machines in Azure. For instructions, see [Create a Linux virtual machine with the Azure CLI](https://docs.microsoft.com/azure/virtual-machines/linux/quick-create-cli). @@ -59,7 +59,7 @@ To configure SQL Server on Ubuntu, run the following commands in a terminal to i systemctl status mssql-server ``` -At this point, SQL Server is running on your Ubuntu machine and is ready to use. +At this point, SQL Server is running on your Ubuntu machine and is ready to use! ## Install the SQL Server command-line tools From d38811b6963ef63fdb80e06d163c2f0de678bea0 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Tue, 11 Jul 2017 13:57:04 -0400 Subject: [PATCH 230/336] Spelling error --- docs/linux/quickstart-install-connect-red-hat.md | 2 +- docs/linux/quickstart-install-connect-suse.md | 2 +- docs/linux/quickstart-install-connect-ubuntu.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/linux/quickstart-install-connect-red-hat.md b/docs/linux/quickstart-install-connect-red-hat.md index 9964e5b016e..cd8780feec3 100644 --- a/docs/linux/quickstart-install-connect-red-hat.md +++ b/docs/linux/quickstart-install-connect-red-hat.md @@ -130,6 +130,6 @@ To create a database, you need to connect with a tool that can run Transact-SQL ``` > [!TIP] -> **Sqlcmd** is just one tool for connecting to SQL Server to run queries and perform management and development tasks. Other tools include [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md) and [Visusal Studio Code](sql-server-linux-develop-use-vscode.md). +> **Sqlcmd** is just one tool for connecting to SQL Server to run queries and perform management and development tasks. Other tools include [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md) and [Visual Studio Code](sql-server-linux-develop-use-vscode.md). [!INCLUDE [Connect, create, and query data](../includes/sql-linux-quickstart-connect-query.md)] \ No newline at end of file diff --git a/docs/linux/quickstart-install-connect-suse.md b/docs/linux/quickstart-install-connect-suse.md index 7b033cbdb53..a387b90533b 100644 --- a/docs/linux/quickstart-install-connect-suse.md +++ b/docs/linux/quickstart-install-connect-suse.md @@ -98,6 +98,6 @@ To create a database, you need to connect with a tool that can run Transact-SQL ``` > [!TIP] -> **Sqlcmd** is just one tool for connecting to SQL Server to run queries and perform management and development tasks. Other tools include [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md) and [Visusal Studio Code](sql-server-linux-develop-use-vscode.md). +> **Sqlcmd** is just one tool for connecting to SQL Server to run queries and perform management and development tasks. Other tools include [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md) and [Visual Studio Code](sql-server-linux-develop-use-vscode.md). [!INCLUDE [Connect, create, and query data](../includes/sql-linux-quickstart-connect-query.md)] \ No newline at end of file diff --git a/docs/linux/quickstart-install-connect-ubuntu.md b/docs/linux/quickstart-install-connect-ubuntu.md index 9c3afe42449..a32bb1cdaed 100644 --- a/docs/linux/quickstart-install-connect-ubuntu.md +++ b/docs/linux/quickstart-install-connect-ubuntu.md @@ -93,6 +93,6 @@ To create a database, you need to connect with a tool that can run Transact-SQL ``` > [!TIP] -> **Sqlcmd** is just one tool for connecting to SQL Server to run queries and perform management and development tasks. Other tools include [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md) and [Visusal Studio Code](sql-server-linux-develop-use-vscode.md). +> **Sqlcmd** is just one tool for connecting to SQL Server to run queries and perform management and development tasks. Other tools include [SQL Server Management Studio](sql-server-linux-develop-use-ssms.md) and [Visual Studio Code](sql-server-linux-develop-use-vscode.md). [!INCLUDE [Connect, create, and query data](../includes/sql-linux-quickstart-connect-query.md)] \ No newline at end of file From 533d02ab79a471362289ec06c46de09bf545842e Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Tue, 11 Jul 2017 14:08:42 -0400 Subject: [PATCH 231/336] Updating Docker quick start and associated screenshot --- .../docker-ps-command.png | Bin 3567 -> 3592 bytes .../quickstart-install-connect-docker.md | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/linux/media/sql-server-linux-setup-docker/docker-ps-command.png b/docs/linux/media/sql-server-linux-setup-docker/docker-ps-command.png index 8215c8b89416129e4124dc5e184809d08faca3a9..abe3b214356d9ded767338878063509c9d468ef6 100644 GIT binary patch delta 2718 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 [!IMPORTANT] > The default on Docker for Mac and Docker for Windows is 2 GB for the Moby VM, so you must change it to 4 GB. If you are running on Mac or Windows, use the following procedures to increase the memory. -### Mac: Increase Docker memory to 4 GB +### Increase Docker memory to 4 GB (Mac) The following steps increase the memory for Docker for Mac to 4 GB. @@ -37,7 +37,7 @@ The following steps increase the memory for Docker for Mac to 4 GB. 1. Move the memory indicator to 4 GB or more. 1. Click the **restart** button at the button of the screen. -### Windows: Increase Docker memory to 4 GB +### Increase Docker memory to 4 GB (Windows) The following steps increase the memory for Docker for Windows to 4 GB. From 9a9a3aa51c460b8f21dbea418b5a14243001cea7 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Tue, 11 Jul 2017 14:10:34 -0400 Subject: [PATCH 232/336] Adding link to install section for other topics to use --- docs/linux/quickstart-install-connect-red-hat.md | 2 +- docs/linux/quickstart-install-connect-suse.md | 2 +- docs/linux/quickstart-install-connect-ubuntu.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/linux/quickstart-install-connect-red-hat.md b/docs/linux/quickstart-install-connect-red-hat.md index cd8780feec3..cddb568e06f 100644 --- a/docs/linux/quickstart-install-connect-red-hat.md +++ b/docs/linux/quickstart-install-connect-red-hat.md @@ -36,7 +36,7 @@ In this quick start tutorial, you first install SQL Server 2017 CTP 2.1 on Red H - For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). -## Install SQL Server +## Install SQL Server To configure SQL Server on RHEL, run the following commands in a terminal to install the **mssql-server** package: diff --git a/docs/linux/quickstart-install-connect-suse.md b/docs/linux/quickstart-install-connect-suse.md index a387b90533b..b706171da7b 100644 --- a/docs/linux/quickstart-install-connect-suse.md +++ b/docs/linux/quickstart-install-connect-suse.md @@ -38,7 +38,7 @@ In this quick start tutorial, you first install SQL Server 2017 CTP 2.1 on SUSE - For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). -## Install SQL Server +## Install SQL Server To configure SQL Server on SLES, run the following commands in a terminal to install the **mssql-server** package: diff --git a/docs/linux/quickstart-install-connect-ubuntu.md b/docs/linux/quickstart-install-connect-ubuntu.md index a32bb1cdaed..556b039d938 100644 --- a/docs/linux/quickstart-install-connect-ubuntu.md +++ b/docs/linux/quickstart-install-connect-ubuntu.md @@ -22,7 +22,7 @@ In this quick start tutorial, you first install SQL Server 2017 CTP 2.1 on Ubunt - For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). -## Install SQL Server +## Install SQL Server To configure SQL Server on Ubuntu, run the following commands in a terminal to install the **mssql-server** package: From 2d12d0da621ebeedfdc63a4a457cf3a2b312a296 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Tue, 11 Jul 2017 14:16:37 -0400 Subject: [PATCH 233/336] Removing unecessary section --- .../quickstart-install-connect-docker.md | 21 +------------------ 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/docs/linux/quickstart-install-connect-docker.md b/docs/linux/quickstart-install-connect-docker.md index 3ce60a63a5e..b5d3e6c45e6 100644 --- a/docs/linux/quickstart-install-connect-docker.md +++ b/docs/linux/quickstart-install-connect-docker.md @@ -130,27 +130,8 @@ The following steps use the SQL Server command-line tool, **sqlcmd**, inside the 1. If successful, you should get to a **sqlcmd** command prompt: `1>`. -## Connect locally - -The following steps use **sqlcmd** to locally connect to your new SQL Server instance. - -1. Run **sqlcmd** with parameters for your SQL Server name (-S), the user name (-U), and the password (-P). In this tutorial, you are connecting locally, so the server name is `localhost`. The user name is `SA` and the password is the one you provided for the SA account during setup. - - ```bash - sqlcmd -S localhost -U SA -P '' - ``` - - > [!TIP] - > You can omit the password on the command-line to be prompted to enter it. - - > [!TIP] - > If you later decide to connect remotely, specify the machine name or IP address for the **-S** parameter, and make sure port 1433 is open on your firewall. - -1. If successful, you should get to a **sqlcmd** command prompt: `1>`. - -1. If you get a connection failure, first attempt to diagnose the problem from the error message. Then review the [connection troubleshooting recommendations](../linux/sql-server-linux-troubleshooting-guide.md#connection). - ## Create and query data + The following sections walk you through using **sqlcmd** and Transact-SQL to create a new database, add data, and run a simple query. ### Create a new database From 8174119f1041f5272c800a454c7bbdc6b17b3427 Mon Sep 17 00:00:00 2001 From: Douglas Laudenschlager Date: Tue, 11 Jul 2017 13:23:55 -0700 Subject: [PATCH 234/336] Added SSIS new features and rel notes for RC0/RC1. --- ...integration-services-in-sql-server-2017.md | 22 +++++++++++++--- .../sql-server-2017-release-notes.md | 9 +++++++ .../what-s-new-in-sql-server-2017.md | 26 ++++++++++++++----- 3 files changed, 47 insertions(+), 10 deletions(-) diff --git a/docs/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md b/docs/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md index 767ed9b078e..67c8122a01e 100644 --- a/docs/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md +++ b/docs/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md @@ -1,7 +1,7 @@ --- title: "What's New in Integration Services in SQL Server 2017 | Microsoft Docs" ms.custom: "" -ms.date: "03/16/2017" +ms.date: "07/11/2017" ms.prod: "sql-server-2016" ms.reviewer: "" ms.suite: "" @@ -21,12 +21,26 @@ This topic describes the features that have been added or updated in [!INCLUDE[s > [!NOTE] > SQL Server 2017 also includes the features of SQL Server 2016 and the features added in SQL Server 2016 updates. For info about the new SSIS features in SQL Server 2016, see [What's New in Integration Services in SQL Server 2016](../integration-services/what-s-new-in-integration-services-in-sql-server-2016.md). +## New in SSIS in SQL Server 2017 RC1 + +### New and changed features in Scale Out for SSIS + +- Scale Out Master now supports high availability. You can enable Always On for SSISDB and set up Windows Server failover clustering for the server that hosts the Scale Out Master service. By applying this change to Scale Out Master, you avoid a single point of failure and provide high availability for the entire Scale Out deployment. +- The failover handling of the execution logs from Scale Out Workers is improved. The execution logs are persisted to local disk in case the Scale Out Worker stops unexpectedly. Later, when the worker restarts, it reloads the persisted logs and continues saving them to SSISDB. +- The parameter *runincluster* of the stored procedure **[catalog].[create_execution]** is renamed to *runinscaleout* for consistency and readability. This change of parameter name has the following impact: + - If you have existing scripts to run packages in Scale Out, you have to change the parameter name from *runincluster* to *runinscaleout* to make the scripts work in RC1. + - SQL Server Management Studio (SSMS) 17.1 and earlier versions can't trigger package execution in Scale Out in RC1. The error message is: "*@runincluster* is not a parameter for procedure **create_execution**." This is fixed in the next release of SSMS, version 17.2. Version 17.2 and later of SSMS support the new parameter name and package execution in Scale Out. Until SSMS version 17.2 is available, as a workaround, you can use your existing version of SSMS to generate the package execution script, then change the name of the *runincluster* parameter to *runinscaleout* in the script, and run the script. +- The SSIS Catalog has a new global property to specify the default mode for executing SSIS packages. This new property applies when you call the **[catalog].[create_execution]** stored procedure with the *runinscaleout* parameter set to null. This mode also applies to SSIS SQL Agent jobs. You can set the new global property in the Properties dialog box for the SSISDB node in SSMS, or with the following command: + ```sql + EXEC [catalog].[configure_catalog] @property_name=N'DEFAULT_EXECUTION_MODE', @property_value=1 + ``` + ## New in SSIS in SQL Server 2017 CTP 2.1 -### New features in Scale Out for SSIS +### New and changed features in Scale Out for SSIS -1. You can now use the **Use32BitRuntime** parameter when you trigger execution in Scale Out. -2. The performance of logging to SSISDB for package executions in Scale Out has been improved. The Event Message and Message Context logs are now written to SSISDB in batch mode instead of one by one. Here are some additional notes about this improvement: +- You can now use the **Use32BitRuntime** parameter when you trigger execution in Scale Out. +- The performance of logging to SSISDB for package executions in Scale Out has been improved. The Event Message and Message Context logs are now written to SSISDB in batch mode instead of one by one. Here are some additional notes about this improvement: - Some reports in the current version of SQL Server Management Studio (SSMS) don’t currently display these logs for executions in Scale Out. We anticipate that they will be supported in the next release of SSMS. The affected reports include the *All Connections* report, the *Error Context* report, and the *Connection Information* section in the Integration Service Dashboard. - A new column **event_message_guid** has been added. Use this column to join the [catalog].[event_message_context] view and the [catalog].[event_messages] view instead of using **event_message_id** when you query these logs of executions in Scale Out. diff --git a/docs/sql-server/sql-server-2017-release-notes.md b/docs/sql-server/sql-server-2017-release-notes.md index d1c56eea1a8..020e7c60fc8 100644 --- a/docs/sql-server/sql-server-2017-release-notes.md +++ b/docs/sql-server/sql-server-2017-release-notes.md @@ -25,6 +25,15 @@ This topic describes limitations and issues with [!INCLUDE[ssSQLv14_md](../inclu **Try it out:** - [![Download from Evaluation Center](../analysis-services/media/download.png)](http://go.microsoft.com/fwlink/?LinkID=829477) Download [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] from the **[Evaluation Center](http://go.microsoft.com/fwlink/?LinkID=829477)** +## SQL Server 2017 Release Candidate (RC1 - July 2017) + +### SQL Server Integration Services (SSIS) (RC1 - July 2017) +- **Issue and customer impact:** The parameter *runincluster* of the stored procedure **[catalog].[create_execution]** is renamed to *runinscaleout* for consistency and readability. +- **Workaround:** If you have existing scripts to run packages in Scale Out, you have to change the parameter name from *runincluster* to *runinscaleout* to make the scripts work in RC1. + +- **Issue and customer impact:** SQL Server Management Studio (SSMS) 17.1 and earlier versions can't trigger package execution in Scale Out in RC1. The error message is: "*@runincluster* is not a parameter for procedure **create_execution**." This is fixed in the next release of SSMS, version 17.2. Versions 17.2 and later of SSMS support the new parameter name and package execution in Scale Out. +- **Workaround:** Until SSMS version 17.2 is available, you can use your existing version of SSMS to generate the package execution script, then change the name of the *runincluster* parameter to *runinscaleout* in the script, and run the script. + ## SQL Server 2017 Release Candidate (RC0 - June 2017) ### Documentation (RC0) - **Issue and customer impact:** Documentation for [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] is limited and content is included with the [!INCLUDE[ssSQL15_md](../includes/sssql15-md.md)] documentation set. Content in articles that is specific to [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] will be noted with **Applies To**. diff --git a/docs/sql-server/what-s-new-in-sql-server-2017.md b/docs/sql-server/what-s-new-in-sql-server-2017.md index 6d31f0fda03..e13f544a57c 100644 --- a/docs/sql-server/what-s-new-in-sql-server-2017.md +++ b/docs/sql-server/what-s-new-in-sql-server-2017.md @@ -25,7 +25,13 @@ SQL Server 2017 represents a major step towards making SQL Server a platform tha ## Latest release **SQL Server 2017 Release Candidate** (RC1, July 2017) - + +### SQL Server Integration Services (SSIS) +The new **Scale Out** feature in SSIS has the following new and changed features in RC1. For more info, see [What's New in Integration Services in SQL Server 2017](~/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md). +- Scale Out Master now supports high availability +- The failover handling of the execution logs from Scale Out Workers is improved. +- The parameter *runincluster* of the stored procedure **[catalog].[create_execution]** is renamed to *runinscaleout* for consistency and readability. +- The SSIS Catalog has a new global property to specify the default mode for executing SSIS packages. ## SQL Server Database Engine SQL Server 2017 includes many new Database Engine features, enhancements, and performance improvements. @@ -55,6 +61,19 @@ SQL Server 2017 includes many new Database Engine features, enhancements, and pe For more information, see [What's new in SQL Server 2017 Database Engine](~/database-engine/configure-windows/what-s-new-in-sql-server-2017-database-engine.md). +## SQL Server Integration Services (SSIS) +- The new **Scale Out** feature in SSIS has the following new and changed features. For more info, see [What's New in Integration Services in SQL Server 2017](~/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md). (RC1) + - Scale Out Master now supports high availability. + - The failover handling of the execution logs from Scale Out Workers is improved. + - The parameter *runincluster* of the stored procedure **[catalog].[create_execution]** is renamed to *runinscaleout* for consistency and readability. + - The SSIS Catalog has a new global property to specify the default mode for executing SSIS packages. +- In the new **Scale Out for SSIS** feature, you can now use the **Use32BitRuntime** parameter when you trigger execution. (CTP 2.1) +- SQL Server 2017 Integration Services (SSIS) now supports **SQL Server on Linux**, and a new package lets you run SSIS packages on Linux from the command line. For more information, see the [blog post announcing SSIS support for Linux](https://blogs.msdn.microsoft.com/ssis/2017/05/17/ssis-helsinki-is-available-in-sql-server-vnext-ctp2-1/). (CTP 2.1) +- The new **Scale Out for SSIS** feature makes it much easier to run SSIS on multiple machines. See [Integration Services Scale Out](~/integration-services/integration-services-ssis-scale-out.md). (CTP 1.0) +- OData Source and OData Connection Manager now support connecting to the OData feeds of Microsoft Dynamics AX Online and Microsoft Dynamics CRM Online. (CTP 1.0) + +For more info, see [What's New in Integration Services in SQL Server 2017](~/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md). + ## SQL Server Analysis Services (SSAS) SQL Server Analysis Services 2017 introduces many enhancements for tabular models. These include: - Tabular mode as the default installation option for Analysis Services. (CTP 2.0) @@ -71,11 +90,6 @@ SQL Server Analysis Services 2017 introduces many enhancements for tabular model For more information, see [What's new in SQL Server Analysis Services 2017](~/analysis-services/what-s-new-in-sql-server-analysis-services-2017.md). -## SQL Server Integration Services (SSIS) -- The new **Scale Out for SSIS** feature makes it much easier to run SSIS on multiple machines. See [Integration Services Scale Out](~/integration-services/integration-services-ssis-scale-out.md). (CTP 1.0) You can now use the **Use32BitRuntime** parameter when you trigger execution in Scale Out. (CTP 2.1) -- SQL Server 2017 Integration Services (SSIS) now supports **SQL Server on Linux**, and a new package lets you run SSIS packages on Linux from the command line. For more information, see the [blog post announcing SSIS support for Linux](https://blogs.msdn.microsoft.com/ssis/2017/05/17/ssis-helsinki-is-available-in-sql-server-vnext-ctp2-1/). (CTP 2.1) -- OData Source and OData Connection Manager now support connecting to the OData feeds of Microsoft Dynamics AX Online and Microsoft Dynamics CRM Online. (CTP 1.0) - ## SQL Server Reporting Services (SSRS) As of CTP 2.1, SSRS is no longer available to install through SQL Server setup. Go to the Microsoft Download Center to [download the May 2017 Preview of Power BI Report Server and Power BI Desktop optimized for Power BI Report Server](https://www.microsoft.com/download/details.aspx?id=55253). For information about Power BI Report Server, see [Get started with Power BI Report Server](https://powerbi.microsoft.com/documentation/reportserver-get-started/). - Comments are now available for reports, to add perspective and collaborate with others. You can also include attachments with comments. (CTP 2.1) From a7c704a7be5ed5d821dd88da7151fbd9dfe572b2 Mon Sep 17 00:00:00 2001 From: Douglas Laudenschlager Date: Tue, 11 Jul 2017 13:30:32 -0700 Subject: [PATCH 235/336] Fixed an Acrolinx issue in 2 topics. --- .../what-s-new-in-integration-services-in-sql-server-2017.md | 2 +- docs/sql-server/sql-server-2017-release-notes.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md b/docs/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md index 67c8122a01e..90de1ff2e92 100644 --- a/docs/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md +++ b/docs/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md @@ -29,7 +29,7 @@ This topic describes the features that have been added or updated in [!INCLUDE[s - The failover handling of the execution logs from Scale Out Workers is improved. The execution logs are persisted to local disk in case the Scale Out Worker stops unexpectedly. Later, when the worker restarts, it reloads the persisted logs and continues saving them to SSISDB. - The parameter *runincluster* of the stored procedure **[catalog].[create_execution]** is renamed to *runinscaleout* for consistency and readability. This change of parameter name has the following impact: - If you have existing scripts to run packages in Scale Out, you have to change the parameter name from *runincluster* to *runinscaleout* to make the scripts work in RC1. - - SQL Server Management Studio (SSMS) 17.1 and earlier versions can't trigger package execution in Scale Out in RC1. The error message is: "*@runincluster* is not a parameter for procedure **create_execution**." This is fixed in the next release of SSMS, version 17.2. Version 17.2 and later of SSMS support the new parameter name and package execution in Scale Out. Until SSMS version 17.2 is available, as a workaround, you can use your existing version of SSMS to generate the package execution script, then change the name of the *runincluster* parameter to *runinscaleout* in the script, and run the script. + - SQL Server Management Studio (SSMS) 17.1 and earlier versions can't trigger package execution in Scale Out in RC1. The error message is: "*@runincluster* is not a parameter for procedure **create_execution**." This issue is fixed in the next release of SSMS, version 17.2. Version 17.2 and later of SSMS support the new parameter name and package execution in Scale Out. Until SSMS version 17.2 is available, as a workaround, you can use your existing version of SSMS to generate the package execution script, then change the name of the *runincluster* parameter to *runinscaleout* in the script, and run the script. - The SSIS Catalog has a new global property to specify the default mode for executing SSIS packages. This new property applies when you call the **[catalog].[create_execution]** stored procedure with the *runinscaleout* parameter set to null. This mode also applies to SSIS SQL Agent jobs. You can set the new global property in the Properties dialog box for the SSISDB node in SSMS, or with the following command: ```sql EXEC [catalog].[configure_catalog] @property_name=N'DEFAULT_EXECUTION_MODE', @property_value=1 diff --git a/docs/sql-server/sql-server-2017-release-notes.md b/docs/sql-server/sql-server-2017-release-notes.md index 020e7c60fc8..0ce9901c666 100644 --- a/docs/sql-server/sql-server-2017-release-notes.md +++ b/docs/sql-server/sql-server-2017-release-notes.md @@ -31,7 +31,7 @@ This topic describes limitations and issues with [!INCLUDE[ssSQLv14_md](../inclu - **Issue and customer impact:** The parameter *runincluster* of the stored procedure **[catalog].[create_execution]** is renamed to *runinscaleout* for consistency and readability. - **Workaround:** If you have existing scripts to run packages in Scale Out, you have to change the parameter name from *runincluster* to *runinscaleout* to make the scripts work in RC1. -- **Issue and customer impact:** SQL Server Management Studio (SSMS) 17.1 and earlier versions can't trigger package execution in Scale Out in RC1. The error message is: "*@runincluster* is not a parameter for procedure **create_execution**." This is fixed in the next release of SSMS, version 17.2. Versions 17.2 and later of SSMS support the new parameter name and package execution in Scale Out. +- **Issue and customer impact:** SQL Server Management Studio (SSMS) 17.1 and earlier versions can't trigger package execution in Scale Out in RC1. The error message is: "*@runincluster* is not a parameter for procedure **create_execution**." This issue is fixed in the next release of SSMS, version 17.2. Versions 17.2 and later of SSMS support the new parameter name and package execution in Scale Out. - **Workaround:** Until SSMS version 17.2 is available, you can use your existing version of SSMS to generate the package execution script, then change the name of the *runincluster* parameter to *runinscaleout* in the script, and run the script. ## SQL Server 2017 Release Candidate (RC0 - June 2017) From 0164fb772292a849ba3bb8244203cb44da993d3c Mon Sep 17 00:00:00 2001 From: Douglas Laudenschlager Date: Tue, 11 Jul 2017 13:36:02 -0700 Subject: [PATCH 236/336] Minor formatting changes after checking previews. --- .../what-s-new-in-integration-services-in-sql-server-2017.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md b/docs/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md index 90de1ff2e92..951c144f799 100644 --- a/docs/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md +++ b/docs/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md @@ -43,8 +43,7 @@ This topic describes the features that have been added or updated in [!INCLUDE[s - The performance of logging to SSISDB for package executions in Scale Out has been improved. The Event Message and Message Context logs are now written to SSISDB in batch mode instead of one by one. Here are some additional notes about this improvement: - Some reports in the current version of SQL Server Management Studio (SSMS) don’t currently display these logs for executions in Scale Out. We anticipate that they will be supported in the next release of SSMS. The affected reports include the *All Connections* report, the *Error Context* report, and the *Connection Information* section in the Integration Service Dashboard. - A new column **event_message_guid** has been added. Use this column to join the [catalog].[event_message_context] view and the [catalog].[event_messages] view instead of using **event_message_id** when you query these logs of executions in Scale Out. - -To get the management application for SSIS Scale Out, [download SQL Server Management Studio (SSMS)](https://docs.microsoft.com/sql/ssms/download-sql-server-management-studio-ssms) 17.1 or later. +- To get the management application for SSIS Scale Out, [download SQL Server Management Studio (SSMS)](https://docs.microsoft.com/sql/ssms/download-sql-server-management-studio-ssms) 17.1 or later. ## New in SSIS in SQL Server 2017 CTP 2.0 From c9714e89460c031b62423c057e8ca71cfd14be5d Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 11 Jul 2017 14:54:34 -0700 Subject: [PATCH 237/336] Removing duplicate content. --- ...-on-availability-and-database-mirroring.md | 28 +------------------ 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/docs/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md b/docs/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md index 09314efa590..fbe7a04b981 100644 --- a/docs/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md +++ b/docs/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md @@ -33,21 +33,7 @@ SQL Server 2017 supports distributed transactions for databases in availability >[!NOTE] >[!INCLUDE[SQL Server 2016]](../../../includes/sssql15-md.md)]SQL Server 2016 included limited support for distributed transactions in for databases in an availability group. Distributed transactions using databases in an availability group were supported as long as no other databases in the transaction were in the same instance of SQL Server. For more information, see [SQL Server 2016 DTC Support In Availability Groups](http://blogs.technet.microsoft.com/dataplatform/2016/01/25/sql-server-2016-dtc-support-in-availability-gr) -## Distributed transactions - -Distributed transactions span two or more servers known as resource managers. The management of the transaction must be coordinated between the resource managers by a server component called a transaction manager. Each instance of the SQL Server Database Engine can operate as a resource manager in distributed transactions coordinated by transaction managers, such as Microsoft Distributed Transaction Coordinator (MS DTC), or other transaction managers that support the Open Group XA specification for distributed transaction processing. For more information, see the MS DTC documentation. - -A transaction within a single instance of the Database Engine that spans two or more databases is actually a distributed transaction. The instance manages the distributed transaction internally; to the user, it operates as a local transaction. - -At the application, a distributed transaction is managed much the same as a local transaction. At the end of the transaction, the application requests the transaction to be either committed or rolled back. A distributed commit must be managed differently by the transaction manager to minimize the risk that a network failure may result in some resource managers successfully committing while others roll back the transaction. This is achieved by managing the commit process in two phases (the prepare phase and the commit phase), which is known as a two-phase commit (2PC). - -- **Prepare phase** - - When the transaction manager receives a commit request, it sends a prepare command to all of the resource managers involved in the transaction. Each resource manager then does everything required to make the transaction durable, and all buffers holding log images for the transaction are flushed to disk. As each resource manager completes the prepare phase, it returns success or failure of the prepare to the transaction manager. - -- **Commit phase** - - If the transaction manager receives successful prepares from all of the resource managers, it sends commit commands to each resource manager. The resource managers can then complete the commit. If all of the resource managers report a successful commit, the transaction manager then sends a success notification to the application. If any resource manager reported a failure to prepare, the transaction manager sends a rollback command to each resource manager and indicates the failure of the commit to the application. +To configure an availability group for distributed transactions, see [Configure Availability Group for Distributed Transactions](configure-availability-group-for-distributed-transactions.md). See more information at: @@ -55,13 +41,6 @@ See more information at: - [DTC Developers Guide](http://msdn.microsoft.com/library/ms679938.aspx) - [DTC Programmers Reference](http://msdn.microsoft.com/library/ms686108.aspx) -SQL Server uses a resource manager identifier (RMID) to uniquely identify the database as resource manager in conjunction with DTC. SQL Server can not resolve the outcome of the transactions that are in prepared state while actions that result in change of RMDID occur. The actions include: -- Adding new database to the availability group -- Removing a database from the availability group -- Updating the dtc_support option for the availability group - -During these actions, SQL Server enlists first with DTC with the old resource manager identifier. The identifier is changed following the action and SQL Server will try to determine the transaction outcome using the new resource manager identifier. This will fail as the new RMID is not recognized by the DTC. - ## SQL Server 2016 and before: Support for cross-database transactions within the same SQL Server instance In SQL Server 2016 and before, cross-database transactions within the same SQL Server instance are not supported for availability groups. This means that no two databases in a cross-database transaction may be hosted by the same SQL Server instance. This is true even if those databases are part of the same availability group. @@ -74,7 +53,6 @@ Distributed transactions are supported with availability groups. This applies to Microsoft Distributed Transaction Coordinator (MSDTC or DTC) is a Windows service that provides transaction infrastructure for distributed systems. MSDTC permits client applications to include multiple data sources in one transaction which then is committed across all servers included in the transaction. For example, you can use MSDTC to coordinate transactions that span multiple databases on different servers. SQL Server 2016 introduces the capability to use distributed transactions where one or more of the databases in the transaction are in an availability group. Prior to SQL Server 2016 distributed transactions were not supported for databases in availability groups. SQL Server 2016 can register a resource manager per database. This new capability is why distributed transactions can include databases in availability groups. - The following requirements must be met: @@ -83,7 +61,6 @@ SQL Server 2016 introduces the capability to use distributed transactions where - Availability groups must be created with the **CREATE AVAILABILITY GROUP** command and the **WITH DTC_SUPPORT = PER_DB** clause. You cannot currently alter an existing availability group. - All instances of SQL Server that will participate in the availability group must be SQL Server 2016 or later. - ## Non-support for distributed transactions Specific cases where distributed transactions are not supported include: @@ -96,9 +73,6 @@ SQL Server 2016 introduces the capability to use distributed transactions where - Database mirroring. - ## Recommendation - In production environments you should cluster the DTC service. If you do not cluster the DTC service, SQL Server will use the local DTC service. With the local DTC service, the overall availability of the solution is reduced. When DTC is clustered, in-process transactions can be recovered if the cluster node fails. - > [!IMPORTANT] > Determine the appropriate default outcome of transactions that DTC is unable to resolve for your environment. For information on how to configure the default outcome see [in-doubt xact resolution Server Configuration Option](../../../database-engine/configure-windows/in-doubt-xact-resolution-server-configuration-option.md). From 9037762a14a6fbe55b0cc22567bf3a65162b0217 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 11 Jul 2017 14:57:05 -0700 Subject: [PATCH 238/336] Add TOC for configure AG for dist trans. --- docs/database-engine/availability-groups/windows/TOC.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/database-engine/availability-groups/windows/TOC.md b/docs/database-engine/availability-groups/windows/TOC.md index 10c3f13b7de..4b52428eb8f 100644 --- a/docs/database-engine/availability-groups/windows/TOC.md +++ b/docs/database-engine/availability-groups/windows/TOC.md @@ -54,8 +54,9 @@ ## Configure availability group ### [Change replica availability](change-the-availability-mode-of-an-availability-replica-sql-server.md) ### [Change replica failover mode](change-the-failover-mode-of-an-availability-replica-sql-server.md) -### [Configure flexible failover policy](configure-flexible-automatic-failover-policy.md) ### [Configure backup on replicas](configure-backup-on-availability-replicas-sql-server.md) +### [Configure flexible failover policy](configure-flexible-automatic-failover-policy.md) +### [Configure for distributed transactions](configure-availability-group-for-distributed-transactions.md) ### [Configure read-only access replica](configure-read-only-access-on-an-availability-replica-sql-server.md) ### [Configure read-only routing](configure-read-only-routing-for-an-availability-group-sql-server.md) ### [Remove listener](remove-an-availability-group-listener-sql-server.md) From 39f80f20dccaa5644c99546c3bf4b329b4626e7d Mon Sep 17 00:00:00 2001 From: v-chojas Date: Tue, 11 Jul 2017 15:00:27 -0700 Subject: [PATCH 239/336] Add files via upload --- .../connect/odbc/custom-keystore-providers.md | 192 ++++++++++-------- 1 file changed, 106 insertions(+), 86 deletions(-) diff --git a/docs/connect/odbc/custom-keystore-providers.md b/docs/connect/odbc/custom-keystore-providers.md index d47351a5a51..6666e57ba99 100644 --- a/docs/connect/odbc/custom-keystore-providers.md +++ b/docs/connect/odbc/custom-keystore-providers.md @@ -22,179 +22,195 @@ author: "MightyPen" The column encryption feature of SQL Server 2016 requires that the Encrypted Column Encryption Keys (ECEKs) stored on the server be retrieved by the client and then decrypted to Column Encryption Keys (CEKs) in order to access the data stored in encrypted columns. ECEKs are encrypted by Column Master Keys (CMKs), and the security of the CMK is important to the security of column encryption. Thus, the CMK should be stored in a secure location; the purpose of a Column Encryption Keystore Provider is to provide an interface to allow the ODBC driver to access these securely stored CMKs. For users with their own secure storage, the Custom Keystore Provider Interface provides a framework for implementing access to secure storage of the CMK for the ODBC driver, which can then be used to perform CEK encryption and decryption. -Each keystore provider contains and manages one or more CMKs, which are identified by key paths - strings of a format defined by the provider. This, along with the encryption algorithm, also defined by the provider, can be used to perform the encryption of a CEK, and the decryption of an ECEK. The algorithm, along with the ECEK and the name of the provider are stored in the database's encryption metadata. The operation of a provider can be fundamentally expressed as: +Each keystore provider contains and manages one or more CMKs, which are identified by key paths - strings of a format defined by the provider. This, along with the encryption algorithm, also a string defined by the provider, can be used to perform the encryption of a CEK and the decryption of an ECEK. The algorithm, along with the ECEK and the name of the provider, are stored in the database's encryption metadata; see [CREATE COLUMN MASTER KEY](../../t-sql/statements/create-column-master-key-transact-sql.md) and [CREATE COLUMN ENCRYPTION KEY](../../t-sql/statements/create-column-encryption-key-transact-sql.md) for more information. Thus, the two fundamental operations of key management are: ``` -CEK = DecryptViaCEKeystoreProvider(CEKeystoreProvider_name, Key_path, Key_algorithm, Encrypted Column Encryption Key) +CEK = DecryptViaCEKeystoreProvider(CEKeystoreProvider_name, Key_path, Key_algorithm, ECEK) -and- -ECEK = EncryptViaCEKeystoreProvider(CEKeyStoreProvider_name, Key_path, Key_algorithm, Column Encryption Key) +ECEK = EncryptViaCEKeystoreProvider(CEKeyStoreProvider_name, Key_path, Key_algorithm, CEK) ``` -where the `CEKeystoreProvider_name` is used to identify the specific Column Encryption Keystore Provider (CEKeystoreProvider), and the other arguments are used by the CEKeystoreProvider to encrypt/decrypt the (E)CEK. Multiple keystore providers may be present alongside the default built-in provider(s). Upon performing an operation which requires the Column Encryption Key, the driver finds the appropriate keystore provider and executes its decryption operation: +where the `CEKeystoreProvider_name` is used to identify the specific Column Encryption Keystore Provider (CEKeystoreProvider), and the other arguments are used by the CEKeystoreProvider to encrypt/decrypt the (E)CEK. The name and keypath are provided by the CMK metadata, while the algorithm and ECEK value are provided by the CEK metadata. Multiple keystore providers may be present alongside the default built-in provider(s). Upon performing an operation which requires the CEK, the driver uses the CMK metadata to find the appropriate keystore provider by name, and executes its decryption operation, which can be expressed as: ``` CEK = CEKeyStoreProvider_specific_decrypt(Key_path, Key_algorithm, ECEK) +``` --or- +Although the driver has no need to encrypt CEKs, a key management tool may need to do so in order to implement operations such as CMK creation and rotation; this requires performing the inverse operation: +``` ECEK = CEKeyStoreProvider_specific_encrypt(Key_path, Key_algorithm, CEK) ``` ### CEKeyStoreProvider interface -The rest of this document will describe in detail the CEKeyStoreProvider interface for developing custom keystore providers with error handling and context association. CEKeyStoreProvider implementers can use this guide to develop their custom keystore providers for the Microsoft ODBC Driver for SQL Server. +This document describes in detail the CEKeyStoreProvider interface. A keystore provider which implements this interface can be used by the Microsoft ODBC Driver for SQL Server. CEKeyStoreProvider implementers can use this guide to develop custom keystore providers usable by the driver. -A keystore provider library is a dynamic-link library which can be loaded by the ODBC driver, and contains one or more keystore providers. The symbol "CEKeystoreProvider" must be exported by a keystore provider library, and be the address of a null-terminated array of pointers to CEKeystoreProvider structures, one for each keystore provider within the library. +A keystore provider library ("provider library") is a dynamic-link library which can be loaded by the ODBC driver, and contains one or more keystore providers. The symbol `CEKeystoreProvider` must be exported by a provider library, and be the address of a null-terminated array of pointers to `CEKeystoreProvider` structures, one for each keystore provider within the library. -A CEKeystoreProvider structure defines the entry points of a single keystore provider: +A `CEKeystoreProvider` structure defines the entry points of a single keystore provider: ``` -typedef struct CEKeystoreProvider { -wchar_t *Name; -int (*Init)(CEKEYSTORECONTEXT *ctx, errFunc *onError); -int (*Read)(CEKEYSTORECONTEXT *ctx, errFunc *onError, void *data, unsigned int *len); -int (*Write)(CEKEYSTORECONTEXT *ctx, errFunc *onError, void *data, unsigned int len); - -int (*DecryptCEK)( CEKEYSTORECONTEXT *ctx, - errFunc *onError, - const wchar_t *keyPath, - const wchar_t *alg, - unsigned char *ecek, - unsigned short ecekLen, - unsigned char **cekOut, - unsigned short *cekLen); - -int (*EncryptCEK)( CEKEYSTORECONTEXT *ctx, - errFunc *onError, - const wchar_t *keyPath, - const wchar_t *alg, - unsigned char *cek, - unsigned short cekLen, - unsigned char **ecekOut, - unsigned short *ecekLen); - -void (*Free)(); +typedef struct CEKeystoreProvider { + wchar_t *Name; + int (*Init)(CEKEYSTORECONTEXT *ctx, errFunc *onError); + int (*Read)(CEKEYSTORECONTEXT *ctx, errFunc *onError, void *data, unsigned int *len); + int (*Write)(CEKEYSTORECONTEXT *ctx, errFunc *onError, void *data, unsigned int len); + int (*DecryptCEK)( CEKEYSTORECONTEXT *ctx, + errFunc *onError, + const wchar_t *keyPath, + const wchar_t *alg, + unsigned char *ecek, + unsigned short ecekLen, + unsigned char **cekOut, + unsigned short *cekLen); + int (*EncryptCEK)( CEKEYSTORECONTEXT *ctx, + errFunc *onError, + const wchar_t *keyPath, + const wchar_t *alg, + unsigned char *cek, + unsigned short cekLen, + unsigned char **ecekOut, + unsigned short *ecekLen); + void (*Free)(); } CEKEYSTOREPROVIDER; ``` |Field Name|Description| |:--|:--| |`Name`|The name of the keystore provider. It must not be the same as any other keystore provider previously loaded by the driver or present in this library. Null-terminated, wide-character* string.| -|`Init`|The driver calls this function once, upon the first time the keystore provider is used. Use this function to perform any initialisation it needs. If an initialisation function is not required, this field may be null.| -|`Read`|Supports the application-provider communication interface, allowing the application to read arbitrary data from the CEKeyStoreProvider. May be null if not required. E.g., current status, configuration, or authentication-related data as implemented in the CEKeyStoreProvider such as retry configuration, authentication mode, and token expiry, etc.| -|`Write`|Supports the application-provider communication interface, allowing the application to write arbitrary data to the keystore provider. May be null if not required, but must be present if Read is also required.| -|`DecryptCEK`|The driver calls this function to decrypt an ECEK into a CEK. This function is the reason for existence of a keystore provider, and must not be null.| -|`EncryptCEK`|Normal (data) driver operations never cause this function to be called, so it may be null for a provider library intended to only be used by the ODBC driver. It is provided for CEKeyStoreProvider implementers to use to allow programmatic access to ECEK creation through directly calling it on their CEKSP implementation.| -|`Free`|The driver may call this function upon normal termination of the process. May be null if not required.| +|`Init`|Initialisation function. If an initialisation function is not required, this field may be null.| +|`Read`|Provider read function. May be null if not required.| +|`Write`|Provider write function. Required if Read is not null. May be null if not required.| +|`DecryptCEK`|ECEK decryption function. This function is the reason for existence of a keystore provider, and must not be null.| +|`EncryptCEK`|CEK encryption function. The driver does not call this function, but it is provided to allow for programmatic access to ECEK creation by key management tools. May be null if not required.| +|`Free`|Termination function. May be null if not required.| + +With the exception of Free, the functions in this interface all have a pair of parameters, **ctx** and **onError**. The former identifies the context in which the function is called, while the latter is used for reporting errors. See [Contexts](#contexts) and [Error Handling](#error-handling) below for more information. ``` int Init(CEKEYSTORECONTEXT *ctx, errFunc onError); ``` -Placeholder name for a provider-defined initialization function. The driver calls this function once, after a provider has been loaded but before the first time it needs it to perform ECEK decryption or Read()/Write() requests. +Placeholder name for a provider-defined initialization function. The driver calls this function once, after a provider has been loaded, but before the first time it needs it to perform ECEK decryption or Read()/Write() requests. Use this function to perform any initialisation it needs. |Argument|Description| |:--|:--| -|`ctx`|[Input] Opaque context pointer, to be passed to the error-handling function.| -|`onError`|[Input] Error-handling function. See "CEKeystoreProvider Error Handling" for more information.| +|`ctx`|[Input] Operation context.| +|`onError`|[Input] Error-reporting function.| |`Return Value`|Return nonzero to indicate success, or zero to indicate failure.| ``` int Read(CEKEYSTORECONTEXT *ctx, errFunc onError, void *data, unsigned int *len); ``` -Placeholder name for a provider-defined communication function. The driver calls this function when the application requests to read data from a (previously-written-to) provider using the SQL_COPT_SS_CEKEYSTOREDATA connection attribute. +Placeholder name for a provider-defined communication function. The driver calls this function when the application requests to read data from a (previously-written-to) provider using the SQL_COPT_SS_CEKEYSTOREDATA connection attribute, allowing the application to read arbitrary data from the provider. See [Communicating with Keystore Providers](../../connect/odbc/using-always-encrypted-with-the-odbc-driver.md#communicating-with-keystore-providers) for more information. |Argument|Description| |:--|:--| -|`ctx`|[Input] Opaque context pointer, to be passed to the error-handling function.| -|`onError`|[Input] Error-handling function. See "CEKeystoreProvider Error Handling" for more information.| -|`data`|[Output] Pointer to a buffer in which the provider writes data to be read by the application. This corresponds to the data field of the application-interface CEKEYSTOREDATA structure.| -|`len`|[InOut] Pointer to a length value; upon input, this is the maximum length of the data buffer, and the provider shall not write more than len bytes to it. Upon return, the provider should update *len with the number of bytes actually written to data.| +|`ctx`|[Input] Operation context.| +|`onError`|[Input] Error-reporting function.| +|`data`|[Output] Pointer to a buffer in which the provider writes data to be read by the application. This corresponds to the data field of the CEKEYSTOREDATA structure.| +|`len`|[InOut] Pointer to a length value; upon input, this is the maximum length of the data buffer, and the provider shall not write more than *len bytes to it. Upon return, the provider should update *len with the number of bytes actually written.| |`Return Value`|Return nonzero to indicate success, or zero to indicate failure.| ``` int Write(CEKEYSTORECONTEXT *ctx, errFunc onError, void *data, unsigned int len); ``` -Placeholder name for a provider-defined communication function. The driver calls this function when the application requests to write data to a provider using the SQL_COPT_SS_CEKEYSTOREDATA connection attribute. +Placeholder name for a provider-defined communication function. The driver calls this function when the application requests to write data to a provider using the SQL_COPT_SS_CEKEYSTOREDATA connection attribute, allowing the application to write arbitrary data to the provider. See [Communicating with Keystore Providers](../../connect/odbc/using-always-encrypted-with-the-odbc-driver.md#communicating-with-keystore-providers) for more information. |Argument|Description| |:--|:--| -|`ctx`|[Input] Opaque context pointer, to be passed to the error-handling function.| -|`onError`|[Input] Error-handling function. See "CEKeystoreProvider Error Handling" for more information.| -|`data`|[Input] Pointer to a buffer containing the data for the provider to read. This corresponds to the data field of the application-interface CEKEYSTOREDATA structure. The provider must not read more than len bytes from this buffer.| -|`len`|[In] The number of bytes available in data. This corresponds to the dataSize field of the application-interface CEKEYSTOREDATA structure.| +|`ctx`|[Input] Operation context.| +|`onError`|[Input] Error-reporting function.| +|`data`|[Input] Pointer to a buffer containing the data for the provider to read. This corresponds to the data field of the CEKEYSTOREDATA structure. The provider must not read more than len bytes from this buffer.| +|`len`|[In] The number of bytes available in data. This corresponds to the dataSize field of the CEKEYSTOREDATA structure.| |`Return Value`|Return nonzero to indicate success, or zero to indicate failure.| ``` int (*DecryptCEK)( CEKEYSTORECONTEXT *ctx, errFunc *onError, const wchar_t *keyPath, const wchar_t *alg, unsigned char *ecek, unsigned short ecekLen, unsigned char **cekOut, unsigned short *cekLen); ``` -Placeholder name for a provider-defined ECEK decryption function. The driver calls this function to decrypt an ECEK that has been identified as using this keystore provider. +Placeholder name for a provider-defined ECEK decryption function. The driver calls this function to decrypt an ECEK encrypted by a CMK associated with this provider into a CEK. |Argument|Description| |:--|:--| -|`ctx`|[Input] Opaque context pointer, to be passed to the error-handling function.| -|`onError`|[Input] Error-handling function. See "CEKeyStoreProvider Error Handling" for more information. -|`keyPath`|[Input] The value of the key_path metadata attribute for the CMK referenced by the given ECEK. Null-terminated wide-character* string. This is intended to identify a CMK handled by this provider.| -|`alg`|[Input] The value of the encryption_algorithm_name metadata attribute for the given ECEK. Null-terminated wide-character* string. This is intended to identify the encryption algorithm used to encrypt the given ECEK.| +|`ctx`|[Input] Operation context.| +|`onError`|[Input] Error-reporting function.| +|`keyPath`|[Input] The value of the [KEY_PATH](../../t-sql/statements/create-column-master-key-transact-sql.md) metadata attribute for the CMK referenced by the given ECEK. Null-terminated wide-character* string. This is intended to identify a CMK handled by this provider.| +|`alg`|[Input] The value of the [ALGORITHM](../../t-sql/statements/create-column-encryption-key-transact-sql.md) metadata attribute for the given ECEK. Null-terminated wide-character* string. This is intended to identify the encryption algorithm used to encrypt the given ECEK.| |`ecek`|[Input] Pointer to the ECEK to be decrypted.| |`ecekLen`|[Input] Length of the ECEK.| -|`cekOut`|[Output] The provider shall allocate memory for the decrypted CEK and write its address to the pointer pointed to by cekOut. It must be possible to free this block of memory using the LocalFree function. If no memory was allocated due to an error or otherwise, the provider shall set *cekOut to a null pointer.| -|`cekLen`|[Output] The provider shall write to the address pointed to by cekLen the length of the decrypted CEK that it has written to **cekOut.| +|`cekOut`|[Output] The provider shall allocate memory for the decrypted ECEK and write its address to the pointer pointed to by cekOut. It must be possible to free this block of memory using the [LocalFree](https://msdn.microsoft.com/en-us/library/windows/desktop/aa366730(v=vs.85).aspx) (Windows) or free (Linux/Mac) function. If no memory was allocated due to an error or otherwise, the provider shall set *cekOut to a null pointer.| +|`cekLen`|[Output] The provider shall write to the address pointed to by cekLen the length of the decrypted ECEK that it has written to **cekOut.| |`Return Value`|Return nonzero to indicate success, or zero to indicate failure.| -*NB: Wide-character strings are 2-byte characters (UTF-16) due to how SQL Server stores them.* - ``` int (*EncryptCEK)( CEKEYSTORECONTEXT *ctx, errFunc *onError, const wchar_t *keyPath, const wchar_t *alg, unsigned char *cek,unsigned short cekLen, unsigned char **ecekOut, unsigned short *ecekLen); ``` -Placeholder name for a provider-defined CEK encryption function. It is provided to allow provider implementers to expose programmatic key management to application developers. App developers must use the CEKeyStoreProvider interface to access this functionality; the driver does not call this function nor expose its functionality through the ODBC interface. +Placeholder name for a provider-defined CEK encryption function. The driver does not call this function nor expose its functionality through the ODBC interface, but it is provided to allow for programmatic access to ECEK creation by key management tools. |Argument|Description| |:--|:--| -|`ctx`|[Input] Opaque context pointer, to be passed to the error-handling function.| -|`onError`|[Input] Error-handling function. See "CEKeyStoreProvider Error Handling" for more information.| -|`keyPath`|[Input] The value of the key_path metadata attribute for the CMK referenced by the given ECEK. Null-terminated wide-character* string. This is intended to identify a CMK handled by this provider.| -|`alg`|[Input] The value of the encryption_algorithm_name metadata attribute for the given ECEK. Null-terminated wide-character* string. This is intended to identify the encryption algorithm used to encrypt the given ECEK.| -|`cek`|[Input] Pointer to the CEK to be decrypted.| +|`ctx`|[Input] Operation context.| +|`onError`|[Input] Error-reporting function.| +|`keyPath`|[Input] The value of the [KEY_PATH](../../t-sql/statements/create-column-master-key-transact-sql.md) metadata attribute for the CMK referenced by the given ECEK. Null-terminated wide-character* string. This is intended to identify a CMK handled by this provider.| +|`alg`|[Input] The value of the [ALGORITHM](../../t-sql/statements/create-column-encryption-key-transact-sql.md) metadata attribute for the given ECEK. Null-terminated wide-character* string. This is intended to identify the encryption algorithm used to encrypt the given ECEK.| +|`cek`|[Input] Pointer to the CEK to be encrypted.| |`cekLen`|[Input] Length of the CEK.| -|`ecekOut`|[Output] The provider shall allocate memory for the encrypted CEK and write its address to the pointer pointed to by ecekOut. It must be possible to free this block of memory using the LocalFree (Windows) or free() (Linux) function. If no memory was allocated due to an error or otherwise, the provider shall set *ecekOut to a null pointer.| +|`ecekOut`|[Output] The provider shall allocate memory for the encrypted CEK and write its address to the pointer pointed to by ecekOut. It must be possible to free this block of memory using the [LocalFree](https://msdn.microsoft.com/en-us/library/windows/desktop/aa366730(v=vs.85).aspx) (Windows) or free (Linux/Mac) function. If no memory was allocated due to an error or otherwise, the provider shall set *ecekOut to a null pointer.| |`ecekLen`|[Output] The provider shall write to the address pointed to by ecekLen the length of the encrypted CEK that it has written to **ecekOut.| |`Return Value`|Return nonzero to indicate success, or zero to indicate failure.| -*NB: Wide-character strings are 2-byte characters (UTF-16) due to how SQL Server stores them.* +``` +void (*Free)(); +``` +Placeholder name for a provider-defined termination function. The driver may call this function upon normal termination of the process. +*NB: Wide-character strings are 2-byte characters (UTF-16) due to how SQL Server stores them.* -### CEKeystoreProvider Error Handling -As errors may occur during a provider's processing, a mechanism is provided to allow CEKeyStoreProvider implementations to report errors back to the driver in more specific detail than a boolean success/failure. Many of the functions have a pair of parameters, ctx and onError, which are used together for this purpose in addition to the success/failure return value. +### Error Handling -`CEKEYSTORECONTEXT *ctx;` +As errors may occur during a provider's processing, a mechanism is provided to allow it to report errors back to the driver in more specific detail than a boolean success/failure. Many of the functions have a pair of parameters, **ctx** and **onError**, which are used together for this purpose in addition to the success/failure return value. -This is a set of 3 opaque pointers which the driver uses to determine the context of the operation in which the error occurred, and can also be used to identify the context used for the operation. It must be passed unchanged to the onError function in the same invocation of the function which caused the error. +The **ctx** parameter identifies the context in which a provider operation occurs. -`typedef void errFunc(CEKEYSTORECONTEXT *ctx, const wchar_t *msg, …);` +The **onError** parameter points to an error-reporting function, with the following prototype: -A pointer to a function of this type is passed into provider-implemented functions and called by the provider to report when an error has occurred. The provider may call this function multiple times to post multiple error messages consecutively within one provider-function invocation. +`typedef void errFunc(CEKEYSTORECONTEXT *ctx, const wchar_t *msg, ...);` |Argument|Description| |:--|:--| -|`ctx`|[Input] The context parameter which was passed into the provider-implemented function along with this function pointer.| -|`msg`|[Input] The error message to report. Null-terminated wide-character string. To allow parameterized information to be present, this string may contain insert-formatting sequences of the form accepted by the FormatMessage function. Extended functionality may be specified by this parameter as described below.| -|…|[Input] Additional variadic parameters to fit format specifiers in msg, as appropriate.| +|`ctx`|[Input] The context to report the error on.| +|`msg`|[Input] The error message to report. Null-terminated wide-character string. To allow parameterized information to be present, this string may contain insert-formatting sequences of the form accepted by the [FormatMessage](https://msdn.microsoft.com/en-us/library/windows/desktop/ms679351(v=vs.85).aspx) function. Extended functionality may be specified by this parameter as described below.| +|...|[Input] Additional variadic parameters to fit format specifiers in msg, as appropriate.| + +To report when an error has occurred, the provider calls onError, supplying the context parameter passed into the provider function by the driver and an error message with optional additional parameters to be formatted in it. The provider may call this function multiple times to post multiple error messages consecutively within one provider-function invocation. For example: + +``` + if (!doSomething(...)) + { + onError(ctx, L"An error occurred in doSomething."); + onError(ctx, L"Additional error message with more details."); + return 0; + } +``` + The `msg` parameter is ordinarily a wide-character string, but additional extensions are available: -By using one of the special predefined values with the IDS_MSG macro, generic error messages already existing and in a localised form in the driver may be utilized. For example, a CEKeyStoreProvider may report a memory allocation failure using the `IDS_S1_001` "Memory allocation failure" message: +By using one of the special predefined values with the IDS_MSG macro, generic error messages already existing and in a localised form in the driver may be utilized. For example, if a provider fails to allocate memory, the `IDS_S1_001` "Memory allocation failure" message can be used: `onError(ctx, IDS_MSG(IDS_S1_001));` -For a keystore provider function encountering an error to be recognized by the driver, it shall call the error-callback function with the appropriate message and parameters as many times as necessary, then return failure. When this is performed in the context of an ODBC operation, the posted errors will become accessible on the connection or statement handle via the standard ODBC diagnostics mechanism (`SQLError`, `SQLGetDiagRec`, and `SQLGetDiagField`). +For the error to be recognised by the driver, the provider function must return failure. When this is performed in the context of an ODBC operation, the posted errors will become accessible on the connection or statement handle via the standard ODBC diagnostics mechanism (`SQLError`, `SQLGetDiagRec`, and `SQLGetDiagField`). + -### CEKeystoreProvider Context Association +### Context Association + +The `CEKEYSTORECONTEXT` structure, in addition to providing context for the error callback, can also be used to determine the ODBC context in which a provider operation is executed. This allows a provider to associate data to each of these contexts, e.g. to implement per-connection configuration. For this purpose, the structure contains 3 opaque pointers corresponding to the environment, connection, and statement context: -The `CEKEYSTORECONTEXT` structure, in addition to providing context for the error callback, can also be used to determine the ODBC context in which a provider operation is executed. This allows a provider to associate data to each of these contexts, e.g. to implement per-connection configuration. ``` typedef struct CEKeystoreContext { @@ -203,13 +219,17 @@ void *dbcCtx; void *stmtCtx; } CEKEYSTORECONTEXT; ``` -|Argument|Description| +|Field|Description| |:--|:--| -|`envCtx`|The opaque environment handle. It corresponds to, but is not, the ODBC environment handle.| -|`dbcCtx`|The opaque connection handle. It corresponds to, but is not, the ODBC connection handle.| -|`stmtCtx`|The opaque statement handle. It corresponds to, but is not, the ODBC statement handle. If the operation being accomplished is in the scope of a connection (e.g. SQLSetConnectAttr calls to load and configure providers), this field is null as there is no associated statement handle.| +|`envCtx`|Environment context.| +|`dbcCtx`|Connection context.| +|`stmtCtx`|Statement context.| + +Each of these contexts is an opaque value which, while not the same as the corresponding ODBC handle, can be used as a unique identifier for the handle: if handle *X* is associated with context value *Y*, then no other environment, connection, or statement handles which exist simultaneously at the same time as *X* will have a context value of *Y*, and no other context values will be associated with handle *X*. If the provider operation being accomplished lacks a particular handle context, (e.g. SQLSetConnectAttr calls to load and configure providers, in which there is no statement handle) the corresponding context value in the structure is null. + ## Example + Custom KeyStore Provider Implementation Sample ### Keystore Provider From d42324515269cb5eaa7a6aaa5c660ae6e28f8deb Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 11 Jul 2017 15:16:03 -0700 Subject: [PATCH 240/336] Fix broken link. --- ...configure-availability-group-for-distributed-transactions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index 3d40899d7fd..9dede46d712 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -123,7 +123,7 @@ In order to participate in distributed transactions, an instance of [!INCLUDE[SQ When a database is in an availability group, the read-write copy of the database - or primary replica - may move to a different instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)]. To support distributed transactions during this movement, each database should act as a separate resource manager and must have a unique RMID. When an availability group has `DTC_SUPPORT = PER_DB`, [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] creates a resource manager for each database and registers with DTC using a unique RMID. In this configuration, the database is a resource manager for DTC transactions. -For more detail on distributed transactions in [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)], see [Distributed transactions](transactions-always-on-availability-and-database-mirroring.md#distTran) +For more detail on distributed transactions in [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)], see [Distributed transactions](#distTran) ## Manage in-doubt transactions From 5ac0dcabeda70195faa1bea62ab515e51f722be3 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Tue, 11 Jul 2017 15:26:31 -0700 Subject: [PATCH 241/336] Updated casing. --- ...nfigure-availability-group-for-distributed-transactions.md | 4 ++-- ...nsactions-always-on-availability-and-database-mirroring.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index 9dede46d712..26a9e9ffec2 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -1,5 +1,5 @@ --- -title: "Configure Availability Group for Distributed Transactions | Microsoft Docs" +title: "Configure availability group for distributed transactions | Microsoft Docs" ms.custom: "" ms.date: "07/12/2017" ms.prod: "sql-server-2016" @@ -21,7 +21,7 @@ author: "MikeRayMSFT" ms.author: "mikeray" manager: "jhubbard" --- -# Configure Availability Group for Distributed Transactions +# Configure availability group for distributed transactions [!INCLUDE[tsql-appliesto-ssvnxt-xxxx-xxxx-xxx](../../../includes/tsql-appliesto-ssvnxt-xxxx-xxxx-xxx.md)] This article explains how to configure an availability group for distributed transactions diff --git a/docs/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md b/docs/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md index fbe7a04b981..158690d1c8f 100644 --- a/docs/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md +++ b/docs/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring.md @@ -1,5 +1,5 @@ --- -title: "Transactions - Always On Availability Groups and Database Mirroring | Microsoft Docs" +title: "Transactions - Always On availability groups and database mirroring | Microsoft Docs" ms.custom: "" ms.date: "07/06/2017" ms.prod: "sql-server-2016" @@ -21,7 +21,7 @@ author: "MikeRayMSFT" ms.author: "mikeray" manager: "jhubbard" --- -# Transactions - Always On availability groups and Database Mirroring +# Transactions - availability groups and database mirroring [!INCLUDE[tsql-appliesto-ssvnxt-xxxx-xxxx-xxx](../../../includes/tsql-appliesto-ssvnxt-xxxx-xxxx-xxx.md)] This topic describes cross-database and distributed transactions support for Always On availability groups and database mirroring. From 11b6584586a051d9617b1633ef5fefd938d06155 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Wed, 12 Jul 2017 08:30:42 -0700 Subject: [PATCH 242/336] What's new, Added CLR whitelist --- docs/sql-server/what-s-new-in-sql-server-2017.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/sql-server/what-s-new-in-sql-server-2017.md b/docs/sql-server/what-s-new-in-sql-server-2017.md index e13f544a57c..dd904e84618 100644 --- a/docs/sql-server/what-s-new-in-sql-server-2017.md +++ b/docs/sql-server/what-s-new-in-sql-server-2017.md @@ -1,7 +1,7 @@ --- title: "What's new in SQL Server 2017 | Microsoft Docs" ms.custom: "" -ms.date: "06/22/2017" +ms.date: "07/12/2017" ms.prod: "sql-server-2017" ms.reviewer: "" ms.suite: "" @@ -26,6 +26,9 @@ SQL Server 2017 represents a major step towards making SQL Server a platform tha ## Latest release **SQL Server 2017 Release Candidate** (RC1, July 2017) +### SQL Server Database Engine +- CLR assemblies can now be added to a whitelist, as a work-around for the `clr strict security` feature described in CTP 2.0. [sp_add_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md), [sp_drop_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md), and [sys.trusted_asssemblies](../../relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md) are added to support the white list of trusted assemblies. + ### SQL Server Integration Services (SSIS) The new **Scale Out** feature in SSIS has the following new and changed features in RC1. For more info, see [What's New in Integration Services in SQL Server 2017](~/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md). - Scale Out Master now supports high availability From 7678e8d66691d867cc64dd3081317737579cbcd4 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Wed, 12 Jul 2017 11:36:21 -0400 Subject: [PATCH 243/336] Overhauling the setup topic to complement quick starts --- docs/linux/TOC.md | 14 ++-- docs/linux/sql-server-linux-setup.md | 117 +++++++++++++++++++++++++-- 2 files changed, 116 insertions(+), 15 deletions(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index 15d906ff701..7369da665ab 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -9,13 +9,7 @@ ## [Install & Connect - Red Hat](quickstart-install-connect-red-hat.md) ## [Install & Connect - SUSE](quickstart-install-connect-suse.md) ## [Install & Connect - Ubuntu](quickstart-install-connect-ubuntu.md) -## [Install & Connect - Docker](quickstart-install-connect-docker.md) - -# Samples -## Unattended Install -### [Red Hat Enterprise Linux](sample-unattended-install-redhat.md) -### [SUSE Linux Enterprise Server](sample-unattended-install-suse.md) -### [Ubuntu](sample-unattended-install-ubuntu.md) +## [Run & Connect - Docker](quickstart-install-connect-docker.md) # Concepts ## Install @@ -75,6 +69,12 @@ ## [Optimize Performance](sql-server-linux-performance-get-started.md) +# Samples +## Unattended Install +### [Red Hat Enterprise Linux](sample-unattended-install-redhat.md) +### [SUSE Linux Enterprise Server](sample-unattended-install-suse.md) +### [Ubuntu](sample-unattended-install-ubuntu.md) + # Resources ## [Troubleshoot](sql-server-linux-troubleshooting-guide.md) ## [SQL Server Documentation](../sql-server/sql-server-technical-documentation.md) diff --git a/docs/linux/sql-server-linux-setup.md b/docs/linux/sql-server-linux-setup.md index 8f00bc1307c..639ed7e2f4e 100644 --- a/docs/linux/sql-server-linux-setup.md +++ b/docs/linux/sql-server-linux-setup.md @@ -6,7 +6,7 @@ description: SQL Server 2017 RC1 now runs on Linux. This topic provides an overv author: rothja ms.author: jroth manager: jhubbard -ms.date: 06/14/2017 +ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -26,9 +26,9 @@ ms.assetid: 565156c3-7256-4e63-aaf0-884522ef2a52 --- # Install SQL Server on Linux -SQL Server 2017 RC1 is supported on Red Hat Enterprise Linux, SUSE Linux Enterprise Server, and Ubuntu. It is also available as a Docker image which can run on Docker Engine on Linux or Docker for Windows/Mac. The topics in this section provide tutorials and general guidance for installing SQL Server 2017 RC1 on Linux. +SQL Server 2017 RC1 is supported on Red Hat Enterprise Linux (RHEL), SUSE Linux Enterprise Server (SLES), and Ubuntu. It is also available as a Docker image which can run on Docker Engine on Linux or Docker for Windows/Mac. The topics in this section provide tutorials and general guidance for installing SQL Server 2017 RC1 on Linux. -## Supported platforms +## Supported platforms SQL Server 2017 RC1 is supported on the following platforms: @@ -57,11 +57,112 @@ SQL Server 2017 has the following system requirements for Linux: ## Install SQL Server -- [Install on Red Hat Enterprise Linux](sql-server-linux-setup-red-hat.md) -- [Install on SUSE Linux Enterprise Server](sql-server-linux-setup-suse-linux-enterprise-server.md) -- [Install on Ubuntu](sql-server-linux-setup-ubuntu.md) -- [Run on Docker](sql-server-linux-setup-docker.md) +You can install SQL Server on Linux from the command-line. For instructions, see one of the following quick start tutorials: + +- [Install on Red Hat Enterprise Linux](quickstart-install-connect-red-hat.md) +- [Install on SUSE Linux Enterprise Server](quickstart-install-connect-suse.md) +- [Install on Ubuntu](quickstart-install-connect-ubuntu.md) +- [Run on Docker](quickstart-install-connect-ubuntu.md) + +## Unattended install + +You can perform an unattended installation in the following way: + +- Follow the initial steps in the quick start tutorials to register the repositories and install SQL Server. +- When you run `mssql-conf setup`, set [environment variables](sql-server-linux-configure-environment-variables.md) and use the `-n` (no prompt) option. + +The following example configures the Developer edition of SQL Server with the **MSSQL_PID** environment variable. It also sets the SA user password with the **SA_PASSWORD** environment variable. The `-n` parameter pulls in these values for a simple unattended install: + +```bash +sudo MSSQL_PID=Developer SA_PASSWORD='' /opt/mssql/bin/mssql-conf -n setup +``` + +You can also create a script that performs other actions. For example, you could install other SQL Server packages. + +For a more detailed sample script, see the following examples: + +- [Red Hat unattended installation script](sample-unattended-install-redhat.md) +- [SUSE unattended installation script](sample-unattended-install-suse.md) +- [Ubuntu unattended installation script](sample-unattended-install-ubuntu.md) + +## Upgrade + +To upgrade the **mssql-server** package on Linux, use one of the following commands based on your platform: + +| Platform | Package update command(s) | +|-----|-----| +| RHEL | `sudo yum update mssql-server` | +| SLES | `sudo zypper update mssql-server` | +| Ubuntu | `sudo apt-get update`
      `sudo apt-get install mssql-server` | + +These commands will download the newest package and replace the binaries located under `/opt/mssql/`. The user generated databases and system databases will not be affected by this operation. + +## Uninstall + +To remove the **mssql-server** package on Linux, use one of the following commands based on your platform: + +| Platform | Package removal command(s) | +|-----|-----| +| RHEL | `sudo yum remove mssql-server` | +| SLES | `sudo zypper remove mssql-server` | +| Ubuntu | `sudo apt-get remove mssql-server` | + +Removing the package will not delete the generated database files. If you want to delete the database files use the following command: + +```bash +sudo rm -rf /var/opt/mssql/ +``` + +## Offline install + +If your Linux machine does not have access to the online repositories used in the [quick starts](#platforms), you can download the package files directly. These packages are located in the Microsoft repository, [https://packages.microsoft.com](https://packages.microsoft.com). + +> [!TIP] +> If you successfully installed with the steps in the quick starts, you do not need to download or manually install the package(s) below. This is only for the offline scenario. + +1. **Download the database engine package for your platform**. Find package download links in the package details section of the [Release Notes](sql-server-linux-release-notes.md). + +1. **Move the downloaded package to your Linux machine**. If you used a different machine to download the packages, one way to move the packages to your Linux machine is with the **scp** command. + +1. **Install the database engine package**. Use one of the following commands based on your platform. Replace the package file name in this example with the exact name you downloaded. + + | Platform | Package removal command | + |-----|-----| + | RHEL | `sudo yum localinstall mssql-server_versionnumber.x86_64.rpm` | + | SLES | `sudo zypper install mssql-server_versionnumber.x86_64.rpm` | + | Ubuntu | `sudo dpkg -i mssql-server_versionnumber_amd64.deb` | + + > [!NOTE] + > You can also install the RPM packages (RHEL and SLES) with the `rpm -ivh` command, but the commands in the previous table automatically install dependencies if available from approved repositories. + +1. **Resolve missing dependencies**: You might have missing dependencies at this point. If not, you can skip this step. On Ubuntu, if you have access to approved repositories containing those dependencies, the easiest solution is to use the `apt-get -f install` command. This also completes the installation of SQL Server. To manually inspect dependencies, use the following commands: + + | Platform | List dependencies command | + |-----|-----| + | RHEL | `rpm -qpR mssql-server_versionnumber.x86_64.rpm` | + | SLES | `rpm -qpR mssql-server_versionnumber.x86_64.rpm` | + | Ubuntu | `dpkg -I mssql-server_versionnumber_amd64.deb | grep "Depends:"` | + + After resolving the missing dependencies, attempt to install the mssql-server package again. + +1. **Complete the SQL Server setup**. Use **mssql-conf** to complete the SQL Server setup: + + ```bash + sudo /opt/mssql/bin/mssql-conf setup + ``` ## Next steps -After installation, connect to the SQL Server instance to begin creating and managing databases. To get started, see [Connect and query SQL Server on Linux](sql-server-linux-connect-and-query-sqlcmd.md). +After installation, you can also install other optional SQL Server packages. + +- [SQL Server command-line tools](sql-server-linux-setup-tools.md) +- [SQL Server Agent](sql-server-linux-setup-sql-agent.md) +- [SQL Server Full Text Search](sql-server-linux-setup-full-text-search.md) +- [SQL Server Integration Services (Ubuntu)](sql-server-linux-setup-ssis.md) + +Connect to your SQL Server instance to begin creating and managing databases. To get started, see the quick start tutorials: + +- [Install on Red Hat Enterprise Linux](quickstart-install-connect-red-hat.md) +- [Install on SUSE Linux Enterprise Server](quickstart-install-connect-suse.md) +- [Install on Ubuntu](quickstart-install-connect-ubuntu.md) +- [Run on Docker](quickstart-install-connect-ubuntu.md) \ No newline at end of file From effb923186e854f0febbde6bde9e4dcabb4a4c30 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Wed, 12 Jul 2017 08:55:55 -0700 Subject: [PATCH 244/336] Fixing links. --- docs/sql-server/what-s-new-in-sql-server-2017.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sql-server/what-s-new-in-sql-server-2017.md b/docs/sql-server/what-s-new-in-sql-server-2017.md index dd904e84618..1d1c9573331 100644 --- a/docs/sql-server/what-s-new-in-sql-server-2017.md +++ b/docs/sql-server/what-s-new-in-sql-server-2017.md @@ -27,7 +27,7 @@ SQL Server 2017 represents a major step towards making SQL Server a platform tha **SQL Server 2017 Release Candidate** (RC1, July 2017) ### SQL Server Database Engine -- CLR assemblies can now be added to a whitelist, as a work-around for the `clr strict security` feature described in CTP 2.0. [sp_add_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md), [sp_drop_trusted_assembly](../../relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md), and [sys.trusted_asssemblies](../../relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md) are added to support the white list of trusted assemblies. +- CLR assemblies can now be added to a whitelist, as a work-around for the `clr strict security` feature described in CTP 2.0. [sp_add_trusted_assembly](../relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md), [sp_drop_trusted_assembly](../relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md), and [sys.trusted_asssemblies](../relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md) are added to support the white list of trusted assemblies. ### SQL Server Integration Services (SSIS) The new **Scale Out** feature in SSIS has the following new and changed features in RC1. For more info, see [What's New in Integration Services in SQL Server 2017](~/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md). From f6599efe5679299ab0814b68273a1d3005384e02 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Wed, 12 Jul 2017 09:42:56 -0700 Subject: [PATCH 245/336] Updating changes recommended after review. --- ...lity-group-for-distributed-transactions.md | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md index 26a9e9ffec2..242c78af29b 100644 --- a/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md +++ b/docs/database-engine/availability-groups/windows/configure-availability-group-for-distributed-transactions.md @@ -28,24 +28,24 @@ This article explains how to configure an availability group for distributed tra ## Support for distributed transactions -[!INCLUDE[SQL2017](../../../includes/sssqlv14-md.md)] supports distributed transactions for databases in availability groups. This support includes transactions containing multiple databases on the same instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] as well as databases across multiple instances. +[!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] supports distributed transactions for databases in availability groups across multiple data sources, including SQL Server instances on different servers. [!INCLUDE[SQL2017](../../../includes/sssqlv14-md.md)] adds support for all distributed transactions - including databases in availability groups on the same instances and on different instances on the same server. -[!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] also supports distributed transactions for databases in availability groups, however this support does not include transactions involving two or more databases on the same server. The transactions can be between multiple databases from different servers. [!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] does not support distributed transactions for databases in availability groups when more than one database is on the same server. +In a distributed transaction, client applications work with Microsoft Distributed Transaction Coordinator (MS DTC or DTC) to guarantee transactional consistency across multiple data sources. DTC is a service available on supported Windows Server-based operating systems. For a distributed transaction, DTC is the *transaction coordinator*. Normally, a SQL Server instance is the *resource manager*. When a database is in an availability group, each database needs to be its own resource manager. -In a distributed transaction, client applications work with Microsoft Distributed Transaction Coordinator (MS DTC or DTC) to guarantee transactional consistency across multiple data sources. DTC is a service available on all supported operating systems. For a distributed transaction, DTC is the *transaction coordinator*. Normally, a SQL Server instance is the *resource manager*. When a database is in an availability group, each database needs to be its own resource manager. - -Configure an availability group to support distributed transactions. Set the availability group to allow each database to register as a resource manager. This article explains how to configure an availability group so that each database can be a resource manager in DTC. - -[!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] does not prevent distributed transactions for databases in an availability group - even when the availability group is not configured for distributed transactions. However when an availability group is not configured for distributed transactions, failover may not succeed in some situations. Specifically the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance may not be able to get the transaction outcome from DTC. To enable the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance to get the outcome of in-doubt transactions from the DTC after failover, configure the availability group for distributed transactions. +[!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] does not prevent distributed transactions for databases in an availability group - even when the availability group is not configured for distributed transactions. However when an availability group is not configured for distributed transactions, failover may not succeed in some situations. Specifically the new primary replica [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance may not be able to get the transaction outcome from DTC. To enable the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance to get the outcome of in-doubt transactions from the DTC after failover, configure the availability group for distributed transactions. ## Prerequisites -All instances of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] that participate in the distributed transaction must be [!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] or later. +Before you configure an availability group to support distributed transactions, you must meet the following prerequisites: + +* All instances of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] that participate in the distributed transaction must be [!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] or later. -Availability groups must be running on Windows Server 2016 or Windows Server 2012 R2. For Windows Server 2012 R2, you must install the update in KB3090973 available at [https://support.microsoft.com/en-us/kb/3090973](https://support.microsoft.com/en-us/kb/3090973). +* Availability groups must be running on Windows Server 2016 or Windows Server 2012 R2. For Windows Server 2012 R2, you must install the update in KB3090973 available at [https://support.microsoft.com/en-us/kb/3090973](https://support.microsoft.com/en-us/kb/3090973). ## Create an availability group for distributed transactions +Configure an availability group to support distributed transactions. Set the availability group to allow each database to register as a resource manager. This article explains how to configure an availability group so that each database can be a resource manager in DTC. + You can create an availability group for distributed transactions on [!INCLUDE[SQL2016](../../../includes/sssql15-md.md)] or later. To create an availability group for distributed transactions, include `DTC_SUPPORT = PER_DB` in the availability group definition. The following script creates an availability group for distributed transactions. ```transact-sql @@ -56,12 +56,12 @@ CREATE AVAILABILITY GROUP MyAG FOR DATABASE DB1, DB2 REPLICA ON Server1 WITH ( - ENDPOINT_URL = 'TCP://Server1:5022', + ENDPOINT_URL = 'TCP://SERVER1.corp.com:5022', AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, FAILOVER_MODE = AUTOMATIC ) Server2 WITH ( - ENDPOINT_URL = 'TCP://Server2:5022', + ENDPOINT_URL = 'TCP://SERVER2.corp.com:5022', AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, FAILOVER_MODE = AUTOMATIC ) @@ -86,9 +86,9 @@ ALTER AVAILABILITY GROUP MyaAG ## Distributed transactions - technical concepts -Distributed transactions span two or more databases. The management of the transaction must be coordinated between the resource managers by a server component called a transaction manager. Each instance of the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] Database Engine can operate as a resource manager in distributed transactions coordinated by transaction managers, such as Microsoft Distributed Transaction Coordinator (MS DTC), or other transaction managers that support the Open Group XA specification for distributed transaction processing. When an availability group is configured with `DTC_SUPPORT = PER_DB`, the databases can operate as resource managers. For more information, see the MS DTC documentation. +A distributed transaction spans two or more databases. As the transaction manager, DTC coordinates the transaction between SQL Server instances, and other data sources. Each instance of the [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] database engine can operate as a resource manager. When an availability group is configured with `DTC_SUPPORT = PER_DB`, the databases can operate as resource managers. For more information, see the MS DTC documentation. -A transaction within a single instance of the Database Engine that spans two or more databases is actually a distributed transaction. The instance manages the distributed transaction internally; to the user, it operates as a local transaction. [!INCLUDE[SQL2017](../../../includes/sssqlv14-md.md)] handles all cross-database transactions as distributed transactions when databases are in an availability group configured with `DTC_SUPPORT = PER_DB` - even within a single instance of SQL Server. +A transaction with two or more databases in a single instance of the database engine is actually a distributed transaction. The instance manages the distributed transaction internally; to the user, it operates as a local transaction. [!INCLUDE[SQL2017](../../../includes/sssqlv14-md.md)] handles all cross-database transactions as distributed transactions when databases are in an availability group configured with `DTC_SUPPORT = PER_DB` - even within a single instance of SQL Server. At the application, a distributed transaction is managed much the same as a local transaction. At the end of the transaction, the application requests the transaction to be either committed or rolled back. A distributed commit must be managed differently by the transaction manager to minimize the risk that a network failure may result in some resource managers successfully committing while others roll back the transaction. This is achieved by managing the commit process in two phases (the prepare phase and the commit phase), which is known as a two-phase commit (2PC). @@ -113,10 +113,11 @@ The following list explains how the application works with DTC to complete distr ### Effects of configuring an availability group for distributed transactions -Each entity participating in a distributed transaction is called a *resource manager*. Examples of resource managers include: +Each entity participating in a distributed transaction is called a resource manager. Examples of resource managers include: * A [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance. * A database in an availability group that has been configured for distributed transactions. +* DTC service - can also be a transaction manager. * Other data sources. In order to participate in distributed transactions, an instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] enlists with a DTC. Normally the instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] enlists with DTC on the local server. Each instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] creates a resource manager identifier (RMID) and registers it with DTC. In the default configuration, all databases on an instance of [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] use the same RMID. @@ -127,7 +128,7 @@ For more detail on distributed transactions in [!INCLUDE[SQLServer](../../../inc ## Manage in-doubt transactions -When an availability group fails over, while distributed transactions are pending, the instance that hosts the primary replica contacts DTC to find out the results of the transactions. If databases in the availability group are not configured for distributed transactions, the RMID is the new [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance. The RMID when the transaction began was from the instance that held the primary replica before failover. The failover results in a changed RMID. The new [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance cannot get the transaction outcome from DTC for active transactions because the RMID has changed. The following cases can result in a changed RMID: +When an availability group fails over, while distributed transactions are pending, the instance that hosts the primary replica contacts DTC to find out the results of the transactions. If databases in the availability group are not configured for distributed transactions, the RMID is the new [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance. The RMID when the transaction began was from the instance that held the primary replica before failover. The failover results in a changed RMID. The new [!INCLUDE[SQLServer](../../../includes/ssnoversion_md.md)] instance cannot get the transaction outcome from DTC for active transactions because the RMID has changed. The transaction is *in-doubt*. The following cases can result in a changed RMID: * Change `DTC_SUPPORT` for an availability group. * Add or remove a database from an availability group. @@ -184,3 +185,7 @@ For more information about resolving in-doubt transactions, see [Resolve Transac [Always On availability groups: Interoperability (SQL Server)](../../../database-engine/availability-groups/windows/always-on-availability-groups-interoperability-sql-server.md) [Transactions - Always On availability groups and Database Mirroring](transactions-always-on-availability-and-database-mirroring.md) + +[Supporting XA Transactions](http://technet.microsoft.com/library/cc753563(v=ws.10).aspx) + +[How It Works: Session/SPID (–2) for DTC Transactions](http://blogs.msdn.microsoft.com/bobsql/2016/08/04/how-it-works-sessionspid-2-for-dtc-transactions/) \ No newline at end of file From 03dfedc0beabbd0a478ab6ab84398f069b43f6c3 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Wed, 12 Jul 2017 09:48:36 -0700 Subject: [PATCH 246/336] What's new linux Added link to AD authentication. Also fixed metadata --- docs/linux/sql-server-linux-whats-new.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-whats-new.md b/docs/linux/sql-server-linux-whats-new.md index 879d8c6d5b9..f9cbcd0f8b9 100644 --- a/docs/linux/sql-server-linux-whats-new.md +++ b/docs/linux/sql-server-linux-whats-new.md @@ -1,4 +1,3 @@ - --- # required metadata @@ -24,7 +23,7 @@ This topic describes what's new for SQL Server 2017 running on Linux. The RC1 release contains the following improvements and fixes: - Enabled Transparent Layer Security (TLS) for encrypted connections. For more information, see [Encrypting Connections to SQL Server on Linux](sql-server-linux-encrypted-connections.md). -- Enabled Windows Authentication. +- Enabled [Windows Authentication](sql-server-linux-active-directory-authentication.md). - Enabled [DB Mail](../relational-databases/database-mail/database-mail.md). - Added IPV6 support. From 3098851e259323e66b241995e950cdfc2ba6e2b4 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Wed, 12 Jul 2017 14:40:59 -0400 Subject: [PATCH 247/336] Removing old setup and intro topics and cleaning links --- ...ver-linux-offline-package-install-intro.md | 4 - ...luster-availability-group-create-prereq.md | 6 +- docs/linux/new-updated-linux.md | 6 +- .../quickstart-install-connect-docker.md | 2 +- .../quickstart-install-connect-red-hat.md | 4 +- docs/linux/quickstart-install-connect-suse.md | 4 +- .../quickstart-install-connect-ubuntu.md | 2 +- ...r-linux-active-directory-authentication.md | 12 +- .../sql-server-linux-azure-virtual-machine.md | 62 +++---- ...l-server-linux-connect-and-query-sqlcmd.md | 157 ------------------ .../sql-server-linux-develop-overview.md | 19 ++- .../sql-server-linux-get-started-tutorial.md | 79 --------- .../sql-server-linux-management-overview.md | 8 +- docs/linux/sql-server-linux-overview.md | 31 +++- docs/linux/sql-server-linux-release-notes.md | 109 ++++++++---- ...l-server-linux-run-sql-server-agent-job.md | 2 +- docs/linux/sql-server-linux-setup-docker.md | 4 +- ...sql-server-linux-setup-full-text-search.md | 8 +- docs/linux/sql-server-linux-setup-red-hat.md | 140 ---------------- .../linux/sql-server-linux-setup-sql-agent.md | 8 +- ...inux-setup-suse-linux-enterprise-server.md | 129 -------------- docs/linux/sql-server-linux-setup-tools.md | 7 +- docs/linux/sql-server-linux-setup-ubuntu.md | 142 ---------------- docs/linux/sql-server-linux-setup.md | 12 +- docs/linux/sql-server-linux-whats-new.md | 2 +- 25 files changed, 195 insertions(+), 764 deletions(-) delete mode 100644 docs/includes/sql-server-linux-offline-package-install-intro.md delete mode 100644 docs/linux/sql-server-linux-connect-and-query-sqlcmd.md delete mode 100644 docs/linux/sql-server-linux-get-started-tutorial.md delete mode 100644 docs/linux/sql-server-linux-setup-red-hat.md delete mode 100644 docs/linux/sql-server-linux-setup-suse-linux-enterprise-server.md delete mode 100644 docs/linux/sql-server-linux-setup-ubuntu.md diff --git a/docs/includes/sql-server-linux-offline-package-install-intro.md b/docs/includes/sql-server-linux-offline-package-install-intro.md deleted file mode 100644 index a454eac7d94..00000000000 --- a/docs/includes/sql-server-linux-offline-package-install-intro.md +++ /dev/null @@ -1,4 +0,0 @@ -If your Linux machine does not have access to the online repositories used in the previous sections, you can download the package files directly. These packages are located in the Microsoft repository, [https://packages.microsoft.com](https://packages.microsoft.com). - -> [!TIP] -> If you successfully installed with the steps in the previous sections, you do not need to download or manually install the package(s) below. This is only for the offline scenario. \ No newline at end of file diff --git a/docs/includes/ss-linux-cluster-availability-group-create-prereq.md b/docs/includes/ss-linux-cluster-availability-group-create-prereq.md index 8331852cb1b..5516c8c4fda 100644 --- a/docs/includes/ss-linux-cluster-availability-group-create-prereq.md +++ b/docs/includes/ss-linux-cluster-availability-group-create-prereq.md @@ -56,11 +56,11 @@ Before you create the availability group, you need to: Install SQL Server. The following links point to SQL Server installation instructions for various distributions. -- [Red Hat Enterprise Linux](..\linux\sql-server-linux-setup-red-hat.md) +- [Red Hat Enterprise Linux](../linux/quickstart-install-connect-red-hat.md) -- [SUSE Linux Enterprise Server](..\linux\sql-server-linux-setup-suse-linux-enterprise-server.md) +- [SUSE Linux Enterprise Server](../linux/quickstart-install-connect-suse.md) -- [Ubuntu](..\linux\sql-server-linux-setup-ubuntu.md) +- [Ubuntu](../linux/quickstart-install-connect-ubuntu.md) ## Enable Always On availability groups and restart sqlserver diff --git a/docs/linux/new-updated-linux.md b/docs/linux/new-updated-linux.md index 8b88fa4a9b1..1a02d98a96a 100644 --- a/docs/linux/new-updated-linux.md +++ b/docs/linux/new-updated-linux.md @@ -303,7 +303,7 @@ Package details and download locations for the RPM and Debian packages are liste -### 6.   [Install SQL Server on Red Hat Enterprise Linux](sql-server-linux-setup-red-hat.md) +### 6.   Install SQL Server on Red Hat Enterprise Linux *Updated: 2017-05-25*           ([Previous](#TitleNum_5) | [Next](#TitleNum_7)) @@ -359,7 +359,7 @@ To manually install the SQL Server database engine package for Red Hat Enterpris -### 7.   [Install SQL Server on SUSE Linux Enterprise Server](sql-server-linux-setup-suse-linux-enterprise-server.md) +### 7.   Install SQL Server on SUSE Linux Enterprise Server *Updated: 2017-05-25*           ([Previous](#TitleNum_6) | [Next](#TitleNum_8)) @@ -415,7 +415,7 @@ To manually install the SQL Server database engine package for SUSE Linux Enterp -### 8.   [Install SQL Server on Ubuntu](sql-server-linux-setup-ubuntu.md) +### 8.   Install SQL Server on Ubuntu *Updated: 2017-06-19*           ([Previous](#TitleNum_7)) diff --git a/docs/linux/quickstart-install-connect-docker.md b/docs/linux/quickstart-install-connect-docker.md index b5d3e6c45e6..5826f304b47 100644 --- a/docs/linux/quickstart-install-connect-docker.md +++ b/docs/linux/quickstart-install-connect-docker.md @@ -237,4 +237,4 @@ Other common tools to connect to SQL Server include: ## Next steps -After installing SQL Server on Linux, next see [how to connect to the server and run basic Transact-SQL queries](sql-server-linux-connect-and-query-sqlcmd.md). Also, check out the [mssql-docker GitHub repository](https://github.com/Microsoft/mssql-docker) for resources, feedback, and known issues. +Check out the [mssql-docker GitHub repository](https://github.com/Microsoft/mssql-docker) for resources, feedback, and known issues. diff --git a/docs/linux/quickstart-install-connect-red-hat.md b/docs/linux/quickstart-install-connect-red-hat.md index cddb568e06f..e560e07ce51 100644 --- a/docs/linux/quickstart-install-connect-red-hat.md +++ b/docs/linux/quickstart-install-connect-red-hat.md @@ -1,7 +1,7 @@ --- # required metadata title: Get started with SQL Server 2017 on Red Hat Enterprise Linux | Microsoft Docs -description: Describes how to install SQL Server 2017 CTP 2.1 on Red Hat Enterprise Linux. +description: Describes how to install SQL Server 2017 RC1 on Red Hat Enterprise Linux. author: sabotta ms.author: carlasab manager: craigg @@ -25,7 +25,7 @@ ms.assetid: "" --- # Install SQL Server and create a database on Red Hat -In this quick start tutorial, you first install SQL Server 2017 CTP 2.1 on Red Hat Enterprise Linux (RHEL) 7.3. Then connect with **sqlcmd** to create your first database and run queries. +In this quick start tutorial, you first install SQL Server 2017 RC1 on Red Hat Enterprise Linux (RHEL) 7.3. Then connect with **sqlcmd** to create your first database and run queries. ## Prerequisites diff --git a/docs/linux/quickstart-install-connect-suse.md b/docs/linux/quickstart-install-connect-suse.md index b706171da7b..2c79ac2f00b 100644 --- a/docs/linux/quickstart-install-connect-suse.md +++ b/docs/linux/quickstart-install-connect-suse.md @@ -1,7 +1,7 @@ --- # required metadata title: Get started with SQL Server 2017 on SUSE Linux Enterprise Server | Microsoft Docs -description: Describes how to install SQL Server 2017 CTP 2.1 on SUSE Linux Enterprise Server. +description: Describes how to install SQL Server 2017 RC1 on SUSE Linux Enterprise Server. author: sabotta ms.author: carlasab manager: craigg @@ -25,7 +25,7 @@ ms.assetid: "" --- # Install SQL Server and create a database on SUSE Linux Enterprise Server -In this quick start tutorial, you first install SQL Server 2017 CTP 2.1 on SUSE Linux Enterprise Server (SLES) v12 SP2. Then connect with **sqlcmd** to create your first database and run queries. +In this quick start tutorial, you first install SQL Server 2017 RC1 on SUSE Linux Enterprise Server (SLES) v12 SP2. Then connect with **sqlcmd** to create your first database and run queries. ## Prerequisites diff --git a/docs/linux/quickstart-install-connect-ubuntu.md b/docs/linux/quickstart-install-connect-ubuntu.md index 556b039d938..ae52edac1fd 100644 --- a/docs/linux/quickstart-install-connect-ubuntu.md +++ b/docs/linux/quickstart-install-connect-ubuntu.md @@ -11,7 +11,7 @@ ms.technology: database-engine --- # Install SQL Server and create a database on Ubuntu -In this quick start tutorial, you first install SQL Server 2017 CTP 2.1 on Ubuntu 16.04. Then connect with **sqlcmd** to create your first database and run queries. +In this quick start tutorial, you first install SQL Server 2017 RC1 on Ubuntu 16.04. Then connect with **sqlcmd** to create your first database and run queries. ## Prerequisites diff --git a/docs/linux/sql-server-linux-active-directory-authentication.md b/docs/linux/sql-server-linux-active-directory-authentication.md index f775496d0f1..4e5f72d28ac 100644 --- a/docs/linux/sql-server-linux-active-directory-authentication.md +++ b/docs/linux/sql-server-linux-active-directory-authentication.md @@ -4,7 +4,7 @@ title: "Active Directory Authentication with SQL Server on Linux | Microsoft Docs" description: "Configuration steps for AAD authentication for SQL Server on Linux" author: "tmullaney" -ms.date: "07/03/2017" +ms.date: "07/17/2017" ms.author: "thmullan;rickbyh" manager: "jhubbard" ms.topic: "article" @@ -27,12 +27,12 @@ AD Authentication has the following advantages over [!INCLUDE[ssNoVersion](../.. • AD enables you to enforce a centralized password policy across your organization. ## Prerequisites -Before you configure AD Authentication, you need to: +Before you configure AD Authentication, you need to: - Set up an AD Domain Controller (Windows) on your network -- Install [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] - - [Red Hat Enterprise Linux](sql-server-linux-setup-red-hat.md) - - [SUSE Linux Enterprise Server](sql-server-linux-setup-suse-linux-enterprise-server.md) - - [Ubuntu](sql-server-linux-setup-ubuntu.md) +- Install [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] + - [Red Hat Enterprise Linux](quickstart-install-connect-red-hat.md) + - [SUSE Linux Enterprise Server](quickstart-install-connect-suse.md) + - [Ubuntu](quickstart-install-connect-ubuntu.md) ## Step 1: Join [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host to AD domain Numerous tools exist to help you join the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host machine to your AD domain. This walkthrough uses [realmd](https://www.freedesktop.org/software/realmd/docs/guide-active-directory-join.html), a popular open source package. If you haven't already, install both the **realmd** and Kerberos client packages on the [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] host machine using your Linux distribution's package manager: diff --git a/docs/linux/sql-server-linux-azure-virtual-machine.md b/docs/linux/sql-server-linux-azure-virtual-machine.md index e5a5a64550a..5a347b71225 100644 --- a/docs/linux/sql-server-linux-azure-virtual-machine.md +++ b/docs/linux/sql-server-linux-azure-virtual-machine.md @@ -6,7 +6,7 @@ description: This tutorial shows how to create a Linux SQL Server 2017 virtual m author: rothja ms.author: jroth manager: jhubbard -ms.date: 05/01/2017 +ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -32,45 +32,45 @@ Open the [Azure portal](https://portal.azure.com/). 1. Click **New** on the left. -2. In the **New** blade, click **Compute**. +1. In the **New** blade, click **Compute**. -3. Click **See All** next to the **Featured Apps** heading. +1. Click **See All** next to the **Featured Apps** heading. ![See all VM images](./media/sql-server-linux-azure-virtual-machine/azure-compute-blade.png) -4. In the search box, type **SQL Server 2017**, and press **Enter** to start the search. +1. In the search box, type **SQL Server 2017**, and press **Enter** to start the search. ![Search filter for SQL Server 2017 VM images](./media/sql-server-linux-azure-virtual-machine/searchfilter.png) > [!TIP] > This filter shows the available Linux virtual machine image(s) for SQL Server 2017. Over time, SQL Server 2017 images for other supported Linux distributions will be listed. You can also click this [link](https://ms.portal.azure.com/#blade/Microsoft_Azure_Marketplace/GalleryFeaturedMenuItemBlade/selectedMenuItemId/home/searchQuery/sql%20server%202017) to go directly to the search results for SQL Server 2017. -5. Select a SQL Server 2017 image from the search results. +1. Select a SQL Server 2017 image from the search results. -5. Click **Create**. +1. Click **Create**. -6. On the **Basics** blade, fill in the details for your Linux VM. +1. On the **Basics** blade, fill in the details for your Linux VM. ![Basics blade](./media/sql-server-linux-azure-virtual-machine/basics.png) > [!Note] > You have the choice of using an SSH public key or a Password for authentication. SSH is more secure. For instructions on how to generate an SSH key, see [Create SSH keys on Linux and Mac for Linux VMs in Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-mac-create-ssh-keys). -7. Click **OK**. +1. Click **OK**. -8. On the **Size** blade, choose a machine size. For development and functional testing, we recommend a VM size of **DS2** or higher. For performance testing, use **DS13** or higher. +1. On the **Size** blade, choose a machine size. For development and functional testing, we recommend a VM size of **DS2** or higher. For performance testing, use **DS13** or higher. ![Choose a VM size](./media/sql-server-linux-azure-virtual-machine/vmsizes.png) To see other sizes, select **View all**. For more information about VM machine sizes, see [Linux VM sizes](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-sizes). -9. Click **Select**. +1. Click **Select**. -10. On the **Settings** blade, you can make changes to the settings or keep the default settings. +1. On the **Settings** blade, you can make changes to the settings or keep the default settings. -11. Click **OK**. +1. Click **OK**. -12. On the **Summary** page, click **OK** to create the VM. +1. On the **Summary** page, click **OK** to create the VM. > [!NOTE] > The Azure VM pre-configures the firewall to open the SQL Server port 1433 for remote connections. But to remotely connect, you also need to add a network security group rule as described in the next section. @@ -81,36 +81,37 @@ To be able to remotely connect to SQL Server on an Azure VM, you must configure 1. In the portal, select **Virtual machines**, and then select your SQL Server VM. -2. In the list of properties, select **Network interfaces**. +1. In the list of properties, select **Network interfaces**. -3. Then select the Network Interface for your VM. +1. Then select the Network Interface for your VM. ![Network interfaces](./media/sql-server-linux-azure-virtual-machine/networkinterfaces.png) -4. Click the Network security group link. +1. Click the Network security group link. ![Network security group](./media/sql-server-linux-azure-virtual-machine/networksecuritygroup.png) -5. In the properties of the Network Security Group, selct **Inbound security rules**. +1. In the properties of the Network Security Group, selct **Inbound security rules**. -6. Click the **+Add** button. +1. Click the **+Add** button. -7. Provide a Name of "SQLServerRemoteConnections". +1. Provide a Name of "SQLServerRemoteConnections". -8. In the **Service** list, select **MS SQL**. +1. In the **Service** list, select **MS SQL**. ![MS SQL security group rule](./media/sql-server-linux-azure-virtual-machine/sqlnsgrule.png) -11. Click **OK** to save the rule for your VM. +1. Click **OK** to save the rule for your VM. ## Connect to the Linux VM -If you already use a BASH shell, connect to the Azure VM using the **ssh** command. In the following command, replace the VM user name and IP address to connect to your Linux VM. +If you already use a BASH shell, connect to the Azure VM using the **ssh** command. In the following command, replace the VM user name and IP address to connect to your Linux VM. ```bash ssh -l AzureAdmin 100.55.555.555 ``` -You can find the IP address of your VM in the Azure portal. + +You can find the IP address of your VM in the Azure portal. ![IP address in Azure portal](./media/sql-server-linux-azure-virtual-machine/vmproperties.png) @@ -118,11 +119,11 @@ If you are running on Windows and do not have a BASH shell, you can install an S 1. [Download and install PuTTY](http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html). -2. Run PuTTY. +1. Run PuTTY. -3. On the PuTTY configuration screen enter your VM's public IP address. +1. On the PuTTY configuration screen enter your VM's public IP address. -4. Click Open and enter your username and password at the prompts. +1. Click Open and enter your username and password at the prompts. For more information about connecting to Linux VMs, see [Create a Linux VM on Azure using the Portal](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-quick-create-portal#ssh-to-the-vm). @@ -130,18 +131,19 @@ For more information about connecting to Linux VMs, see [Create a Linux VM on Az 1. After connecting to your Linux VM, open a new command terminal. -2. Set up SQL Server with the following command. +1. Set up SQL Server with the following command. ```bash sudo /opt/mssql/bin/mssql-conf setup ``` - + Accept the License and enter a password for the system administrator account. You can start the server when prompted. -3. Optionally, [install the SQL Server Tools](sql-server-linux-setup-tools.md). +1. Optionally, [install the SQL Server Tools](sql-server-linux-setup-tools.md). ## Next steps -Now that you have a SQL Server 2017 virtual machine in Azure, you can [connect locally and run a test query](sql-server-linux-connect-and-query-sqlcmd.md). + +Now that you have a SQL Server 2017 virtual machine in Azure, you can connect locally with **sqlcmd** to run Transact-SQL queries. If you configured the Azure VM for remote SQL Server connections, you should also be able to connect remotely. For an example of connecting to SQL Server on Linux from a remote Windows machine, see [Use SSMS on Windows to connect to SQL Server on Linux](sql-server-linux-develop-use-ssms.md). diff --git a/docs/linux/sql-server-linux-connect-and-query-sqlcmd.md b/docs/linux/sql-server-linux-connect-and-query-sqlcmd.md deleted file mode 100644 index f3b2b1f26cb..00000000000 --- a/docs/linux/sql-server-linux-connect-and-query-sqlcmd.md +++ /dev/null @@ -1,157 +0,0 @@ ---- -# required metadata - -title: Connect and query SQL Server on Linux | Microsoft Docs -description: This tutorial shows how to run sqlcmd on Linux to run Transact-SQL queries. -author: rothja -ms.author: jroth -manager: jhubbard -ms.date: 03/17/2017 -ms.topic: article -ms.prod: sql-linux -ms.technology: database-engine -ms.assetid: 9e6c1ae1-59a4-4589-b839-18d6a52f2676 - -# optional metadata - -# keywords: "" -# ROBOTS: "" -# audience: "" -# ms.devlang: "" -# ms.reviewer: "" -# ms.suite: "" -# ms.tgt_pltfrm: "" -ms.custom: H1Hack27Feb2017 - ---- -# Connect to SQL Server on Linux and run Transact-SQL queries - -This topic provides connection requirements and guidance for SQL Server 2017 RC1 running on Linux. In most cases, the connection requirements and processes do not differ across platforms. This topic approaches the subject in the context of Linux and then points to other resources. - -This topic is a walk-through. In this walk-through, you will use [sqlcmd](https://msdn.microsoft.com/library/ms162773.aspx) to connect to SQL Server 2017 on Linux. After successfully connecting, you will use Transact-SQL (T-SQL) queries to create and populate a small database. - -> [!TIP] -> **Sqlcmd** is just one tool for connecting to SQL Server to run queries and perform management and development tasks. For other tools such as SQL Server Management Studio and Visual Studio Code, see the [Develop](sql-server-linux-develop-overview.md) and [Manage](sql-server-linux-management-overview.md) areas. - -## Install the SQL Server command-line tools - -**Sqlcmd** is part of the SQL Server command-line tools, which are not installed automatically with SQL Server on Linux. If you have not already installed the SQL Server command-line tools on your Linux machine, you must install them. For more information on how to install the tools, follow the instructions for your Linux distribution: - -- [Red Hat Enterprise Linux](sql-server-linux-setup-tools.md#RHEL) -- [Ubuntu](sql-server-linux-setup-tools.md#ubuntu) -- [SLES](sql-server-linux-setup-tools.md#SLES) -- [MacOS](sql-server-linux-setup-tools.md#macos) - -## Connection requirements -To connect to SQL Server on Linux, you must use SQL Authentication (username and password). To connect remotely, you must ensure that the port SQL Server listens on is open. By default, SQL Server listens on TCP port 1433. Depending on your Linux distribution and configuration, you might have to open this port in the firewall. - -## Connect to SQL Server on Linux - -In the following steps, connect to SQL Server 2017 on Linux with sqlcmd. - -> [!TIP] -> On macOS, use [sql-cli](https://www.npmjs.com/package/sql-cli) because sqlcmd and bcp are not available. - -1. On your Linux box, open a command terminal. - -2. Run **sqlcmd** with parameters for your SQL Server name (-S), the user name (-U), and the password (-P). - - The following command connects to the local SQL Server instance (**localhost**) on Linux. - - ```bash - sqlcmd -S localhost -U SA -P '' - ``` - - > [!TIP] - > You can omit the password on the command-line to be prompted to enter it. - - To connect to a remote instance, specify the machine name or IP address for the **-S** parameter. - - ```bash - sqlcmd -S 192.555.5.555 -U SA -P '' - ``` - - > [!TIP] - > If you get a connection failure, first attempt to diagnose the problem from the error message. Then review the [connection troubleshooting recommendations](sql-server-linux-troubleshooting-guide.md#connection). - -## Query SQL Server - -After you connect to SQL Server you can run queries to return information or create database objects. If you are new to writing queries, see [Writing Transact-SQL Statements](https://msdn.microsoft.com/library/ms365303.aspx). In the following steps, you will use sqlcmd to: - -1. Query SQL Server for a list of the databases. - -1. Use Transact SQL to create a database. - -1. Create and populate a table in the new database. - -1. Query the table. - -To to complete each of these tasks, copy the Transact-SQL from the examples below into the sqlcmd session that you created in the previous step. - -For example, this query returns the name of all of the databases. - -```sql -SELECT Name from sys.Databases; -GO -``` - -Create a database using the SQL Server default settings. - -```sql -CREATE DATABASE testdb; -GO -``` - -Use the database: - -```sql -USE testdb; -GO -``` - -Create a table in the current database: - -```sql -CREATE TABLE inventory (id INT, name NVARCHAR(50), quantity INT); -GO -``` - -Insert data into the new table: - -```sql -INSERT INTO inventory VALUES (1, 'banana', 150); -INSERT INTO inventory VALUES (2, 'orange', 154); -GO -``` - -Select from the table: - -```sql -SELECT * FROM inventory WHERE quantity > 152; -GO -``` - -To end your sqlcmd session, type `QUIT`. - -```sql -QUIT -``` - -In this walk-through you connected to SQL Server with sqlcmd, and created and populated a database. For more information on how to use sqlcmd.exe, see [sqlcmd Utility](https://msdn.microsoft.com/library/ms162773.aspx). - -## Connect and query from Windows - -It is important to note that SQL Server tools on Windows connect to SQL Server instances on Linux in the same way they would connect to any remote SQL Server instance. So, you can follow the same steps in this topic running sqlcmd.exe from a remote Windows machine. Just verify that you use the target Linux machine name or IP address rather than localhost. For other connection requirements, see [connection troubleshooting recommendations](sql-server-linux-troubleshooting-guide.md#connection). - -For other tools that run on Windows but connect to SQL Server on Linux, see: -- [SQL Server Management Studio (SSMS)](sql-server-linux-develop-use-ssms.md) -- [Windows PowerShell](sql-server-linux-manage-powershell.md) -- [SQL Server Data Tools (SSDT)](sql-server-linux-develop-use-ssdt.md) - -## Next Steps - -If you're new to T-SQL, see [Tutorial: Writing Transact-SQL Statements](https://msdn.microsoft.com/library/ms365303.aspx) and the [Transact-SQL Reference (Database Engine)](https://msdn.microsoft.com/library/bb510741.aspx). - -For other ways to connect to SQL Server on Linux, see the [Develop](sql-server-linux-develop-overview.md) and [Manage](sql-server-linux-management-overview.md) areas. - - diff --git a/docs/linux/sql-server-linux-develop-overview.md b/docs/linux/sql-server-linux-develop-overview.md index 72c35c51ab3..ee62efaeab1 100644 --- a/docs/linux/sql-server-linux-develop-overview.md +++ b/docs/linux/sql-server-linux-develop-overview.md @@ -6,7 +6,7 @@ description: author: sanagama ms.author: sanagama manager: jhubbard -ms.date: 04/19/2017 +ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -31,6 +31,7 @@ You can create applications that connect to and use SQL Server 2017 RC1 on Linux > These same development options also enable you to target SQL Server on other platforms. Applications can target SQL Server running on-premises or in the cloud, on Linux, Windows, or Docker on macOS. Or you can target Azure SQL Database and Azure SQL Data Warehouse. ## Try the tutorials + The best way to get started and build applications with SQL Server is to try it out for yourself. - Browse to [Getting Started Tutorials](http://aka.ms/sqldev). @@ -41,12 +42,15 @@ The best way to get started and build applications with SQL Server is to try it > If you want to develop for SQL Server 2017 RC1 on Docker, take a look at the **macOS** tutorials. ## Create new applications + If you're creating a new application, take a look at a list of the [Connectivity libraries](sql-server-linux-develop-connectivity-libraries.md) for a summary of the connectors and popular frameworks available for various programming languages. ## Use existing applications + If you have an existing database application, you can simply change its connection string to target SQL Server 2017 RC1 on Linux. Make sure to read about the [Known Issues](sql-server-linux-release-notes.md) in SQL Server 2017 RC1 on Linux. ## Use existing SQL tools on Windows with SQL Server on Linux + Tools that currently run on Windows such as SSMS, SSDT, and PowerShell, also work with SQL Server 2017 RC1 on Linux. Although they do not run natively on Linux, you can still manage remote SQL Server instances on Linux. See the following topics for more information: @@ -59,14 +63,23 @@ See the following topics for more information: > Make sure that you are using the latest versions of these tools for the best experience. ## Use new SQL tools for Linux + You can use the new [mssql extension](https://aka.ms/mssql-marketplace) for [Visual Studio Code](https://code.visualstudio.com) on Linux, macOS, and Windows. For a step-by-step walkthrough, see the following tutorial: + - [Use Visual Studio Code](sql-server-linux-develop-use-vscode.md) You can also use new command-line tools that are native for Linux. These tools include the following: -- [sqlcmd](sql-server-linux-connect-and-query-sqlcmd.md) + +- [sqlcmd](../tools/sqlcmd-utility.md) - [bcp](sql-server-linux-migrate-bcp.md) - [sqlpackage](sql-server-linux-migrate-sqlpackage.md) - [mssql-conf](sql-server-linux-configure-mssql-conf.md) ## Next steps -To install SQL Server 2017 on Linux and get started, see [Get started with SQL Server on Linux](sql-server-linux-get-started-tutorial.md). + +To get started, install SQL Server on Linux using one of the following quick start tutorials: + +- [Install on Red Hat Enterprise Linux](quickstart-install-connect-red-hat.md) +- [Install on SUSE Linux Enterprise Server](quickstart-install-connect-suse.md) +- [Install on Ubuntu](quickstart-install-connect-ubuntu.md) +- [Run on Docker](quickstart-install-connect-ubuntu.md) diff --git a/docs/linux/sql-server-linux-get-started-tutorial.md b/docs/linux/sql-server-linux-get-started-tutorial.md deleted file mode 100644 index 1e2d46a1162..00000000000 --- a/docs/linux/sql-server-linux-get-started-tutorial.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -# required metadata - -title: Get started with SQL Server on Linux | Microsoft Docs -description: This topic provides a learning path for getting started with SQL Server 2017 on Linux. It also includes links to other resources for each step. -author: rothja -ms.author: jroth -manager: jhubbard -ms.date: 03/17/2017 -ms.topic: article -ms.prod: sql-linux -ms.technology: database-engine -ms.assetid: 66d96e59-2ded-4460-b350-fda80d93d79b - -# optional metadata - -# keywords: "" -# ROBOTS: "" -# audience: "" -# ms.devlang: "" -# ms.reviewer: "" -# ms.suite: "" -# ms.tgt_pltfrm: "" -ms.custom: H1Hack27Feb2017 - ---- -# Find resources for installing and using SQL Server on Linux - -Get started using SQL Server 2017 RC1 on Linux. Here are basic steps with links to how-to information. - -## 1: Install Linux -If you do not already have a Linux machine, install Linux on a physical server or a virtual machine (VM). Review the [Release notes](sql-server-linux-release-notes.md) on supported platforms and requirements. - -> [!NOTE] -> One option is to create use a pre-configured Linux VM in Azure. In addition to OS-only VMs, there is also a VM image with SQL Server 2017 RC1 already installed. For more information, see [Provision a Linux VM in Azure for SQL Server](sql-server-linux-azure-virtual-machine.md). - -## 2: Install SQL Server -Next, set up SQL Server 2017 on your Linux machine, or run the Docker image, using one of the following guides: - -| Platform | Installation | -|-----|-----| -| Red Hat Enterprise | [Installation guide](sql-server-linux-setup-red-hat.md) | -| SUSE Linux Enterprise Server v12 SP2 | [Installation guide](sql-server-linux-setup-suse-linux-enterprise-server.md) | -| Ubuntu 16.04 and 16.10 | [Installation guide](sql-server-linux-setup-ubuntu.md) | -| Docker | [Installation guide](sql-server-linux-setup-docker.md) | - -Note that Docker itself runs on multiple platforms, which means that you can run the Docker image on Linux, Mac, and Windows. - -> [!NOTE] -> You need at least 3.25GB of memory to run SQL Server on Linux. -> SQL Server Engine has been tested up to 1 TB of memory at this time. - -## 3: Connect locally or remotely -After installation, connect to the running SQL Server instance on your Linux machine. For a general discussion of connectivity, see [Connect and query SQL Server on Linux](sql-server-linux-connect-and-query-sqlcmd.md). Then run some Transact-SQL queries using a client tool. Examples include: - -| Tool | Tutorial | -|-----|-----| -| Sqlcmd | [Use the Sqlcmd command-line utility on Linux](sql-server-linux-connect-and-query-sqlcmd.md) | -| Visual Studio Code (VS Code) | [Use VS Code with SQL Server on Linux](sql-server-linux-develop-use-vscode.md) | -| SQL Server Management Studio (SSMS) | [Use SSMS on Windows to connect to SQL Server on Linux](sql-server-linux-develop-use-ssms.md) | -| SQL Server Data Tools (SSDT) | [Use SSDT with SQL Server on Linux](sql-server-linux-develop-use-ssdt.md) | - -## 4: Explore SQL Server capabilities on Linux -SQL Server 2017 has the same underlying database engine on all supported platforms, including Linux. So many existing features and capabilities operate the same way on Linux. - -If you are already familiar with SQL Server, you'll want to review the [Release notes](sql-server-linux-release-notes.md) for general guidelines and known issues for this release. - -If you are new to SQL Server, you might find it helpful to quickly explore some of the security and performance capabilities in the following two guides: - - [Get started with security features](sql-server-linux-security-get-started.md) - - [Get started with performance features](sql-server-linux-performance-get-started.md) - -Then learn how to develop and manage SQL Server: - - [Develop for SQL Server on Linux](sql-server-linux-develop-overview.md) - - [Manage SQL Server on Linux](sql-server-linux-management-overview.md) - - [Configure high availability](sql-server-linux-business-continuity-dr.md) - -## Next steps - -For the complete set of SQL Server documentation, see the [Microsoft SQL Server Documentation](https://msdn.microsoft.com/library/mt590198.aspx). diff --git a/docs/linux/sql-server-linux-management-overview.md b/docs/linux/sql-server-linux-management-overview.md index 8895d7da76a..dfbc9200bfe 100644 --- a/docs/linux/sql-server-linux-management-overview.md +++ b/docs/linux/sql-server-linux-management-overview.md @@ -32,15 +32,17 @@ There are several ways to manage SQL Server 2017 RC1 on Linux. The following sec The **mssql-conf** tool configures SQL Server on Linux. For more information, see [Configure SQL Server on Linux with mssql-conf](sql-server-linux-configure-mssql-conf.md). ## Transact-SQL -Almost everything you can do in a client tool can also be accomplished with Transact-SQL statements. SQL Server provides [Dynamic Management Views (DMVs)](https://msdn.microsoft.com/library/ms188754.aspx) that query the status and configuration of SQL Server. There are also [Transact-SQL commands](https://msdn.microsoft.com/library/bb510741.aspx) for database management tasks. You can run these commands in any client tool that supports connecting to SQL Server and running Transact-SQL queries. Examples include [sqlcmd](sql-server-linux-connect-and-query-sqlcmd.md), [Visual Studio Code](sql-server-linux-develop-use-vscode.md), and [SQL Server Management Studio](sql-server-linux-manage-ssms.md). + +Almost everything you can do in a client tool can also be accomplished with Transact-SQL statements. SQL Server provides [Dynamic Management Views (DMVs)](https://msdn.microsoft.com/library/ms188754.aspx) that query the status and configuration of SQL Server. There are also [Transact-SQL commands](https://msdn.microsoft.com/library/bb510741.aspx) for database management tasks. You can run these commands in any client tool that supports connecting to SQL Server and running Transact-SQL queries. Examples include [sqlcmd](sql-server-linux-setup-tools.md), [Visual Studio Code](sql-server-linux-develop-use-vscode.md), and [SQL Server Management Studio](sql-server-linux-manage-ssms.md). ## SQL Server Management Studio on Windows + SQL Server Management Studio (SSMS) is a Windows application that provides a graphical user interface for managing SQL Server. Although it currently runs only on Windows, you can use it to remotely connect to your Linux SQL Server instances. For more information on using SSMS to manage SQL Server, see [Use SSMS to Manage SQL Server on Linux](sql-server-linux-manage-ssms.md). ## PowerShell + PowerShell provides a rich command-line environment to manage SQL Server on Linux. For more information, see [Use PowerShell to Manage SQL Server on Linux](sql-server-linux-manage-powershell.md). ## Next steps -For more information on how to get started using SQL Server on Linux, see [Get started with SQL Server on Linux](sql-server-linux-get-started-tutorial.md). - +For more information about SQL Server on Linux, see [SQL Server on Linux](sql-server-linux-overview.md). \ No newline at end of file diff --git a/docs/linux/sql-server-linux-overview.md b/docs/linux/sql-server-linux-overview.md index f4f17e426bd..d93b2a25ef8 100644 --- a/docs/linux/sql-server-linux-overview.md +++ b/docs/linux/sql-server-linux-overview.md @@ -6,7 +6,7 @@ description: This topic describes how SQL Server runs on Linux and provides info author: rothja ms.author: jroth manager: jhubbard -ms.date: 07/19/2017 +ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -29,14 +29,33 @@ ms.assetid: 9dcc6a90-0add-42c2-815b-862e4e2a21ac SQL Server now runs on Linux! This latest release, SQL Server 2017 RC1, runs on Linux and is in many ways simply SQL Server. It’s the same SQL Server database engine, with many similar features and services regardless of your operating system. -- [Install SQL Server on Linux](sql-server-linux-setup.md). +## Install -- Learn about the platforms and features in the [Release Notes](sql-server-linux-release-notes.md). +To get started, install SQL Server on Linux using one of the following quick start tutorials: -- Start using SQL Server on Linux in [Get started](sql-server-linux-get-started-tutorial.md). +- [Install on Red Hat Enterprise Linux](quickstart-install-connect-red-hat.md) +- [Install on SUSE Linux Enterprise Server](quickstart-install-connect-suse.md) +- [Install on Ubuntu](quickstart-install-connect-ubuntu.md) +- [Run on Docker](quickstart-install-connect-ubuntu.md) -## See Also -- [Summary of what's new in the current release of SQL Server 2017](https://msdn.microsoft.com/library/mt788653(SQL.130).aspx) +> [!NOTE] +> Docker itself runs on multiple platforms, which means that you can run the Docker image on Linux, Mac, and Windows. + +## Connect + +After installation, connect to the running SQL Server instance on your Linux machine. You can do locally or remotely and with a variety of tools and drivers. The quick start tutorials demonstrate how to use the **sqlcmd** command-line tool. Other tools include the following: + +| Tool | Tutorial | +|-----|-----| +| Visual Studio Code (VS Code) | [Use VS Code with SQL Server on Linux](sql-server-linux-develop-use-vscode.md) | +| SQL Server Management Studio (SSMS) | [Use SSMS on Windows to connect to SQL Server on Linux](sql-server-linux-develop-use-ssms.md) | +| SQL Server Data Tools (SSDT) | [Use SSDT with SQL Server on Linux](sql-server-linux-develop-use-ssdt.md) | + +## Explore + +SQL Server 2017 has the same underlying database engine on all supported platforms, including Linux. So many existing features and capabilities operate the same way on Linux. This area of the documentation exposes some of features from a Linux perspective. It also calls out areas that have unique requirements on Linux. + +If you are already familiar with SQL Server, you'll want to review the [Release notes](sql-server-linux-release-notes.md) for general guidelines and known issues for this release. Then look at [what's new for SQL Server on Linux](sql-server-linux-whats-new.md) as well as [what's new for SQL Server 2017 overall](../sql-server/what-s-new-in-sql-server-2017.md) ## ![info_tip](./media/general/info_tip.png) Engage with the SQL Server engineering team - [Stack Overflow (tag sql-server) - ask technical questions](http://stackoverflow.com/questions/tagged/sql-server) diff --git a/docs/linux/sql-server-linux-release-notes.md b/docs/linux/sql-server-linux-release-notes.md index 8916a59e8d4..0fcdecd475d 100644 --- a/docs/linux/sql-server-linux-release-notes.md +++ b/docs/linux/sql-server-linux-release-notes.md @@ -6,7 +6,7 @@ description: This topic contains the release notes and supported features for SQ author: rothja ms.author: jroth manager: jhubbard -ms.date: 07/19/2017 +ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -48,9 +48,9 @@ The SQL Server engine version for this release is 00.0.000.000. | Platform | File System | Installation Guide | |-----|-----|-----| -| Red Hat Enterprise Linux 7.3 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](sql-server-linux-setup-red-hat.md) | -| SUSE Enterprise Linux Server v12 SP2 | EXT4 | [Installation guide](sql-server-linux-setup-suse-linux-enterprise-server.md) | -| Ubuntu 16.04LTS | EXT4 | [Installation guide](sql-server-linux-setup-ubuntu.md) | +| Red Hat Enterprise Linux 7.3 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](quickstart-install-connect-red-hat.md) | +| SUSE Enterprise Linux Server v12 SP2 | EXT4 | [Installation guide](quickstart-install-connect-suse.md) | +| Ubuntu 16.04LTS | EXT4 | [Installation guide](quickstart-install-connect-ubuntu.md) | | Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](sql-server-linux-setup-docker.md) | > [!NOTE] @@ -183,7 +183,13 @@ The following limitations apply to SSMS on Windows connected to SQL Server on Li - Number of log files to retain cannot be modified. ### Next steps -To begin using SQL Server on Linux, see [Get started with SQL Server on Linux](sql-server-linux-get-started-tutorial.md). + +To get started, see the following quick start tutorials: + +- [Install on Red Hat Enterprise Linux](quickstart-install-connect-red-hat.md) +- [Install on SUSE Linux Enterprise Server](quickstart-install-connect-suse.md) +- [Install on Ubuntu](quickstart-install-connect-ubuntu.md) +- [Run on Docker](quickstart-install-connect-ubuntu.md)

      @@ -196,9 +202,9 @@ The SQL Server engine version for this release is 14.0.600.250. | Platform | File System | Installation Guide | |-----|-----|-----| -| Red Hat Enterprise Linux 7.3 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](sql-server-linux-setup-red-hat.md) | -| SUSE Enterprise Linux Server v12 SP2 | EXT4 | [Installation guide](sql-server-linux-setup-suse-linux-enterprise-server.md) | -| Ubuntu 16.04LTS | EXT4 | [Installation guide](sql-server-linux-setup-ubuntu.md) | +| Red Hat Enterprise Linux 7.3 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](quickstart-install-connect-red-hat.md) | +| SUSE Enterprise Linux Server v12 SP2 | EXT4 | [Installation guide](quickstart-install-connect-suse.md) | +| Ubuntu 16.04LTS | EXT4 | [Installation guide](quickstart-install-connect-ubuntu.md) | | Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](sql-server-linux-setup-docker.md) | > [!NOTE] @@ -334,7 +340,13 @@ The following limitations apply to SSMS on Windows connected to SQL Server on Li - Number of log files to retain cannot be modified. ### Next steps -To begin using SQL Server on Linux, see [Get started with SQL Server on Linux](sql-server-linux-get-started-tutorial.md). + +To get started, see the following quick start tutorials: + +- [Install on Red Hat Enterprise Linux](quickstart-install-connect-red-hat.md) +- [Install on SUSE Linux Enterprise Server](quickstart-install-connect-suse.md) +- [Install on Ubuntu](quickstart-install-connect-ubuntu.md) +- [Run on Docker](quickstart-install-connect-ubuntu.md)

      @@ -347,9 +359,9 @@ The SQL Server engine version for this release is 14.0.500.272. | Platform | File System | Installation Guide | |-----|-----|-----| -| Red Hat Enterprise Linux 7.3 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](sql-server-linux-setup-red-hat.md) | -| SUSE Enterprise Linux Server v12 SP2 | EXT4 | [Installation guide](sql-server-linux-setup-suse-linux-enterprise-server.md) | -| Ubuntu 16.04LTS and 16.10 | EXT4 | [Installation guide](sql-server-linux-setup-ubuntu.md) | +| Red Hat Enterprise Linux 7.3 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](quickstart-install-connect-red-hat.md) | +| SUSE Enterprise Linux Server v12 SP2 | EXT4 | [Installation guide](quickstart-install-connect-suse.md) | +| Ubuntu 16.04LTS and 16.10 | EXT4 | [Installation guide](quickstart-install-connect-ubuntu.md) | | Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](sql-server-linux-setup-docker.md) | > [!NOTE] @@ -475,7 +487,13 @@ The following limitations apply to SSMS on Windows connected to SQL Server on Li - Number of log files to retain cannot be modified. ### Next steps -To begin using SQL Server on Linux, see [Get started with SQL Server on Linux](sql-server-linux-get-started-tutorial.md). + +To get started, see the following quick start tutorials: + +- [Install on Red Hat Enterprise Linux](quickstart-install-connect-red-hat.md) +- [Install on SUSE Linux Enterprise Server](quickstart-install-connect-suse.md) +- [Install on Ubuntu](quickstart-install-connect-ubuntu.md) +- [Run on Docker](quickstart-install-connect-ubuntu.md)

      @@ -488,9 +506,9 @@ The SQL Server engine version for this release is 14.0.405.198. | Platform | File System | Installation Guide | |-----|-----|-----| -| Red Hat Enterprise Linux 7.3 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](sql-server-linux-setup-red-hat.md) | -| SUSE Enterprise Linux Server v12 SP2 | EXT4 | [Installation guide](sql-server-linux-setup-suse-linux-enterprise-server.md) | -| Ubuntu 16.04LTS and 16.10 | EXT4 | [Installation guide](sql-server-linux-setup-ubuntu.md) | +| Red Hat Enterprise Linux 7.3 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](quickstart-install-connect-red-hat.md) | +| SUSE Enterprise Linux Server v12 SP2 | EXT4 | [Installation guide](quickstart-install-connect-suse.md) | +| Ubuntu 16.04LTS and 16.10 | EXT4 | [Installation guide](quickstart-install-connect-ubuntu.md) | | Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](sql-server-linux-setup-docker.md) | > [!NOTE] @@ -648,7 +666,13 @@ The following limitations apply to SSMS on Windows connected to SQL Server on Li - Number of log files to retain cannot be modified. ### Next steps -To begin using SQL Server on Linux, see [Get started with SQL Server on Linux](sql-server-linux-get-started-tutorial.md). + +To get started, see the following quick start tutorials: + +- [Install on Red Hat Enterprise Linux](quickstart-install-connect-red-hat.md) +- [Install on SUSE Linux Enterprise Server](quickstart-install-connect-suse.md) +- [Install on Ubuntu](quickstart-install-connect-ubuntu.md) +- [Run on Docker](quickstart-install-connect-ubuntu.md)

      @@ -661,9 +685,9 @@ The SQL Server engine version for this release is 14.0.304.138. | Platform | File System | Installation Guide | |-----|-----|-----| -| Red Hat Enterprise Linux 7.3 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](sql-server-linux-setup-red-hat.md) | -| SUSE Enterprise Linux Server v12 SP2 | EXT4 | [Installation guide](sql-server-linux-setup-suse-linux-enterprise-server.md) | -| Ubuntu 16.04LTS and 16.10 | EXT4 | [Installation guide](sql-server-linux-setup-ubuntu.md) | +| Red Hat Enterprise Linux 7.3 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](quickstart-install-connect-red-hat.md) | +| SUSE Enterprise Linux Server v12 SP2 | EXT4 | [Installation guide](quickstart-install-connect-suse.md) | +| Ubuntu 16.04LTS and 16.10 | EXT4 | [Installation guide](quickstart-install-connect-ubuntu.md) | | Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](sql-server-linux-setup-docker.md) | > [!NOTE] @@ -800,7 +824,13 @@ The following limitations apply to SSMS on Windows connected to SQL Server on Li - Number of log files to retain cannot be modified. ### Next steps -To begin using SQL Server on Linux, see [Get started with SQL Server on Linux](sql-server-linux-get-started-tutorial.md). + +To get started, see the following quick start tutorials: + +- [Install on Red Hat Enterprise Linux](quickstart-install-connect-red-hat.md) +- [Install on SUSE Linux Enterprise Server](quickstart-install-connect-suse.md) +- [Install on Ubuntu](quickstart-install-connect-ubuntu.md) +- [Run on Docker](quickstart-install-connect-ubuntu.md)

      @@ -813,9 +843,9 @@ The SQL Server engine version for this release is 14.0.200.24. | Platform | File System | Installation Guide | |-----|-----|-----| -| Red Hat Enterprise Linux 7.3 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](sql-server-linux-setup-red-hat.md) | -| SUSE Enterprise Linux Server v12 SP2 | EXT4 | [Installation guide](sql-server-linux-setup-suse-linux-enterprise-server.md) | -| Ubuntu 16.04LTS and 16.10 | EXT4 | [Installation guide](sql-server-linux-setup-ubuntu.md) | +| Red Hat Enterprise Linux 7.3 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](quickstart-install-connect-red-hat.md) | +| SUSE Enterprise Linux Server v12 SP2 | EXT4 | [Installation guide](quickstart-install-connect-suse.md) | +| Ubuntu 16.04LTS and 16.10 | EXT4 | [Installation guide](quickstart-install-connect-ubuntu.md) | | Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](sql-server-linux-setup-docker.md) | > [!NOTE] @@ -940,7 +970,13 @@ The following limitations apply to SSMS on Windows connected to SQL Server on Li - The file browser is restricted to the "C:\\" scope, which resolves to /var/opt/mssql/ on Linux. To use other paths, generate scripts of the UI operation and replace the C:\\ paths with Linux paths. Then execute the script manually in SSMS. ### Next steps -To begin using SQL Server on Linux, see [Get started with SQL Server on Linux](sql-server-linux-get-started-tutorial.md). + +To get started, see the following quick start tutorials: + +- [Install on Red Hat Enterprise Linux](quickstart-install-connect-red-hat.md) +- [Install on SUSE Linux Enterprise Server](quickstart-install-connect-suse.md) +- [Install on Ubuntu](quickstart-install-connect-ubuntu.md) +- [Run on Docker](quickstart-install-connect-ubuntu.md)

      @@ -953,8 +989,8 @@ The SQL Server engine version for this release is 14.0.100.187. | Platform | File System | Installation Guide | |-----|-----|-----| -| Red Hat Enterprise Linux Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](sql-server-linux-setup-red-hat.md) | -| Ubuntu 16.04LTS and 16.10 | EXT4 | [Installation guide](sql-server-linux-setup-ubuntu.md) | +| Red Hat Enterprise Linux Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](quickstart-install-connect-red-hat.md) | +| Ubuntu 16.04LTS and 16.10 | EXT4 | [Installation guide](quickstart-install-connect-ubuntu.md) | | Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](sql-server-linux-setup-docker.md) | > [!NOTE] @@ -1078,10 +1114,7 @@ The following limitations apply to SSMS on Windows connected to SQL Server on Li - The file browser is restricted to the "C:\\" scope, which resolves to /var/opt/mssql/ on Linux. To use other paths, generate scripts of the UI operation and replace the C:\\ paths with Linux paths. Then execute the script manually in SSMS. -### Next steps -To begin using SQL Server on Linux, see [Get started with SQL Server on Linux](sql-server-linux-get-started-tutorial.md). -
      -
      +v ![Separation bar grapic](./media/sql-server-linux-release-notes/seperationbar3.png) @@ -1092,8 +1125,8 @@ The SQL Server engine version for this release is 14.0.1.246. | Platform | File System | Installation Guide | |-----|-----|-----| -| Red Hat Enterprise Linux 7.2 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](sql-server-linux-setup-red-hat.md) | -| Ubuntu 16.04LTS | EXT4 | [Installation guide](sql-server-linux-setup-ubuntu.md) | +| Red Hat Enterprise Linux 7.2 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](quickstart-install-connect-red-hat.md) | +| Ubuntu 16.04LTS | EXT4 | [Installation guide](quickstart-install-connect-ubuntu.md) | | Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](sql-server-linux-setup-docker.md) | > [!NOTE] @@ -1214,4 +1247,12 @@ The following limitations apply to SSMS on Windows connected to SQL Server on Li - The file browser is restricted to the "C:\\" scope, which resolves to /var/opt/mssql/ on Linux. To use other paths, generate scripts of the UI operation and replace the C:\\ paths with Linux paths. Then execute the script manually in SSMS. ### Next steps -To begin using SQL Server on Linux, see [Get started with SQL Server on Linux](sql-server-linux-get-started-tutorial.md). + +To get started, see the following quick start tutorials: + +- [Install on Red Hat Enterprise Linux](quickstart-install-connect-red-hat.md) +- [Install on SUSE Linux Enterprise Server](quickstart-install-connect-suse.md) +- [Install on Ubuntu](quickstart-install-connect-ubuntu.md) +- [Run on Docker](quickstart-install-connect-ubuntu.md) +
      +
      diff --git a/docs/linux/sql-server-linux-run-sql-server-agent-job.md b/docs/linux/sql-server-linux-run-sql-server-agent-job.md index 21d4ed9e289..8a1b3484d00 100644 --- a/docs/linux/sql-server-linux-run-sql-server-agent-job.md +++ b/docs/linux/sql-server-linux-run-sql-server-agent-job.md @@ -39,7 +39,7 @@ The following steps provide an example of how to create a SQL Server Agent job o > [!TIP] -> You can use any T-SQL client to run these commands. For example, on Linux you can use [sqlcmd](sql-server-linux-connect-and-query-sqlcmd.md) or [Visual Studio Code](sql-server-linux-develop-use-vscode.md). From a remote Windows Server, you can also run queries in SQL Server Management Studio (SSMS) or use the UI interface for job management, which is described in the next section. +> You can use any T-SQL client to run these commands. For example, on Linux you can use [sqlcmd](sql-server-linux-setup-tools.md) or [Visual Studio Code](sql-server-linux-develop-use-vscode.md). From a remote Windows Server, you can also run queries in SQL Server Management Studio (SSMS) or use the UI interface for job management, which is described in the next section. 1. **Create the job**. The following example uses [sp_add_job](https://msdn.microsoft.com/library/ms182079.aspx) to create a job named `Daily AdventureWorks Backup`. diff --git a/docs/linux/sql-server-linux-setup-docker.md b/docs/linux/sql-server-linux-setup-docker.md index 8f3b53f35a7..01999a4b765 100644 --- a/docs/linux/sql-server-linux-setup-docker.md +++ b/docs/linux/sql-server-linux-setup-docker.md @@ -118,7 +118,7 @@ You can connect and query SQL Server in a container from either outside the cont You can connect to the SQL Server instance on your Docker machine from any external Linux, Windows, or macOS tool that supports SQL connections. Some common tools include: -- [sqlcmd](sql-server-linux-connect-and-query-sqlcmd.md) +- [sqlcmd](sql-server-linux-setup-tools.md) - [Visual Studio Code](sql-server-linux-develop-use-vscode.md) - [SQL Server Management Studio (SSMS) on Windows](sql-server-linux-develop-use-ssms.md) @@ -422,4 +422,4 @@ cat errorlog ## Next steps -After installing SQL Server on Linux, next see [how to connect to the server and run basic Transact-SQL queries](sql-server-linux-connect-and-query-sqlcmd.md). Also, check out the [mssql-docker GitHub repository](https://github.com/Microsoft/mssql-docker) for resources, feedback, and known issues. +See the [mssql-docker GitHub repository](https://github.com/Microsoft/mssql-docker) for resources, feedback, and known issues. diff --git a/docs/linux/sql-server-linux-setup-full-text-search.md b/docs/linux/sql-server-linux-setup-full-text-search.md index 9234b9503a3..dea6d2786b5 100644 --- a/docs/linux/sql-server-linux-setup-full-text-search.md +++ b/docs/linux/sql-server-linux-setup-full-text-search.md @@ -6,7 +6,7 @@ description: This topic describes how to install SQL Server Full-Text Search on author: rothja ms.author: jroth manager: jhubbard -ms.date: 07/03/2017 +ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -53,7 +53,7 @@ sudo yum check-update sudo yum update mssql-server-fts ``` -If you need an offline installation, locate the Full-text Search package download in the [Release notes](sql-server-linux-release-notes.md). Then use the same offline installation steps described in the topic [Install SQL Server on Red Hat Enterprise Linux](sql-server-linux-setup-red-hat.md#offline). +If you need an offline installation, locate the Full-text Search package download in the [Release notes](sql-server-linux-release-notes.md). Then use the same offline installation steps described in the topic [Install SQL Server](sql-server-linux-setup.md#offline). ## Install on Ubuntu @@ -71,7 +71,7 @@ sudo apt-get update sudo apt-get install -y mssql-server-fts ``` -If you need an offline installation, locate the Full-text Search package download in the [Release notes](sql-server-linux-release-notes.md). Then use the same offline installation steps described in the topic [Install SQL Server on Ubuntu](sql-server-linux-setup-ubuntu.md#offline). +If you need an offline installation, locate the Full-text Search package download in the [Release notes](sql-server-linux-release-notes.md). Then use the same offline installation steps described in the topic [Install SQL Server](sql-server-linux-setup.md#offline). ## Install on SLES @@ -88,7 +88,7 @@ sudo zypper refresh sudo zypper update mssql-server-fts ``` -If you need an offline installation, locate the Full-text Search package download in the [Release notes](sql-server-linux-release-notes.md). Then use the same offline installation steps described in the topic [Install SQL Server on SUSE Linux Enterprise Server](sql-server-linux-setup-suse-linux-enterprise-server.md#offline). +If you need an offline installation, locate the Full-text Search package download in the [Release notes](sql-server-linux-release-notes.md). Then use the same offline installation steps described in the topic [Install SQL Server](sql-server-linux-setup.md#offline). ## Supported languages diff --git a/docs/linux/sql-server-linux-setup-red-hat.md b/docs/linux/sql-server-linux-setup-red-hat.md deleted file mode 100644 index 22b5058dc84..00000000000 --- a/docs/linux/sql-server-linux-setup-red-hat.md +++ /dev/null @@ -1,140 +0,0 @@ ---- -# required metadata -title: Install SQL Server on Red Hat Enterprise Linux | Microsoft Docs -description: Describes how to install SQL Server 2017 RC1 on Red Hat Enterprise Linux. -author: rothja -ms.author: jroth -manager: jhubbard -ms.date: 05/17/2017 -ms.topic: article -ms.prod: sql-linux -ms.technology: database-engine -ms.assetid: 92503f59-96dc-4f6a-b1b0-d135c43e935e - -# optional metadata - -# keywords: "" -# ROBOTS: "" -# audience: "" -# ms.devlang: "" -# ms.reviewer: "" -# ms.suite: "" -# ms.tgt_pltfrm: "" -# ms.custom: "" - ---- -# Install SQL Server on Red Hat Enterprise Linux - -This topic provides a walkthrough of how to install SQL Server 2017 RC1 on Red Hat Enterprise Linux (RHEL). - -> [!NOTE] -> You need at least 3.25GB of memory to run SQL Server on Linux. For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). - -## Install SQL Server - -To install the **mssql-server** package on RHEL, follow these steps: - -1. Enter superuser mode. - - ```bash - sudo su - ``` - -2. Download the Microsoft SQL Server Red Hat repository configuration file: - - ```bash - curl https://packages.microsoft.com/config/rhel/7/mssql-server.repo > /etc/yum.repos.d/mssql-server.repo - ``` - -3. Exit superuser mode. - - ```bash - exit - ``` - -4. Run the following commands to install SQL Server: - - ```bash - sudo yum install -y mssql-server - ``` - -5. After the package installation finishes, run **mssql-conf setup** and follow the prompts. Make sure to specify a strong password for the SA account (Minimum length 8 characters, including uppercase and lowercase letters, base 10 digits and/or non-alphanumeric symbols). - - ```bash - sudo /opt/mssql/bin/mssql-conf setup - ``` - -6. Once the configuration is done, verify that the service is running: - - ```bash - systemctl status mssql-server - ``` - -7. To allow remote connections, open the SQL Server port on the firewall on RHEL. The default SQL Server port is TCP 1433. If you are using **FirewallD** for your firewall, you can use the following commands: - - ```bash - sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent - sudo firewall-cmd --reload - ``` - -## Upgrade SQL Server - -To upgrade the **mssql-server** package on RHEL, execute the following command: - - ```bash - sudo yum update mssql-server - ``` - -These commands will download the newest package and replace the binaries located under `/opt/mssql/`. The user generated databases and system databases will not be affected by this operation. - -## Uninstall SQL Server - -To remove the **mssql-server** package on RHEL, follow these steps: - -1. Run the `remove` command. This will delete the package and remove the files under `/opt/mssql/`. However, this command will not affect user-generated and system database files, which are located under `/var/opt/mssql`. - ```bash - sudo yum remove mssql-server - ``` - -2. Removing the package will not delete the generated database files. If you want to delete the database files use the following command: - ```bash - sudo rm -rf /var/opt/mssql/ - ``` - -## Offline installation - -[!INCLUDE[SQL Server Linux offline package installation](../includes/sql-server-linux-offline-package-install-intro.md)] - -To manually install the SQL Server database engine package for Red Hat Enterprise Linux, use the following steps: - -1. **Download the .rpm database engine package**. Find package download links in the package details section of the [Release Notes](sql-server-linux-release-notes.md). - -1. **Move the downloaded package to your Linux machine**. If you used a different machine to download the packages, one way to move the packages to your Linux machine is with the **scp** commmand. - -1. **Install the database engine package**. Use the **yum** command with the **localinstall** option. Replace `versionnumber` with your package version number. - - ```bash - sudo yum localinstall mssql-server_versionnumber.x86_64.rpm - ``` - - > [!NOTE] - > You can also install the RPM package with the `rpm -ivh` command, but the `yum localinstall` command also installs dependencies if available from approved repositories. - -1. **Resolve missing dependencies**: You might have missing dependencies at this point. If not, you can skip this step. In some cases, you must manually locate and install these dependencies. Use the **rpm** command to inspect the dependencies of the SQL Server packages: - - ```bash - rpm -qpR mssql-server_versionnumber.x86_64.rpm - ``` - -1. **Complete the SQL Server setup**. Use **mssql-conf** to complete the SQL Server setup: - - ```bash - sudo /opt/mssql/bin/mssql-conf setup - ``` - -## Next steps - -- [Install tools](sql-server-linux-setup-tools.md#RHEL) - -- If you already have SQL Server tools, [connect to the SQL Server](sql-server-linux-connect-and-query-sqlcmd.md). - diff --git a/docs/linux/sql-server-linux-setup-sql-agent.md b/docs/linux/sql-server-linux-setup-sql-agent.md index 4233ad1c2b0..e158414c39f 100644 --- a/docs/linux/sql-server-linux-setup-sql-agent.md +++ b/docs/linux/sql-server-linux-setup-sql-agent.md @@ -6,7 +6,7 @@ description: This topic describes how to install the SQL Server Agent on Linux. author: rothja ms.author: jroth manager: jhubbard -ms.date: 05/17/2017 +ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -54,7 +54,7 @@ sudo yum update mssql-server-agent sudo systemctl restart mssql-server ``` -If you need an offline installation, locate the SQL Server Agent package download in the [Release notes](sql-server-linux-release-notes.md). Then use the same offline installation steps described in the topic [Install SQL Server on Red Hat Enterprise Linux](sql-server-linux-setup-red-hat.md#offline). +If you need an offline installation, locate the SQL Server Agent package download in the [Release notes](sql-server-linux-release-notes.md). Then use the same offline installation steps described in the topic [Install SQL Server](sql-server-linux-setup.md#offline). ## Install on Ubuntu @@ -74,7 +74,7 @@ sudo apt-get install mssql-server-agent sudo systemctl restart mssql-server ``` -If you need an offline installation, locate the SQL Server Agent package download in the [Release notes](sql-server-linux-release-notes.md). Then use the same offline installation steps described in the topic [Install SQL Server on Ubuntu](sql-server-linux-setup-ubuntu.md#offline). +If you need an offline installation, locate the SQL Server Agent package download in the [Release notes](sql-server-linux-release-notes.md). Then use the same offline installation steps described in the topic [Install SQL Server](sql-server-linux-setup.md#offline). ## Install on SLES @@ -95,7 +95,7 @@ sudo zypper update mssql-server-agent sudo systemctl restart mssql-server ``` -If you need an offline installation, locate the SQL Server Agent package download in the [Release notes](sql-server-linux-release-notes.md). Then use the same offline installation steps described in the topic [Install SQL Server on SUSE Linux Enterprise Server](sql-server-linux-setup-suse-linux-enterprise-server.md#offline). +If you need an offline installation, locate the SQL Server Agent package download in the [Release notes](sql-server-linux-release-notes.md). Then use the same offline installation steps described in the topic [Install SQL Server](sql-server-linux-setup.md#offline). ## Next steps For more information on how to use SQL Server Agent to create, schedule, and run jobs, see [Run a SQL Server Agent job on Linux](sql-server-linux-run-sql-server-agent-job.md). diff --git a/docs/linux/sql-server-linux-setup-suse-linux-enterprise-server.md b/docs/linux/sql-server-linux-setup-suse-linux-enterprise-server.md deleted file mode 100644 index 92106da2da3..00000000000 --- a/docs/linux/sql-server-linux-setup-suse-linux-enterprise-server.md +++ /dev/null @@ -1,129 +0,0 @@ ---- -# required metadata -title: Install SQL Server on SUSE Linux Enterprise Server | Microsoft Docs -description: Describes how to install SQL Server 2017 RC1 on SUSE Linux Enterprise Server. -author: rothja -ms.author: jroth -manager: jhubbard -ms.date: 05/17/2017 -ms.topic: article -ms.prod: sql-linux -ms.technology: database-engine -ms.assetid: 31ddfb80-f75c-4f51-8540-de6213cb68b8 - -# optional metadata - -# keywords: "" -# ROBOTS: "" -# audience: "" -# ms.devlang: "" -# ms.reviewer: "" -# ms.suite: "" -# ms.tgt_pltfrm: "" -# ms.custom: "" - ---- -# Install SQL Server on SUSE Linux Enterprise Server - -This topic provides a walkthrough of how to install SQL Server 2017 RC1 on SUSE Linux Enterprise Server (SLES) v12 SP2. - -> [!NOTE] -> You need at least 3.25 GB of memory to run SQL Server on Linux. Also, the file system must be **XFS** or **EXT4**. Other file systems, such as **BTRFS**, are unsupported. For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). - -## Install SQL Server -To install the **mssql-server** package on SLES, follow these steps: - -1. Download the Microsoft SQL Server SLES repository configuration file: - - ```bash - sudo zypper addrepo -fc https://packages.microsoft.com/config/sles/12/mssql-server.repo - - sudo zypper --gpg-auto-import-keys refresh - ``` - -2. Run the following command to add the SLES v12 SP2 SDK repository to obtain the libsss_nss_idmap0 dependency. - - ```bash - sudo SUSEConnect -p sle-sdk/12.2/x86_64 - ``` - -3. Run the following command to install SQL Server: - - ```bash - sudo zypper install mssql-server - ``` - -4. After the package installation finishes, run **mssql-conf setup** and follow the prompts. Make sure to specify a strong password for the SA account (Minimum length 8 characters, including uppercase and lowercase letters, base 10 digits and/or non-alphanumeric symbols). - - ```bash - sudo /opt/mssql/bin/mssql-conf setup - ``` - -5. Once the configuration is done, verify that the service is running: - - ```bash - systemctl status mssql-server - ``` - -6. To allow remote connections, you may need to open the SQL Server TCP port on your firewall. The default SQL Server port is 1433. - -## Upgrade SQL Server - -To upgrade the **mssql-server** package on SLES, execute the following command: - - ```bash - sudo zypper update mssql-server - ``` - -These commands download the newest package and replace the binaries located under `/opt/mssql/`. The user generated databases and system databases are not affected by this operation. - -## Uninstall SQL Server - -To remove the **mssql-server** package on SLES, follow these steps: - -1. Run the `remove` command. This will delete the package and remove the files under `/opt/mssql/`. However, this command will not affect user-generated and system database files, which are located under `/var/opt/mssql`. - ```bash - sudo zypper remove mssql-server - ``` - -2. Removing the package will not delete the generated database files. If you want to delete the database files, use the following command: - ```bash - sudo rm -rf /var/opt/mssql/ - ``` - -## Offline installation - -[!INCLUDE[SQL Server Linux offline package installation](../includes/sql-server-linux-offline-package-install-intro.md)] - -To manually install the SQL Server database engine package for SUSE Linux Enterprise Server, use the following steps: - -1. **Download the .rpm database engine package**. Find package download links in the package details section of the [Release Notes](sql-server-linux-release-notes.md). - -1. **Move the downloaded package to your Linux machine**. If you used a different machine to download the packages, one way to move the packages to your Linux machine is with the **scp** commmand. - -1. **Install the database engine package**. Use the **zypper install** command. Replace `versionnumber` with your package version number. - - ```bash - sudo zypper install mssql-server_versionnumber.x86_64.rpm - ``` - - > [!NOTE] - > You can also install the RPM package with the `rpm -ivh` command, but the `zypper install` command also installs dependencies if available from approved repositories. - -1. **Resolve missing dependencies**: You might have missing dependencies at this point. If not, you can skip this step. In some cases, you must manually locate and install these dependencies. Use the **rpm** command to inspect the dependencies of the SQL Server packages: - - ```bash - rpm -qpR mssql-server_versionnumber.x86_64.rpm - ``` - -1. **Complete the SQL Server setup**. Use **mssql-conf** to complete the SQL Server setup: - - ```bash - sudo /opt/mssql/bin/mssql-conf setup - ``` - -## Next steps - -- [Install tools](sql-server-linux-setup-tools.md#SLES) - -- If you already have SQL Server tools, [connect to the SQL Server](sql-server-linux-connect-and-query-sqlcmd.md). diff --git a/docs/linux/sql-server-linux-setup-tools.md b/docs/linux/sql-server-linux-setup-tools.md index 55dfe9e9524..41938e10aa8 100644 --- a/docs/linux/sql-server-linux-setup-tools.md +++ b/docs/linux/sql-server-linux-setup-tools.md @@ -261,4 +261,9 @@ To manually install these packages, use the following steps: ## Next steps -After installation, connect to the SQL Server instance to create and manage databases. To get started, see [Connect and query SQL Server on Linux](sql-server-linux-connect-and-query-sqlcmd.md). +After installation, connect to the SQL Server instance to create and manage databases. For examples, see the following quick start tutorials: + +- [Install on Red Hat Enterprise Linux](quickstart-install-connect-red-hat.md) +- [Install on SUSE Linux Enterprise Server](quickstart-install-connect-suse.md) +- [Install on Ubuntu](quickstart-install-connect-ubuntu.md) +- [Run on Docker](quickstart-install-connect-ubuntu.md) \ No newline at end of file diff --git a/docs/linux/sql-server-linux-setup-ubuntu.md b/docs/linux/sql-server-linux-setup-ubuntu.md deleted file mode 100644 index 8ecb1aa3bb2..00000000000 --- a/docs/linux/sql-server-linux-setup-ubuntu.md +++ /dev/null @@ -1,142 +0,0 @@ ---- -# required metadata - -title: Install SQL Server on Ubuntu | Microsoft Docs -description: -author: rothja -ms.author: jroth -manager: jhubbard -ms.date: 05/17/2017 -ms.topic: article -ms.prod: sql-linux -ms.technology: database-engine -ms.assetid: 31c8c92e-12fe-4728-9b95-4bc028250d85 - -# optional metadata - -# keywords: "" -# ROBOTS: "" -# audience: "" -# ms.devlang: "" -# ms.reviewer: "" -# ms.suite: "" -# ms.tgt_pltfrm: "" -# ms.custom: "" - ---- -# Install SQL Server on Ubuntu - -This topic provides a walkthrough of how to install SQL Server 2017 RC1 on Ubuntu 16.04. - -> [!NOTE] -> You need at least 3.25GB of memory to run SQL Server on Linux. For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). - -## Install SQL Server - -To install the **mssql-server** Package on Ubuntu, follow these steps: - -1. Import the public repository GPG keys: - - ```bash - curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - - ``` - -3. Register the Microsoft SQL Server Ubuntu repository: - - ```bash - curl https://packages.microsoft.com/config/ubuntu/16.04/mssql-server.list | sudo tee /etc/apt/sources.list.d/mssql-server.list - ``` - -5. Run the following commands to install SQL Server: - - ```bash - sudo apt-get update - sudo apt-get install -y mssql-server - ``` - -6. After the package installation finishes, run **mssql-conf setup** and follow the prompts. Make sure to specify a strong password for the SA account (Minimum length 8 characters, including uppercase and lowercase letters, base 10 digits and/or non-alphanumeric symbols). - - ```bash - sudo /opt/mssql/bin/mssql-conf setup - ``` - -7. Once the configuration is done, verify that the service is running: - - ```bash - systemctl status mssql-server - ``` - -8. To allow remote connections, you may need to open the SQL Server TCP port on your firewall. The default SQL Server port is 1433. - -## Upgrade SQL Server - -To upgrade the **mssql-server** package on Ubuntu, follow these steps: - -1. Update the apt-get repository lists: - ```bash - sudo apt-get update - ``` - -2. Re-run the installation command, this will upgrade the specific mssql-server package: - ```bash - sudo apt-get install mssql-server - ``` - -These commands will download the newest package and replace the binaries located under `/opt/mssql/`. The user generated databases and system databases will not be affected by this operation. - -## Uninstall SQL Server - -To remove the **mssql-server** package on Ubuntu, follow these steps: - -1. Run the `remove` command. This will delete the package and remove the files under `/opt/mssql/`. However, this command will not affect user-generated and system databases. - ```bash - sudo apt-get remove mssql-server - ``` - -2. Removing the package will not delete the generated database files. If you want to delete the database files use the following command: - ```bash - sudo rm -rf /var/opt/mssql/ - ``` - -## Offline installation - -[!INCLUDE[SQL Server Linux offline package installation](../includes/sql-server-linux-offline-package-install-intro.md)] - -To manually install the SQL Server database engine package for Ubuntu, use the following steps: - -1. **Download the .deb database engine package**. Find package download links in the package details section of the [Release Notes](sql-server-linux-release-notes.md). - -1. **Move the downloaded package to your Linux machine**. If you used a different machine to download the packages, one way to move the packages to your Linux machine is with the **scp** commmand. - -1. **Install the database engine package**. Use the **dpkg** command. Replace `versionnumber` with your package version number. - - ```bash - sudo dpkg -i mssql-server_versionnumber_amd64.deb - ``` - -1. **Resolve missing dependencies**: Typically, there are missing dependencies at this point. If you have access to approved repositories containing those dependencies, the easiest solution is to use the **apt-get** command: - - ```bash - sudo apt-get -f install - ``` - - > [!NOTE] - > This command completes the installation of the SQL Server package as well. - - In some cases, you might have to manually install the dependencies. Inspect the package's dependencies with the following command: - - ```bash - dpkg -I mssql-server_versionnumber_amd64.deb | grep "Depends:" - ``` - -1. **Complete the SQL Server setup**. Use **mssql-conf** to complete the SQL Server setup: - - ```bash - sudo /opt/mssql/bin/mssql-conf setup - ``` - -## Next steps - -- [Install tools](sql-server-linux-setup-tools.md#ubuntu) - -- If you already have SQL Server tools, [connect to the SQL Server](sql-server-linux-connect-and-query-sqlcmd.md). diff --git a/docs/linux/sql-server-linux-setup.md b/docs/linux/sql-server-linux-setup.md index 639ed7e2f4e..5598139ed4f 100644 --- a/docs/linux/sql-server-linux-setup.md +++ b/docs/linux/sql-server-linux-setup.md @@ -26,7 +26,7 @@ ms.assetid: 565156c3-7256-4e63-aaf0-884522ef2a52 --- # Install SQL Server on Linux -SQL Server 2017 RC1 is supported on Red Hat Enterprise Linux (RHEL), SUSE Linux Enterprise Server (SLES), and Ubuntu. It is also available as a Docker image which can run on Docker Engine on Linux or Docker for Windows/Mac. The topics in this section provide tutorials and general guidance for installing SQL Server 2017 RC1 on Linux. +SQL Server 2017 RC1 is supported on Red Hat Enterprise Linux (RHEL), SUSE Linux Enterprise Server (SLES), and Ubuntu. It is also available as a Docker image, which can run on Docker Engine on Linux or Docker for Windows/Mac. The topics in this section provide tutorials and general guidance for installing SQL Server 2017 RC1 on Linux. ## Supported platforms @@ -48,7 +48,7 @@ SQL Server 2017 has the following system requirements for Linux: | **Memory** | Minimum 3.25 GB | | **File System** | **XFS** or **EXT4** (other file systems, such as **BTRFS**, are unsupported) | | **Disk space** | Minimum 1 GB | -| **Processor speed** | Minimum 1.4 Ghz | +| **Processor speed** | Minimum 1.4 GHz | | **Processor cores** | Minimum 2 | | **Processor type** | x64-compatible only | @@ -95,7 +95,7 @@ To upgrade the **mssql-server** package on Linux, use one of the following comma | SLES | `sudo zypper update mssql-server` | | Ubuntu | `sudo apt-get update`
      `sudo apt-get install mssql-server` | -These commands will download the newest package and replace the binaries located under `/opt/mssql/`. The user generated databases and system databases will not be affected by this operation. +These commands download the newest package and replace the binaries located under `/opt/mssql/`. The user generated databases and system databases are not affected by this operation. ## Uninstall @@ -107,7 +107,7 @@ To remove the **mssql-server** package on Linux, use one of the following comman | SLES | `sudo zypper remove mssql-server` | | Ubuntu | `sudo apt-get remove mssql-server` | -Removing the package will not delete the generated database files. If you want to delete the database files use the following command: +Removing the package does not delete the generated database files. If you want to delete the database files, use the following command: ```bash sudo rm -rf /var/opt/mssql/ @@ -118,7 +118,7 @@ sudo rm -rf /var/opt/mssql/ If your Linux machine does not have access to the online repositories used in the [quick starts](#platforms), you can download the package files directly. These packages are located in the Microsoft repository, [https://packages.microsoft.com](https://packages.microsoft.com). > [!TIP] -> If you successfully installed with the steps in the quick starts, you do not need to download or manually install the package(s) below. This is only for the offline scenario. +> If you successfully installed with the steps in the quick starts, you do not need to download or manually install the package(s) below. This section is only for the offline scenario. 1. **Download the database engine package for your platform**. Find package download links in the package details section of the [Release Notes](sql-server-linux-release-notes.md). @@ -135,7 +135,7 @@ If your Linux machine does not have access to the online repositories used in th > [!NOTE] > You can also install the RPM packages (RHEL and SLES) with the `rpm -ivh` command, but the commands in the previous table automatically install dependencies if available from approved repositories. -1. **Resolve missing dependencies**: You might have missing dependencies at this point. If not, you can skip this step. On Ubuntu, if you have access to approved repositories containing those dependencies, the easiest solution is to use the `apt-get -f install` command. This also completes the installation of SQL Server. To manually inspect dependencies, use the following commands: +1. **Resolve missing dependencies**: You might have missing dependencies at this point. If not, you can skip this step. On Ubuntu, if you have access to approved repositories containing those dependencies, the easiest solution is to use the `apt-get -f install` command. This command also completes the installation of SQL Server. To manually inspect dependencies, use the following commands: | Platform | List dependencies command | |-----|-----| diff --git a/docs/linux/sql-server-linux-whats-new.md b/docs/linux/sql-server-linux-whats-new.md index 879d8c6d5b9..580e167e9f0 100644 --- a/docs/linux/sql-server-linux-whats-new.md +++ b/docs/linux/sql-server-linux-whats-new.md @@ -88,7 +88,7 @@ The CTP 1.3 release contains the following improvements and fixes: The CTP 1.2 release contains the following improvements and fixes: -- Support for [SUSE Linux Enterprise Server v12 SP2](sql-server-linux-setup-suse-linux-enterprise-server.md). +- Support for [SUSE Linux Enterprise Server v12 SP2](quickstart-install-connect-suse.md). - Bug fixes for core engine and stability improvements. - Docker image: - Fixed [issue #1](https://github.com/Microsoft/mssql-docker/issues/1) by adding Python to the image. From dc26601a5373c9790def7b0a18ef41b8ddeb12fa Mon Sep 17 00:00:00 2001 From: v-chojas Date: Wed, 12 Jul 2017 11:54:57 -0700 Subject: [PATCH 248/336] Fix the sample code. --- .../connect/odbc/custom-keystore-providers.md | 41 +++++++++++++++---- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/docs/connect/odbc/custom-keystore-providers.md b/docs/connect/odbc/custom-keystore-providers.md index 6666e57ba99..1e4e957a4a5 100644 --- a/docs/connect/odbc/custom-keystore-providers.md +++ b/docs/connect/odbc/custom-keystore-providers.md @@ -230,19 +230,31 @@ Each of these contexts is an opaque value which, while not the same as the corre ## Example -Custom KeyStore Provider Implementation Sample - ### Keystore Provider + +The following code is an example of a minimal keystore provider implementation. + ``` -/* Custom Keystore Provider Example */ +/* Custom Keystore Provider Example + +Windows: compile with cl MyKSP.c /LD /MD /link /out:MyKSP.dll +Linux/Mac: compile with gcc -fshort-wchar -fPIC -o MyKSP.so -shared MyKSP.c + + */ + +#ifdef _WIN32 +#include +#else +#define __stdcall +#endif #include #include -#include +#include "msodbcsql.h" #include #include -int KeystoreInit(CEKEYSTORECONTEXT *ctx, errFunc *onError) { +int __stdcall KeystoreInit(CEKEYSTORECONTEXT *ctx, errFunc *onError) { printf("KSP Init() function called\n"); return 1; } @@ -250,7 +262,7 @@ int KeystoreInit(CEKEYSTORECONTEXT *ctx, errFunc *onError) { static unsigned char *g_encryptKey; static unsigned int g_encryptKeyLen; -int KeystoreWrite(CEKEYSTORECONTEXT *ctx, errFunc *onError, void *data, unsigned int len) { +int __stdcall KeystoreWrite(CEKEYSTORECONTEXT *ctx, errFunc *onError, void *data, unsigned int len) { printf("KSP Write() function called (%d bytes)\n", len); if (len) { if (g_encryptKey) @@ -267,7 +279,7 @@ int KeystoreWrite(CEKEYSTORECONTEXT *ctx, errFunc *onError, void *data, unsigned } // Very simple "encryption" scheme - rotating XOR with the key -int KeystoreDecrypt(CEKEYSTORECONTEXT *ctx, errFunc *onError, const wchar_t *keyPath, const wchar_t *alg, +int __stdcall KeystoreDecrypt(CEKEYSTORECONTEXT *ctx, errFunc *onError, const wchar_t *keyPath, const wchar_t *alg, unsigned char *ecek, unsigned short ecekLen, unsigned char **cekOut, unsigned short *cekLen) { unsigned int i; printf("KSP Decrypt() function called (keypath=%S alg=%S ecekLen=%u)\n", keyPath, alg, ecekLen); @@ -283,7 +295,11 @@ int KeystoreDecrypt(CEKEYSTORECONTEXT *ctx, errFunc *onError, const wchar_t *key onError(ctx, L"Keystore provider not initialised with key"); return 0; } +#ifndef _WIN32 *cekOut = malloc(ecekLen); +#else + *cekOut = LocalAlloc(LMEM_FIXED, ecekLen); +#endif if (!*cekOut) { onError(ctx, L"Memory Allocation Error"); return 0; @@ -298,6 +314,9 @@ int KeystoreDecrypt(CEKEYSTORECONTEXT *ctx, errFunc *onError, const wchar_t *key // structure. However, that does not preclude keystore providers from exporting their own functions, // as illustrated by this example where the encryption is performed via a separate function (with a // different prototype than the one in the KSP interface.) +#ifdef _WIN32 +__declspec(dllexport) +#endif int KeystoreEncrypt(CEKEYSTORECONTEXT *ctx, errFunc *onError, unsigned char *cek, unsigned short cekLen, unsigned char **ecekOut, unsigned short *ecekLen) { @@ -327,6 +346,9 @@ CEKEYSTOREPROVIDER MyCustomKSPName_desc = { 0 }; +#ifdef _WIN32 +__declspec(dllexport) +#endif CEKEYSTOREPROVIDER *CEKeystoreProvider[] = { &MyCustomKSPName_desc, 0 @@ -334,7 +356,10 @@ CEKEYSTOREPROVIDER *CEKeystoreProvider[] = { ``` -### Using the Custom Keystore Provider with ODBC +### ODBC Application + +The following code is a demo application which uses the keystore provider above. When running it, ensure that the provider library is in the same directory as the application binary, and that the connection string specifies (or specifies a DSN which contains) the `ColumnEncryption=Enabled` setting. + ``` /* Example application for demonstration of custom keystore provider usage From c78f3e8462a8241850e3552f98dd08b76b9c6432 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Wed, 12 Jul 2017 14:56:04 -0400 Subject: [PATCH 249/336] Adding redirections for removed files --- .openpublishing.redirection.json | 30 +++++++++++++++++++ ...ver-linux-offline-package-install-intro.md | 4 +++ 2 files changed, 34 insertions(+) create mode 100644 docs/includes/sql-server-linux-offline-package-install-intro.md diff --git a/.openpublishing.redirection.json b/.openpublishing.redirection.json index 0788a271331..850b109abbd 100644 --- a/.openpublishing.redirection.json +++ b/.openpublishing.redirection.json @@ -1,5 +1,35 @@ { "redirections": [ + { + "source_path": "docs/linux/sql-server-linux-get-started-tutorial.md", + "redirect_url": "docs/linux/sql-server-linux-overview.md", + "redirect_document_id": false + }, + { + "source_path": "docs/linux/sql-server-linux-connect-and-query-sqlcmd.md", + "redirect_url": "docs/linux/sql-server-linux-setup-tools.md", + "redirect_document_id": false + }, + { + "source_path": "docs/linux/sql-server-linux-setup-suse-linux-enterprise-server", + "redirect_url": "docs/linux/quickstart-install-connect-suse.md", + "redirect_document_id": false + }, + { + "source_path": "docs/linux/sql-server-linux-setup-red-hat", + "redirect_url": "docs/linux/quickstart-install-connect-red-hat.md", + "redirect_document_id": false + }, + { + "source_path": "docs/linux/sql-server-linux-setup-ubuntu", + "redirect_url": "docs/linux/quickstart-install-connect-ubuntu.md", + "redirect_document_id": false + }, + { + "source_path": "docs/linux/sql-linux-quickstart-connect-docker", + "redirect_url": "docs/linux/quickstart-install-connect-docker.md", + "redirect_document_id": false + }, { "source_path": "docs/relational-databases/relational-databases-new-updated-sql-docs-pr.md", "redirect_url": "/sql/relational-databases/new-updated-relational-databases", diff --git a/docs/includes/sql-server-linux-offline-package-install-intro.md b/docs/includes/sql-server-linux-offline-package-install-intro.md new file mode 100644 index 00000000000..a454eac7d94 --- /dev/null +++ b/docs/includes/sql-server-linux-offline-package-install-intro.md @@ -0,0 +1,4 @@ +If your Linux machine does not have access to the online repositories used in the previous sections, you can download the package files directly. These packages are located in the Microsoft repository, [https://packages.microsoft.com](https://packages.microsoft.com). + +> [!TIP] +> If you successfully installed with the steps in the previous sections, you do not need to download or manually install the package(s) below. This is only for the offline scenario. \ No newline at end of file From 98ef4db3372b89561a3b604414172cfea501c6f2 Mon Sep 17 00:00:00 2001 From: v-chojas Date: Wed, 12 Jul 2017 12:02:22 -0700 Subject: [PATCH 250/336] Update custom-keystore-providers.md --- docs/connect/odbc/custom-keystore-providers.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/connect/odbc/custom-keystore-providers.md b/docs/connect/odbc/custom-keystore-providers.md index 1e4e957a4a5..eee9dbb7e80 100644 --- a/docs/connect/odbc/custom-keystore-providers.md +++ b/docs/connect/odbc/custom-keystore-providers.md @@ -1,7 +1,7 @@ --- title: "Custom Keystore Providers | Microsoft Docs" ms.custom: "" -ms.date: "01/30/2017" +ms.date: "07/12/2017" ms.prod: "sql-non-specified" ms.reviewer: "" ms.suite: "" @@ -88,7 +88,7 @@ typedef struct CEKeystoreProvider { |`EncryptCEK`|CEK encryption function. The driver does not call this function, but it is provided to allow for programmatic access to ECEK creation by key management tools. May be null if not required.| |`Free`|Termination function. May be null if not required.| -With the exception of Free, the functions in this interface all have a pair of parameters, **ctx** and **onError**. The former identifies the context in which the function is called, while the latter is used for reporting errors. See [Contexts](#contexts) and [Error Handling](#error-handling) below for more information. +With the exception of Free, the functions in this interface all have a pair of parameters, **ctx** and **onError**. The former identifies the context in which the function is called, while the latter is used for reporting errors. See [Contexts](#context-association) and [Error Handling](#error-handling) below for more information. ``` int Init(CEKEYSTORECONTEXT *ctx, errFunc onError); From 7c446d97fe45f25520a6effcc952e40f28f3a349 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Wed, 12 Jul 2017 15:39:47 -0400 Subject: [PATCH 251/336] Minor fixes --- docs/linux/sql-server-linux-overview.md | 6 ++-- docs/linux/sql-server-linux-setup.md | 46 ++++++++++++------------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/docs/linux/sql-server-linux-overview.md b/docs/linux/sql-server-linux-overview.md index d93b2a25ef8..d919679db1f 100644 --- a/docs/linux/sql-server-linux-overview.md +++ b/docs/linux/sql-server-linux-overview.md @@ -43,7 +43,7 @@ To get started, install SQL Server on Linux using one of the following quick sta ## Connect -After installation, connect to the running SQL Server instance on your Linux machine. You can do locally or remotely and with a variety of tools and drivers. The quick start tutorials demonstrate how to use the **sqlcmd** command-line tool. Other tools include the following: +After installation, connect to the SQL Server instance on your Linux machine. You can connect locally or remotely and with a variety of tools and drivers. The quick start tutorials demonstrate how to use the [sqlcmd](sql-server-linux-setup-tools.md) command-line tool. Other tools include the following: | Tool | Tutorial | |-----|-----| @@ -53,9 +53,9 @@ After installation, connect to the running SQL Server instance on your Linux mac ## Explore -SQL Server 2017 has the same underlying database engine on all supported platforms, including Linux. So many existing features and capabilities operate the same way on Linux. This area of the documentation exposes some of features from a Linux perspective. It also calls out areas that have unique requirements on Linux. +SQL Server 2017 has the same underlying database engine on all supported platforms, including Linux. So many existing features and capabilities operate the same way on Linux. This area of the documentation exposes some of these features from a Linux perspective. It also calls out areas that have unique requirements on Linux. -If you are already familiar with SQL Server, you'll want to review the [Release notes](sql-server-linux-release-notes.md) for general guidelines and known issues for this release. Then look at [what's new for SQL Server on Linux](sql-server-linux-whats-new.md) as well as [what's new for SQL Server 2017 overall](../sql-server/what-s-new-in-sql-server-2017.md) +If you are already familiar with SQL Server, review the [Release notes](sql-server-linux-release-notes.md) for general guidelines and known issues for this release. Then look at [what's new for SQL Server on Linux](sql-server-linux-whats-new.md) as well as [what's new for SQL Server 2017 overall](../sql-server/what-s-new-in-sql-server-2017.md). ## ![info_tip](./media/general/info_tip.png) Engage with the SQL Server engineering team - [Stack Overflow (tag sql-server) - ask technical questions](http://stackoverflow.com/questions/tagged/sql-server) diff --git a/docs/linux/sql-server-linux-setup.md b/docs/linux/sql-server-linux-setup.md index 5598139ed4f..4d9e89b9d65 100644 --- a/docs/linux/sql-server-linux-setup.md +++ b/docs/linux/sql-server-linux-setup.md @@ -64,28 +64,7 @@ You can install SQL Server on Linux from the command-line. For instructions, see - [Install on Ubuntu](quickstart-install-connect-ubuntu.md) - [Run on Docker](quickstart-install-connect-ubuntu.md) -## Unattended install - -You can perform an unattended installation in the following way: - -- Follow the initial steps in the quick start tutorials to register the repositories and install SQL Server. -- When you run `mssql-conf setup`, set [environment variables](sql-server-linux-configure-environment-variables.md) and use the `-n` (no prompt) option. - -The following example configures the Developer edition of SQL Server with the **MSSQL_PID** environment variable. It also sets the SA user password with the **SA_PASSWORD** environment variable. The `-n` parameter pulls in these values for a simple unattended install: - -```bash -sudo MSSQL_PID=Developer SA_PASSWORD='' /opt/mssql/bin/mssql-conf -n setup -``` - -You can also create a script that performs other actions. For example, you could install other SQL Server packages. - -For a more detailed sample script, see the following examples: - -- [Red Hat unattended installation script](sample-unattended-install-redhat.md) -- [SUSE unattended installation script](sample-unattended-install-suse.md) -- [Ubuntu unattended installation script](sample-unattended-install-ubuntu.md) - -## Upgrade +## Upgrade SQL Server To upgrade the **mssql-server** package on Linux, use one of the following commands based on your platform: @@ -97,7 +76,7 @@ To upgrade the **mssql-server** package on Linux, use one of the following comma These commands download the newest package and replace the binaries located under `/opt/mssql/`. The user generated databases and system databases are not affected by this operation. -## Uninstall +## Uninstall SQL Server To remove the **mssql-server** package on Linux, use one of the following commands based on your platform: @@ -113,6 +92,27 @@ Removing the package does not delete the generated database files. If you want t sudo rm -rf /var/opt/mssql/ ``` +## Unattended install + +You can perform an unattended installation in the following way: + +- Follow the initial steps in the quick start tutorials to register the repositories and install SQL Server. +- When you run `mssql-conf setup`, set [environment variables](sql-server-linux-configure-environment-variables.md) and use the `-n` (no prompt) option. + +The following example configures the Developer edition of SQL Server with the **MSSQL_PID** environment variable. It also sets the SA user password with the **SA_PASSWORD** environment variable. The `-n` parameter pulls in these values for a simple unattended install: + +```bash +sudo MSSQL_PID=Developer SA_PASSWORD='' /opt/mssql/bin/mssql-conf -n setup +``` + +You can also create a script that performs other actions. For example, you could install other SQL Server packages. + +For a more detailed sample script, see the following examples: + +- [Red Hat unattended installation script](sample-unattended-install-redhat.md) +- [SUSE unattended installation script](sample-unattended-install-suse.md) +- [Ubuntu unattended installation script](sample-unattended-install-ubuntu.md) + ## Offline install If your Linux machine does not have access to the online repositories used in the [quick starts](#platforms), you can download the package files directly. These packages are located in the Microsoft repository, [https://packages.microsoft.com](https://packages.microsoft.com). From bae4471dbc4d9141c483676df1206f57db700316 Mon Sep 17 00:00:00 2001 From: v-chojas Date: Wed, 12 Jul 2017 14:42:42 -0700 Subject: [PATCH 252/336] Update custom-keystore-providers.md --- docs/connect/odbc/custom-keystore-providers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/connect/odbc/custom-keystore-providers.md b/docs/connect/odbc/custom-keystore-providers.md index eee9dbb7e80..0631fc56591 100644 --- a/docs/connect/odbc/custom-keystore-providers.md +++ b/docs/connect/odbc/custom-keystore-providers.md @@ -125,7 +125,7 @@ Placeholder name for a provider-defined communication function. The driver calls |`ctx`|[Input] Operation context.| |`onError`|[Input] Error-reporting function.| |`data`|[Input] Pointer to a buffer containing the data for the provider to read. This corresponds to the data field of the CEKEYSTOREDATA structure. The provider must not read more than len bytes from this buffer.| -|`len`|[In] The number of bytes available in data. This corresponds to the dataSize field of the CEKEYSTOREDATA structure.| +|`len`|[Input] The number of bytes available in data. This corresponds to the dataSize field of the CEKEYSTOREDATA structure.| |`Return Value`|Return nonzero to indicate success, or zero to indicate failure.| ``` From 4b22953a0f7a06ff329c526ef9cee007d9b095ea Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Wed, 12 Jul 2017 18:16:38 -0400 Subject: [PATCH 253/336] Fixed redirections and added better cross linking --- .openpublishing.redirection.json | 20 +++++++++--------- .../quickstart-install-connect-docker.md | 2 +- .../quickstart-install-connect-red-hat.md | 3 +++ docs/linux/quickstart-install-connect-suse.md | 3 +++ .../quickstart-install-connect-ubuntu.md | 5 ++++- docs/linux/sql-server-linux-setup-tools.md | 9 ++++++-- docs/linux/sql-server-linux-setup.md | 21 +++++++++++-------- 7 files changed, 40 insertions(+), 23 deletions(-) diff --git a/.openpublishing.redirection.json b/.openpublishing.redirection.json index 3e2617b0c9c..d5200029cc6 100644 --- a/.openpublishing.redirection.json +++ b/.openpublishing.redirection.json @@ -2,32 +2,32 @@ "redirections": [ { "source_path": "docs/linux/sql-server-linux-get-started-tutorial.md", - "redirect_url": "docs/linux/sql-server-linux-overview.md", + "redirect_url": "/sql/linux/sql-server-linux-overview", "redirect_document_id": false }, { "source_path": "docs/linux/sql-server-linux-connect-and-query-sqlcmd.md", - "redirect_url": "docs/linux/sql-server-linux-setup-tools.md", + "redirect_url": "/sql/linux/sql-server-linux-setup-tools", "redirect_document_id": false }, { - "source_path": "docs/linux/sql-server-linux-setup-suse-linux-enterprise-server", - "redirect_url": "docs/linux/quickstart-install-connect-suse.md", + "source_path": "docs/linux/sql-server-linux-setup-suse-linux-enterprise-server.md", + "redirect_url": "/sql/linux/quickstart-install-connect-suse", "redirect_document_id": false }, { - "source_path": "docs/linux/sql-server-linux-setup-red-hat", - "redirect_url": "docs/linux/quickstart-install-connect-red-hat.md", + "source_path": "docs/linux/sql-server-linux-setup-red-hat.md", + "redirect_url": "/sql/linux/quickstart-install-connect-red-hat", "redirect_document_id": false }, { - "source_path": "docs/linux/sql-server-linux-setup-ubuntu", - "redirect_url": "docs/linux/quickstart-install-connect-ubuntu.md", + "source_path": "docs/linux/sql-server-linux-setup-ubuntu.md", + "redirect_url": "/sql/linux/quickstart-install-connect-ubuntu", "redirect_document_id": false }, { - "source_path": "docs/linux/sql-linux-quickstart-connect-docker", - "redirect_url": "docs/linux/quickstart-install-connect-docker.md", + "source_path": "docs/linux/sql-linux-quickstart-connect-docker.md", + "redirect_url": "/sql/linux/quickstart-install-connect-docker", "redirect_document_id": false }, { diff --git a/docs/linux/quickstart-install-connect-docker.md b/docs/linux/quickstart-install-connect-docker.md index 5826f304b47..5a06a15c0a5 100644 --- a/docs/linux/quickstart-install-connect-docker.md +++ b/docs/linux/quickstart-install-connect-docker.md @@ -9,7 +9,7 @@ ms.topic: article ms.prod: sql-linux ms.technology: database-engine --- -# Get started with SQL Server 2017 on Docker +# Run the SQL Server 2017 container image with Docker In this quick start tutorial, you use Docker to pull and run the SQL Server 2017 RC1 container image, [mssql-server-linux](https://hub.docker.com/r/microsoft/mssql-server-linux/). Then connect with **sqlcmd** to create your first database and run queries. diff --git a/docs/linux/quickstart-install-connect-red-hat.md b/docs/linux/quickstart-install-connect-red-hat.md index e560e07ce51..a3504be2b3c 100644 --- a/docs/linux/quickstart-install-connect-red-hat.md +++ b/docs/linux/quickstart-install-connect-red-hat.md @@ -40,6 +40,9 @@ In this quick start tutorial, you first install SQL Server 2017 RC1 on Red Hat E To configure SQL Server on RHEL, run the following commands in a terminal to install the **mssql-server** package: +> [!TIP] +> These commands involve user input and assume a connection to the internet. If you are interested in the unattended or offline installation procedures, see [Installation guidance for SQL Server on Linux](sql-server-linux-setup.md). + 1. Enter superuser mode. ```bash diff --git a/docs/linux/quickstart-install-connect-suse.md b/docs/linux/quickstart-install-connect-suse.md index 2c79ac2f00b..39955ef51fd 100644 --- a/docs/linux/quickstart-install-connect-suse.md +++ b/docs/linux/quickstart-install-connect-suse.md @@ -42,6 +42,9 @@ In this quick start tutorial, you first install SQL Server 2017 RC1 on SUSE Linu To configure SQL Server on SLES, run the following commands in a terminal to install the **mssql-server** package: +> [!TIP] +> These commands involve user input and assume a connection to the internet. If you are interested in the unattended or offline installation procedures, see [Installation guidance for SQL Server on Linux](sql-server-linux-setup.md). + 1. Download the Microsoft SQL Server SLES repository configuration file: ```bash diff --git a/docs/linux/quickstart-install-connect-ubuntu.md b/docs/linux/quickstart-install-connect-ubuntu.md index ae52edac1fd..220ce13db95 100644 --- a/docs/linux/quickstart-install-connect-ubuntu.md +++ b/docs/linux/quickstart-install-connect-ubuntu.md @@ -24,7 +24,10 @@ In this quick start tutorial, you first install SQL Server 2017 RC1 on Ubuntu 16 ## Install SQL Server -To configure SQL Server on Ubuntu, run the following commands in a terminal to install the **mssql-server** package: +To configure SQL Server on Ubuntu, run the following commands in a terminal to install the **mssql-server** package. + +> [!TIP] +> These commands involve user input and assume a connection to the internet. If you are interested in the unattended or offline installation procedures, see [Installation guidance for SQL Server on Linux](sql-server-linux-setup.md). 1. Import the public repository GPG keys: diff --git a/docs/linux/sql-server-linux-setup-tools.md b/docs/linux/sql-server-linux-setup-tools.md index 41938e10aa8..2e499aeb5f8 100644 --- a/docs/linux/sql-server-linux-setup-tools.md +++ b/docs/linux/sql-server-linux-setup-tools.md @@ -39,6 +39,9 @@ Install the tools for your platform: - [macOS](#macos) - [Docker](#docker) +> [!TIP] +> This topic describes how to install the command-line tools. If you are looking for examples of how to use **sqlcmd** or **bcp**, see the [links](#next-steps) at the end of this topic. + ## Install tools on RHEL Use the following steps to install the **mssql-tools** on Red Hat Enterprise Linux. @@ -261,9 +264,11 @@ To manually install these packages, use the following steps: ## Next steps -After installation, connect to the SQL Server instance to create and manage databases. For examples, see the following quick start tutorials: +For an example of how to use **sqlcmd** to create a database, see one of the following quick start tutorials: - [Install on Red Hat Enterprise Linux](quickstart-install-connect-red-hat.md) - [Install on SUSE Linux Enterprise Server](quickstart-install-connect-suse.md) - [Install on Ubuntu](quickstart-install-connect-ubuntu.md) -- [Run on Docker](quickstart-install-connect-ubuntu.md) \ No newline at end of file +- [Run on Docker](quickstart-install-connect-ubuntu.md) + +For an example of how to use **bcp** to bulk import and export data, see [Bulk copy data to SQL Server on Linux](sql-server-linux-migrate-bcp.md). \ No newline at end of file diff --git a/docs/linux/sql-server-linux-setup.md b/docs/linux/sql-server-linux-setup.md index 4d9e89b9d65..83653081776 100644 --- a/docs/linux/sql-server-linux-setup.md +++ b/docs/linux/sql-server-linux-setup.md @@ -1,8 +1,8 @@ --- # required metadata -title: Install SQL Server on Linux | Microsoft Docs -description: SQL Server 2017 RC1 now runs on Linux. This topic provides an overview on how to install SQL Server on Linux with links to the guides for specific platforms. +title: Install SQL Server 2017 on Linux | Microsoft Docs +description: Install, update, and uninstall SQL Server on Linux. This topic covers online, offline, and unattended scenarios. author: rothja ms.author: jroth manager: jhubbard @@ -24,13 +24,16 @@ ms.assetid: 565156c3-7256-4e63-aaf0-884522ef2a52 # ms.custom: "" --- -# Install SQL Server on Linux +# Installation guidance for SQL Server on Linux -SQL Server 2017 RC1 is supported on Red Hat Enterprise Linux (RHEL), SUSE Linux Enterprise Server (SLES), and Ubuntu. It is also available as a Docker image, which can run on Docker Engine on Linux or Docker for Windows/Mac. The topics in this section provide tutorials and general guidance for installing SQL Server 2017 RC1 on Linux. +This topic explains how to install, update, and uninstall SQL Server 2017 on Linux. SQL Server 2017 RC1 is supported on Red Hat Enterprise Linux (RHEL), SUSE Linux Enterprise Server (SLES), and Ubuntu. It is also available as a Docker image, which can run on Docker Engine on Linux or Docker for Windows/Mac. + +> [TIP] +> To get started quickly, jump to one of the quick start tutorials for [RHEL](quickstart-install-connect-red-hat.md), [SLES](quickstart-install-connect-suse.md), [Ubuntu](quickstart-install-connect-ubuntu.md), or [Docker](quickstart-install-connect-docker.md). ## Supported platforms -SQL Server 2017 RC1 is supported on the following platforms: +SQL Server 2017 is supported on the following Linux platforms: | Platform | Supported version(s) | Get |-----|-----|----- @@ -45,11 +48,11 @@ SQL Server 2017 has the following system requirements for Linux: ||| |-----|-----| -| **Memory** | Minimum 3.25 GB | +| **Memory** | 3.25 GB | | **File System** | **XFS** or **EXT4** (other file systems, such as **BTRFS**, are unsupported) | -| **Disk space** | Minimum 1 GB | -| **Processor speed** | Minimum 1.4 GHz | -| **Processor cores** | Minimum 2 | +| **Disk space** | 6 GB | +| **Processor speed** | 2 GHz | +| **Processor cores** | 2 cores | | **Processor type** | x64-compatible only | > [!NOTE] From 35f8abaeac4b580b0bbe6995fe2e1a5309bd5b25 Mon Sep 17 00:00:00 2001 From: v-chojas Date: Wed, 12 Jul 2017 15:22:30 -0700 Subject: [PATCH 254/336] Update AE doc content. --- ...g-always-encrypted-with-the-odbc-driver.md | 217 +++++++++--------- 1 file changed, 111 insertions(+), 106 deletions(-) diff --git a/docs/connect/odbc/using-always-encrypted-with-the-odbc-driver.md b/docs/connect/odbc/using-always-encrypted-with-the-odbc-driver.md index 97b77897296..314a88e10d3 100644 --- a/docs/connect/odbc/using-always-encrypted-with-the-odbc-driver.md +++ b/docs/connect/odbc/using-always-encrypted-with-the-odbc-driver.md @@ -1,7 +1,7 @@ --- title: "Using Always Encrypted with the ODBC Driver 13.1 for SQL Server | Microsoft Docs" ms.custom: "" -ms.date: "01/19/2017" +ms.date: "07/12/2017" ms.prod: "sql-non-specified" ms.reviewer: "" ms.suite: "" @@ -24,46 +24,45 @@ Always Encrypted allows client applications to encrypt sensitive data and never ### Prerequisites -Configure Always Encrypted in your database. This involves provisioning Always Encrypted keys and setting up encryption for selected database columns. If you do not already have a database with Always Encrypted configured, follow the directions in [Getting Started with Always Encrypted](https://msdn.microsoft.com/library/mt163865.aspx#Anchor_5). +Configure Always Encrypted in your database. This involves provisioning Always Encrypted keys and setting up encryption for selected database columns. If you do not already have a database with Always Encrypted configured, follow the directions in [Getting Started with Always Encrypted](../../relational-databases/security/encryption/always-encrypted-database-engine.md#getting-started-with-always-encrypted). In particular, your database should contain the metadata definitions for a Column Master Key (CMK), a Column Encryption Key (CEK), and a table containing one or more columns encrypted using that CEK. -### Enabling Always Encrypted for Application Queries +### Enabling Always Encrypted in an ODBC Application -The easiest way to enable the encryption of parameters, and the decryption of query results targeting the encrypted columns, is by setting the value of the `ColumnEncryption` connection string keyword to **`Enabled`**. +The easiest way to enable both parameter encryption and resultset encrypted column decryption is by setting the value of the `ColumnEncryption` connection string keyword to **Enabled**. The following is an example of a connection string which enables Always Encrypted: -The following is an example of a connection string that enables Always Encrypted: ``` SQLWCHAR *connString = L"Driver={ODBC Driver 13 for SQL Server};Server={myServer};Trusted_Connection=yes;ColumnEncryption=Enabled;"; ``` -The following is an equivalent example using the SQLSetConnectAttr function to set the pre-connection attribute programmatically. Setting it this way overrides the value set in the connection string: +Always Encrypted may also be enabled in the DSN configuration, using the same key and value (which will be overridden by the connection string setting, if present), or programmatically with the `SQL_COPT_SS_COLUMN_ENCRYPTION` pre-connection attribute. Setting it this way overrides the value set in the connection string or DSN: ``` SQLSetConnectAttr(hdbc, SQL_COPT_SS_COLUMN_ENCRYPTION, (SQLPOINTER)SQL_COLUMN_ENCRYPTION_ENABLE, 0); ``` -Always Encrypted can also be enabled for individual queries. See the **Controlling the Performance Impact of Always Encrypted** section below for more information. +Once enabled for the connection, the behaviour of Always Encrypted may be adjusted for individual queries. See [Controlling the Performance Impact of Always Encrypted](#controlling-performance-impact-always-encrypted) below for more information. -Note that enabling Always Encrypted is not sufficient for encryption or decryption to succeed. You also need to make sure that: +Note that enabling Always Encrypted is not sufficient for encryption or decryption to succeed; you also need to make sure that: -- The application has the *VIEW ANY COLUMN MASTER KEY DEFINITION* and *VIEW ANY COLUMN ENCRYPTION KEY DEFINITION* database permissions, required to access the metadata about Always Encrypted keys in the database. For details, see [Permissions section in Always Encrypted (Database Engine)](https://msdn.microsoft.com/library/mt163865.aspx#Anchor_7). +- The application has the *VIEW ANY COLUMN MASTER KEY DEFINITION* and *VIEW ANY COLUMN ENCRYPTION KEY DEFINITION* database permissions, required to access the metadata about Always Encrypted keys in the database. For details, see [Database Permissions](../../relational-databases/security/encryption/always-encrypted-database-engine.md#database-permissions). -- The application can access the column master key that protects the column encryption keys encrypting the queried database columns. This is dependent on the keystore provider which stores the CMK (see below). +- The application can access the CMK which protects the CEKs for the queried encrypted columns. This is dependent on the keystore provider which stores the CMK. See [Working with Column Master Key Stores](#working-with-column-master-key-stores) for more information. -#### Retrieving and Modifying Data in Encrypted Columns +### Retrieving and Modifying Data in Encrypted Columns -Once you enable Always Encrypted for application queries, you can use standard ODBC APIs (see [ODBC sample code](https://code.msdn.microsoft.com/windowsapps/ODBC-sample-191624ae/sourcecode?fileId=51137&pathId=1980325953) or [ODBC Programmer's Reference](https://msdn.microsoft.com/library/ms714177(v=vs.85).aspx)), to retrieve or modify data in encrypted database columns. Assuming your application has the required database permissions and can access the column master key, the ODBC Driver 13.1 for SQL Server will encrypt any query parameters that target encrypted columns, and will decrypt data retrieved from encrypted columns, returning plaintext values of ODBC types corresponding to the SQL Server data types set for the columns in the database schema. -If Always Encrypted is not enabled, queries with parameters that target encrypted columns will fail. Queries can still retrieve data from encrypted columns, as long as the query has no parameters targeting encrypted columns. However, the driver will not attempt to decrypt any values retrieved from encrypted columns and the application will receive binary encrypted data (as byte arrays). +Once you enable Always Encrypted on a connection, you can use standard ODBC APIs (see [ODBC sample code](https://code.msdn.microsoft.com/windowsapps/ODBC-sample-191624ae/sourcecode?fileId=51137&pathId=1980325953) or [ODBC Programmer's Reference](https://msdn.microsoft.com/library/ms714177(v=vs.85).aspx)) to retrieve or modify data in encrypted database columns. Assuming your application has the required database permissions and can access the column master key, the driver will encrypt any query parameters which target encrypted columns and decrypt data retrieved from encrypted columns, behaving transparently to the application as if the columns were not encrypted. + +If Always Encrypted is not enabled, queries with parameters which target encrypted columns will fail. Data can still be retrieved from encrypted columns, as long as the query has no parameters targeting encrypted columns. However, the driver will not attempt any decryption and the application will receive the binary encrypted data (as byte arrays). The table below summarizes the behavior of queries, depending on whether Always Encrypted is enabled or not: |Query characteristic | Always Encrypted is enabled and application can access the keys and key metadata|Always Encrypted is enabled and application cannot access the keys or key metadata | Always Encrypted is disabled| |:---|:---|:---|:---| -| Queries with parameters targeting encrypted columns. | Parameter values are transparently encrypted. | Error | Error| -| Queries retrieving data from encrypted columns, without parameters targeting encrypted columns.| Results from encrypted columns are transparently decrypted. The application receives plaintext values of the ODBC datatypes corresponding to the SQL Server types configured for the encrypted columns. | Error | Results from encrypted columns are not decrypted. The application receives encrypted values as byte arrays. +| Parameters targeting encrypted columns. | Parameter values are transparently encrypted. | Error | Error| +| Retrieving data from encrypted columns, without parameters targeting encrypted columns.| Results from encrypted columns are transparently decrypted. The application receives plaintext column values. | Error | Results from encrypted columns are not decrypted. The application receives encrypted values as byte arrays. The following examples illustrate retrieving and modifying data in encrypted columns. The examples assume a table with the following schema. Note that the SSN and BirthDate columns are encrypted. - ``` CREATE TABLE [dbo].[Patients]( [PatientId] [int] IDENTITY(1,1), @@ -81,15 +80,15 @@ CREATE TABLE [dbo].[Patients]( GO ``` -#### Inserting Data Example +#### Data Insertion Example This example inserts a row into the Patients table. Note the following: -- There is nothing specific to encryption in the sample code. The ODBC Driver 13.1 for SQL Server automatically detects and encrypts the values of the SSN and date parameters that target encrypted columns. This makes encryption transparent to the application. +- There is nothing specific to encryption in the sample code. The driver automatically detects and encrypts the values of the SSN and date parameters, which target encrypted columns. This makes encryption transparent to the application. -- The values inserted into database columns, including the encrypted columns, are passed as bound parameters (See [SQLBindParameter Function](https://msdn.microsoft.com/library/ms710963(v=vs.85).aspx)). While using parameters is optional when sending values to non-encrypted columns (although it is highly recommended because it helps prevent SQL injection), it is required for values targeting encrypted columns. If the values inserted in the SSN or BirthDate columns were passed as literals embedded in the query statement, the query would fail because the driver would not be able to determine the values in the target encrypted columns, so it would not encrypt the values. As a result, the server would reject them as incompatible with the encrypted columns. +- The values inserted into database columns, including the encrypted columns, are passed as bound parameters (See [SQLBindParameter Function](https://msdn.microsoft.com/library/ms710963(v=vs.85).aspx)). While using parameters is optional when sending values to non-encrypted columns (although it is highly recommended because it helps prevent SQL injection), it is required for values targeting encrypted columns. If the values inserted in the SSN or BirthDate columns were passed as literals embedded in the query statement, the query would fail because the driver does not attempt to encrypt or otherwise process literals in queries. As a result, the server would reject them as incompatible with the encrypted columns. -- The data type of the parameter targeting the SSN column is set to an ANSI (non-Unicode) string, which maps to the char/varchar SQL Server data type (`rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 11, 0, (SQLPOINTER)SSN, 0, &cbSSN);`). If the type of the parameter was set to a Unicode string, which maps to nchar/nvarchar, the query would fail, as Always Encrypted does not support conversions from encrypted nchar/nvarchar values to encrypted char/varchar values. See [ODBC Programmer's Reference -- Appendix D: Data Types](https://msdn.microsoft.com/library/ms713607.aspx) for information about the data type mappings. +- The SQL type of the parameter inserted into the SSN column is set to SQL_CHAR, which maps to the **char** SQL Server data type (`rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 11, 0, (SQLPOINTER)SSN, 0, &cbSSN);`). If the type of the parameter was set to SQL_WCHAR, which maps to **nchar**, the query would fail, as Always Encrypted does not support server-side conversions from encrypted nchar values to encrypted char values. See [ODBC Programmer's Reference -- Appendix D: Data Types](https://msdn.microsoft.com/library/ms713607.aspx) for information about the data type mappings. ``` SQL_DATE_STRUCT date; @@ -128,16 +127,16 @@ This example inserts a row into the Patients table. Note the following: rc = SQLExecute(hstmt); ``` -#### Retrieving Plaintext Data Example +#### Plaintext Data Retrieval Example The following example demonstrates filtering data based on encrypted values, and retrieving plaintext data from encrypted columns. Note the following: -- The value used in the WHERE clause to filter on the SSN column needs to be passed using SQLBindParameter, so that the driver can transparently encrypt it before sending it to the database. +- The value used in the WHERE clause to filter on the SSN column needs to be passed using SQLBindParameter, so that the driver can transparently encrypt it before sending it to the server. -- All values printed by the program will be in plaintext, as the driver will transparently decrypt the data retrieved from the SSN and BirthDate columns. +- All values printed by the program will be in plaintext, since the driver will transparently decrypt the data retrieved from the SSN and BirthDate columns. > [!NOTE] -> Queries can perform equality comparisons on columns if they are encrypted using deterministic encryption. For more information, see the *Selecting Deterministic or Randomized encryption* section of [Always Encrypted (Database Engine)](https://msdn.microsoft.com/library/mt163865.aspx). +> Queries can perform equality comparisons on encrypted columns only if the encryption is deterministic. For more information, see [Selecting Deterministic or Randomized encryption](../../relational-databases/security/encryption/always-encrypted-database-engine.md#selecting--deterministic-or-randomized-encryption). ``` SQLCHAR SSN[12]; @@ -179,11 +178,11 @@ while (SQL_SUCCEEDED(SQLFetch(hstmt))) } ``` -#### Retrieving Encrypted Data Example +#### Ciphertext Data Retrieval Example If Always Encrypted is not enabled, a query can still retrieve data from encrypted columns, as long as the query has no parameters targeting encrypted columns. -The following examples illustrates retrieving binary encrypted data from encrypted columns. Note the following: +The following example illustrates retrieving binary encrypted data from encrypted columns. Note the following: - As Always Encrypted is not enabled in the connection string, the query will return encrypted values of SSN and BirthDate as byte arrays (the program converts the values to strings). - A query retrieving data from encrypted columns with Always Encrypted disabled can have parameters, as long as none of the parameters target an encrypted column. The above query filters by LastName, which is not encrypted in the database. If the query filtered by SSN or BirthDate, the query would fail. @@ -235,19 +234,19 @@ This section describes common categories of errors when querying encrypted colum ##### Unsupported data type conversion errors -Always Encrypted supports few conversions for encrypted data types. See [Always Encrypted (Database Engine)](https://msdn.microsoft.com/library/mt163865.aspx) for the detailed list of supported type conversions. To avoid data type conversion errors, make sure that: +Always Encrypted supports few conversions for encrypted data types. See [Always Encrypted (Database Engine)](https://msdn.microsoft.com/library/mt163865.aspx) for the detailed list of supported type conversions. To avoid data type conversion errors, make sure that you observe the following points when using SQLBindParameter with parameters targeting encrypted columns: -- You set the types of parameters targeting encrypted columns, so that the SQL Server data type of the parameter is either exactly the same as the type of the target column, or a conversion of the SQL Server data type of the parameter to the target type of the column is supported. +- The SQL type of the parameter is either exactly the same as the type of the targeted column, or the conversion from the SQL type to the type of the column is supported. - The precision and scale of parameters targeting columns of the `decimal` and `numeric` SQL Server data types is the same as the precision and scale configured for the target column. -- The precision of parameters targeting columns of `datetime2`, `datetimeoffset`, or `time` SQL Server data types is not greater than the precision for the target column, in queries that modify values of the target column. +- The precision of parameters targeting columns of `datetime2`, `datetimeoffset`, or `time` SQL Server data types is not greater than the precision for the target column, in queries that modify the target column. ##### Errors due to passing plaintext instead of encrypted values -Any value that targets an encrypted column needs to be encrypted inside the application. An attempt to insert/modify or to filter by a plaintext value on an encrypted column will result in an error. To prevent such errors, make sure that: +Any value that targets an encrypted column needs to be encrypted before being sent to the server. An attempt to insert, modify, or filter by a plaintext value on an encrypted column will result in an error. To prevent such errors, make sure that: -- Always Encrypted is enabled for application queries targeting encrypted columns (in the connection string, by setting the `SQL_COPT_SS_COLUMN_ENCRYPTION` connection attribute for a specific connection, or the `SQL_SOPT_SS_COLUMN_ENCRYPTION` statement attribute for a specific statement). +- Always Encrypted is enabled (in the DSN, the connection string, before connecting by setting the `SQL_COPT_SS_COLUMN_ENCRYPTION` connection attribute for a specific connection, or the `SQL_SOPT_SS_COLUMN_ENCRYPTION` statement attribute for a specific statement). - You use SQLBindParameter to send data targeting encrypted columns. The example below shows a query that incorrectly filters by a literal/constant on an encrypted column (SSN), instead of passing the literal as an argument to SQLBindParameter. @@ -259,12 +258,13 @@ string queryText = "SELECT [SSN], [FirstName], [LastName], [BirthDate] FROM [dbo #### SQLSetPos -The `SQLSetPos` API allows an application to update rows in a resultset using buffers that were bound with SQLBindCol and into which row data was previously fetched. Due to the asymmetric padding behavior of encrypted fixed-length types, it is possible to unexpectedly alter the data of these columns while performing updates on other columns in the row. With AE, fixed length character values will be padded if the value is smaller than the buffer size. To read more about padding for fixed length types with AE, see [Always Encrypted (Database Engine)](https://msdn.microsoft.com/library/mt163865.aspx) and [SQLSetPos Function reference](https://msdn.microsoft.com/library/ms713507(v=vs.85).aspx). +The `SQLSetPos` API allows an application to update rows in a resultset using buffers that were bound with SQLBindCol and into which row data was previously fetched. Due to the asymmetric padding behavior of encrypted fixed-length types, it is possible to unexpectedly alter the data of these columns while performing updates on other columns in the row. With AE, fixed length character values will be padded if the value is smaller than the buffer size. -To mitigate this behavior, use the `SQL_COLUMN_IGNORE` flag to ignore columns that will not be updated as part of `SQLBulkOperations` and when using `SQLSetPos` for cursor based updates. All columns that are not being directly modified by the application should be ignored, both for performance and to avoid truncation of columns that are bound to a buffer *smaller* than their actual (DB) size. +To mitigate this behavior, use the `SQL_COLUMN_IGNORE` flag to ignore columns that will not be updated as part of `SQLBulkOperations` and when using `SQLSetPos` for cursor based updates. All columns that are not being directly modified by the application should be ignored, both for performance and to avoid truncation of columns that are bound to a buffer *smaller* than their actual (DB) size. For more information, see [SQLSetPos Function reference](https://msdn.microsoft.com/library/ms713507(v=vs.85).aspx). #### SQLMoreResults & SQLDescribeCol -Application programs may call [SQLDescribeCol](https://msdn.microsoft.com/library/ms716289(v=vs.85).aspx) to return metadata about columns in prepared statements. When Always Encrypted is enabled, calling `SQLMoreResults` *before* calling `SQLDescribeCol` causes `sp_describe_first_result_set` to be called, which does not correctly return the plaintext metadata for encrypted columns. To avoid this issue, call `SQLDescribeCol` on prepared statements *before* calling `SQLMoreResults`. + +Application programs may call [SQLDescribeCol](https://msdn.microsoft.com/library/ms716289(v=vs.85).aspx) to return metadata about columns in prepared statements. When Always Encrypted is enabled, calling `SQLMoreResults` *before* calling `SQLDescribeCol` causes [sp_describe_first_result_set](../../relational-databases/system-stored-procedures/sp-describe-first-result-set-transact-sql.md) to be called, which does not correctly return the plaintext metadata for encrypted columns. To avoid this issue, call `SQLDescribeCol` on prepared statements *before* calling `SQLMoreResults`. ## Controlling the Performance Impact of Always Encrypted @@ -278,11 +278,11 @@ This section describes the built-in performance optimizations in the ODBC Driver ### Controlling Round-trips to Retrieve Metadata for Query Parameters -If Always Encrypted is enabled for a connection, the ODBC Driver 13.1 for SQL Server will, by default, call [sys.sp_describe_parameter_encryption](https://msdn.microsoft.com/library/mt631693.aspx) for each parameterized query, passing the query statement (without any parameter values) to SQL Server. `sys.sp_describe_parameter_encryption` analyzes the query statement to find out if any parameters need to be encrypted, and if so, returns the encryption-related information for each parameter to allow the driver to encrypt them. The above behavior ensures a high-level of transparency to the client application: The application (and the application developer) does not need to be aware of which queries access encrypted columns, as long as the values targeting encrypted columns are passed to the driver in parameters. +If Always Encrypted is enabled for a connection, the ODBC Driver 13.1 for SQL Server will, by default, call [sys.sp_describe_parameter_encryption](https://msdn.microsoft.com/library/mt631693.aspx) for each parameterized query, passing the query statement (without any parameter values) to SQL Server. This stored procedure analyzes the query statement to find out if any parameters need to be encrypted, and if so, returns the encryption-related information for each parameter to allow the driver to encrypt them. The above behavior ensures a high-level of transparency to the client application: The application (and the application developer) does not need to be aware of which queries access encrypted columns, as long as the values targeting encrypted columns are passed to the driver in parameters. ### Per-Statement Always Encrypted Behaviour -To control the performance impact of retrieving encryption metadata for parameterized queries, you can alter the Always Encrypted behavior for individual queries after setting it up for the connection. This way, you can ensure that `sys.sp_describe_parameter_encryption` is invoked only for queries that you know have parameters targeting encrypted columns. Note, however, that by doing so, you reduce transparency of encryption: if you change the encryption properties of your database columns, you may need to change the code of your application to align it with the schema changes. +To control the performance impact of retrieving encryption metadata for parameterized queries, you can alter the Always Encrypted behavior for individual queries if it has been enabled on the connection. This way, you can ensure that `sys.sp_describe_parameter_encryption` is invoked only for queries that you know have parameters targeting encrypted columns. Note, however, that by doing so, you reduce transparency of encryption: if you encrypt additional columns in your database, you may need to change the code of your application to align it with the schema changes. To control the Always Encrypted behavior of a statement, call SQLSetStmtAttr to set the `SQL_SOPT_SS_COLUMN_ENCRYPTION` statement attribute to one of the following values: @@ -292,13 +292,15 @@ To control the Always Encrypted behavior of a statement, call SQLSetStmtAttr to |`SQL_CE_RESULTSETONLY` (1)|Decryption Only. Resultsets and return values are decrypted, and parameters are not encrypted| |`SQL_CE_ENABLED` (3) | Always Encrypted is enabled and used for both parameters and results| +New statement handles created from a connection with Always Encrypted enabled default to SQL_CE_ENABLED. Those created from a connection with it disabled default to SQL_CE_DISABLED (and it is not possible to enable Always Encrypted on them.) + If most of the queries of a client application access encrypted columns, the following is recommended: - - Set the `ColumnEncryption` connection string keyword to `Enabled`. +- Set the `ColumnEncryption` connection string keyword to `Enabled`. - - Set the `SQL_SOPT_SS_COLUMN_ENCRYPTION` attribute to `SQL_CE_DISABLED` on statements which do not access any encrypted columns. This will disable both calling `sys.sp_describe_parameter_encryption` as well as attempts to decrypt any values in the result set. +- Set the `SQL_SOPT_SS_COLUMN_ENCRYPTION` attribute to `SQL_CE_DISABLED` on statements which do not access any encrypted columns. This will disable both calling `sys.sp_describe_parameter_encryption` as well as attempts to decrypt any values in the result set. - - Set the `SQL_SOPT_SS_COLUMN_ENCRYPTION` attribute to `SQL_CE_RESULTSETONLY` on statements which do not have any parameters requiring encryption, but retrieve data from encrypted columns. This will disable calling `sys.sp_describe_parameter_encryption` and parameter encryption. Queries will still be able to decrypt the results from encrypted columns. +- Set the `SQL_SOPT_SS_COLUMN_ENCRYPTION` attribute to `SQL_CE_RESULTSETONLY` on statements which do not have any parameters requiring encryption, but retrieve data from encrypted columns. This will disable calling `sys.sp_describe_parameter_encryption` and parameter encryption. Results containing encrypted columns will continue to be decrypted. ## Always Encrypted Security Settings @@ -316,26 +318,26 @@ If SQL Server informs the driver that the parameter does not need to be encrypte ### Column Encryption Key Caching -To reduce the number of calls to a column master key store to decrypt column encryption keys, the driver caches the plaintext column encryption keys in memory. After receiving the encrypted column encryption key value from database metadata, the driver first tries to find the plaintext column encryption key corresponding to the encrypted key value in the cache. The driver calls the key store containing the column master key only if it cannot find the encrypted column encryption key value in the cache. +To reduce the number of calls to a column master key store to decrypt column encryption keys, the driver caches the plaintext CEKs in memory. After receiving the ECEK from database metadata, the driver first tries to find the plaintext CEK corresponding to the encrypted key value in the cache. The driver calls the key store containing the CMK only if it cannot find the corresponding plaintext CEK in the cache. -**Note:** In the ODBC Driver 13.1 for SQL Server, the column encryption key entries in the cache are evicted after a two hour timeout. This means that for a given encrypted column encryption key, the driver contacts the key store only once during the lifetime of the application or every two hours, whichever is less. +**Note:** In the ODBC Driver 13.1 for SQL Server, the entries in the cache are evicted after a two hour timeout. This means that for a given ECEK, the driver contacts the key store only once during the lifetime of the application or every two hours, whichever is less. ## Working with Column Master Key Stores -To encrypt a parameter value or to decrypt data in query results, the driver needs to obtain a column encryption key that is configured for the target column. Column encryption keys are stored in encrypted form in the database metadata. Each column encryption key has a corresponding column master key that was used to encrypt it. The database metadata does not store the column master keys; it only contains the information about a keystore containing a particular column master key, and the location of the key in the keystore. +To encrypt or decrypt data, the driver needs to obtain a CEK that is configured for the target column. CEKs are stored in encrypted form (ECEKs) in the database metadata. Each CEK has a corresponding CMK that was used to encrypt it. The [database metadata](../../t-sql/statements/create-column-master-key-transact-sql.md) does not store the CMK itself; it only contains the name of the keystore and information which the keystore can use to locate the CMK. -To obtain the plaintext value of a column encryption key, the driver first obtains the metadata about both the column encryption key and its corresponding column master key, and then it uses the information in the metadata to contact the keystore containing the column master key and request it to decrypt the encrypted column encryption key. The driver communicates with a keystore using a keystore provider. +To obtain the plaintext value of an ECEK, the driver first obtains the metadata about both the CEK and its corresponding CMK, and then it uses this information to contact the keystore containing the CMK and requests it to decrypt the ECEK. The driver communicates with a keystore using a keystore provider. ### Built-in Keystore Providers -The ODBC Driver 13.1 for SQL Server comes with the following built-in column master keystore providers: +The ODBC Driver 13.1 for SQL Server comes with the following built-in keystore providers: | Name | Description | Provider (metadata) name |Availability| |:---|:---|:---|:---| |Azure Key Vault |Stores CMKs in an Azure Key Vault | `AZURE_KEY_VAULT` |Windows, macOS, Linux| -|MSSQL Certificate Store|Stores CMKs locally in the Windows keystore| `MSSQL_CERTIFICATE_STORE`|Windows| +|Windows Certificate Store|Stores CMKs locally in the Windows keystore| `MSSQL_CERTIFICATE_STORE`|Windows| -- You (or your DBA) need to make sure that the provider name, configured in the column master key metadata, is correct and the column master key path complies with the key path format that is valid for the given provider. It is recommended that you configure the keys using tools such as SQL Server Management Studio, which automatically generates the valid provider names and key paths when issuing the [CREATE COLUMN MASTER KEY (Transact-SQL)](https://msdn.microsoft.com/library/mt146393.aspx) statement. +- You (or your DBA) need to make sure that the provider name, configured in the column master key metadata, is correct and the column master key path complies with the key path format for the given provider. It is recommended that you configure the keys using tools such as SQL Server Management Studio, which automatically generates the valid provider names and key paths when issuing the [CREATE COLUMN MASTER KEY (Transact-SQL)](https://msdn.microsoft.com/library/mt146393.aspx) statement. - You need to ensure your application can access the key in the keystore. This may involve granting your application access to the key and/or the keystore, depending on the keystore, or performing other keystore-specific configuration steps. For example, to access an Azure Key Vault, you need to provide the correct credentials to the keystore. @@ -343,101 +345,109 @@ The ODBC Driver 13.1 for SQL Server comes with the following built-in column mas Azure Key Vault is a convenient option to store and manage column master keys for Always Encrypted (especially if your applications are hosted in Azure). The ODBC Driver 13.1 for SQL Server on Linux, macOS, and Windows includes a built-in column master key store provider for Azure Key Vault. See [Azure Key Vault – Step by Step](https://blogs.technet.microsoft.com/kv/2015/06/02/azure-key-vault-step-by-step/), [Getting Started with Key Vault](https://azure.microsoft.com/documentation/articles/key-vault-get-started/), and [Creating Column Master Keys in Azure Key Vault](https://msdn.microsoft.com/library/mt723359.aspx#Anchor_2) for more information on configuring an Azure Key Vault for Always Encrypted. -The ODBC Driver 13.1 for SQL Server also supports new connection string keywords which can be used to authenticate to Azure Key Vault with the following credentials: +The driver supports authenticating to Azure Key Vault using the following credential types: -- Username/Password – with this method, the credentials are the name of an Azure Active Directory user and a user password. +- Username/Password – with this method, the credentials are the name of an Azure Active Directory user and its password. - Client ID/Secret – with this method, the credentials are an application client ID and an application secret. -The table below shows the keywords and their values for the above 2 credential types: +To allow the driver to use CMKs stored in AKV for column encryption, use the following connection-string-only keywords: |Credential Type| `KeyStoreAuthentication` |`KeyStorePrincipalId`| `KeyStoreSecret` | |-|-|-|-| -|Username/password| `KeyVaultPassword`| Azure Active Directory User Principal Name| Azure Active Directory password| -|Client ID/secret| `KeyVaultClientSecret`| Azure Active Directory Application Client ID| Application Secret| +|Username/password| `KeyVaultPassword`|User Principal Name|Password| +|Client ID/secret| `KeyVaultClientSecret`|Client ID|Secret| #### Example Connection Strings -1. Authenticate Azure Key Vault CMK store with ClientID/Secret +The following connection strings show how to authenticate to Azure Key Vault with the two credential types: + +**ClientID/Secret**: + ``` -L"DRIVER=ODBC Driver 13 for SQL Server;SERVER=myServer;Trusted_Connection=Yes;DATABASE=myDB;ColumnEncryption=Enabled;KeyStoreAuthentication=KeyVaultClientSecret;KeyStorePrincipalId=;KeyStoreSecret="; +DRIVER=ODBC Driver 13 for SQL Server;SERVER=myServer;Trusted_Connection=Yes;DATABASE=myDB;ColumnEncryption=Enabled;KeyStoreAuthentication=KeyVaultClientSecret;KeyStorePrincipalId=;KeyStoreSecret= ``` -2. Authenticate Azure Key Vault CMK store with Username/Password + +**Username/Password** + ``` -L"DRIVER=ODBC Driver 13 for SQL Server;SERVER=myServer;Trusted_Connection=Yes;DATABASE=myDB;ColumnEncryption=Enabled;KeyStoreAuthentication=KeyVaultPassword;KeyStorePrincipalId=;KeyStoreSecret="; +DRIVER=ODBC Driver 13 for SQL Server;SERVER=myServer;Trusted_Connection=Yes;DATABASE=myDB;ColumnEncryption=Enabled;KeyStoreAuthentication=KeyVaultPassword;KeyStorePrincipalId=;KeyStoreSecret= ``` +No other ODBC application changes are required to use AKV for CMK storage. + ### Using the Windows Certificate Store Provider -The ODBC Driver 13.1 for SQL Server on Windows includes a built-in column master key store provider for the Windows Certificate Store, named `MSSQL_CERTIFICATE_STORE`. (This provider is not available on macOS or Linux.) With this provider, the column master key is stored locally on the client machine and no additional configuration by the application is necessary to use it with the driver. However, the application must have access to the certificate and its private key in the store. See [Create and Store Column Master Keys (Always Encrypted)](https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/create-and-store-column-master-keys-always-encrypted) for more information. +The ODBC Driver 13.1 for SQL Server on Windows includes a built-in column master key store provider for the Windows Certificate Store, named `MSSQL_CERTIFICATE_STORE`. (This provider is not available on macOS or Linux.) With this provider, the CMK is stored locally on the client machine and no additional configuration by the application is necessary to use it with the driver. However, the application must have access to the certificate and its private key in the store. See [Create and Store Column Master Keys (Always Encrypted)](https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/create-and-store-column-master-keys-always-encrypted) for more information. -### Using Custom Column Master Key stores with ODBC +### Using Custom Keystore Providers The ODBC Driver 13.1 for SQL Server also supports custom third-party keystore providers using the CEKeystoreProvider interface. This allows an application to load, query, and configure keystore providers so that they can be used by the driver to access encrypted columns. Applications may also directly interact with a keystore provider in order to encrypt CEKs for storage in SQL Server and perform tasks beyond accessing encrypted columns with ODBC; for more information, see [Custom Keystore Providers](../../connect/odbc/custom-keystore-providers.md). -From the ODBC client perspective, CEKeystoreProvider interactions occur using Set and Get operations on two connection attributes. The two connection attributes are: +Two connection attributes are used to interact with custom keystore providers. They are: - `SQL_COPT_SS_CEKEYSTOREPROVIDER` - `SQL_COPT_SS_CEKEYSTOREDATA` -The former is used to load and query loaded keystore providers, while the latter enables application-provider communications. These connection attributes may be used at any time, before or after establishing a connection, since application-provider interaction does not involve communication with SQL Server. However, because the driver has not been loaded yet, setting and getting these attributes before connecting will cause them to be processed by the Driver Manager and may not yield the expected results. +The former is used to load and query loaded keystore providers, while the latter enables application-provider communications. These connection attributes may be used at any time, before or after establishing a connection, since application-provider interaction does not involve communication with SQL Server. However, because the driver has not been loaded yet, setting and getting these attributes before connecting will cause them to be processed by the Driver Manager, and may not yield the expected results. -### Loading a Column Encryption Keystore Provider for use with the ODBC driver +#### Loading a Keystore Provider -Setting the `SQL_COPT_SS_CEKEYSTOREPROVIDER` connection attribute enables a client application to load a CEKeyStoreProvider library, making available for use the CEKeyStoreProviders contained therein. +Setting the `SQL_COPT_SS_CEKEYSTOREPROVIDER` connection attribute enables a client application to load a provider library, making available for use the keystore providers contained therein. ``` SQLRETURN SQLSetConnectAttr( SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength); ``` | Argument | Description | |:---|:---| -|`ConnectionHandle`|[Input] Connection handle. Must be a valid connection handle, but CEKeyStoreProviders loaded via one connection handle are accessible from any other as CEKeyStoreProviders are loaded per-driver.| +|`ConnectionHandle`|[Input] Connection handle. Must be a valid connection handle, but providers loaded via one connection handle are accessible from any other in the same process.| |`Attribute`|[Input] Attribute to set: the `SQL_COPT_SS_CEKEYSTOREPROVIDER` constant.| -|`ValuePtr`|[Input] Pointer to a null-terminated character string specifying the filename of the CEKeyStoreProvider library. For SQLSetConnectAttrA, this is an ANSI (multibyte) string. For SQLSetConnectAttrW, this is a Unicode (wchar_t) string.| +|`ValuePtr`|[Input] Pointer to a null-terminated character string specifying the filename of the provider library. For SQLSetConnectAttrA, this is an ANSI (multibyte) string. For SQLSetConnectAttrW, this is a Unicode (wchar_t) string.| |`StringLength`|[Input] The length of the ValuePtr string, or SQL_NTS.| -The driver attempts to load the CEKeyStoreProvider library identified by the ValuePtr parameter using the platform-defined dynamic library loading mechanism (`dlopen()` on Linux and macOS, `LoadLibrary()` on Windows), and adds any CEKeyStoreProviders defined therein to the list of CEKeyStoreProviders known to the driver. The following errors may occur: +The driver attempts to load the library identified by the ValuePtr parameter using the platform-defined dynamic library loading mechanism (`dlopen()` on Linux and macOS, `LoadLibrary()` on Windows), and adds any providers defined therein to the list of providers known to the driver. The following errors may occur: | Error | Description | |:--|:--| |`CE203`|The dynamic library could not be loaded.| |`CE203`|The "CEKeyStoreProvider" exported symbol was not found in the library.| -|`CE203`|One or more CEKeyStoreProviders in the library are already loaded.| +|`CE203`|One or more providers in the library are already loaded.| `SQLSetConnectAttr` returns the usual error or success values, and additional information is available for any errors which occurred via the standard ODBC diagnostic mechanism. -NOTE: The application programmer must ensure that any custom CEKeyStoreProviders are loaded before any query requiring them is sent over any connection. Failure to do so results in the error: +NOTE: The application programmer must ensure that any custom providers are loaded before any query requiring them is sent over any connection. Failure to do so results in the error: | Error | Description | |:--|:--| |`CE200`|Keystore provider %1 not found. Ensure that the appropriate keystore provider library has been loaded.| -NOTE: CEKeyStoreProvider implementors should avoid the use of `MSSQL` in the name of their custom providers. This term is reserved exclusively for Microsoft use and may cause conflicts with future built-in CEKeyStoreProviders. Using this term in the name of a custom CEKeyStoreProvider will result in an ODBC warning. +NOTE: Keystore provider implementors should avoid the use of `MSSQL` in the name of their custom providers. This term is reserved exclusively for Microsoft use and may cause conflicts with future built-in providers. Using this term in the name of a custom provider may result in an ODBC warning. -**Getting the `SQL_COPT_SS_CEKEYSTOREPROVIDER` attribute** +#### Getting the List of Loaded Providers + +Getting this connection attribute enables a client application to determine the keystore providers currently loaded in the driver (including those built in.) This can only be performed after connecting. -Getting this connection attribute enables a client application to determine the CEKeyStoreProviders currently loaded in the driver. ``` SQLRETURN SQLGetConnectAttr( SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr); ``` | Argument | Description | |:---|:---| -|`ConnectionHandle`|[Input] Connection handle. Must be a valid connection handle, but CEKeyStoreProviders loaded via one connection handle are accessible from any other as CEKeyStoreProviders are loaded per-driver.| +|`ConnectionHandle`|[Input] Connection handle. Must be a valid connection handle, but providers loaded via one connection handle are accessible from any other in the same process.| |`Attribute`|[Input] Attribute to retrieve: the `SQL_COPT_SS_CEKEYSTOREPROVIDER` constant.| -|`ValuePtr`|[Output] A pointer to memory in which to return the next loaded CEKeyStoreProvider name.| +|`ValuePtr`|[Output] A pointer to memory in which to return the next loaded provider name.| |`BufferLength`|[Input] The length of the buffer ValuePtr.| |`StringLengthPtr`|[Output] A pointer to a buffer in which to return the total number of bytes (excluding the null-termination character) available to return in \*ValuePtr. If ValuePtr is a null pointer, no length is returned. If the attribute value is a character string and the number of bytes available to return is greater than BufferLength minus the length of the null-termination character, the data in \*ValuePtr is truncated to BufferLength minus the length of the null-termination character and is null-terminated by the driver.| -To enable enumeration of multiple CEKeyStoreProviders, every Get operation returns the current CEKeyStoreProvider's name, and increments an internal counter to the next one. Once this counter reaches the end of the list, an empty string "" is returned, and the next Get operation will then retrieve the first CEKeyStoreProvider in the list, the one after that the next, etc. +To allow retrieving the entire list, every Get operation returns the current provider's name, and increments an internal counter to the next one. Once this counter reaches the end of the list, an empty string ("") is returned, and the counter is reset; successive Get operations then proceed again from the beginning of the list. -### Interacting with CEKeyStoreProvider implementations using ODBC +### Communicating with Keystore Providers -The `SQL_COPT_SS_CEKEYSTOREDATA` connection attribute enables a client application to communicate with loaded CEKeystoreProviders, for establishing additional parameters, keying material, etc. The communication between a client application and a CEKeystoreProvider follows a simple request-response protocol, based on Get and Set requests using this connection attribute. Communication is initiated only by the client application. +The `SQL_COPT_SS_CEKEYSTOREDATA` connection attribute enables a client application to communicate with loaded keystore providers for configuring additional parameters, keying material, etc. The communication between a client application and a provider follows a simple request-response protocol, based on Get and Set requests using this connection attribute. Communication is initiated only by the client application. -NOTE: Due to the nature of the ODBC calls CEKeyStoreProvider’s respond to (SQLGet/SetConnectAttr), the ODBC interface only supports setting data at the resolution of the connection context. **See CONTEXTS section for more information** +NOTE: Due to the nature of the ODBC calls CEKeyStoreProvider’s respond to (SQLGet/SetConnectAttr), the ODBC interface only supports setting data at the resolution of the connection context. -CEKeystoreProvider data is communicated between the driver and application, in packet form, via the CEKeystoreData structure: +The application communicates with keystore providers through the driver via the CEKeystoreData structure: ``` typedef struct CEKeystoreData { @@ -448,54 +458,49 @@ char data[]; ``` | Argument | Description | |:---|:---| -|`name`|[Input] Upon Set, the name of the CEKeystoreProvider to which the data is sent. Ignored upon Get. Null-terminated, wide-character string.| +|`name`|[Input] Upon Set, the name of the provider to which the data is sent. Ignored upon Get. Null-terminated, wide-character string.| |`dataSize`|[Input] The size of the data array following the structure.| -|`data`|[InOut] Upon Set, the data to be sent to the CEKeystoreProvider. This may be arbitrary data as the driver makes no attempt to interpret it. Upon Get, the buffer to receive the data read from the CEKeystoreProvider.| +|`data`|[InOut] Upon Set, the data to be sent to the provider. This may be arbitrary data; the driver makes no attempt to interpret it. Upon Get, the buffer to receive the data read from the provider.| -**Setting data in a CEKeystoreProvider via ODBC** +#### Writing data to a provider -A `SQLSetConnectAttr` call using the `SQL_COPT_SS_CEKEYSTOREDATA` attribute writes a "packet" of data to the specified CEKeystoreProvider. +A `SQLSetConnectAttr` call using the `SQL_COPT_SS_CEKEYSTOREDATA` attribute writes a "packet" of data to the specified keystore provider. ``` SQLRETURN SQLSetConnectAttr( SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength); ``` | Argument | Description | |:---|:---| -|`ConnectionHandle`| [Input] Connection handle. Must be a valid connection handle, but CEKeystoreProviders loaded via one connection handle are accessible from any other as CEKeyStoreProviders are loaded per-driver.| +|`ConnectionHandle`| [Input] Connection handle. Must be a valid connection handle, but providers loaded via one connection handle are accessible from any other in the same process.| |`Attribute`|[Input] Attribute to set: the `SQL_COPT_SS_CEKEYSTOREDATA` constant.| -|`ValuePtr`|[Input] Pointer to a CEKeystoreData structure. The name field of the structure identifies the CEKeystoreProvider to which the data is intended.| +|`ValuePtr`|[Input] Pointer to a CEKeystoreData structure. The name field of the structure identifies the provider for which the data is intended.| |`StringLength`|[Input] SQL_IS_POINTER constant| -Additional detailed error information may be obtained via SQLGetDiacRec. [See SQLGetDiagRec for more information](https://msdn.microsoft.com/library/ms710921(v=vs.85).aspx) - -NOTE: It is up to the provider to decide how to treat the CEKeystoreData. Two possible choices are: +Additional detailed error information may be obtained via [SQLGetDiacRec](https://msdn.microsoft.com/library/ms710921(v=vs.85).aspx). -1. CEKeystoreData is connection specific. -2. CEKeystoreData is global. +NOTE: The provider can use the connection handle to associate the written data to a specific connection, if it so desires. This is useful for implementing per-connection configuration. It may also ignore the connection context and treat the data identically regardless of the connection used to send the data. See [Context Association](../../connect/odbc/custom-keystore-providers.md) for more information. -Because the caller of `SQLSetConnectAttr` provides a valid connection handle, the provider can use that information and associate the CEKeystoreData with the connection context. On the other hand, the provider can ignore it and make CEKeystoreData shared. See the Context Management section of [Custom Keystore Providers](../../connect/odbc/custom-keystore-providers.md) for more information. +#### Reading data from a provider -**Getting data in a CEKeystoreProvider via ODBC** - -Reading data from a CEKeystoreProvider via ODBC's `SQLGetConnectAttr` function using the `SQL_COPT_SS_CEKEYSTOREDATA` attribute reads a "packet" of data from the last-written-to CEKeystoreProvider. If no CEKeystoreProvider was written to, a Function Sequence Error occurs. Keystore provider implementers are encouraged to support "dummy writes" of 0 bytes as a way of selecting the provider for read operations without causing other side-effects. +A call to `SQLGetConnectAttr` using the `SQL_COPT_SS_CEKEYSTOREDATA` attribute reads a "packet" of data from *the last-written-to* provider. If there was none, a Function Sequence Error occurs. Keystore provider implementers are encouraged to support "dummy writes" of 0 bytes as a way of selecting the provider for read operations without causing other side-effects, if it makes sense to do so. ``` SQLRETURN SQLGetConnectAttr( SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StringLengthPtr); ``` | Argument | Description | |:---|:---| -|`ConnectionHandle`|[Input] Connection handle. Must be a valid connection handle, but CEKeystoreProviders loaded via one connection handle are accessible from any other as they are loaded per-driver.| +|`ConnectionHandle`|[Input] Connection handle. Must be a valid connection handle, but providers loaded via one connection handle are accessible from any other in the same process.| |`Attribute`|[Input] Attribute to retrieve: the `SQL_COPT_SS_CEKEYSTOREDATA` constant.| -|`ValuePtr`|[Output] A pointer to a CEKeystoreData structure in which the data read from the CEKeystoreProvider is placed.| +|`ValuePtr`|[Output] A pointer to a CEKeystoreData structure in which the data read from the provider is placed.| |`BufferLength`|[Input] SQL_IS_POINTER constant| |`StringLengthPtr`|[Output] A pointer to a buffer in which to return BufferLength. If *ValuePtr is a null pointer, no length is returned.| -The caller must ensure that a buffer of sufficient length following the CEKEYSTOREDATA structure is allocated for the provider to write into. Upon return, its dataSize field is updated with the actual length of data read from the provider. Additional detailed error information may be obtained via SQLGetDiacRec. See [SQLGetDiagRec](https://msdn.microsoft.com/library/ms710921(v=vs.85).aspx) for more information. +The caller must ensure that a buffer of sufficient length following the CEKEYSTOREDATA structure is allocated for the provider to write into. Upon return, its dataSize field is updated with the actual length of data read from the provider. Additional detailed error information may be obtained via [SQLGetDiacRec](https://msdn.microsoft.com/library/ms710921(v=vs.85).aspx). -The interface places no additional requirements on the format of data transferred between an application and a CEKeystoreProvider. Each provider is expected to define its own protocol per its needs. +This interface places no additional requirements on the format of data transferred between an application and a keystore provider. Each provider can define its own protocol/data format, depending on its needs. For an example of implementing your own keystore provider, see [Custom Keystore Providers](../../connect/odbc/custom-keystore-providers.md) -## Limitations of ODBC when using Always Encrypted +## Limitations of the ODBC driver when using Always Encrypted ### Bulk Copy Function Usage Use of the [SQL Bulk Copy functions](https://msdn.microsoft.com/library/ms130792.aspx) is not supported when using the ODBC driver with Always Encrypted. No transparent encryption/decryption will occur on encrypted columns that are used with the SQL Bulk Copy functions. @@ -503,9 +508,9 @@ Use of the [SQL Bulk Copy functions](https://msdn.microsoft.com/library/ms130792 ### Asynchronous Operations While the ODBC driver will allow the use of [asynchronous operations](https://msdn.microsoft.com/library/ms131658.aspx) with Always Encrypted, there is a performance impact on the operations when Always Encrypted is enabled. The call to `sys.sp_describe_parameter_encryption` to determine encryption metadata for the statement is blocking and will cause the driver to wait for the server to return the metadata before returning `SQL_STILL_EXECUTING`. -## Always Encrypted API reference +## Always Encrypted API Summary -**ODBC Connection String Keywords as provided to SQLDriverConnect Function** +### Connection String Keywords |Name|Description| |----------|-----------------| @@ -514,21 +519,21 @@ While the ODBC driver will allow the use of [asynchronous operations](https://ms |`KeyStorePrincipalId` | When `KeyStoreAuthentication` = `KeyVaultPassword`, set this value to a valid Azure Active Directory User Principle Name.
      When `KeyStoreAuthetication` = `KeyVaultClientSecret` set this value to a valid Azure Active Directory Application Client ID | |`KeyStoreSecret` | When `KeyStoreAuthentication` = `KeyVaultPassword` set this value to the password for a valid Azure Active Directory User Principle Name.
      When `KeyStoreAuthentication` = `KeyVaultClientSecret` set this value to the Application Secret associated with a valid Azure Active Directory Application Client ID| -**ODBC Connection Attributes as provided to SQLSetConnectAttr Function** +### Connection Attributes -|Name|Description| -|----------|-----------------| -|`SQL_COPT_SS_COLUMN_ENCRYPTION`|`SQL_COLUMN_ENCRYPTION_DISABLE` (0) -- Disable Always Encrypted
      `SQL_COLUMN_ENCRYPTION_ENABLE` (1) -- Enable Always Encrypted| -|`SQL_COPT_SS_CEKEYSTOREPROVIDER`| [Input] Pointer to a null-terminated character string specifying the filename of the CEKeystoreProvider library. For SQLSetConnectAttrA, this is an ANSI (multibyte) string. For SQLSetConnectAttrW, this is a Unicode (wchar_t) string.

      [Output] A pointer to a CEKeystoreData structure in which the data read from the provider is placed.| -|`SQL_COPT_SS_CEKEYSTOREDATA`| [Input] Pointer to a CEKeystoreData structure. The name field of the structure identifies the CEKeystoreProvider to which the data is intended.

      [Output] A pointer to a CEKeystoreData structure in which the data read from the provider is placed.| +|Name|Type|Description| +|----------|-------|----------| +|`SQL_COPT_SS_COLUMN_ENCRYPTION`|Pre-connect|`SQL_COLUMN_ENCRYPTION_DISABLE` (0) -- Disable Always Encrypted
      `SQL_COLUMN_ENCRYPTION_ENABLE` (1) -- Enable Always Encrypted| +|`SQL_COPT_SS_CEKEYSTOREPROVIDER`|Post-connect|[Set] Attempt to load CEKeystoreProvider
      [Get] Return a CEKeystoreProvider name| +|`SQL_COPT_SS_CEKEYSTOREDATA`|Post-connect|[Set] Write data to CEKeystoreProvider
      [Get] Read data from CEKeystoreProvider| -**ODBC Statement Attributes as provided to SQLSetStmtAttr Function** +### Statement Attributes |Name|Description| |----------|-----------------| |`SQL_SOPT_SS_COLUMN_ENCRYPTION`|`SQL_CE_DISABLED` (0) -- Always Encrypted is disabled for the statement
      `SQL_CE_RESULTSETONLY` (1) -- Decryption Only. Resultsets and return values are decrypted, and parameters are not encrypted
      `SQL_CE_ENABLED` (3) -- Always Encrypted is enabled and used for both parameters and results| -**ODBC Parameter Descriptors as provided to SQLSetDescField Function** +### Descriptor Fields |IPD Field|Size/Type|Default Value|Description| |-|-|-|-| From e6aa9f0283c94d55bd360e24c55fc35cd3de8e2b Mon Sep 17 00:00:00 2001 From: v-chojas Date: Wed, 12 Jul 2017 15:40:33 -0700 Subject: [PATCH 255/336] Update using-always-encrypted-with-the-odbc-driver.md --- .../using-always-encrypted-with-the-odbc-driver.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/connect/odbc/using-always-encrypted-with-the-odbc-driver.md b/docs/connect/odbc/using-always-encrypted-with-the-odbc-driver.md index 314a88e10d3..4eaac35f7b2 100644 --- a/docs/connect/odbc/using-always-encrypted-with-the-odbc-driver.md +++ b/docs/connect/odbc/using-always-encrypted-with-the-odbc-driver.md @@ -18,7 +18,7 @@ author: "MightyPen" # Using Always Encrypted with the ODBC Driver 13.1 for SQL Server [!INCLUDE[Driver_ODBC_Download](../../includes/driver_odbc_download.md)] -This article provides information on how to develop ODBC applications using [Always Encrypted (Database Engine)](https://msdn.microsoft.com/library/mt163865.aspx) and the [ODBC Driver 13.1 for SQL Server](../../connect/odbc/windows/microsoft-odbc-driver-for-sql-server-on-windows.md). +This article provides information on how to develop ODBC applications using [Always Encrypted (Database Engine)](https://msdn.microsoft.com/library/mt163865.aspx) and the [ODBC Driver 13.1 for SQL Server](../../connect/odbc/microsoft-odbc-driver-for-sql-server.md). Always Encrypted allows client applications to encrypt sensitive data and never reveal the data or the encryption keys to SQL Server or Azure SQL Database. An Always Encrypted enabled driver, such as the ODBC Driver 13.1 for SQL Server, achieves this by transparently encrypting and decrypting sensitive data in the client application. The driver automatically determines which query parameters correspond to sensitive database columns (protected using Always Encrypted), and encrypts the values of those parameters before passing the data to SQL Server or Azure SQL Database. Similarly, the driver transparently decrypts data retrieved from encrypted database columns in query results. For more information, see [Always Encrypted (Database Engine)](https://msdn.microsoft.com/library/mt163865.aspx). @@ -40,7 +40,7 @@ Always Encrypted may also be enabled in the DSN configuration, using the same ke SQLSetConnectAttr(hdbc, SQL_COPT_SS_COLUMN_ENCRYPTION, (SQLPOINTER)SQL_COLUMN_ENCRYPTION_ENABLE, 0); ``` -Once enabled for the connection, the behaviour of Always Encrypted may be adjusted for individual queries. See [Controlling the Performance Impact of Always Encrypted](#controlling-performance-impact-always-encrypted) below for more information. +Once enabled for the connection, the behaviour of Always Encrypted may be adjusted for individual queries. See [Controlling the Performance Impact of Always Encrypted](#controlling-the-performance-impact-of-always-encrypted) below for more information. Note that enabling Always Encrypted is not sufficient for encryption or decryption to succeed; you also need to make sure that: @@ -86,7 +86,7 @@ This example inserts a row into the Patients table. Note the following: - There is nothing specific to encryption in the sample code. The driver automatically detects and encrypts the values of the SSN and date parameters, which target encrypted columns. This makes encryption transparent to the application. -- The values inserted into database columns, including the encrypted columns, are passed as bound parameters (See [SQLBindParameter Function](https://msdn.microsoft.com/library/ms710963(v=vs.85).aspx)). While using parameters is optional when sending values to non-encrypted columns (although it is highly recommended because it helps prevent SQL injection), it is required for values targeting encrypted columns. If the values inserted in the SSN or BirthDate columns were passed as literals embedded in the query statement, the query would fail because the driver does not attempt to encrypt or otherwise process literals in queries. As a result, the server would reject them as incompatible with the encrypted columns. +- The values inserted into database columns, including the encrypted columns, are passed as bound parameters (see [SQLBindParameter Function](https://msdn.microsoft.com/library/ms710963(v=vs.85).aspx)). While using parameters is optional when sending values to non-encrypted columns (although it is highly recommended because it helps prevent SQL injection), it is required for values targeting encrypted columns. If the values inserted in the SSN or BirthDate columns were passed as literals embedded in the query statement, the query would fail because the driver does not attempt to encrypt or otherwise process literals in queries. As a result, the server would reject them as incompatible with the encrypted columns. - The SQL type of the parameter inserted into the SSN column is set to SQL_CHAR, which maps to the **char** SQL Server data type (`rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 11, 0, (SQLPOINTER)SSN, 0, &cbSSN);`). If the type of the parameter was set to SQL_WCHAR, which maps to **nchar**, the query would fail, as Always Encrypted does not support server-side conversions from encrypted nchar values to encrypted char values. See [ODBC Programmer's Reference -- Appendix D: Data Types](https://msdn.microsoft.com/library/ms713607.aspx) for information about the data type mappings. @@ -390,7 +390,7 @@ Two connection attributes are used to interact with custom keystore providers. T - `SQL_COPT_SS_CEKEYSTOREDATA` -The former is used to load and query loaded keystore providers, while the latter enables application-provider communications. These connection attributes may be used at any time, before or after establishing a connection, since application-provider interaction does not involve communication with SQL Server. However, because the driver has not been loaded yet, setting and getting these attributes before connecting will cause them to be processed by the Driver Manager, and may not yield the expected results. +The former is used to load and enumerate loaded keystore providers, while the latter enables application-provider communications. These connection attributes may be used at any time, before or after establishing a connection, since application-provider interaction does not involve communication with SQL Server. However, because the driver has not been loaded yet, setting and getting these attributes before connecting will cause them to be processed by the Driver Manager, and may not yield the expected results. #### Loading a Keystore Provider @@ -477,7 +477,7 @@ SQLRETURN SQLSetConnectAttr( SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQL Additional detailed error information may be obtained via [SQLGetDiacRec](https://msdn.microsoft.com/library/ms710921(v=vs.85).aspx). -NOTE: The provider can use the connection handle to associate the written data to a specific connection, if it so desires. This is useful for implementing per-connection configuration. It may also ignore the connection context and treat the data identically regardless of the connection used to send the data. See [Context Association](../../connect/odbc/custom-keystore-providers.md) for more information. +NOTE: The provider can use the connection handle to associate the written data to a specific connection, if it so desires. This is useful for implementing per-connection configuration. It may also ignore the connection context and treat the data identically regardless of the connection used to send the data. See [Context Association](../../connect/odbc/custom-keystore-providers.md#context-association) for more information. #### Reading data from a provider @@ -516,8 +516,8 @@ While the ODBC driver will allow the use of [asynchronous operations](https://ms |----------|-----------------| |`ColumnEncryption`|Accepted values are `Enabled`/`Disabled`.
      `Enabled` -- enables Always Encrypted functionality for the connection.
      `Disabled` -- disable Always Encrypted functionality for the connection.

      The default is `Disabled`.| |`KeyStoreAuthentication` | Valid Values: `KeyVaultPassword`, `KeyVaultClientSecret` | -|`KeyStorePrincipalId` | When `KeyStoreAuthentication` = `KeyVaultPassword`, set this value to a valid Azure Active Directory User Principle Name.
      When `KeyStoreAuthetication` = `KeyVaultClientSecret` set this value to a valid Azure Active Directory Application Client ID | -|`KeyStoreSecret` | When `KeyStoreAuthentication` = `KeyVaultPassword` set this value to the password for a valid Azure Active Directory User Principle Name.
      When `KeyStoreAuthentication` = `KeyVaultClientSecret` set this value to the Application Secret associated with a valid Azure Active Directory Application Client ID| +|`KeyStorePrincipalId` | When `KeyStoreAuthentication` = `KeyVaultPassword`, set this value to a valid Azure Active Directory User Principal Name.
      When `KeyStoreAuthetication` = `KeyVaultClientSecret` set this value to a valid Azure Active Directory Application Client ID | +|`KeyStoreSecret` | When `KeyStoreAuthentication` = `KeyVaultPassword` set this value to the password for the corresponding user name.
      When `KeyStoreAuthentication` = `KeyVaultClientSecret` set this value to the Application Secret associated with a valid Azure Active Directory Application Client ID| ### Connection Attributes From a50797d873553df04b77d39df400c662904619fa Mon Sep 17 00:00:00 2001 From: v-chojas Date: Wed, 12 Jul 2017 15:48:20 -0700 Subject: [PATCH 256/336] Update KSP sample code --- .../connect/odbc/custom-keystore-providers.md | 75 ++++++++++++------- 1 file changed, 48 insertions(+), 27 deletions(-) diff --git a/docs/connect/odbc/custom-keystore-providers.md b/docs/connect/odbc/custom-keystore-providers.md index 0631fc56591..1effdcd7d6f 100644 --- a/docs/connect/odbc/custom-keystore-providers.md +++ b/docs/connect/odbc/custom-keystore-providers.md @@ -353,7 +353,6 @@ CEKEYSTOREPROVIDER *CEKeystoreProvider[] = { &MyCustomKSPName_desc, 0 }; - ``` ### ODBC Application @@ -364,19 +363,27 @@ The following code is a demo application which uses the keystore provider above. /* Example application for demonstration of custom keystore provider usage +Windows: compile with cl /MD kspapp.c /link odbc32.lib +Linux/Mac: compile with gcc -o kspapp -fshort-wchar kspapp.c -lodbc -ldl + usage: kspapp connstr */ +#define KSPNAME L"MyCustomKSPName" #define PROV_ENCRYPT_KEY "JHKCWYT06N3RG98J0MBLG4E3" #include #include +#ifdef _WIN32 +#include +#else +#define __stdcall #include -#include -#include +#endif #include #include +#include "msodbcsql.h" /* Convenience functions */ @@ -427,11 +434,14 @@ int main(int argc, char **argv) { unsigned char CEK[32]; unsigned char *ECEK; unsigned short ECEKlen; - void* hProvLib; +#ifdef _WIN32 + HMODULE hProvLib; +#else + void *hProvLib; +#endif CEKEYSTORECONTEXT ctx = {0}; CEKEYSTOREPROVIDER **ppKsp, *pKsp; - int(__stdcall *pEncryptCEK)(CEKEYSTORECONTEXT *, errFunc *, unsigned char *, unsigned short, - unsigned char **, unsigned short *); + int(__stdcall *pEncryptCEK)(CEKEYSTORECONTEXT *, errFunc *, unsigned char *, unsigned short, unsigned char **, unsigned short *); int i; if (argc < 2) { fprintf(stderr, "usage: kspapp connstr\n"); @@ -439,44 +449,43 @@ int main(int argc, char **argv) { } /* Load the provider library */ - if (!(hProvLib = dlopen("MyKSP.so", RTLD_LAZY))) { +#ifdef _WIN32 + if (!(hProvLib = LoadLibrary("MyKSP.dll"))) { +#else + if (!(hProvLib = dlopen("./MyKSP.so", RTLD_NOW))) { +#endif fprintf(stderr, "Error loading KSP library\n"); return 2; } - - /* Check that the loaded library contains the CEKeyStoreProvider entry point */ +#ifdef _WIN32 if (!(ppKsp = (CEKEYSTOREPROVIDER**)GetProcAddress(hProvLib, "CEKeystoreProvider"))) { +#else + if (!(ppKsp = (CEKEYSTOREPROVIDER**)dlsym(hProvLib, "CEKeystoreProvider"))) { +#endif fprintf(stderr, "The export CEKeystoreProvider was not found in the KSP library\n"); return 3; } - - /* Iterate the CEKeyStoreProviders in the library, looking for the custom one MyCustomKSPName */ - bool foundProv = false; while (pKsp = *ppKsp++) { - if (!wcscmp(L"MyCustomKSPName", pKsp->Name)){ - foundProv = true; - break; - } + if (!memcmp(KSPNAME, pKsp->Name, sizeof(KSPNAME))) + goto FoundProv; } - - if (!foundProv) { - fprintf(stderr, "Could not find provider in the library\n"); - return 4; - } - - /* Initialize Provider */ + fprintf(stderr, "Could not find provider in the library\n"); + return 4; +FoundProv: if (pKsp->Init && !pKsp->Init(&ctx, postKspError)) { fprintf(stderr, "Could not initialise provider\n"); return 5; } - - /* Determine Provider capabilities */ - if (!(pEncryptCEK = (void*)GetProcAddress(hProvLib, "KeystoreEncrypt"))) { +#ifdef _WIN32 + if (!(pEncryptCEK = (LPVOID)GetProcAddress(hProvLib, "KeystoreEncrypt"))) { +#else + if (!(pEncryptCEK = dlsym(hProvLib, "KeystoreEncrypt"))) { +#endif fprintf(stderr, "The export KeystoreEncrypt was not found in the KSP library\n"); return 6; } if (!pKsp->Write) { - fprintf(stderr, "Sample Custom Provider does not support configuration.\n"); + fprintf(stderr, "Provider does not support configuration\n"); return 7; } @@ -531,10 +540,18 @@ int main(int argc, char **argv) { printf("Create CEK: %s\n", cekSql); SQLExecDirect(stmt, cekSql, SQL_NTS); free(cekSql); +#ifdef _WIN32 + LocalFree(ECEK); +#else free(ECEK); +#endif } +#ifdef _WIN32 FreeLibrary(hProvLib); +#else + dlclose(hProvLib); +#endif /* Create a table with encrypted columns */ { @@ -552,7 +569,11 @@ int main(int argc, char **argv) { pKsd->name = L"MyCustomKSPName"; pKsd->dataSize = sizeof(PROV_ENCRYPT_KEY) - 1; memcpy(pKsd->data, PROV_ENCRYPT_KEY, sizeof(PROV_ENCRYPT_KEY) - 1); +#ifdef _WIN32 rc = SQLSetConnectAttr(dbc, SQL_COPT_SS_CEKEYSTOREPROVIDER, "MyKSP.dll", SQL_NTS); +#else + rc = SQLSetConnectAttr(dbc, SQL_COPT_SS_CEKEYSTOREPROVIDER, "./MyKSP.so", SQL_NTS); +#endif checkRC(rc, "Loading KSP into ODBC Driver", 7, dbc, SQL_HANDLE_DBC); rc = SQLSetConnectAttr(dbc, SQL_COPT_SS_CEKEYSTOREDATA, (SQLPOINTER)pKsd, SQL_IS_POINTER); checkRC(rc, "Configuring the KSP", 7, dbc, SQL_HANDLE_DBC); From 2aea61058dfde5f9bfb2eb02567e38a489769938 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Wed, 12 Jul 2017 19:58:49 -0400 Subject: [PATCH 257/336] Updating formatting and adding Azure topic to TOC --- docs/linux/TOC.md | 1 + docs/linux/quickstart-install-connect-red-hat.md | 7 +++---- docs/linux/quickstart-install-connect-suse.md | 9 +++------ docs/linux/quickstart-install-connect-ubuntu.md | 7 +++---- docs/linux/sql-server-linux-setup.md | 4 ++-- 5 files changed, 12 insertions(+), 16 deletions(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index 7369da665ab..82dd77acb44 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -17,6 +17,7 @@ ### [Install SQL Server tools](sql-server-linux-setup-tools.md) ### [Install SQL Server Agent](sql-server-linux-setup-sql-agent.md) ### [Install SQL Server Full-Text Search](sql-server-linux-setup-full-text-search.md) +### [Provision a SQL Server VM in Azure](sql-server-linux-azure-virtual-machine.md) ## Configure ### [Configure with mssql-conf](sql-server-linux-configure-mssql-conf.md) diff --git a/docs/linux/quickstart-install-connect-red-hat.md b/docs/linux/quickstart-install-connect-red-hat.md index a3504be2b3c..5fe364139cb 100644 --- a/docs/linux/quickstart-install-connect-red-hat.md +++ b/docs/linux/quickstart-install-connect-red-hat.md @@ -29,12 +29,11 @@ In this quick start tutorial, you first install SQL Server 2017 RC1 on Red Hat E ## Prerequisites -- You must have a RHEL 7.3 machine with at least 3.25 GB of memory. +You must have a RHEL 7.3 machine with at least 3.25 GB of memory. - > [!TIP] - > To install RHEL, go to [http://access.redhat.com/products/red-hat-enterprise-linux/evaluation](http://access.redhat.com/products/red-hat-enterprise-linux/evaluation). You can also create RHEL virtual machines in Azure. For the basic process, see [Create a Linux virtual machine with the Azure CLI](https://docs.microsoft.com/azure/virtual-machines/linux/quick-create-cli). +To install Red Hat Enterprise Linux, go to [http://access.redhat.com/products/red-hat-enterprise-linux/evaluation](http://access.redhat.com/products/red-hat-enterprise-linux/evaluation). You can also create RHEL virtual machines in Azure. For the basic process, see [Create a Linux virtual machine with the Azure CLI](https://docs.microsoft.com/azure/virtual-machines/linux/quick-create-cli). -- For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). +For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). ## Install SQL Server diff --git a/docs/linux/quickstart-install-connect-suse.md b/docs/linux/quickstart-install-connect-suse.md index 39955ef51fd..e7f3c207eaf 100644 --- a/docs/linux/quickstart-install-connect-suse.md +++ b/docs/linux/quickstart-install-connect-suse.md @@ -29,14 +29,11 @@ In this quick start tutorial, you first install SQL Server 2017 RC1 on SUSE Linu ## Prerequisites -- You must have a SLES v12 SP2 machine with at least 3.25 GB of memory. +You must have a SLES v12 SP2 machine with at least 3.25 GB of memory. The file system must be **XFS** or **EXT4**. Other file systems, such as **BTRFS**, are unsupported. - > [!TIP] - > To install SLES, go to [https://www.suse.com/products/server](https://www.suse.com/products/server). You can also create SLES virtual machines in Azure. For the basic process, see [Create a Linux virtual machine with the Azure CLI](https://docs.microsoft.com/azure/virtual-machines/linux/quick-create-cli). +To install SUSE Linux Enterprise Server, go to [https://www.suse.com/products/server](https://www.suse.com/products/server). You can also create SLES virtual machines in Azure. For the basic process, see [Create a Linux virtual machine with the Azure CLI](https://docs.microsoft.com/azure/virtual-machines/linux/quick-create-cli). -- The file system must be **XFS** or **EXT4**. Other file systems, such as **BTRFS**, are unsupported. - -- For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). +For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). ## Install SQL Server diff --git a/docs/linux/quickstart-install-connect-ubuntu.md b/docs/linux/quickstart-install-connect-ubuntu.md index 220ce13db95..26189cf3e26 100644 --- a/docs/linux/quickstart-install-connect-ubuntu.md +++ b/docs/linux/quickstart-install-connect-ubuntu.md @@ -15,12 +15,11 @@ In this quick start tutorial, you first install SQL Server 2017 RC1 on Ubuntu 16 ## Prerequisites -- You must have a Ubuntu machine with at least 3.25 GB of memory. +You must have a Ubuntu machine with at least 3.25 GB of memory. - > [!TIP] - > To install Ubuntu, go to [http://www.ubuntu.com/download/server](http://www.ubuntu.com/download/server). You can also create Ubuntu virtual machines in Azure. For instructions, see [Create a Linux virtual machine with the Azure CLI](https://docs.microsoft.com/azure/virtual-machines/linux/quick-create-cli). +To install Ubuntu, go to [http://www.ubuntu.com/download/server](http://www.ubuntu.com/download/server). You can also create Ubuntu virtual machines in Azure. For instructions, see [Create a Linux virtual machine with the Azure CLI](https://docs.microsoft.com/azure/virtual-machines/linux/quick-create-cli). -- For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). +For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). ## Install SQL Server diff --git a/docs/linux/sql-server-linux-setup.md b/docs/linux/sql-server-linux-setup.md index 83653081776..90b23675c3c 100644 --- a/docs/linux/sql-server-linux-setup.md +++ b/docs/linux/sql-server-linux-setup.md @@ -28,7 +28,7 @@ ms.assetid: 565156c3-7256-4e63-aaf0-884522ef2a52 This topic explains how to install, update, and uninstall SQL Server 2017 on Linux. SQL Server 2017 RC1 is supported on Red Hat Enterprise Linux (RHEL), SUSE Linux Enterprise Server (SLES), and Ubuntu. It is also available as a Docker image, which can run on Docker Engine on Linux or Docker for Windows/Mac. -> [TIP] +> [!TIP] > To get started quickly, jump to one of the quick start tutorials for [RHEL](quickstart-install-connect-red-hat.md), [SLES](quickstart-install-connect-suse.md), [Ubuntu](quickstart-install-connect-ubuntu.md), or [Docker](quickstart-install-connect-docker.md). ## Supported platforms @@ -99,7 +99,7 @@ sudo rm -rf /var/opt/mssql/ You can perform an unattended installation in the following way: -- Follow the initial steps in the quick start tutorials to register the repositories and install SQL Server. +- Follow the initial steps in the [quick start tutorials](#platforms) to register the repositories and install SQL Server. - When you run `mssql-conf setup`, set [environment variables](sql-server-linux-configure-environment-variables.md) and use the `-n` (no prompt) option. The following example configures the Developer edition of SQL Server with the **MSSQL_PID** environment variable. It also sets the SA user password with the **SA_PASSWORD** environment variable. The `-n` parameter pulls in these values for a simple unattended install: From fcafd9032917ebb2bd937f86616fefdad77a4cb5 Mon Sep 17 00:00:00 2001 From: David Puglielli Date: Wed, 12 Jul 2017 18:29:37 -0700 Subject: [PATCH 258/336] Added docs for Azure AD and connection resiliency --- docs/connect/php/azure-active-directory.md | 126 ++++++++++++++++++++ docs/connect/php/connection-resiliency.md | 132 +++++++++++++++++++++ 2 files changed, 258 insertions(+) create mode 100644 docs/connect/php/azure-active-directory.md create mode 100644 docs/connect/php/connection-resiliency.md diff --git a/docs/connect/php/azure-active-directory.md b/docs/connect/php/azure-active-directory.md new file mode 100644 index 00000000000..cf14c35950b --- /dev/null +++ b/docs/connect/php/azure-active-directory.md @@ -0,0 +1,126 @@ +--- +title: "Azure Active Directory | Microsoft Docs" +ms.custom: "" +ms.date: "07/10/2017" +ms.prod: "sql-non-specified" +ms.reviewer: "" +ms.suite: "" +ms.technology: + - "drivers" +ms.tgt_pltfrm: "" +ms.topic: "article" +helpviewer_keywords: + - "" +ms.assetid: +caps.latest.revision: 1 +author: "" +ms.author: "" +manager: "" +--- +# Azure Active Directory +[!INCLUDE[Driver_PHP_Download](../../includes/driver_php_download.md)] + +[Azure Active Directory](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-whatis) (Azure AD) is a central user ID management technology that operates as an alternative to [SQL Server authentication](../../connect/php/how-to-connect-using-sql-server-authentication.md). Azure AD allows connections to Microsoft Azure SQL Database and SQL Data Warehouse with federated identities in Azure AD using a username and password, Windows Integrated Authentication, or an Azure AD access token; the PHP drivers for SQL Server offer partial support for these features. + +To use Azure AD, use the **Authentication** keyword. This keyword can take on two values: **SqlPassword** and **ActiveDirectoryPassword**. To connect to a SQL Server instance (which may be an Azure instance), set **Authentication** to **SqlPassword**. To connect to an Azure SQL database using an Azure AD account username and password, set **Authentication** to **ActiveDirectoryPassword** in the connection string. + +When using the **Authentication** keyword, the username and password must be passed into the connection string using the **UID** and **PWD** keywords. By default, the **Encrypt** keyword is set to true, so the client will request encryption; moreover, the server certificate will be validated irrespective of the encryption setting unless **TrustServerCertificate** is set to true. This is distinguished from the old, and less secure, login method, in which the server certificate is not validated unless encryption is specifically requested in the connection string. + +Before using Azure AD with the PHP drivers for SQL Server, ensure that you have installed the [Active Directory Authentication Library for SQL Server](https://www.microsoft.com/en-us/download/details.aspx?id=48742) and the [Microsoft Online Services Sign-In Assistant](https://www.microsoft.com/en-ca/download/details.aspx?id=41950). + +#### Limitations + +On Windows, the underlying ODBC driver supports a third value for the **Authentication** keyword, **ActiveDirectoryIntegrated**, but the PHP drivers do not support this value on any platform and hence also do not support Azure AD token-based authentication. + +## Example + +The following example shows how to connect using **SqlPassword** and **ActiveDirectoryPassword**. + +```php + $myusername, "PWD"=>$mypassword, "Authentication"=>'SqlPassword' ); + + $conn = sqlsrv_connect( $serverName, $connectionInfo ); + if( $conn === false ) + { + echo "Could not connect with Authentication=SqlPassword.\n"; + print_r( sqlsrv_errors() ); + } + else + { + echo "Connected successfully with Authentication=SqlPassword.\n"; + sqlsrv_close( $conn ); + } + + // Now connect to an Azure SQL database by setting Authentication to ActiveDirectoryPassword + $azureServer = "myazureserver.database.windows.net"; + $azureDatabase = "myazuredatabase"; + $azureUsername = "myuid"; + $azurePassword = "mypassword"; + $connectionInfo = array( "Database"=>$azureDatabase, "UID"=>$azureUsername, "PWD"=>$azurePassword, + "Authentication"=>'ActiveDirectoryPassword' ); + + $conn = sqlsrv_connect( $azureServer, $connectionInfo ); + if( $conn === false ) + { + echo "Could not connect with Authentication=ActiveDirectoryPassword.\n"; + print_r( sqlsrv_errors() ); + } + else + { + echo "Connected successfully with Authentication=ActiveDirectoryPassword.\n"; + sqlsrv_close( $conn ); + } + + ?> +``` + +The following example does the same as above with the PDO_SQLSRV driver. + +```php + getMessage() ); + echo "\n"; + } + + // Now connect to an Azure SQL database by setting Authentication to ActiveDirectoryPassword + $azureServer = "myazureserver.database.windows.net"; + $azureDatabase = "myazuredatabase"; + $azureUsername = "myuid"; + $azurePassword = "mypassword"; + $connectionInfo = "Database = $azureDatabase; Authentication = ActiveDirectoryPassword;"; + + try + { + $conn = new PDO( "sqlsrv:server = $azureServer ; $connectionInfo", $azureUsername, $azurePassword ); + echo "Connected successfully with Authentication=ActiveDirectoryPassword.\n"; + $conn = null; + } + catch( PDOException $e ) + { + echo "Could not connect with Authentication=ActiveDirectoryPassword.\n"; + print_r( $e->getMessage() ); + echo "\n"; + } + + ?> +``` +## See Also +[Using Azure Active Directory with the ODBC Driver](https://docs.microsoft.com/en-us/sql/connect/odbc/using-azure-active-directory) diff --git a/docs/connect/php/connection-resiliency.md b/docs/connect/php/connection-resiliency.md new file mode 100644 index 00000000000..bdb4afd2c2f --- /dev/null +++ b/docs/connect/php/connection-resiliency.md @@ -0,0 +1,132 @@ +--- +title: "Connection Resiliency | Microsoft Docs" +ms.custom: "" +ms.date: "07/10/2017" +ms.prod: "sql-non-specified" +ms.reviewer: "" +ms.suite: "" +ms.technology: + - "drivers" +ms.tgt_pltfrm: "" +ms.topic: "article" +helpviewer_keywords: + - "" +ms.assetid: +caps.latest.revision: 1 +author: "" +ms.author: "" +manager: "" +--- +## Idle Connection Resiliency +[!INCLUDE[Driver_PHP_Download](../../includes/driver_php_download.md)] + +[Connection resiliency](https://msdn.microsoft.com/en-us/library/dn632678.aspx) is the principle that an idle connection that is broken can be reestablished, within certain constraints. If a connection to Microsoft SQL Server fails, connection resiliency allows the client to automatically attempt to reestablish the connection. Connection resiliency is a property of the data source; only SQL Server 2014 and later and Azure SQL Database support connection resiliency. + +Connection resiliency is implemented with two connection keywords that can be added to connection strings: **ConnectRetryCount** and **ConnectRetryInterval**. + +* **ConnectRetryCount** refers to the maximum number of times an attempt to reestablish a broken connection is made before giving up. This is an integer between 0 and 255 (inclusive). The default value is 1, i.e., a single attempt is made to reestablish a connection when broken. A value of 0 means that no reconnection will be attempted. +* **ConnectRetryInterval** refers to the time between attempts to reestablish a connection. This is an integer that varies from 1 second to 60 seconds (inclusive). The default is 1, but note that the application will attempt to reconnect immediately upon detecting a broken connection, and will then wait **ConnectRetryInterval** seconds before trying again. This keyword is ignored if **ConnectRetryCount** is equal to 0. + +If **ConnectRetryCount*ConnectRetryInterval** is larger than **LoginTimeout**, then the client will cease attempting to connect once **LoginTimeout** is reached; otherwise, it will continue to try to reconnect until **ConnectRetryCount** is reached. + +#### Remarks + +Connection resiliency applies when the connection is idle. Failures that occur while executing a transaction, for example, will not trigger reconnection attempts – they will fail as would otherwise be expected. The following situations, known as non-recoverable session states, will not trigger reconnection attempts: + +* Temporary tables +* Global and local cursors +* Transaction context and session level transaction locks +* Application locks +* EXECUTE AS/REVERT security context +* OLE automation handles +* Prepared XML handles +* Trace flags + +## Example + +The following code connects to a database and executes a query. The connection is interrupted by killing the session and a new query is attempted using the broken connection. This example uses the [AdventureWorks](https://msdn.microsoft.com/en-us/library/ms124501%28v=sql.100%29.aspx) sample database. + +```php +$databaseName, "ConnectRetryCount"=>10, "ConnectRetryInterval"=>10 ); + +$conn = sqlsrv_connect( $serverName, $connectionInfo ); +if( $conn === false) +{ + echo "Could not connect.\n"; + die( print_r( sqlsrv_errors(), true)); +} + +// A separate connection that will be used to break the main connection $conn +$conn_break = sqlsrv_connect( $serverName, array( "Database"=>$databaseName) ); + +// Create a statement to retrieve the contents of a table +$stmt1 = sqlsrv_query( $conn, "SELECT * FROM HumanResources.Employee", + array(), array( "Scrollable"=>"buffered" ) ); +if( $stmt1 === false ) +{ + echo "Error in statement 1.\n"; + die( print_r( sqlsrv_errors(), true )); +} +else +{ + echo "Statement 1 successful.\n"; + $rowcount = sqlsrv_num_rows( $stmt1 ); + echo $rowcount." rows in result set.\n"; +} + +// Now break the connection $conn +BreakConnection( $conn, $conn_break ); + +// Create another statement. The connection will be reestablished. +$stmt2 = sqlsrv_query( $conn, "SELECT * FROM HumanResources.Department", + array(), array( "Scrollable"=>"buffered" ) ); +if( $stmt2 === false ) +{ + echo "Error in statement 2.\n"; + die( print_r( sqlsrv_errors(), true )); +} +else +{ + echo "Statement 2 successful.\n"; + $rowcount = sqlsrv_num_rows( $stmt2 ); + echo $rowcount." rows in result set.\n"; +} + +sqlsrv_close( $conn ); +sqlsrv_close( $conn_break ); +?> +``` +Expected output: +``` +Statement 1 successful. +290 rows in result set. +Statement 2 successful. +16 rows in result set. +``` +In this example, if we had not specified a buffered cursor, the connection would not have been reestablished because there would have been an active server-side cursor and thus the connection would not have been idle when broken. However, in that case we could have called sqlsrv_free_stmt() before breaking the connection to vacate the cursor, and the connection would have been successfully reestablished. + +## See Also +[Connection Resiliency in the Windows ODBC Driver](https://docs.microsoft.com/en-us/sql/connect/odbc/windows/connection-resiliency-in-the-windows-odbc-driver) From f2c3e6b3ba4fdf0c6d9ec2b849c46eca998c1619 Mon Sep 17 00:00:00 2001 From: Theano Petersen Date: Wed, 12 Jul 2017 19:36:55 -0700 Subject: [PATCH 259/336] Update TOC.md --- docs/tools/sql-server-profiler/TOC.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/tools/sql-server-profiler/TOC.md b/docs/tools/sql-server-profiler/TOC.md index f61430a0f88..57836208671 100644 --- a/docs/tools/sql-server-profiler/TOC.md +++ b/docs/tools/sql-server-profiler/TOC.md @@ -3,7 +3,6 @@ # [SQL Server Profiler Templates and Permissions](sql-server-profiler-templates-and-permissions.md) ## [SQL Server Profiler Templates](sql-server-profiler-templates.md) ## [Create a Trace Template](create-a-trace-template-sql-server-profiler.md) -## [Modify a Trace Template](modify-a-trace-template-sql-server-profiler.md) ## [Modify Trace Templates](modify-trace-templates.md) ## [Derive a Template from a Running Trace](derive-a-template-from-a-running-trace-sql-server-profiler.md) ## [Derive a Template from a Trace File or Trace Table](derive-a-template-from-a-trace-file-or-trace-table-sql-server-profiler.md) @@ -28,7 +27,6 @@ # [View and Analyze Traces with SQL Server Profiler](view-and-analyze-traces-with-sql-server-profiler.md) ## [Analyze Deadlocks with SQL Server Profiler](analyze-deadlocks-with-sql-server-profiler.md) ## [Analyze Queries with SHOWPLAN Results in SQL Server Profiler](analyze-queries-with-showplan-results-in-sql-server-profiler.md) -# [Correlate a Trace with Windows Performance Log Data](correlate-a-trace-with-windows-performance-log-data-sql-server-profiler.md) # [Correlate a Trace with Windows Performance Log Data](correlate-a-trace-with-windows-performance-log-data.md) # [Filter Traces with SQL Server Profiler](filter-traces-with-sql-server-profiler.md) ## [Filter Events in a Trace](filter-events-in-a-trace-sql-server-profiler.md) From 421351554779dc63e2ba92f88cc2918916f2c8b0 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Thu, 13 Jul 2017 07:55:31 -0400 Subject: [PATCH 260/336] Updated environment variables and sqlpackage docs --- .openpublishing.redirection.json | 5 ++ docs/linux/TOC.md | 3 +- .../quickstart-install-connect-docker.md | 7 +- ...r-linux-configure-environment-variables.md | 55 +++++++++--- .../sql-server-linux-develop-overview.md | 1 - .../sql-server-linux-migrate-overview.md | 3 +- .../sql-server-linux-migrate-sqlpackage.md | 83 ------------------- docs/linux/sql-server-linux-migrate-ssms.md | 25 +++++- docs/linux/sql-server-linux-release-notes.md | 7 -- docs/linux/sql-server-linux-whats-new.md | 2 + 10 files changed, 78 insertions(+), 113 deletions(-) delete mode 100644 docs/linux/sql-server-linux-migrate-sqlpackage.md diff --git a/.openpublishing.redirection.json b/.openpublishing.redirection.json index d5200029cc6..0ef50528647 100644 --- a/.openpublishing.redirection.json +++ b/.openpublishing.redirection.json @@ -1,5 +1,10 @@ { "redirections": [ + { + "source_path": "docs/linux/sql-server-linux-migrate-sqlpackage.md", + "redirect_url": "/sql/linux/sql-server-linux-migrate-ssms", + "redirect_document_id": false + }, { "source_path": "docs/linux/sql-server-linux-get-started-tutorial.md", "redirect_url": "/sql/linux/sql-server-linux-overview", diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index 82dd77acb44..adb175430c8 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -39,8 +39,7 @@ ## [Migrate](sql-server-linux-migrate-overview.md) ### [Restore from Windows](sql-server-linux-migrate-restore-database.md) -### [Export and import a BACPAC with SqlPackage](sql-server-linux-migrate-sqlpackage.md) -### [Export and import a BACPAC with SSMS](sql-server-linux-migrate-ssms.md) +### [Export and import a BACPAC from Windows](sql-server-linux-migrate-ssms.md) ### [Migrate with SQL Server Migration Assistant](sql-server-linux-migrate-ssma.md) ### [Bulk copy with bcp](sql-server-linux-migrate-bcp.md) ### [Load data with (SSIS)](sql-server-linux-migrate-ssis.md) diff --git a/docs/linux/quickstart-install-connect-docker.md b/docs/linux/quickstart-install-connect-docker.md index 5a06a15c0a5..880803920dd 100644 --- a/docs/linux/quickstart-install-connect-docker.md +++ b/docs/linux/quickstart-install-connect-docker.md @@ -61,13 +61,13 @@ The following steps increase the memory for Docker for Windows to 4 GB. 1. To run the container image with Docker, you can use the following command from a bash shell (Linux/macOS): ```bash - docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' -p 1401:1433 -d microsoft/mssql-server-linux + docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' -e 'MSSQL_PID=Developer' -p 1401:1433 -d microsoft/mssql-server-linux ``` If you are using Docker for Windows, use the following command from an elevated PowerShell command-prompt: ```PowerShell - docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" -p 1401:1433 -d microsoft/mssql-server-linux + docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" -e "MSSQL_PID=Developer" -p 1401:1433 -d microsoft/mssql-server-linux ``` > [!NOTE] @@ -79,6 +79,7 @@ The following steps increase the memory for Docker for Windows to 4 GB. |-----|-----| | **-e 'ACCEPT_EULA=Y'** | Set the **ACCEPT_EULA** variable to any value to confirm your acceptance of the [End-User Licensing Agreement](http://go.microsoft.com/fwlink/?LinkId=746388). Required setting for the SQL Server image. | | **-e 'SA_PASSWORD=\'** | Specify your own strong password that is at least 8 characters and meets [SQL Server's password requirements](../relational-databases/security/password-policy.md). Required setting for the SQL Server image. | + | **-e 'MSSQL_PID=Developer'** | Specifies the edition or product key. In this example, the freely licensed Developer Edition is used for non-production testing. For other values, see [Configure SQL Server settings with environment variables on Linux](sql-server-linux-configure-environment-variables.md). | | **-p 1401:1433** | Map a TCP port on the host environment (first value) with a TCP port in the container (second value). In this example, SQL Server is listening on TCP 1433 in the container and this is exposed to the port, 1401, on the host. | | **microsoft/mssql-server-linux** | The SQL Server Linux container image. Unless otherwise specified, this defaults to the **latest** image. | @@ -100,7 +101,7 @@ The SA account is a system administrator on the SQL Server instance that gets cr 1. Choose a strong password to use for the SA user. -1. Use `docker exec` to run **sqlcmd** to change the password using Transact-SQL. +1. Use `docker exec` to run **sqlcmd** to change the password using Transact-SQL. Replace `` and `` with your password values. > ```bash > docker exec -it /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '' -Q 'ALTER LOGIN SA WITH PASSWORD="";' diff --git a/docs/linux/sql-server-linux-configure-environment-variables.md b/docs/linux/sql-server-linux-configure-environment-variables.md index e8b1f6167d0..eecf199fb40 100644 --- a/docs/linux/sql-server-linux-configure-environment-variables.md +++ b/docs/linux/sql-server-linux-configure-environment-variables.md @@ -6,7 +6,7 @@ description: This topic describes how to use environment variables to configure author: rothja ms.author: jroth manager: jhubbard -ms.date: 05/22/2017 +ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -25,31 +25,64 @@ ms.assetid: --- # Configure SQL Server settings with environment variables on Linux -You can use several different environment variables to configure SQL Server 2017 RC1 on Linux. This topic provides a list of the settings that are configurable using environment variables. +You can use several different environment variables to configure SQL Server 2017 RC1 on Linux. These variables are used in two scenarios: -> [!IMPORTANT] -> At this time, the environment variables only configure [SQL Server running in Docker](sql-server-linux-setup-docker.md). To configure the SQL Server service outside of a Docker scenario, see [Configure SQL Server on Linux with the mssql-conf tool](sql-server-linux-configure-mssql-conf.md). +- Initial unprompted setup with `mssql-conf -n setup` command. +- Configuring a new [SQL Server container in Docker](quickstart-install-connect-docker.md). + +> [!TIP] +> If you need to configure SQL Server after these setup scenarios, see [Configure SQL Server on Linux with the mssql-conf tool](sql-server-linux-configure-mssql-conf.md). ## Environment variables | Environment variable | Description | |-----|-----| -| **ACCEPT_EULA** | Accept the SQL Server license agreement when set to any value (for example, 'Y'). Used on first install only. | -| **SA_PASSWORD** | Configure the SA user password. Used on first install only. | +| **ACCEPT_EULA** | Accept the SQL Server license agreement when set to any value (for example, 'Y'). | +| **SA_PASSWORD** | Configure the SA user password. | +| **MSSQL_PID** | Set the SQL Server edition or product key. Possible values include: Evaluation, Developer, Express, Web, Standard, Enterprise, or a product key in the form of #####-#####-#####-#####-#####, where '#' is a number or a letter. | +| **MSSQL_LCID** | Sets the language ID to use for SQL Server. For example 1036 is French. | +| **MSSQL_COLLATION** | Sets the default collation for SQL Server. This overrides the default mapping of language id (LCID) to collation. | +| **MSSQL_MEMORY_LIMIT_MB** | Sets the maximum amount of memory SQL Server can use. By default it is 80% of the total physical memory. | | **MSSQL_TCP_PORT** | Configure the TCP port that SQL Server listens on (default 1433). | | **MSSQL_IP_ADDRESS** | Set the IP address. Currently, the IP address must be IPv4 style (0.0.0.0). | -| **MSSQL_BACKUP_DIR** | Sets the Default backup directory location. | +| **MSSQL_BACKUP_DIR** | Set the Default backup directory location. | | **MSSQL_DATA_DIR** | Change the directory where the new SQL Server database data files (.mdf) are created. | -| **MSSQL_LOG_DIR** | Changes the directory where the new SQL Server database log (.ldf) files are created. | +| **MSSQL_LOG_DIR** | Change the directory where the new SQL Server database log (.ldf) files are created. | | **MSSQL_DUMP_DIR** | Change the directory where SQL Server will deposit the memory dumps and other troubleshooting files by default. | | **MSSQL_ENABLE_HADR** | Enable Availability Groups. | -## Example +## Example: initial setup + +The following example runs **mssql-conf setup** without prompts (`-n`). This mode looks for environment variables to use for configuration. The following environment variables are specified: + +- **ACCEPT_EULA** accepts the end user license agreement. +- **MSSSQL_PID** specifies the freely licensed Developer Edition of SQL Server for non-production use. +- **SA_PASSWORD** sets a strong password. +- **MSSQL_TCP_PORT** sets the TCP port that SQL Server listens on to 1234. + +```bash +sudo ACCEPT_EULA='Y' MSSQL_PID='Developer' SA_PASSWORD='' MSSQL_TCP_PORT=1234 /opt/mssql/bin/mssql-conf -n setup +``` + +## Example: Docker + +The following example docker command uses the following environment variables to create a new SQL Server 2017 container: + +- **ACCEPT_EULA** accepts the end user license agreement. +- **MSSSQL_PID** specifies the freely licensed Developer Edition of SQL Server for non-production use. +- **SA_PASSWORD** sets a strong password. +- **MSSQL_TCP_PORT** sets the TCP port that SQL Server listens on to 1234. This means that instead of mapping port 1433 (default) to a host port, the custom TCP port must be mapped with the `-p 1234:1234` command in this example. + +If you are running Docker on Linux/macOS, use the following syntax with single quotes: + +```bash +docker run -e ACCEPT_EULA=Y -e MSSQL_PID='Developer' -e SA_PASSWORD='' -e MSSQL_TCP_PORT=1234 -p 1234:1234 -d microsoft/mssql-server-linux +``` -The following docker run command uses **MSSQL_TCP_PORT** to set the TCP port that SQL Server listens on. In this case, the host port mapping must that this new port into consideration. Instead of mapping port 1433 (default) to a host port, the custom TCP port must be mapped (1234 in this example). +If you are running Docker on Windows, use the following syntax with double quotes: ```bash -docker run -e ACCEPT_EULA=Y -e SA_PASSWORD='' -e MSSQL_TCP_PORT=1234 -p 1234:1234 -d microsoft/mssql-server-linux +docker run -e ACCEPT_EULA=Y -e MSSQL_PID="Developer" -e SA_PASSWORD="" -e MSSQL_TCP_PORT=1234 -p 1234:1234 -d microsoft/mssql-server-linux ``` ## Next steps diff --git a/docs/linux/sql-server-linux-develop-overview.md b/docs/linux/sql-server-linux-develop-overview.md index ee62efaeab1..9a394c48eb2 100644 --- a/docs/linux/sql-server-linux-develop-overview.md +++ b/docs/linux/sql-server-linux-develop-overview.md @@ -72,7 +72,6 @@ You can also use new command-line tools that are native for Linux. These tools i - [sqlcmd](../tools/sqlcmd-utility.md) - [bcp](sql-server-linux-migrate-bcp.md) -- [sqlpackage](sql-server-linux-migrate-sqlpackage.md) - [mssql-conf](sql-server-linux-configure-mssql-conf.md) ## Next steps diff --git a/docs/linux/sql-server-linux-migrate-overview.md b/docs/linux/sql-server-linux-migrate-overview.md index e3d6326dfea..663b6fdf9e2 100644 --- a/docs/linux/sql-server-linux-migrate-overview.md +++ b/docs/linux/sql-server-linux-migrate-overview.md @@ -41,8 +41,7 @@ For a tutorial on migrating a database with backup and restore, see the followin It is also possible to export your database to a BACPAC file (a compressed file that contains your database schema and data). If you have a BACPAC file, you can transfer this file to your Linux machine and then import it to SQL Server. For more information, see the following topics: -- [Export and import a database with sqlpackage](sql-server-linux-migrate-sqlpackage.md) -- [Export and import a database with SSMS](sql-server-linux-migrate-ssms.md) +- [Export and import a database with SSMS or SqlPackage.exe](sql-server-linux-migrate-ssms.md) ## Migrate from other database servers You can migrate databases on other database systems to SQL Server 2017 on Linux. This includes Microsoft Access, DB2, MySQL, Oracle, and Sybase databases. In this scenario, use the SQL Server Management Assistant (SSMA) to automate the migration to SQL Server on Linux. For more information, see [Use SSMA to migrate databases to SQL Server on Linux](sql-server-linux-migrate-ssma.md). diff --git a/docs/linux/sql-server-linux-migrate-sqlpackage.md b/docs/linux/sql-server-linux-migrate-sqlpackage.md deleted file mode 100644 index dd12403bac9..00000000000 --- a/docs/linux/sql-server-linux-migrate-sqlpackage.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -# required metadata - -title: Export and import a SQL Server database on Linux | Microsoft Docs -description: -author: sanagama -ms.author: sanagama -manager: jhubbard -ms.date: 03/17/2017 -ms.topic: article -ms.prod: sql-linux -ms.technology: database-engine -ms.assetid: e239793b-e630-4110-81cc-19b1ef8bb8b0 - -# optional metadata -# keywords: "" -# ROBOTS: "" -# audience: "" -# ms.devlang: "" -# ms.reviewer: "" -# ms.suite: "" -# ms.tgt_pltfrm: "" -# ms.custom: "" - ---- -# Export and import a database on Linux with sqlpackage - -This topic shows how to the **sqlpackage** tool to export and import databases to SQL Server 2017 RC1 on Linux. - -> [!NOTE] -> If you are migrating a database from one SQL Server instance to another, the recommendation is to use [Backup and restore](sql-server-linux-migrate-restore-database.md). - -## Overview -The sqlpackage command line utility can be used to perform a number of operations on databases such as: -- export a database (database schema and user data) to a .bacpac file -- import a database (database schema and/or user data) from a .bacpac file -- create a database snapshot (.dacpac) file for a database -- incrementally update a database schema to match the schema of a source .dacpac file -- create a Transact-SQL incremental update script that updates the schema of a target database to match the schema of a source database - -You can use the sqlpackage command line utility with Microsoft SQL Server running on-premises or in the cloud, on Linux, Windows or Docker and from Azure SQL Database. The sqlpackage command line utility is particularly useful when you wish to import a database from Azure SQL Database to SQL Server on Linux or vice-versa. - -## sqlpackage location - -The sqlpackage command line utility is in the following location after you install SQL Server on Linux. Running sqlpackage with no command line parameters displays help about the available parameters: - -```bash -/opt/mssql/bin/sqlpackage -``` - -You can specify command line parameters for a number of actions along with action specific parameters and properties as follows: - -```bash -/opt/mssql/bin/sqlpackage {parameters}{properties}{SQLCMD Variables} -/opt/mssql/bin/sqlpackage /Action:Extract /SourceServerName:tcp: /SourceDatabaseName: /TargetFile: /SourceUser: /SourcePassword: -``` - -Command line parameters can be specified using their short forms: - -```bash -/opt/mssql/bin/sqlpackage /a:Export /ssn:tcp: /sdn: /tf: /su: /sp: -``` - -## Export a database (schema and user data) to a .BACPAC file - -Use the following command to export database schema and user data to a .BACPAC file: - -```bash -/opt/mssql/bin/sqlpackage /a:Export /ssn:tcp: /sdn: /su: /sp: /tf: -``` - -## Import a database (schema and user data) from a .BACPAC file - -Use the following command to import database schema and user data from a .BACPAC file: - -```bash -/opt/mssql/bin/sqlpackage /a:Import /tsn:tcp: /tdn: /tu: /tp: /sf: - -``` - -## See also -- [sqlpackage command line utility](https://msdn.microsoft.com/library/hh550080.aspx) -- [Data-tier Applications](http://msdn.microsoft.com/library/ee210546.aspx) diff --git a/docs/linux/sql-server-linux-migrate-ssms.md b/docs/linux/sql-server-linux-migrate-ssms.md index f6f9227de9a..2bf30c33586 100644 --- a/docs/linux/sql-server-linux-migrate-ssms.md +++ b/docs/linux/sql-server-linux-migrate-ssms.md @@ -1,12 +1,12 @@ --- # required metadata -title: Export and import a database on Linux with SSMS | Microsoft Docs +title: Export and import a database on Linux | Microsoft Docs description: author: sanagama ms.author: sanagama manager: jhubbard -ms.date: 03/17/2017 +ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -23,9 +23,9 @@ ms.assetid: 2210cfc3-c23a-4025-a551-625890d6845f ms.custom: H1Hack27Feb2017 --- -# Export and import a database on Linux with SQL Server Management Studio on Windows +# Export and import a database on Linux with SSMS or SqlPackage.exe on Windows -This topic shows how to use [SQL Server Management Studio (SSMS)](https://msdn.microsoft.com/library/mt238290.aspx) to export and import a database on SQL Server 2017 RC1 on Linux. SSMS is a Windows application, so use SSMS when you have a Windows machine that can connect to a remote SQL Server instance on Linux. +This topic shows how to use [SQL Server Management Studio (SSMS)](https://msdn.microsoft.com/library/mt238290.aspx) and [SqlPackage.exe](https://msdn.microsoft.com/library/hh550080.aspx) to export and import a database on SQL Server 2017 RC1 on Linux. SSMS and SqlPackage.exe are Windows applications, so use this technique when you have a Windows machine that can connect to a remote SQL Server instance on Linux. You should always install and use the most recent version of SQL Server Management Studio (SSMS) as described in [Use SSMS on Windows to connect to SQL Server on Linux](sql-server-linux-develop-use-ssms.md) @@ -68,5 +68,22 @@ The *.BACPAC file is successfully created at the location you chose and you are The *.BACPAC file is imported to create a new database in the target server you specified. +## SqlPackage command-line option + +It is also possible to use the SQL Server Data Tools (SSDT) command-line tool, [SqlPackage.exe](https://msdn.microsoft.com/library/hh550080.aspx) to export and import BACPAC files. + +The following example command exports a BACPAC file: + +```bash +SqlPackage.exe /a:Export /ssn:tcp: /sdn: /su: /sp: /tf: +``` + +Use the following command to import database schema and user data from a .BACPAC file: + +```bash +SqlPackage.exe /a:Import /tsn:tcp: /tdn: /tu: /tp: /sf: + +``` + ## See also For more information on how to use SSMS, see [Use SQL Server Management Studio](https://msdn.microsoft.com/library/ms174173.aspx). diff --git a/docs/linux/sql-server-linux-release-notes.md b/docs/linux/sql-server-linux-release-notes.md index 0fcdecd475d..04b320c81cc 100644 --- a/docs/linux/sql-server-linux-release-notes.md +++ b/docs/linux/sql-server-linux-release-notes.md @@ -144,13 +144,6 @@ The following sections describe known issues with this release of SQL Server 201 #### Full-Text Search - Not all filters are available with this release, including filters for Office documents. For a list of supported filters, see [Install SQL Server Full-Text Search on Linux](sql-server-linux-setup-full-text-search.md#filters). -#### SqlPackage -- Using SqlPackage requires specifying an absolute path for files. Using relative paths will map the files under the "/tmp/sqlpackage.\/system/system32" folder. - - - **Resolution**: Use absolute file paths. - -- SqlPackage shows the location of files with a "C:\\" prefix. - #### SQL Server Integration Services (SSIS) You can run SSIS packages on Linux. For more info, see the [blog post announcing SSIS support for Linux](https://blogs.msdn.microsoft.com/ssis/2017/05/17/ssis-helsinki-is-available-in-sql-server-vnext-ctp2-1/). Please note the following known issues with this release. diff --git a/docs/linux/sql-server-linux-whats-new.md b/docs/linux/sql-server-linux-whats-new.md index 0481f7f2ebc..563c7bd0a8d 100644 --- a/docs/linux/sql-server-linux-whats-new.md +++ b/docs/linux/sql-server-linux-whats-new.md @@ -26,6 +26,8 @@ The RC1 release contains the following improvements and fixes: - Enabled [Windows Authentication](sql-server-linux-active-directory-authentication.md). - Enabled [DB Mail](../relational-databases/database-mail/database-mail.md). - Added IPV6 support. +- Added environment variables for initial SQL Server setup. For more information, see [Configure SQL Server settings with environment variables on Linux](sql-server-linux-configure-environment-variables.md). +- Removed **sqlpackage** from installed binaries. SqlPackage can still be run against Linux remotely from Windows. ## CTP 2.1 From 2d91d2150a566444f5bc70c5e6fac32df265c23e Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Thu, 13 Jul 2017 10:54:22 -0400 Subject: [PATCH 261/336] Updating samples to latest version and other cross linking --- .../quickstart-install-connect-docker.md | 2 +- .../quickstart-install-connect-red-hat.md | 2 +- docs/linux/quickstart-install-connect-suse.md | 2 +- .../quickstart-install-connect-ubuntu.md | 2 +- .../linux/sample-unattended-install-redhat.md | 111 +++++++++++++---- docs/linux/sample-unattended-install-suse.md | 112 +++++++++++++---- .../linux/sample-unattended-install-ubuntu.md | 114 +++++++++++++----- ...r-linux-configure-environment-variables.md | 4 +- 8 files changed, 268 insertions(+), 81 deletions(-) diff --git a/docs/linux/quickstart-install-connect-docker.md b/docs/linux/quickstart-install-connect-docker.md index 880803920dd..55f5c07505d 100644 --- a/docs/linux/quickstart-install-connect-docker.md +++ b/docs/linux/quickstart-install-connect-docker.md @@ -4,7 +4,7 @@ description: This quick start tutorial shows how to use Docker to run the SQL Se author: rothja ms.author: jroth manager: jhubbard -ms.date: 07/19/2017 +ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine diff --git a/docs/linux/quickstart-install-connect-red-hat.md b/docs/linux/quickstart-install-connect-red-hat.md index 5fe364139cb..c2e0c292d9d 100644 --- a/docs/linux/quickstart-install-connect-red-hat.md +++ b/docs/linux/quickstart-install-connect-red-hat.md @@ -5,7 +5,7 @@ description: Describes how to install SQL Server 2017 RC1 on Red Hat Enterprise author: sabotta ms.author: carlasab manager: craigg -ms.date: 07/19/2017 +ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine diff --git a/docs/linux/quickstart-install-connect-suse.md b/docs/linux/quickstart-install-connect-suse.md index e7f3c207eaf..487e715e244 100644 --- a/docs/linux/quickstart-install-connect-suse.md +++ b/docs/linux/quickstart-install-connect-suse.md @@ -5,7 +5,7 @@ description: Describes how to install SQL Server 2017 RC1 on SUSE Linux Enterpri author: sabotta ms.author: carlasab manager: craigg -ms.date: 07/19/2017 +ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine diff --git a/docs/linux/quickstart-install-connect-ubuntu.md b/docs/linux/quickstart-install-connect-ubuntu.md index 26189cf3e26..dd32750a8d0 100644 --- a/docs/linux/quickstart-install-connect-ubuntu.md +++ b/docs/linux/quickstart-install-connect-ubuntu.md @@ -4,7 +4,7 @@ description: This quick start tutorial shows how to install SQL Server on Ubuntu author: rothja ms.author: jroth manager: jhubbard -ms.date: 07/19/2017 +ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine diff --git a/docs/linux/sample-unattended-install-redhat.md b/docs/linux/sample-unattended-install-redhat.md index e02e86cd361..bdb7a029060 100644 --- a/docs/linux/sample-unattended-install-redhat.md +++ b/docs/linux/sample-unattended-install-redhat.md @@ -1,32 +1,30 @@ --- -title: SQL Server Unattended Install on Red Hat Enterprise Linux | Microsoft Docs +title: Unattended install for SQL Server on Red Hat Enterprise Linux | Microsoft Docs description: SQL Server Script Sample - Unattended Install on Red Hat Enterprise Linux -services: sql-database -documentationcenter: sql-database author: edmacauley -manager: -editor: -tags: azure-service-management - -ms.assetid: -ms.service: sql-database -ms.custom: mvc -ms.devlang: azurecli -ms.topic: sample -ms.tgt_pltfrm: sql-database -ms.workload: database -ms.date: 6/19/2017 ms.author: edmacauley +manager: jhubbard +ms.date: 07/17/2017 +ms.topic: article +ms.prod: sql-linux +ms.technology: database-engine --- +# Sample: Unattended SQL Server installation script for Red Hat Enterprise Linux -# Install SQL Server on Red Hat Enterprise Linux +This sample Bash script installs SQL Server 2017 CTP 2.1 on Red Hat Enterprise Linux (RHEL) without interactive input. It provides examples of installing the database engine, the SQL Server command-line tools, SQL Server Agent, and performs post-install steps. You can optionally install full-text search and create an administrative user. -This sample Bash script installs SQL Server 2017 CTP 2.1 on Red Hat Enterprise Linux (RHEL) without interactive input. +> [!TIP] +> If you do not need an unattended installation script, the fastest way to install SQL Server is to follow the [quick start tutorial for Red Hat](quickstart-install-connect-red-hat.md). For other setup information, see [Installation guidance for SQL Server on Linux](sql-server-linux-setup.md). -> [!NOTE] -> You need at least 3.25 GB of memory to run SQL Server on Linux. Also, the file system must be **XFS** or **EXT4**. Other file systems, such as **BTRFS**, are unsupported. For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). +## Prerequisites + +- You need at least 3.25 GB of memory to run SQL Server on Linux. +- The file system must be **XFS** or **EXT4**. Other file systems, such as **BTRFS**, are unsupported. +- For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). ## Sample script +Save the sample script to a file and then to customize it, +replace the variable values in the script. You can also set any of the scripting variables as environment variables, as long as you remove them from the script file. ```bash #!/bin/bash @@ -36,6 +34,11 @@ This sample Bash script installs SQL Server 2017 CTP 2.1 on Red Hat Enterprise L # Password for the SA user (required) SA_PASSWORD='' +# Product ID of the version of SQL server you're installing +# Must be evaluation, developer, express, web, standard, enterprise, or your 25 digit product key +# Defaults to developer +MSSQL_PID='evaluation' + # Install SQL Server Agent (recommended) SQL_INSTALL_AGENT='y' @@ -64,10 +67,11 @@ sudo yum install -y mssql-server echo Running mssql-conf setup... sudo SA_PASSWORD=$SA_PASSWORD \ - /opt/mssql/bin/mssql-conf -n setup accept-eula + MSSQL_PID=$MSSQL_PID \ + /opt/mssql/bin/mssql-conf -n setup accept-eula echo Installing mssql-tools and unixODBC developer... -sudo ACCEPT_EULA=Y yum install -y mssql-tools unixodbc-dev +sudo ACCEPT_EULA=Y yum install -y mssql-tools unixODBC-devel # Add SQL Server tools to the path by default: echo Adding SQL Server tools to your path... @@ -95,8 +99,8 @@ sudo firewall-cmd --reload # Example of setting post-installation configuration options # Set trace flags 1204 and 1222 for deadlock tracing: -echo Setting trace flags... -sudo /opt/mssql/bin/mssql-conf traceflag 1204 1222 on +#echo Setting trace flags... +#sudo /opt/mssql/bin/mssql-conf traceflag 1204 1222 on # Restart SQL Server after making configuration changes: echo Restarting SQL Server... @@ -139,16 +143,75 @@ fi echo Done! ``` +## Running the script + +To run the script + +1. Paste the sample into your favorite text editor and save it with a memorable name, like `install_sql.sh`. + +1. Customize `SA_PASSWORD`, `MSSQL_PID`, and any of the other variables you'd like to change. + +1. Mark the script as executable + + ```bash + chmod +x install_sql.sh + ``` + +1. Run the script + + ```bash + ./install_sql.sh + ``` + +## Understanding the script + +The first thing the Bash script does is set a few variables. These can be either scripting variables, like the sample, or environment variables. The variable ``` SA_PASSWORD ``` is **required** by SQL Server installation, the others are custom variables created for the script. The sample script performs the following steps: + +1. Import the public Microsoft GPG keys. + +1. Register the Microsoft repositories for SQL Server and the command-line tools. + +1. Update the local repositories + +1. Install SQL Server + +1. Configure SQL Server with the ```SA_PASSWORD``` and automatically accept the End-User License Agreement. + +1. Automatically accept the End-User License Agreement for the SQL Server command-line tools, install them, and install the unixodbc-dev package. + +1. Add the SQL Server command-line tools to the path for ease of use. + +1. Install the SQL Server Agent if the scripting variable ```SQL_INSTALL_AGENT``` is set, on by default. + +1. Optionally install SQL Server Full-Text search, if the variable ```SQL_INSTALL_FULLTEXT``` is set. + +1. Unblock port 1433 for TCP on the system firewall, necessary to connect to SQL Server from another system. + +1. Optionally set trace flags for deadlock tracing. (requires uncommenting the lines) + +1. SQL Server is now installed, to make it operational, restart the process. + +1. Verify that SQL Server is installed correctly, while hiding any error messages. + +1. Create a new server administrator user if ```SQL_INSTALL_USER``` and ```SQL_INSTALL_USER_PASSWORD``` are both set. + ## Next steps -Simplify your unattended installs by creating a Bash script that sets the proper environment variables, instead of doing it inline. +Simplify multiple unattended installs and create a stand-alone Bash script that sets the proper environment variables. You can remove any of the variables the sample script uses and put them in their own Bash script. ```bash #!/bin/bash export SA_PASSWORD='' +export MSSQL_PID='evaluation' export SQL_INSTALL_AGENT='y' export SQL_INSTALL_USER='' export SQL_INSTALL_USER_PASSWORD='' +export SQL_INSTALL_AGENT='y' +``` + +Then run the Bash script as follows: +```bash +. ./my_script_name.sh ``` For more information about SQL Server on Linux, see [SQL Server on Linux overview](sql-server-linux-overview.md). \ No newline at end of file diff --git a/docs/linux/sample-unattended-install-suse.md b/docs/linux/sample-unattended-install-suse.md index c5baf358a8e..1fb683e9d5a 100644 --- a/docs/linux/sample-unattended-install-suse.md +++ b/docs/linux/sample-unattended-install-suse.md @@ -1,32 +1,29 @@ --- -title: SQL Server Unattended Install on SUSE Linux Enterprise Server | Microsoft Docs +title: Unattended install for SQL Server on SUSE Linux Enterprise Server | Microsoft Docs description: SQL Server Script Sample - Unattended Install on SUSE Linux Enterprise Server -services: sql-database -documentationcenter: sql-database author: edmacauley -manager: -editor: -tags: azure-service-management - -ms.assetid: -ms.service: sql-database -ms.custom: mvc -ms.devlang: azurecli -ms.topic: sample -ms.tgt_pltfrm: sql-database -ms.workload: database -ms.date: 6/19/2017 ms.author: edmacauley +manager: jhubbard +ms.date: 07/17/2017 +ms.topic: article +ms.prod: sql-linux +ms.technology: database-engine --- +# Sample: Unattended SQL Server installation script for SUSE Linux Enterprise Server -# Install SQL Server on SUSE Linux Enterprise Server +This sample Bash script installs SQL Server 2017 CTP 2.1 on SUSE Linux Enterprise Server (SLES) v12 SP2 without interactive input. It provides examples of installing the database engine, the SQL Server command-line tools, SQL Server Agent, and performs post-install steps. You can optionally install full-text search and create an administrative user. -This sample Bash script installs SQL Server 2017 CTP 2.1 on SUSE Linux Enterprise Server (SLES) v12 SP2 without interactive input. +> [!TIP] +> If you do not need an unattended installation script, the fastest way to install SQL Server is to follow the [quick start tutorial for SLES](quickstart-install-connect-suse.md). For other setup information, see [Installation guidance for SQL Server on Linux](sql-server-linux-setup.md). -> [!NOTE] -> SQL Server 2017 CTP 2.1 requires libsss_nss_idmap0, which is not provided by the default SLES repositories. You can install it from the SLES v12 SP2 SDK. +## Prerequisites + +- You need at least 3.25 GB of memory to run SQL Server on Linux. +- The file system must be **XFS** or **EXT4**. Other file systems, such as **BTRFS**, are unsupported. +- For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). -> You need at least 3.25 GB of memory to run SQL Server on Linux. Also, the file system must be **XFS** or **EXT4**. Other file systems, such as **BTRFS**, are unsupported. For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). +> [!IMPORTANT] +> SQL Server 2017 CTP 2.1 requires libsss_nss_idmap0, which is not provided by the default SLES repositories. You can install it from the SLES v12 SP2 SDK. ## Sample script @@ -38,6 +35,11 @@ This sample Bash script installs SQL Server 2017 CTP 2.1 on SUSE Linux Enterpris # Password for the SA user (required) SA_PASSWORD='' +# Product ID of the version of SQL server you're installing +# Must be evaluation, developer, express, web, standard, enterprise, or your 25 digit product key +# Defaults to developer +MSSQL_PID='evaluation' + # Install SQL Server Agent (recommended) SQL_INSTALL_AGENT='y' @@ -59,12 +61,16 @@ sudo zypper addrepo -fc https://packages.microsoft.com/config/sles/12/mssql-serv sudo zypper addrepo -fc https://packages.microsoft.com/config/sles/12/prod.repo sudo zypper --gpg-auto-import-keys refresh +#Add the SLES v12 SP2 SDK to obtain libsss_nss_idmap0 +sudo SUSEConnect -p sle-sdk/12.2/x86_64 + echo Installing SQL Server... sudo zypper install -y mssql-server echo Running mssql-conf setup... sudo SA_PASSWORD=$SA_PASSWORD \ - /opt/mssql/bin/mssql-conf -n setup accept-eula + MSSQL_PID=$MSSQL_PID \ + /opt/mssql/bin/mssql-conf -n setup accept-eula echo Installing mssql-tools and unixODBC developer... sudo ACCEPT_EULA=Y zypper install -y mssql-tools unixODBC-devel @@ -96,8 +102,8 @@ sudo SuSEfirewall2 start # Example of setting post-installation configuration options # Set trace flags 1204 and 1222 for deadlock tracing: -echo Setting trace flags... -sudo /opt/mssql/bin/mssql-conf traceflag 1204 1222 on +# echo Setting trace flags... +# sudo /opt/mssql/bin/mssql-conf traceflag 1204 1222 on # Restart SQL Server after making configuration changes: echo Restarting SQL Server... @@ -140,16 +146,74 @@ fi echo Done! ``` +### Running the script + +To run the script + +1. Paste the sample into your favorite text editor and save it with a memorable name, like `install_sql.sh`. + +1. Customize `SA_PASSWORD`, `MSSQL_PID`, and any of the other variables you'd like to change. + +1. Mark the script as executable + + ```bash + chmod +x install_sql.sh + ``` + +1. Run the script + + ```bash + ./install_sql.sh + ``` + +### Understanding the script +The first thing the Bash script does is set a few variables. These can be either scripting variables, like the sample, or environment variables. The variable ``` SA_PASSWORD ``` is **required** by SQL Server installation, the others are custom variables created for the script. The sample script performs the following steps: + +1. Import the public Microsoft GPG keys. + +1. Register the Microsoft repositories for SQL Server and the command-line tools. + +1. Update the local repositories + +1. Install SQL Server + +1. Configure SQL Server with the ```SA_PASSWORD``` and automatically accept the End-User License Agreement. + +1. Automatically accept the End-User License Agreement for the SQL Server command-line tools, install them, and install the unixodbc-dev package. + +1. Add the SQL Server command-line tools to the path for ease of use. + +1. Install the SQL Server Agent if the scripting variable ```SQL_INSTALL_AGENT``` is set, on by default. + +1. Optionally install SQL Server Full-Text search, if the variable ```SQL_INSTALL_FULLTEXT``` is set. + +1. Unblock port 1433 for TCP on the system firewall, necessary to connect to SQL Server from another system. + +1. Optionally set trace flags for deadlock tracing. (requires uncommenting the lines) + +1. SQL Server is now installed, to make it operational, restart the process. + +1. Verify that SQL Server is installed correctly, while hiding any error messages. + +1. Create a new server administrator user if ```SQL_INSTALL_USER``` and ```SQL_INSTALL_USER_PASSWORD``` are both set. + ## Next steps -Simplify your unattended installs by creating a Bash script that sets the proper environment variables, instead of doing it inline. +Simplify multiple unattended installs and create a stand-alone Bash script that sets the proper environment variables. You can remove any of the variables the sample script uses and put them in their own Bash script. ```bash #!/bin/bash export SA_PASSWORD='' +export MSSQL_PID='evaluation' export SQL_INSTALL_AGENT='y' export SQL_INSTALL_USER='' export SQL_INSTALL_USER_PASSWORD='' +export SQL_INSTALL_AGENT='y' +``` + +Then run the Bash script as follows: +```bash +. ./my_script_name.sh ``` For more information about SQL Server on Linux, see [SQL Server on Linux overview](sql-server-linux-overview.md). \ No newline at end of file diff --git a/docs/linux/sample-unattended-install-ubuntu.md b/docs/linux/sample-unattended-install-ubuntu.md index 2d9e7e3ae4f..d3546669023 100644 --- a/docs/linux/sample-unattended-install-ubuntu.md +++ b/docs/linux/sample-unattended-install-ubuntu.md @@ -1,30 +1,26 @@ --- -title: SQL Server Unattended Install on Ubuntu | Microsoft Docs +title: Unattended install for SQL Server on Ubuntu | Microsoft Docs description: SQL Server Script Sample - Unattended Install on Ubuntu -services: sql-database -documentationcenter: sql-database author: edmacauley -manager: -editor: -tags: azure-service-management - -ms.assetid: -ms.service: sql-database -ms.custom: mvc -ms.devlang: azurecli -ms.topic: sample -ms.tgt_pltfrm: sql-database -ms.workload: database -ms.date: 6/19/2017 ms.author: edmacauley +manager: jhubbard +ms.date: 07/17/2017 +ms.topic: article +ms.prod: sql-linux +ms.technology: database-engine --- +# Sample: Unattended SQL Server installation script for Ubuntu -# Install SQL Server on Ubuntu +This sample Bash script installs SQL Server 2017 CTP 2.1 on Ubuntu 16.04 without interactive input. It provides examples of installing the database engine, the SQL Server command-line tools, SQL Server Agent, and performs post-install steps. You can optionally install full-text search and create an administrative user. -This sample Bash script installs SQL Server 2017 CTP 2.1 on Ubuntu 16.04 without interactive input. +> [!TIP] +> If you do not need an unattended installation script, the fastest way to install SQL Server is to follow the [quick start tutorial for Ubuntu](quickstart-install-connect-ubuntu.md). For other setup information, see [Installation guidance for SQL Server on Linux](sql-server-linux-setup.md). -> [!NOTE] -> You need at least 3.25 GB of memory to run SQL Server on Linux. Also, the file system must be **XFS** or **EXT4**. Other file systems, such as **BTRFS**, are unsupported. For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). +## Prerequisites + +- You need at least 3.25 GB of memory to run SQL Server on Linux. +- The file system must be **XFS** or **EXT4**. Other file systems, such as **BTRFS**, are unsupported. +- For other system requirements, see [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). ## Sample script @@ -36,6 +32,11 @@ This sample Bash script installs SQL Server 2017 CTP 2.1 on Ubuntu 16.04 without # Password for the SA user (required) SA_PASSWORD='' +# Product ID of the version of SQL server you're installing +# Must be evaluation, developer, express, web, standard, enterprise, or your 25 digit product key +# Defaults to developer +MSSQL_PID='evaluation' + # Install SQL Server Agent (recommended) SQL_INSTALL_AGENT='y' @@ -67,7 +68,8 @@ sudo apt-get install -y mssql-server echo Running mssql-conf setup... sudo SA_PASSWORD=$SA_PASSWORD \ - /opt/mssql/bin/mssql-conf -n setup accept-eula + MSSQL_PID=$MSSQL_PID \ + /opt/mssql/bin/mssql-conf -n setup accept-eula echo Installing mssql-tools and unixODBC developer... sudo ACCEPT_EULA=Y apt-get install -y mssql-tools unixodbc-dev @@ -96,12 +98,12 @@ echo Configuring UFW to allow traffic on port 1433... sudo ufw allow 1433/tcp sudo ufw reload -# Example of setting post-installation configuration options -# Set trace flags 1204 and 1222 for deadlock tracing: -echo Setting trace flags... -sudo /opt/mssql/bin/mssql-conf traceflag 1204 1222 on +# Optional example of post-installation configuration. +# Trace flags 1204 and 1222 are for deadlock tracing. +# echo Setting trace flags... +# sudo /opt/mssql/bin/mssql-conf traceflag 1204 1222 on -# Restart SQL Server after making configuration changes: +# Restart SQL Server after installing: echo Restarting SQL Server... sudo systemctl restart mssql-server @@ -111,7 +113,7 @@ errstatus=1 while [ $counter -le 5 ] && [ $errstatus = 1 ] do echo Waiting for SQL Server to start... - sleep 5s + sleep 3s /opt/mssql-tools/bin/sqlcmd \ -S localhost \ -U SA \ @@ -142,16 +144,74 @@ fi echo Done! ``` +### Running the script + +To run the script + +1. Paste the sample into your favorite text editor and save it with a memorable name, like `install_sql.sh`. + +1. Customize `SA_PASSWORD`, `MSSQL_PID`, and any of the other variables you'd like to change. + +1. Mark the script as executable + + ```bash + chmod +x install_sql.sh + ``` + +1. Run the script + + ```bash + ./install_sql.sh + ``` + +### Understanding the script +The first thing the Bash script does is set a few variables. These can be either scripting variables, like the sample, or environment variables. The variable ``` SA_PASSWORD ``` is **required** by SQL Server installation, the others are custom variables created for the script. The sample script performs the following steps: + +1. Import the public Microsoft GPG keys. + +1. Register the Microsoft repositories for SQL Server and the command-line tools. + +1. Update the local repositories + +1. Install SQL Server + +1. Configure SQL Server with the ```SA_PASSWORD``` and automatically accept the End-User License Agreement. + +1. Automatically accept the End-User License Agreement for the SQL Server command-line tools, install them, and install the unixodbc-dev package. + +1. Add the SQL Server command-line tools to the path for ease of use. + +1. Install the SQL Server Agent if the scripting variable ```SQL_INSTALL_AGENT``` is set, on by default. + +1. Optionally install SQL Server Full-Text search, if the variable ```SQL_INSTALL_FULLTEXT``` is set. + +1. Unblock port 1433 for TCP on the system firewall, necessary to connect to SQL Server from another system. + +1. Optionally set trace flags for deadlock tracing. (requires uncommenting the lines) + +1. SQL Server is now installed, to make it operational, restart the process. + +1. Verify that SQL Server is installed correctly, while hiding any error messages. + +1. Create a new server administrator user if ```SQL_INSTALL_USER``` and ```SQL_INSTALL_USER_PASSWORD``` are both set. + ## Next steps -Simplify your unattended installs by creating a Bash script that sets the proper environment variables, instead of doing it inline. +Simplify multiple unattended installs and create a stand-alone Bash script that sets the proper environment variables. You can remove any of the variables the sample script uses and put them in their own Bash script. ```bash #!/bin/bash export SA_PASSWORD='' +export MSSQL_PID='evaluation' export SQL_INSTALL_AGENT='y' export SQL_INSTALL_USER='' export SQL_INSTALL_USER_PASSWORD='' +export SQL_INSTALL_AGENT='y' +``` + +Then run the Bash script as follows: +```bash +. ./my_script_name.sh ``` For more information about SQL Server on Linux, see [SQL Server on Linux overview](sql-server-linux-overview.md). \ No newline at end of file diff --git a/docs/linux/sql-server-linux-configure-environment-variables.md b/docs/linux/sql-server-linux-configure-environment-variables.md index eecf199fb40..cd80fca8f19 100644 --- a/docs/linux/sql-server-linux-configure-environment-variables.md +++ b/docs/linux/sql-server-linux-configure-environment-variables.md @@ -53,7 +53,7 @@ You can use several different environment variables to configure SQL Server 2017 ## Example: initial setup -The following example runs **mssql-conf setup** without prompts (`-n`). This mode looks for environment variables to use for configuration. The following environment variables are specified: +This example runs `mssql-conf setup` without prompts (`-n`). This mode looks for environment variables to use for configuration. The following environment variables are specified: - **ACCEPT_EULA** accepts the end user license agreement. - **MSSSQL_PID** specifies the freely licensed Developer Edition of SQL Server for non-production use. @@ -66,7 +66,7 @@ sudo ACCEPT_EULA='Y' MSSQL_PID='Developer' SA_PASSWORD='' M ## Example: Docker -The following example docker command uses the following environment variables to create a new SQL Server 2017 container: +This example docker command uses the following environment variables to create a new SQL Server 2017 container: - **ACCEPT_EULA** accepts the end user license agreement. - **MSSSQL_PID** specifies the freely licensed Developer Edition of SQL Server for non-production use. From 3a15f21909a11615b3e28d3a095f8e2fd143d217 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Thu, 13 Jul 2017 12:42:40 -0400 Subject: [PATCH 262/336] Adding necessary docker flag and making docker config distinct --- .openpublishing.redirection.json | 2 +- docs/linux/TOC.md | 2 +- .../quickstart-install-connect-docker.md | 11 +- ...d => sql-server-linux-configure-docker.md} | 109 ++++-------------- ...r-linux-configure-environment-variables.md | 4 +- docs/linux/sql-server-linux-migrate-ssms.md | 4 +- docs/linux/sql-server-linux-release-notes.md | 16 +-- .../sql-server-linux-troubleshooting-guide.md | 2 +- 8 files changed, 42 insertions(+), 108 deletions(-) rename docs/linux/{sql-server-linux-setup-docker.md => sql-server-linux-configure-docker.md} (72%) diff --git a/.openpublishing.redirection.json b/.openpublishing.redirection.json index 0ef50528647..f4ae9527ff6 100644 --- a/.openpublishing.redirection.json +++ b/.openpublishing.redirection.json @@ -31,7 +31,7 @@ "redirect_document_id": false }, { - "source_path": "docs/linux/sql-linux-quickstart-connect-docker.md", + "source_path": "docs/linux/sql-server-linux-setup-docker.md", "redirect_url": "/sql/linux/quickstart-install-connect-docker", "redirect_document_id": false }, diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index adb175430c8..e519c967acf 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -22,7 +22,7 @@ ## Configure ### [Configure with mssql-conf](sql-server-linux-configure-mssql-conf.md) ### [Environment variables](sql-server-linux-configure-environment-variables.md) -### [Docker](sql-server-linux-setup-docker.md) +### [Docker](sql-server-linux-configure-docker.md) ### [Customer Feedback](sql-server-linux-customer-feedback.md) ## [Develop](sql-server-linux-develop-overview.md) diff --git a/docs/linux/quickstart-install-connect-docker.md b/docs/linux/quickstart-install-connect-docker.md index 55f5c07505d..e92a88cf4ed 100644 --- a/docs/linux/quickstart-install-connect-docker.md +++ b/docs/linux/quickstart-install-connect-docker.md @@ -61,13 +61,13 @@ The following steps increase the memory for Docker for Windows to 4 GB. 1. To run the container image with Docker, you can use the following command from a bash shell (Linux/macOS): ```bash - docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' -e 'MSSQL_PID=Developer' -p 1401:1433 -d microsoft/mssql-server-linux + docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' -e 'MSSQL_PID=Developer' --cap-add SYS_PTRACE -p 1401:1433 -d microsoft/mssql-server-linux ``` If you are using Docker for Windows, use the following command from an elevated PowerShell command-prompt: ```PowerShell - docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" -e "MSSQL_PID=Developer" -p 1401:1433 -d microsoft/mssql-server-linux + docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d microsoft/mssql-server-linux ``` > [!NOTE] @@ -80,6 +80,7 @@ The following steps increase the memory for Docker for Windows to 4 GB. | **-e 'ACCEPT_EULA=Y'** | Set the **ACCEPT_EULA** variable to any value to confirm your acceptance of the [End-User Licensing Agreement](http://go.microsoft.com/fwlink/?LinkId=746388). Required setting for the SQL Server image. | | **-e 'SA_PASSWORD=\'** | Specify your own strong password that is at least 8 characters and meets [SQL Server's password requirements](../relational-databases/security/password-policy.md). Required setting for the SQL Server image. | | **-e 'MSSQL_PID=Developer'** | Specifies the edition or product key. In this example, the freely licensed Developer Edition is used for non-production testing. For other values, see [Configure SQL Server settings with environment variables on Linux](sql-server-linux-configure-environment-variables.md). | + | **--cap-add SYS_PTRACE** | Adds the Linux capability to trace a process. This enables SQL Server to generate dumps on an exception. | | **-p 1401:1433** | Map a TCP port on the host environment (first value) with a TCP port in the container (second value). In this example, SQL Server is listening on TCP 1433 in the container and this is exposed to the port, 1401, on the host. | | **microsoft/mssql-server-linux** | The SQL Server Linux container image. Unless otherwise specified, this defaults to the **latest** image. | @@ -93,7 +94,7 @@ The following steps increase the memory for Docker for Windows to 4 GB. ![Docker ps command output](./media/sql-server-linux-setup-docker/docker-ps-command.png) -1. If the **STATUS** column shows a status of **Up**, then SQL Server is running in the container and listening on the port specified in the **PORTS** column. If the **STATUS** column for your SQL Server container shows **Exited**, see the [Troubleshooting](#troubleshooting) section. +1. If the **STATUS** column shows a status of **Up**, then SQL Server is running in the container and listening on the port specified in the **PORTS** column. If the **STATUS** column for your SQL Server container shows **Exited**, see the [Troubleshooting section of the configuration guide](sql-server-linux-configure-docker.md#troubleshooting). ## Change the SA password @@ -238,4 +239,6 @@ Other common tools to connect to SQL Server include: ## Next steps -Check out the [mssql-docker GitHub repository](https://github.com/Microsoft/mssql-docker) for resources, feedback, and known issues. +To explore other scenarios, such as running multiple containers, data persistence, and troublehshooting, see [Configure SQL Server 2017 container images on Docker](sql-server-linux-configure-docker.md). + +Also, check out the [mssql-docker GitHub repository](https://github.com/Microsoft/mssql-docker) for resources, feedback, and known issues. diff --git a/docs/linux/sql-server-linux-setup-docker.md b/docs/linux/sql-server-linux-configure-docker.md similarity index 72% rename from docs/linux/sql-server-linux-setup-docker.md rename to docs/linux/sql-server-linux-configure-docker.md index 01999a4b765..ab6d265fdb5 100644 --- a/docs/linux/sql-server-linux-setup-docker.md +++ b/docs/linux/sql-server-linux-configure-docker.md @@ -1,8 +1,8 @@ --- # required metadata -title: Run SQL Server 2017 on Docker | Microsoft Docs -description: Download and run the Docker image for SQL Server 2017. +title: Configuration options for SQL Server 2017 on Docker | Microsoft Docs +description: Explore different ways of using and interacting with SQL Server 2017 container images in Docker. This includes persisting data, copying files, and troubleshooting. author: rothja ms.author: jroth manager: jhubbard @@ -24,91 +24,20 @@ ms.assetid: 82737f18-f5d6-4dce-a255-688889fdde69 ms.custom: H1Hack27Feb2017 --- -# Run the SQL Server 2017 container image on Docker on Linux, Mac, or Windows +# Configure SQL Server 2017 container images on Docker -This topic explains how to pull and run the [mssql-server-linux container image](https://hub.docker.com/r/microsoft/mssql-server-linux/) using Docker. This image consists of SQL Server running on Linux based on Ubuntu 16.04. It can be used with the Docker Engine 1.8+ on Linux or on Docker for Mac/Windows. +This topic explains how to configure and use the [mssql-server-linux container image](https://hub.docker.com/r/microsoft/mssql-server-linux/) with Docker. This image consists of SQL Server running on Linux based on Ubuntu 16.04. It can be used with the Docker Engine 1.8+ on Linux or on Docker for Mac/Windows. > [!NOTE] > This topic specifically focuses on using the mssql-server-linux image. The Windows image is not covered, but you can learn more about it on the [mssql-server-windows Docker Hub page](https://hub.docker.com/r/microsoft/mssql-server-windows/). -## Requirements for Docker - -- Docker Engine 1.8+ on any supported Linux distribution or Docker for Mac/Windows. -- Minimum of 4 GB of disk space -- Minimum of 4 GB of RAM -- [System requirements for SQL Server on Linux](sql-server-linux-setup.md#system). - -> [!IMPORTANT] -> The default on Docker for Mac and Docker for Windows is 2 GB for the Moby VM, so you must change it to 4 GB. -> -> **Docker for Mac procedure** -> -> 1. Click the Docker logo on the top status bar. -> 2. Select **Preferences**. -> 3. Move the memory indicator to 4 GB or more. -> 4. Click the **restart** button at the button of the screen. -> -> **Docker for Windows procedure** -> -> 1. Right-click on the Docker icon from the task bar. -> 2. Click **Settings** under that menu. -> 3. Click the **Advanced** Tab. -> 4. Move the memory indicator to 4 GB or more. -> 5. Click the **Apply** button. - ## Pull and run the container image -1. Pull the container image from Docker Hub. - - ```bash - docker pull microsoft/mssql-server-linux - ``` - - > [!TIP] - > For Linux, depending on your system and user configuration, you might need to preface each `docker` command with `sudo`. - -2. To run the container image with Docker, you can use the following command from a bash shell (Linux/macOS): - - ```bash - docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' -p 1433:1433 -d microsoft/mssql-server-linux - ``` - - If you are using Docker for Windows, use the following command from an elevated PowerShell command-prompt: +To pull and run the Docker container image for SQL Server 2017, follow the prerequisites and steps in the following quick start tutorial: - ```PowerShell - docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" -p 1433:1433 -d microsoft/mssql-server-linux - ``` - - > [!NOTE] - > The only difference between the bash (Linux/macOS) example and the PowerShell (Windows) example is single quotes versus double-quotes around the environment variables. The docker run command fails if you use the wrong one. Throughout the remainder of this topic, bash and PowerShell code blocks are provided for convenience. If there is only one example, it works on all platforms, including Windows. - - The following table provides a description of the parameters in the previous `docker run` example: - - | Parameter | Description | - |-----|-----| - | **-e 'ACCEPT_EULA=Y'** | Set the **ACCEPT_EULA** variable to any value to confirm your acceptance of the [End-User Licensing Agreement](http://go.microsoft.com/fwlink/?LinkId=746388). Required setting for the SQL Server image. | - | **-e 'SA_PASSWORD=\'** | Specify your own strong password that is at least 8 characters and meets [SQL Server's password requirements](../relational-databases/security/password-policy.md). Required setting for the SQL Server image. | - | **-p 1433:1433** | Map a TCP port on the host environment (first value) with a TCP port in the container (second value). In this example, SQL Server is listening on TCP 1433 in the container and this is exposed to the same port, 1433, on the host. | - | **microsoft/mssql-server-linux** | The SQL Server Linux container image. Unless otherwise specified, this defaults to the **latest** image. | - -3. To view your Docker containers, use the `docker ps` command. - - ```bash - docker ps -a - ``` - - You should see output similar to the following screenshot: - - ![Docker ps command output](./media/sql-server-linux-setup-docker/docker-ps-command.png) +- [Run the SQL Server 2017 container image with Docker](quickstart-install-connect-docker.md) -4. If the **STATUS** column shows a status of **Up**, then SQL Server is running in the container and listening on the port specified in the **PORTS** column. If the **STATUS** column for your SQL Server container shows **Exited**, see the [Troubleshooting](#troubleshooting) section. - -> [!WARNING] -> After creating your SQL Server container, the `SA_PASSWORD` environment variable you specified is discoverable by running `echo $SA_PASSWORD` in the container. For security purposes, consider changing your SA password. The following example runs **sqlcmd** in the container to change the password to a new value: -> -> ```bash -> docker exec -it /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '' -Q 'ALTER LOGIN SA WITH PASSWORD="";' -> ``` +This configuration topic provides additional connection and usage scenarios in the sections below. ## Connect and query @@ -172,13 +101,13 @@ Docker provides a way to run multiple SQL Server containers on the same host mac The following example creates two SQL Server containers and maps them to ports **1401** and **1402** on the host machine. ```bash -docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' -p 1401:1433 -d microsoft/mssql-server-linux -docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' -p 1402:1433 -d microsoft/mssql-server-linux +docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' --cap-add SYS_PTRACE -p 1401:1433 -d microsoft/mssql-server-linux +docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' --cap-add SYS_PTRACE -p 1402:1433 -d microsoft/mssql-server-linux ``` ```PowerShell -docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" -p 1401:1433 -d microsoft/mssql-server-linux -docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" -p 1402:1433 -d microsoft/mssql-server-linux +docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" --cap-add SYS_PTRACE -p 1401:1433 -d microsoft/mssql-server-linux +docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" --cap-add SYS_PTRACE -p 1402:1433 -d microsoft/mssql-server-linux ``` Now there are two instances of SQL Server running in separate containers. Clients can connect to each SQL Server instance by using the IP address of the Docker host and the port number for the container. @@ -205,11 +134,11 @@ Your SQL Server configuration changes and database files are persisted in the co The first option is to mount a directory on your host as a data volume in your container. To do that, use the `docker run` command with the `-v :/var/opt/mssql` flag. This allows the data to be restored between container executions. ```bash -docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' -p 1433:1433 -v :/var/opt/mssql -d microsoft/mssql-server-linux +docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' --cap-add SYS_PTRACE -p 1433:1433 -v :/var/opt/mssql -d microsoft/mssql-server-linux ``` ```PowerShell -docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" -p 1433:1433 -v :/var/opt/mssql -d microsoft/mssql-server-linux +docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" --cap-add SYS_PTRACE -p 1433:1433 -v :/var/opt/mssql -d microsoft/mssql-server-linux ``` This technique also enables you to share and view the files on the host outside of Docker. @@ -222,11 +151,11 @@ This technique also enables you to share and view the files on the host outside The second option is to use a data volume container. You can create a data volume container by specifying a volume name instead of a host directory with the `-v` parameter. The following example creates a shared data volume named **sqlvolume**. ```bash -docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' -p 1433:1433 -v sqlvolume:/var/opt/mssql -d microsoft/mssql-server-linux +docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' --cap-add SYS_PTRACE -p 1433:1433 -v sqlvolume:/var/opt/mssql -d microsoft/mssql-server-linux ``` ```PowerShell -docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" -p 1433:1433 -v sqlvolume:/var/opt/mssql -d microsoft/mssql-server-linux +docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" --cap-add SYS_PTRACE -p 1433:1433 -v sqlvolume:/var/opt/mssql -d microsoft/mssql-server-linux ``` > [!NOTE] @@ -353,11 +282,11 @@ If the SQL Server container fails to run, try the following tests: - If you get an error such as **'failed to create endpoint CONTAINER_NAME on network bridge. Error starting proxy: listen tcp 0.0.0.0:1433 bind: address already in use.'**, then you are attempting to map the container port 1433 to a port that is already in use. This can happen if you're running SQL Server locally on the host machine. It can also happen if you start two SQL Server containers and try to map them both to the same host port. If this happens, use the `-p` parameter to map the container port 1433 to a different host port. For example: ```bash - docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' -p 1400:1433 -d microsoft/mssql-server-linux`. + docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' --cap-add SYS_PTRACE -p 1400:1433 -d microsoft/mssql-server-linux`. ``` ```PowerShell - docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" -p 1400:1433 -d microsoft/mssql-server-linux`. + docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" --cap-add SYS_PTRACE -p 1400:1433 -d microsoft/mssql-server-linux`. ``` - Check to see if there are any error messages from container. @@ -422,4 +351,6 @@ cat errorlog ## Next steps -See the [mssql-docker GitHub repository](https://github.com/Microsoft/mssql-docker) for resources, feedback, and known issues. +Get started with SQL Server 2017 container images on Docker by going through the [quick start tutorial](quickstart-install-connect-docker.md). + +Also, see the [mssql-docker GitHub repository](https://github.com/Microsoft/mssql-docker) for resources, feedback, and known issues. diff --git a/docs/linux/sql-server-linux-configure-environment-variables.md b/docs/linux/sql-server-linux-configure-environment-variables.md index cd80fca8f19..e9219fc4f44 100644 --- a/docs/linux/sql-server-linux-configure-environment-variables.md +++ b/docs/linux/sql-server-linux-configure-environment-variables.md @@ -76,13 +76,13 @@ This example docker command uses the following environment variables to create a If you are running Docker on Linux/macOS, use the following syntax with single quotes: ```bash -docker run -e ACCEPT_EULA=Y -e MSSQL_PID='Developer' -e SA_PASSWORD='' -e MSSQL_TCP_PORT=1234 -p 1234:1234 -d microsoft/mssql-server-linux +docker run -e ACCEPT_EULA=Y -e MSSQL_PID='Developer' -e SA_PASSWORD='' -e MSSQL_TCP_PORT=1234 --cap-add SYS_PTRACE -p 1234:1234 -d microsoft/mssql-server-linux ``` If you are running Docker on Windows, use the following syntax with double quotes: ```bash -docker run -e ACCEPT_EULA=Y -e MSSQL_PID="Developer" -e SA_PASSWORD="" -e MSSQL_TCP_PORT=1234 -p 1234:1234 -d microsoft/mssql-server-linux +docker run -e ACCEPT_EULA=Y -e MSSQL_PID="Developer" -e SA_PASSWORD="" -e MSSQL_TCP_PORT=1234 --cap-add SYS_PTRACE -p 1234:1234 -d microsoft/mssql-server-linux ``` ## Next steps diff --git a/docs/linux/sql-server-linux-migrate-ssms.md b/docs/linux/sql-server-linux-migrate-ssms.md index 2bf30c33586..ac3cb34ee19 100644 --- a/docs/linux/sql-server-linux-migrate-ssms.md +++ b/docs/linux/sql-server-linux-migrate-ssms.md @@ -70,7 +70,7 @@ The *.BACPAC file is imported to create a new database in the target server you ## SqlPackage command-line option -It is also possible to use the SQL Server Data Tools (SSDT) command-line tool, [SqlPackage.exe](https://msdn.microsoft.com/library/hh550080.aspx) to export and import BACPAC files. +It is also possible to use the SQL Server Data Tools (SSDT) command-line tool, [SqlPackage.exe](https://msdn.microsoft.com/library/hh550080.aspx), to export and import BACPAC files. The following example command exports a BACPAC file: @@ -86,4 +86,4 @@ SqlPackage.exe /a:Import /tsn:tcp: /tdn: /tu: [!NOTE] > You need at least 3.25GB of memory to run SQL Server on Linux. @@ -198,7 +198,7 @@ The SQL Server engine version for this release is 14.0.600.250. | Red Hat Enterprise Linux 7.3 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](quickstart-install-connect-red-hat.md) | | SUSE Enterprise Linux Server v12 SP2 | EXT4 | [Installation guide](quickstart-install-connect-suse.md) | | Ubuntu 16.04LTS | EXT4 | [Installation guide](quickstart-install-connect-ubuntu.md) | -| Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](sql-server-linux-setup-docker.md) | +| Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](quickstart-install-connect-docker.md) | > [!NOTE] > You need at least 3.25GB of memory to run SQL Server on Linux. @@ -355,7 +355,7 @@ The SQL Server engine version for this release is 14.0.500.272. | Red Hat Enterprise Linux 7.3 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](quickstart-install-connect-red-hat.md) | | SUSE Enterprise Linux Server v12 SP2 | EXT4 | [Installation guide](quickstart-install-connect-suse.md) | | Ubuntu 16.04LTS and 16.10 | EXT4 | [Installation guide](quickstart-install-connect-ubuntu.md) | -| Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](sql-server-linux-setup-docker.md) | +| Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](quickstart-install-connect-docker.md) | > [!NOTE] > You need at least 3.25GB of memory to run SQL Server on Linux. @@ -502,7 +502,7 @@ The SQL Server engine version for this release is 14.0.405.198. | Red Hat Enterprise Linux 7.3 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](quickstart-install-connect-red-hat.md) | | SUSE Enterprise Linux Server v12 SP2 | EXT4 | [Installation guide](quickstart-install-connect-suse.md) | | Ubuntu 16.04LTS and 16.10 | EXT4 | [Installation guide](quickstart-install-connect-ubuntu.md) | -| Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](sql-server-linux-setup-docker.md) | +| Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](quickstart-install-connect-docker.md) | > [!NOTE] > You need at least 3.25GB of memory to run SQL Server on Linux. @@ -681,7 +681,7 @@ The SQL Server engine version for this release is 14.0.304.138. | Red Hat Enterprise Linux 7.3 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](quickstart-install-connect-red-hat.md) | | SUSE Enterprise Linux Server v12 SP2 | EXT4 | [Installation guide](quickstart-install-connect-suse.md) | | Ubuntu 16.04LTS and 16.10 | EXT4 | [Installation guide](quickstart-install-connect-ubuntu.md) | -| Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](sql-server-linux-setup-docker.md) | +| Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](quickstart-install-connect-docker.md) | > [!NOTE] > You need at least 3.25GB of memory to run SQL Server on Linux. @@ -839,7 +839,7 @@ The SQL Server engine version for this release is 14.0.200.24. | Red Hat Enterprise Linux 7.3 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](quickstart-install-connect-red-hat.md) | | SUSE Enterprise Linux Server v12 SP2 | EXT4 | [Installation guide](quickstart-install-connect-suse.md) | | Ubuntu 16.04LTS and 16.10 | EXT4 | [Installation guide](quickstart-install-connect-ubuntu.md) | -| Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](sql-server-linux-setup-docker.md) | +| Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](quickstart-install-connect-docker.md) | > [!NOTE] > You need at least 3.25GB of memory to run SQL Server on Linux. @@ -984,7 +984,7 @@ The SQL Server engine version for this release is 14.0.100.187. |-----|-----|-----| | Red Hat Enterprise Linux Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](quickstart-install-connect-red-hat.md) | | Ubuntu 16.04LTS and 16.10 | EXT4 | [Installation guide](quickstart-install-connect-ubuntu.md) | -| Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](sql-server-linux-setup-docker.md) | +| Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](quickstart-install-connect-docker.md) | > [!NOTE] > You need at least 3.25GB of memory to run SQL Server on Linux. @@ -1120,7 +1120,7 @@ The SQL Server engine version for this release is 14.0.1.246. |-----|-----|-----| | Red Hat Enterprise Linux 7.2 Workstation, Server, and Desktop | XFS or EXT4 | [Installation guide](quickstart-install-connect-red-hat.md) | | Ubuntu 16.04LTS | EXT4 | [Installation guide](quickstart-install-connect-ubuntu.md) | -| Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](sql-server-linux-setup-docker.md) | +| Docker Engine 1.8+ on Windows, Mac, or Linux | N/A | [Installation guide](quickstart-install-connect-docker.md) | > [!NOTE] > You need at least 3.25GB of memory to run SQL Server on Linux. diff --git a/docs/linux/sql-server-linux-troubleshooting-guide.md b/docs/linux/sql-server-linux-troubleshooting-guide.md index f96e4a4e4f8..e6264d1bd62 100644 --- a/docs/linux/sql-server-linux-troubleshooting-guide.md +++ b/docs/linux/sql-server-linux-troubleshooting-guide.md @@ -91,7 +91,7 @@ You can stop or restart the SQL Server service as needed using the following com ``` > [!TIP] -> For more troubleshooting tips for Docker, see [Troubleshooting SQL Server Docker containers](sql-server-linux-setup-docker.md#troubleshooting). +> For more troubleshooting tips for Docker, see [Troubleshooting SQL Server Docker containers](sql-server-linux-configure-docker.md#troubleshooting). ## Access the log files From d2c158a506490f40417a207a0e37f3244ec83b1c Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 13 Jul 2017 10:30:08 -0700 Subject: [PATCH 263/336] Removed sys.fn_hadr_backup_is_preferred from AG because problem is fixed. --- docs/linux/sql-server-linux-release-notes.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/linux/sql-server-linux-release-notes.md b/docs/linux/sql-server-linux-release-notes.md index 04b320c81cc..4c9715628a8 100644 --- a/docs/linux/sql-server-linux-release-notes.md +++ b/docs/linux/sql-server-linux-release-notes.md @@ -138,9 +138,6 @@ The following sections describe known issues with this release of SQL Server 201 - Distributed transactions requiring the Microsoft Distributed Transaction Coordinator service are not supported on SQL Server running on Linux. SQL Server to SQL Server distributed transactions are supported. -#### Always On Availability Group -- `sys.fn_hadr_backup_is_preffered_replica` does not work for `CLUSTER_TYPE=NONE` or `CLUSTER_TYPE=EXTERNAL` because it relies on the WSFC-replicated cluster registry key which not available. We are working on providing a similar functionality through a different function. - #### Full-Text Search - Not all filters are available with this release, including filters for Office documents. For a list of supported filters, see [Install SQL Server Full-Text Search on Linux](sql-server-linux-setup-full-text-search.md#filters). From 20236265424810bbb138bcc370c974dd5bde71b7 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Thu, 13 Jul 2017 11:39:35 -0700 Subject: [PATCH 264/336] added/remove attributes --- docs/connect/php/pdo-getattribute.md | 9 +++++---- docs/connect/php/pdo-setattribute.md | 4 ++-- docs/connect/php/pdostatement-getattribute.md | 4 ++-- docs/connect/php/pdostatement-setattribute.md | 3 ++- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/docs/connect/php/pdo-getattribute.md b/docs/connect/php/pdo-getattribute.md index c9f6a21c10d..cec8524e662 100644 --- a/docs/connect/php/pdo-getattribute.md +++ b/docs/connect/php/pdo-getattribute.md @@ -1,7 +1,7 @@ --- title: "PDO::getAttribute | Microsoft Docs" ms.custom: "" -ms.date: "01/19/2017" +ms.date: "07/13/2017" ms.prod: "sql-non-specified" ms.reviewer: "" ms.suite: "" @@ -40,18 +40,19 @@ The following table contains the list of supported attributes. |-------------|----------------|--------------------|---------------| |PDO::ATTR_CASE|PDO|PDO::CASE_LOWER

      PDO::CASE_NATURAL

      PDO::CASE_UPPER|Specifies whether the column names should be in a specific case. PDO::CASE_LOWER forces lower case column names, PDO::CASE_NATURAL leaves the column name as returned by the database, and PDO::CASE_UPPER forces column names to upper case.

      The default is PDO::CASE_NATURAL.

      This attribute can also be set using PDO::setAttribute.| |PDO::ATTR_CLIENT_VERSION|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|Array of strings|Describes the versions of the driver and related libraries. Returns an array with the following elements: ODBC version (*MajorVer*.*MinorVer*), [!INCLUDE[ssNoVersion](../../includes/ssnoversion_md.md)] Native Client DLL name and version, [!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)] version (*MajorVer*.*MinorVer*.*BuildNumber*.*Revision*)| -|PDO::ATTR_DEFAULT_FETCH_MODE|PDO|See the PDO documentation.|See the PDO documentation.| |PDO::ATTR_DRIVER_NAME|PDO|String|Always returns "sqlsrv".| |PDO::ATTR_DRIVER_VERSION|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|String|Indicates the [!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)] version (*MajorVer*.*MinorVer*.*BuildNumber*.*Revision*)| |PDO::ATTR_ERRMODE|PDO|PDO::ERRMODE_SILENT

      PDO::ERRMODE_WARNING

      PDO::ERRMODE_EXCEPTION|Specifies how failures should be handled by the driver.

      PDO::ERRMODE_SILENT (the default) sets the error codes and information.

      PDO::ERRMODE_WARNING raises an E_WARNING.

      PDO::ERRMODE_EXCEPTION raises an exception.

      This attribute can also be set using PDO::setAttribute.| |PDO::ATTR_ORACLE_NULLS|PDO|See the PDO documentation.|See the PDO documentation.| |PDO::ATTR_SERVER_INFO|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|Array of 3 elements|Returns the current database, SQL Server version, and SQL Server instance.| |PDO::ATTR_SERVER_VERSION|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|String|Indicates the SQL Server version (*Major*.*Minor*.*BuildNumber*)| -|PDO::ATTR_STATEMENT_CLASS|PDO|See PDO documentation|See PDO documentation. (returns PDOStatement)| |PDO::ATTR_STRINGIFY_FETCHES|PDO|See PDO documentation|See the PDO documentation.| |PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|1 to the PHP memory limit.|Configures the size of the buffer that holds the result set for a client-side cursor.

      The default is 10240 KB (10 MB).

      For more information about client-side cursors, see [Cursor Types (SQLSRV Driver)](../../connect/php/cursor-types-sqlsrv-driver.md).| |PDO::SQLSRV_ATTR_DIRECT_QUERY|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|true

      false|Specifies direct or prepared query execution. For more information, see [Direct Statement Execution and Prepared Statement Execution in the PDO_SQLSRV Driver](../../connect/php/direct-statement-execution-prepared-statement-execution-pdo-sqlsrv-driver.md).| -|PDO::SQLSRV_ATTR_ENCODING|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|One of the following:

      PDO::SQLSRV_ENCODING_UTF8

      PDO::SQLSRV_ENCODING_SYSTEM|Specifies the character set encoding used by the driver to communicate with the server.

      The default is PDO::SQLSRV_ENCODING_UTF8.| +|PDO::SQLSRV_ATTR_ENCODING|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|One of the following:

      PDO::SQLSRV_ENCODING_UTF8

      PDO::SQLSRV_ENCODING_SYSTEM|Specifies the character set encoding used by the driver to communicate with the server.

      The default is PDO::SQLSRV_ENCODING_UTF8.| +|PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|true or false|Handles numeric fetches from columns with numeric SQL types (bit, integer, smallint, tinyint, float, or real).

      When connection option flag ATTR_STRINGIFY_FETCHES is on, even when SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is on, the return value will still be string.

      When the returned PDO type in bind column is PDO_PARAM_INT, the return value from an integer column will be int even if SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is off.| +|PDO::SQLSRV_ATTR_QUERY_TIMEOUT|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|integer|Sets the query timeout in seconds.

      The default is 0, which means the driver will wait indefinitely for results.

      Negative numbers are not allowed.| + PDO processes some of the predefined attributes while it requires the driver to handle others. All custom attributes and connection options are handled by the driver, an unsupported attribute or connection option will return null. diff --git a/docs/connect/php/pdo-setattribute.md b/docs/connect/php/pdo-setattribute.md index 7fecfb29cba..eaa69118f2e 100644 --- a/docs/connect/php/pdo-setattribute.md +++ b/docs/connect/php/pdo-setattribute.md @@ -1,7 +1,7 @@ --- title: "PDO::setAttribute | Microsoft Docs" ms.custom: "" -ms.date: "01/19/2017" +ms.date: "07/13/2017" ms.prod: "sql-non-specified" ms.reviewer: "" ms.suite: "" @@ -50,7 +50,7 @@ Returns true on success, otherwise false. |PDO::SQLSRV_ATTR_ENCODING|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|PDO::SQLSRV_ENCODING_UTF8

      PDO::SQLSRV_ENCODING_SYSTEM.|Sets the character set encoding used by the driver to communicate with the server.

      PDO::SQLSRV_ENCODING_BINARY is not supported.

      The default is PDO::SQLSRV_ENCODING_UTF8.| |PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|true or false|Handles numeric fetches from columns with numeric SQL types (bit, integer, smallint, tinyint, float, or real).

      When connection option flag ATTR_STRINGIFY_FETCHES is on, even when SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is on, the return value will still be string.

      When the returned PDO type in bind column is PDO_PARAM_INT, the return value from an integer column will be int even if SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is off.| |PDO::SQLSRV_ATTR_QUERY_TIMEOUT|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|integer|Sets the query timeout in seconds.

      The default is 0, which means the driver will wait indefinitely for results.

      Negative numbers are not allowed.| -|PDO::SQLSVR_CLIENT_BUFFER_MAX_SIZE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|integer|Sets the size of the query buffer.

      The default is 0, which indicates unlimited buffer size.

      Negative numbers are not allowed.

      For more information about queries that create a client-side cursor, see [Cursor Types (PDO_SQLSRV Driver)](../../connect/php/cursor-types-pdo-sqlsrv-driver.md).| +|PDO::SQLSRV_CLIENT_BUFFER_MAX_SIZE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|integer|Sets the size of the query buffer.

      The default is 0, which indicates unlimited buffer size.

      Negative numbers are not allowed.

      For more information about queries that create a client-side cursor, see [Cursor Types (PDO_SQLSRV Driver)](../../connect/php/cursor-types-pdo-sqlsrv-driver.md).| PDO processes some of the predefined attributes and requires the driver to process others. All custom attributes and connection options are processed by the driver. An unsupported attribute, connection option, or unsupported value will be reported according to the setting of PDO::ATTR_ERRMODE. diff --git a/docs/connect/php/pdostatement-getattribute.md b/docs/connect/php/pdostatement-getattribute.md index 42108504864..161b580110f 100644 --- a/docs/connect/php/pdostatement-getattribute.md +++ b/docs/connect/php/pdostatement-getattribute.md @@ -1,7 +1,7 @@ --- title: "PDOStatement::getAttribute | Microsoft Docs" ms.custom: "" -ms.date: "01/19/2017" +ms.date: "07/13/2017" ms.prod: "sql-non-specified" ms.reviewer: "" ms.suite: "" @@ -28,7 +28,7 @@ mixed PDOStatement::getAttribute( $attribute ); ``` #### Parameters -$*attribute*: An integer, one of the PDO::ATTR_* or PDO::SQLSRV_ATTR_\* constants. Supported attributes are the attributes you can set with [PDOStatement::setAttribute](../../connect/php/pdostatement-setattribute.md), PDO::SQLSRV_ATTR_DIRECT_QUERY (see [Direct Statement Execution and Prepared Statement Execution in the PDO_SQLSRV Driver](../../connect/php/direct-statement-execution-prepared-statement-execution-pdo-sqlsrv-driver.md) for more information about PDO::SQLSRV_ATTR_DIRECT_QUERY), and PDO::ATTR_CURSOR. +$*attribute*: An integer, one of the PDO::ATTR_* or PDO::SQLSRV_ATTR_\* constants. Supported attributes are the attributes you can set with [PDOStatement::setAttribute](../../connect/php/pdostatement-setattribute.md), PDO::SQLSRV_ATTR_DIRECT_QUERY (see [Direct Statement Execution and Prepared Statement Execution in the PDO_SQLSRV Driver](../../connect/php/direct-statement-execution-prepared-statement-execution-pdo-sqlsrv-driver.md) for more information about PDO::SQLSRV_ATTR_DIRECT_QUERY), PDO::ATTR_CURSOR and PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE (see [Cursor Types (PDO_SQLSRV Driver)](../../connect/php/cursor-types-pdo-sqlsrv-driver.md). ## Return Value On success, returns a (mixed) value for a predefined PDO attribute or custom driver attribute. Returns null on failure. diff --git a/docs/connect/php/pdostatement-setattribute.md b/docs/connect/php/pdostatement-setattribute.md index fbab9b93ee7..4b75ffe7fd2 100644 --- a/docs/connect/php/pdostatement-setattribute.md +++ b/docs/connect/php/pdostatement-setattribute.md @@ -1,7 +1,7 @@ --- title: "PDOStatement::setAttribute | Microsoft Docs" ms.custom: "" -ms.date: "01/19/2017" +ms.date: "07/13/2017" ms.prod: "sql-non-specified" ms.reviewer: "" ms.suite: "" @@ -42,6 +42,7 @@ The following table contains the list of available attributes: |-------------|----------|---------------| |PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE|1 to the PHP memory limit.|Configures the size of the buffer that holds the result set for a client-side cursor.

      The default is 10240 KB (10 MB).

      For more information about client-side cursors, see [Cursor Types (PDO_SQLSRV Driver)](../../connect/php/cursor-types-pdo-sqlsrv-driver.md).| |PDO::SQLSRV_ATTR_ENCODING|Integer

      PDO::SQLSRV_ENCODING_UTF8 (Default)

      PDO::SQLSRV_ENCODING_SYSTEM

      PDO::SQLSRV_ENCODING_BINARY|Sets the character set encoding to be used by the driver to communicate with the server.| +|PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE|true or false|Handles numeric fetches from columns with numeric SQL types (bit, integer, smallint, tinyint, float, or real).

      When connection option flag ATTR_STRINGIFY_FETCHES is on, even when SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is on, the return value will still be string.

      When the returned PDO type in bind column is PDO_PARAM_INT, the return value from an integer column will be int even if SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is off.| |PDO::SQLSRV_ATTR_QUERY_TIMEOUT|Integer|Sets the query timeout in seconds.

      By default, the driver will wait indefinitely for results. Negative numbers are not allowed.

      0 means no timeout.| ## Example From 68c33a01a5f99fed60f288b752c4f548e20f5bdd Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Thu, 13 Jul 2017 12:10:11 -0700 Subject: [PATCH 265/336] addresses Acrolinx Scorecards --- docs/connect/php/pdo-getattribute.md | 10 +++++----- docs/connect/php/pdo-setattribute.md | 12 ++++++------ docs/connect/php/pdostatement-getattribute.md | 2 +- docs/connect/php/pdostatement-setattribute.md | 6 +++--- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/connect/php/pdo-getattribute.md b/docs/connect/php/pdo-getattribute.md index cec8524e662..f5dca5258d4 100644 --- a/docs/connect/php/pdo-getattribute.md +++ b/docs/connect/php/pdo-getattribute.md @@ -47,14 +47,14 @@ The following table contains the list of supported attributes. |PDO::ATTR_SERVER_INFO|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|Array of 3 elements|Returns the current database, SQL Server version, and SQL Server instance.| |PDO::ATTR_SERVER_VERSION|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|String|Indicates the SQL Server version (*Major*.*Minor*.*BuildNumber*)| |PDO::ATTR_STRINGIFY_FETCHES|PDO|See PDO documentation|See the PDO documentation.| -|PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|1 to the PHP memory limit.|Configures the size of the buffer that holds the result set for a client-side cursor.

      The default is 10240 KB (10 MB).

      For more information about client-side cursors, see [Cursor Types (SQLSRV Driver)](../../connect/php/cursor-types-sqlsrv-driver.md).| +|PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|1 to the PHP memory limit.|Configures the size of the buffer that holds the result set for a client-side cursor.

      The default is 10,240 KB (10 MB).

      For more information about client-side cursors, see [Cursor Types (SQLSRV Driver)](../../connect/php/cursor-types-sqlsrv-driver.md).| |PDO::SQLSRV_ATTR_DIRECT_QUERY|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|true

      false|Specifies direct or prepared query execution. For more information, see [Direct Statement Execution and Prepared Statement Execution in the PDO_SQLSRV Driver](../../connect/php/direct-statement-execution-prepared-statement-execution-pdo-sqlsrv-driver.md).| -|PDO::SQLSRV_ATTR_ENCODING|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|One of the following:

      PDO::SQLSRV_ENCODING_UTF8

      PDO::SQLSRV_ENCODING_SYSTEM|Specifies the character set encoding used by the driver to communicate with the server.

      The default is PDO::SQLSRV_ENCODING_UTF8.| -|PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|true or false|Handles numeric fetches from columns with numeric SQL types (bit, integer, smallint, tinyint, float, or real).

      When connection option flag ATTR_STRINGIFY_FETCHES is on, even when SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is on, the return value will still be string.

      When the returned PDO type in bind column is PDO_PARAM_INT, the return value from an integer column will be int even if SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is off.| -|PDO::SQLSRV_ATTR_QUERY_TIMEOUT|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|integer|Sets the query timeout in seconds.

      The default is 0, which means the driver will wait indefinitely for results.

      Negative numbers are not allowed.| +|PDO::SQLSRV_ATTR_ENCODING|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|PDO::SQLSRV_ENCODING_UTF8

      PDO::SQLSRV_ENCODING_SYSTEM|Specifies the character set encoding used by the driver to communicate with the server.

      The default is PDO::SQLSRV_ENCODING_UTF8.| +|PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|true or false|Handles numeric fetches from columns with numeric SQL types (bit, integer, smallint, tinyint, float, or real).

      When connection option flag ATTR_STRINGIFY_FETCHES is on, even when SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is on, the return value is a string.

      When the returned PDO type in bind column is PDO_PARAM_INT, the return value from an integer column is an int even if SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is off.| +|PDO::SQLSRV_ATTR_QUERY_TIMEOUT|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|integer|Sets the query timeout in seconds.

      The default is 0, which means the driver waits indefinitely for results.

      Negative numbers are not allowed.| -PDO processes some of the predefined attributes while it requires the driver to handle others. All custom attributes and connection options are handled by the driver, an unsupported attribute or connection option will return null. +PDO processes some of the predefined attributes while it requires the driver to handle others. All custom attributes and connection options are handled by the driver, an unsupported attribute or connection option returns null. Support for PDO was added in version 2.0 of the [!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]. diff --git a/docs/connect/php/pdo-setattribute.md b/docs/connect/php/pdo-setattribute.md index eaa69118f2e..a6d5288e582 100644 --- a/docs/connect/php/pdo-setattribute.md +++ b/docs/connect/php/pdo-setattribute.md @@ -41,18 +41,18 @@ Returns true on success, otherwise false. |-------------|----------------|--------------------|---------------| |PDO::ATTR_CASE|PDO|PDO::CASE_LOWER

      PDO::CASE_NATURAL

      PDO::CASE_UPPER|Specifies the case of column names.

      PDO::CASE_LOWER causes lower case column names.

      PDO::CASE_NATURAL (the default) displays column names as returned by the database.

      PDO::CASE_UPPER causes column names to upper case.

      This attribute can be set using PDO::setAttribute.| |PDO::ATTR_DEFAULT_FETCH_MODE|PDO|See the PDO documentation.|See the PDO documentation.| -|PDO::ATTR_ERRMODE|PDO|PDO::ERRMODE_SILENT

      PDO::ERRMODE_WARNING

      PDO::ERRMODE_EXCEPTION|Specifies how the driver will report failures.

      PDO::ERRMODE_SILENT (the default) sets the error codes and information.

      PDO::ERRMODE_WARNING raises E_WARNING.

      PDO::ERRMODE_EXCEPTION causes an exception to be thrown.

      This attribute can be set using PDO::setAttribute.| +|PDO::ATTR_ERRMODE|PDO|PDO::ERRMODE_SILENT

      PDO::ERRMODE_WARNING

      PDO::ERRMODE_EXCEPTION|Specifies how the driver reports failures.

      PDO::ERRMODE_SILENT (the default) sets the error codes and information.

      PDO::ERRMODE_WARNING raises E_WARNING.

      PDO::ERRMODE_EXCEPTION causes an exception to be thrown.

      This attribute can be set using PDO::setAttribute.| |PDO::ATTR_ORACLE_NULLS|PDO|See the PDO documentation.|Specifies how nulls should be returned.

      PDO::NULL_NATURAL does no conversion.

      PDO::NULL_EMPTY_STRING converts an empty string to null.

      PDO::NULL_TO_STRING converts null to an empty string.| -|PDO::ATTR_STATEMENT_CLASS|PDO|See the PDO documentation.|Sets the user-supplied statement class derived from PDOStatement.

      Requires `array(string classname, array(mixed constructor_args))`.

      See the PDO documentation for more information.| +|PDO::ATTR_STATEMENT_CLASS|PDO|See the PDO documentation.|Sets the user-supplied statement class derived from PDOStatement.

      Requires `array(string classname, array(mixed constructor_args))`.

      For more information, see the PDO documentation.| |PDO::ATTR_STRINGIFY_FETCHES|PDO|true or false|Converts numeric values to strings when retrieving data.| -|PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|1 to the PHP memory limit.|Configures the size of the buffer that holds the result set.

      The default is 10240 KB (10 MB).

      For more information about queries that create a client-side cursor, see [Cursor Types (PDO_SQLSRV Driver)](../../connect/php/cursor-types-pdo-sqlsrv-driver.md).| +|PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|1 to the PHP memory limit.|Configures the size of the buffer that holds the result set.

      The default is 10,240 KB (10 MB).

      For more information about queries that create a client-side cursor, see [Cursor Types (PDO_SQLSRV Driver)](../../connect/php/cursor-types-pdo-sqlsrv-driver.md).| |PDO::SQLSRV_ATTR_DIRECT_QUERY|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|true

      false|Specifies direct or prepared query execution. For more information, see [Direct Statement Execution and Prepared Statement Execution in the PDO_SQLSRV Driver](../../connect/php/direct-statement-execution-prepared-statement-execution-pdo-sqlsrv-driver.md).| |PDO::SQLSRV_ATTR_ENCODING|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|PDO::SQLSRV_ENCODING_UTF8

      PDO::SQLSRV_ENCODING_SYSTEM.|Sets the character set encoding used by the driver to communicate with the server.

      PDO::SQLSRV_ENCODING_BINARY is not supported.

      The default is PDO::SQLSRV_ENCODING_UTF8.| -|PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|true or false|Handles numeric fetches from columns with numeric SQL types (bit, integer, smallint, tinyint, float, or real).

      When connection option flag ATTR_STRINGIFY_FETCHES is on, even when SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is on, the return value will still be string.

      When the returned PDO type in bind column is PDO_PARAM_INT, the return value from an integer column will be int even if SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is off.| -|PDO::SQLSRV_ATTR_QUERY_TIMEOUT|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|integer|Sets the query timeout in seconds.

      The default is 0, which means the driver will wait indefinitely for results.

      Negative numbers are not allowed.| +|PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|true or false|Handles numeric fetches from columns with numeric SQL types (bit, integer, smallint, tinyint, float, or real).

      When connection option flag ATTR_STRINGIFY_FETCHES is on, even when SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is on, the return value is a string.

      When the returned PDO type in bind column is PDO_PARAM_INT, the return value from an integer column is an int even if SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is off.| +|PDO::SQLSRV_ATTR_QUERY_TIMEOUT|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|integer|Sets the query timeout in seconds.

      The default is 0, which means the driver waits indefinitely for results.

      Negative numbers are not allowed.| |PDO::SQLSRV_CLIENT_BUFFER_MAX_SIZE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|integer|Sets the size of the query buffer.

      The default is 0, which indicates unlimited buffer size.

      Negative numbers are not allowed.

      For more information about queries that create a client-side cursor, see [Cursor Types (PDO_SQLSRV Driver)](../../connect/php/cursor-types-pdo-sqlsrv-driver.md).| -PDO processes some of the predefined attributes and requires the driver to process others. All custom attributes and connection options are processed by the driver. An unsupported attribute, connection option, or unsupported value will be reported according to the setting of PDO::ATTR_ERRMODE. +PDO processes some of the predefined attributes and requires the driver to process others. All custom attributes and connection options are processed by the driver. An unsupported attribute, connection option, or unsupported value is reported according to the setting of PDO::ATTR_ERRMODE. Support for PDO was added in version 2.0 of the [!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]. diff --git a/docs/connect/php/pdostatement-getattribute.md b/docs/connect/php/pdostatement-getattribute.md index 161b580110f..4621f1560b0 100644 --- a/docs/connect/php/pdostatement-getattribute.md +++ b/docs/connect/php/pdostatement-getattribute.md @@ -28,7 +28,7 @@ mixed PDOStatement::getAttribute( $attribute ); ``` #### Parameters -$*attribute*: An integer, one of the PDO::ATTR_* or PDO::SQLSRV_ATTR_\* constants. Supported attributes are the attributes you can set with [PDOStatement::setAttribute](../../connect/php/pdostatement-setattribute.md), PDO::SQLSRV_ATTR_DIRECT_QUERY (see [Direct Statement Execution and Prepared Statement Execution in the PDO_SQLSRV Driver](../../connect/php/direct-statement-execution-prepared-statement-execution-pdo-sqlsrv-driver.md) for more information about PDO::SQLSRV_ATTR_DIRECT_QUERY), PDO::ATTR_CURSOR and PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE (see [Cursor Types (PDO_SQLSRV Driver)](../../connect/php/cursor-types-pdo-sqlsrv-driver.md). +$*attribute*: An integer, one of the PDO::ATTR_* or PDO::SQLSRV_ATTR_\* constants. Supported attributes are the attributes you can set with [PDOStatement::setAttribute](../../connect/php/pdostatement-setattribute.md), PDO::SQLSRV_ATTR_DIRECT_QUERY (for more information, see [Direct Statement Execution and Prepared Statement Execution in the PDO_SQLSRV Driver](../../connect/php/direct-statement-execution-prepared-statement-execution-pdo-sqlsrv-driver.md)), PDO::ATTR_CURSOR and PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE (for more information, see [Cursor Types (PDO_SQLSRV Driver)](../../connect/php/cursor-types-pdo-sqlsrv-driver.md)). ## Return Value On success, returns a (mixed) value for a predefined PDO attribute or custom driver attribute. Returns null on failure. diff --git a/docs/connect/php/pdostatement-setattribute.md b/docs/connect/php/pdostatement-setattribute.md index 4b75ffe7fd2..4c877ceaf59 100644 --- a/docs/connect/php/pdostatement-setattribute.md +++ b/docs/connect/php/pdostatement-setattribute.md @@ -40,10 +40,10 @@ The following table contains the list of available attributes: |Attribute|Values|Description| |-------------|----------|---------------| -|PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE|1 to the PHP memory limit.|Configures the size of the buffer that holds the result set for a client-side cursor.

      The default is 10240 KB (10 MB).

      For more information about client-side cursors, see [Cursor Types (PDO_SQLSRV Driver)](../../connect/php/cursor-types-pdo-sqlsrv-driver.md).| +|PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE|1 to the PHP memory limit.|Configures the size of the buffer that holds the result set for a client-side cursor.

      The default is 10,240 KB (10 MB).

      For more information about client-side cursors, see [Cursor Types (PDO_SQLSRV Driver)](../../connect/php/cursor-types-pdo-sqlsrv-driver.md).| |PDO::SQLSRV_ATTR_ENCODING|Integer

      PDO::SQLSRV_ENCODING_UTF8 (Default)

      PDO::SQLSRV_ENCODING_SYSTEM

      PDO::SQLSRV_ENCODING_BINARY|Sets the character set encoding to be used by the driver to communicate with the server.| -|PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE|true or false|Handles numeric fetches from columns with numeric SQL types (bit, integer, smallint, tinyint, float, or real).

      When connection option flag ATTR_STRINGIFY_FETCHES is on, even when SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is on, the return value will still be string.

      When the returned PDO type in bind column is PDO_PARAM_INT, the return value from an integer column will be int even if SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is off.| -|PDO::SQLSRV_ATTR_QUERY_TIMEOUT|Integer|Sets the query timeout in seconds.

      By default, the driver will wait indefinitely for results. Negative numbers are not allowed.

      0 means no timeout.| +|PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE|true or false|Handles numeric fetches from columns with numeric SQL types (bit, integer, smallint, tinyint, float, or real).

      When connection option flag ATTR_STRINGIFY_FETCHES is on, even when SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is on, the return value is a string.

      When the returned PDO type in bind column is PDO_PARAM_INT, the return value from an integer column is an int even if SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is off.| +|PDO::SQLSRV_ATTR_QUERY_TIMEOUT|Integer|Sets the query timeout in seconds.

      By default, the driver waits indefinitely for results. Negative numbers are not allowed.

      0 means no timeout.| ## Example From 04e345f173b47e64c40c3e98107dce58c7058797 Mon Sep 17 00:00:00 2001 From: ulvii Date: Thu, 13 Jul 2017 12:16:54 -0700 Subject: [PATCH 266/336] New artice: PHP Linux and Mac Drivers Installation Tutorial --- .../php/installation-tutorial-linux-mac.md | 370 ++++++++++++++++++ 1 file changed, 370 insertions(+) create mode 100644 docs/connect/php/installation-tutorial-linux-mac.md diff --git a/docs/connect/php/installation-tutorial-linux-mac.md b/docs/connect/php/installation-tutorial-linux-mac.md new file mode 100644 index 00000000000..b3638f120cb --- /dev/null +++ b/docs/connect/php/installation-tutorial-linux-mac.md @@ -0,0 +1,370 @@ +--- +title: "PHP Linux and Mac Drivers Installation Tutorial | Microsoft Docs" +ms.date: "07/13/2017" +ms.prod: "sql-non-specified" +ms.technology: + - "drivers" +ms.topic: "article" +author: "ulvii" +ms.author: "v-ulibra" +--- +# PHP Linux and Mac Drivers Installation Tutorial +The following instructions assume a clean environment and show how to install PHP 7.x, Microsoft ODBC driver, apache, and Microsoft PHP drivers on Ubuntu 15, 16, RedHat 7, Debian 8, and Mac OS X. +## Installing the drivers on Ubuntu 15.10 for PHP 7.0 +### Step 1. Install PHP +Note that there is no PHP 7.1 package available for Ubuntu 15.10. +``` +sudo su +sh -c 'echo "deb http://packages.dotdeb.org jessie all \ndeb-src http://packages.dotdeb.org jessie all" >> /etc/apt/sources.list' +apt-get update +apt-get install php7.0 php7.0-fpm php-pear php7.0-dev mcrypt php7.0-mcrypt php-mbstring php7.0-xml +``` +### Step 2. Install prerequisites +``` +sudo su +curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - +curl https://packages.microsoft.com/config/ubuntu/15.10/prod.list > /etc/apt/sources.list.d/mssql-release.list +exit +sudo apt-get update +sudo ACCEPT_EULA=Y apt-get install msodbcsql mssql-tools +sudo apt-get install unixodbc-dev +echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile +echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc +source ~/.bashrc +``` +### Step 3. Install the PHP drivers for Microsoft SQL Server +``` +sudo pear config-set php_ini `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"` system +sudo pecl install sqlsrv +sudo pecl install pdo_sqlsrv +``` +### Step 4. Install Apache and configure driver loading +``` +sudo su +apt-get install libapache2-mod-php7.0 apache2 +a2dismod mpm_event +a2enmod mpm_prefork +a2enmod php7.0 +echo "extension=sqlsrv.so" >> /etc/php/7.0/apache2/php.ini +echo "extension=pdo_sqlsrv.so" >> /etc/php/7.0/apache2/php.ini +``` +### Step 5. Restart Apache and test the sample script +``` +sudo service apache2 restart +``` +To test your installation, see **Testing Your Installation** at the end of this document. +  +## Installing the drivers on Ubuntu 16.04 for PHP 7.0 +### Step 1. Install PHP +``` +sudo su +apt-get update +apt-get -y install php7.0 mcrypt php7.0-mcrypt php-mbstring php-pear php7.0-dev php7.0-xml +``` +### Step 2. Install prerequisites +``` +sudo su +curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - +curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list +exit +sudo apt-get update +sudo ACCEPT_EULA=Y apt-get install msodbcsql mssql-tools +sudo apt-get install unixodbc-dev +echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile +echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc +source ~/.bashrc +``` +### Step 3. Install the PHP drivers for Microsoft SQL Server +``` +sudo pear config-set php_ini `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"` system +sudo pecl install sqlsrv +sudo pecl install pdo_sqlsrv +``` +### Step 4. Install Apache and configure driver loading +``` +sudo su +apt-get install libapache2-mod-php7.0 apache2 +a2dismod mpm_event +a2enmod mpm_prefork +a2enmod php7.0 +echo "extension=sqlsrv.so" >> /etc/php/7.0/apache2/php.ini +echo "extension=pdo_sqlsrv.so" >> /etc/php/7.0/apache2/php.ini +``` +### Step 5. Restart Apache and test the sample script +``` +sudo service apache2 restart +``` +To test your installation, see **Testing Your Installation** at the end of this document. +  +## Installing the drivers on Ubuntu 16.04 for PHP 7.1 +### Step 1. Install PHP +``` +sudo su +add-apt-repository ppa:ondrej/php +apt-get update +apt-get -y install php7.1 mcrypt php7.1-mcrypt php-mbstring php-pear php7.1-dev php7.1-xml +``` +### Step 2. Install prerequisites +``` +sudo su +curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - +curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list +exit +sudo apt-get update +sudo ACCEPT_EULA=Y apt-get install msodbcsql mssql-tools +sudo apt-get install unixodbc-dev +echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile +echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc +source ~/.bashrc +``` +### Step 3. Install the PHP drivers for Microsoft SQL Server +``` +sudo pear config-set php_ini `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"` system +sudo pecl install sqlsrv +sudo pecl install pdo_sqlsrv +``` +### Step 4. Install Apache and configure driver loading +``` +sudo su +apt-get install libapache2-mod-php7.1 apache2 +a2dismod mpm_event +a2enmod mpm_prefork +a2enmod php7.1 +echo "extension=sqlsrv.so" >> /etc/php/7.1/apache2/php.ini +echo "extension=pdo_sqlsrv.so" >> /etc/php/7.1/apache2/php.ini +``` +### Step 5. Restart Apache and test the sample script +``` +sudo service apache2 restart +``` +To test your installation, see **Testing Your Installation** at the end of this document. +  +## Installing the drivers on Red Hat 7 for PHP 7.0 and 7.1 +### Step 1. Install PHP +To install PHP 7.1, simply replace remi-php70 with remi-php71 in the commands below. +``` +sudo su +wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm +wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm +rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm +subscription-manager repos --enable=rhel-7-server-optional-rpms +yum-config-manager --enable remi-php70 +yum update +yum install php php-pdo php-xml php-pear php-devel re2c gcc-c++ gcc +``` +### Step 2. Install prerequisites +``` +sudo su +curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo +exit +sudo yum update +sudo yum remove unixODBC-utf16-devel +sudo ACCEPT_EULA=Y yum install msodbcsql mssql-tools +sudo yum install unixODBC-devel +echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile +echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc +source ~/.bashrc +``` +### Step 3. Install the PHP drivers for Microsoft SQL Server +``` +sudo pecl install sqlsrv +sudo pecl install pdo_sqlsrv +``` +### Step 4. Install Apache and configure driver loading +``` +sudo su +yum install httpd +echo "extension=sqlsrv.so" > /etc/php.d/sqlsrv.ini +echo "extension=pdo_sqlsrv.so" > /etc/php.d/pdo_sqlsrv.ini +``` +Note: SELinux is installed by default and runs in Enforcing mode. To allow Apache to connect to databases through SELinux, run the following command: +``` +sudo setsebool -P httpd_can_network_connect_db 1 +``` +### Step 5. Restart Apache and test the sample script +``` +sudo apachectl restart +``` +To test your installation, see **Testing Your Installation** at the end of this document. +  +## Installing the drivers on Debian 8 for PHP 7.0 +### Step 1. Install PHP +``` +sudo su +apt-get install curl apt-transport-https +curl https://www.dotdeb.org/dotdeb.gpg | apt-key add - +echo "deb http://packages.dotdeb.org jessie all" >> /etc/apt/sources.list +echo "deb-src http://packages.dotdeb.org jessie all" >> /etc/apt/sources.list +apt-get update +apt-get install –y php7.0 php-pear php7.0-dev php7.0-xml +``` +### Step 2. Install prerequisites +``` +sudo su +curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - +curl https://packages.microsoft.com/config/debian/8/prod.list > /etc/apt/sources.list.d/mssql-release.list +apt-get install -y locales +echo "en_US.UTF-8 UTF-8" > /etc/locale.gen +locale-gen +exit +sudo apt-get update +sudo ACCEPT_EULA=Y apt-get install msodbcsql +sudo apt-get install unixodbc-dev +``` +### Step 3. Install the PHP drivers for Microsoft SQL Server +``` +sudo pear config-set php_ini `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"` system +sudo pecl install sqlsrv +sudo pecl install pdo_sqlsrv +``` +### Step 4. Install Apache and configure driver loading +``` +sudo su +apt-get install libapache2-mod-php7.0 apache2 +a2dismod mpm_event +a2enmod mpm_prefork +a2enmod php7.0 +echo "extension=sqlsrv.so" >> /etc/php/7.0/apache2/php.ini +echo "extension=pdo_sqlsrv.so" >> /etc/php/7.0/apache2/php.ini +``` +### Step 5. Restart Apache and test the sample script +``` +sudo service apache2 restart +``` +To test your installation, see **Testing Your Installation** at the end of this document. +  +## Installing the drivers on Debian 8 for PHP 7.1 +### Step 1. Install PHP +``` +sudo su +apt-get install curl apt-transport-https +wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg +echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list +apt-get update +apt-get install –y php7.1 php-pear php7.1-dev php7.1-xml +``` +### Step 2. Install prerequisites +``` +sudo su +curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - +curl https://packages.microsoft.com/config/debian/8/prod.list > /etc/apt/sources.list.d/mssql-release.list +apt-get install -y locales +echo "en_US.UTF-8 UTF-8" > /etc/locale.gen +locale-gen +exit +sudo apt-get update +sudo ACCEPT_EULA=Y apt-get install msodbcsql +sudo apt-get install unixodbc-dev +``` +### Step 3. Install the PHP drivers for Microsoft SQL Server +``` +sudo pear config-set php_ini `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"` system +sudo pecl install sqlsrv +sudo pecl install pdo_sqlsrv +``` +### Step 4. Install Apache and configure driver loading +``` +sudo su +apt-get install libapache2-mod-php7.1 apache2 +a2dismod mpm_event +a2enmod mpm_prefork +a2enmod php7.1 +echo "extension=sqlsrv.so" >> /etc/php/7.1/apache2/php.ini +echo "extension=pdo_sqlsrv.so" >> /etc/php/7.1/apache2/php.ini +``` +### Step 5. Restart Apache and test the sample script +``` +sudo service apache2 restart +``` +To test your installation, see **Testing Your Installation** at the end of this document. +  +## Installing the drivers on MacOS El Capitan and Sierra +### Step 1. Install PHP +To install PHP 7.1, simply replace php70 with php71 in the commands below. +``` +/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" +brew tap +brew tap homebrew/dupes +brew tap homebrew/versions +brew tap homebrew/homebrew-php +brew install php70 --with-pear --with-httpd24 --with-cgi +echo 'export PATH="/usr/local/sbin:$PATH"' >> ~/.bash_profile +echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bash_profile +source ~/.bash_profile +``` +### Step 2. Install prerequisites +``` +brew tap microsoft/msodbcsql https://github.com/Microsoft/homebrew-mssql-release +brew update +brew install msodbcsql +brew install mssql-tools +brew install autoconf +``` +### Step 3. Install the PHP drivers for Microsoft SQL Server +``` +sudo pecl install sqlsrv +sudo pecl install pdo_sqlsrv +``` +### Step 4. Install Apache and configure driver loading +``` +(echo ""; echo "SetHandler application/x-httpd-php"; echo "";) >> /usr/local/etc/apache2/2.4/httpd.conf +``` +### Step 5. Restart Apache and test the sample script +``` +sudo apachectl restart +``` +To test your installation, see **Testing Your Installation** at the end of this document. +  +## Testing Your Installation +To test this sample script, create a file called testsql.php in /var/www/html/ (/usr/local/var/www/htdocs on MacOS) and copy the script below to it, replacing the server, database, username, and password as appropriate. +``` + "yourDatabase", + "Uid" => "yourUsername", + "PWD" => "yourPassword" +); + +//Establishes the connection +$conn = sqlsrv_connect($serverName, $connectionOptions); +if( $conn === false ) { + die( FormatErrors( sqlsrv_errors())); +} + +//Select Query +$tsql= "SELECT @@Version as SQL_VERSION"; + +//Executes the query +$getResults= sqlsrv_query($conn, $tsql); + +//Error handling +if ($getResults == FALSE) + die(FormatErrors(sqlsrv_errors())); +?> + +

      Results :

      + +"); +} + +sqlsrv_free_stmt($getResults); + +function FormatErrors( $errors ) +{ + /* Display errors. */ + echo "Error information:
      "; + foreach ( $errors as $error ) + { + echo "SQLSTATE: ".$error['SQLSTATE']."
      "; + echo "Code: ".$error['code']."
      "; + echo "Message: ".$error['message']."
      "; + } +} +?> +``` +Point your browser to http://localhost/testsql.php (http://localhost:8080/testsql.php on MacOS). You should now be able to connect to your SQL Server/Azure SQL database. + From 5ba3995710cd3f18723086479706bf6a5ae1c66b Mon Sep 17 00:00:00 2001 From: Theano Petersen Date: Thu, 13 Jul 2017 12:32:50 -0700 Subject: [PATCH 267/336] Update what-s-new-in-sql-server-2017.md formatting tweaks --- .../sql-server/what-s-new-in-sql-server-2017.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/docs/sql-server/what-s-new-in-sql-server-2017.md b/docs/sql-server/what-s-new-in-sql-server-2017.md index 1d1c9573331..beb1e2093cc 100644 --- a/docs/sql-server/what-s-new-in-sql-server-2017.md +++ b/docs/sql-server/what-s-new-in-sql-server-2017.md @@ -16,25 +16,24 @@ ms.author: "craigg" manager: "jhubbard" --- # What's new in SQL Server 2017 -SQL Server 2017 represents a major step towards making SQL Server a platform that gives you choices of development languages, data types, on-premises or cloud, and operating systems by bringing the power of SQL Server to Linux, Linux-based Docker containers, and Windows. This topic summarizes what is new for specific feature areas in the most recent SQL Server 2017 Release Candidate (RC0, June 2017) and Community Technical Preview (CTP) releases. +SQL Server 2017 represents a major step towards making SQL Server a platform that gives you choices of development languages, data types, on-premises or cloud, and operating systems by bringing the power of SQL Server to Linux, Linux-based Docker containers, and Windows. This topic summarizes what is new for specific feature areas in the most recent SQL Server 2017 Release Candidate (RC1, July 2017) and Community Technical Preview (CTP) releases. **Try it out:** [Download the SQL Server 2017 Community Technology Preview](http://go.microsoft.com/fwlink/?LinkID=829477) >[!TIP] >**Run SQL Server on Linux!** For more information, see [SQL Server on Linux Documentation](https://docs.microsoft.com/sql/linux/) and [What's new for SQL Server 2017 on Linux](https://docs.microsoft.com/sql/linux/sql-server-linux-whats-new). -## Latest release -**SQL Server 2017 Release Candidate** (RC1, July 2017) +## Latest release: SQL Server 2017 Release Candidate (RC1, July 2017) ### SQL Server Database Engine -- CLR assemblies can now be added to a whitelist, as a work-around for the `clr strict security` feature described in CTP 2.0. [sp_add_trusted_assembly](../relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md), [sp_drop_trusted_assembly](../relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md), and [sys.trusted_asssemblies](../relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md) are added to support the white list of trusted assemblies. +- CLR assemblies can now be added to a whitelist, as a workaround for the `clr strict security` feature described in CTP 2.0. [sp_add_trusted_assembly](../relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md), [sp_drop_trusted_assembly](../relational-databases/system-stored-procedures/sys-sp-drop-trusted-assembly-transact-sql.md), and [sys.trusted_asssemblies](../relational-databases/system-catalog-views/sys-trusted-assemblies-transact-sql.md) are added to support the white list of trusted assemblies. ### SQL Server Integration Services (SSIS) -The new **Scale Out** feature in SSIS has the following new and changed features in RC1. For more info, see [What's New in Integration Services in SQL Server 2017](~/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md). -- Scale Out Master now supports high availability -- The failover handling of the execution logs from Scale Out Workers is improved. -- The parameter *runincluster* of the stored procedure **[catalog].[create_execution]** is renamed to *runinscaleout* for consistency and readability. -- The SSIS Catalog has a new global property to specify the default mode for executing SSIS packages. +- The new **Scale Out** feature in SSIS has the following new and changed features in RC1. For more info, see [What's New in Integration Services in SQL Server 2017](~/integration-services/what-s-new-in-integration-services-in-sql-server-2017.md). + - Scale Out Master now supports high availability. + - The failover handling of the execution logs from Scale Out Workers is improved. + - The parameter *runincluster* of the stored procedure **[catalog].[create_execution]** is renamed to *runinscaleout* for consistency and readability. + - The SSIS Catalog has a new global property to specify the default mode for executing SSIS packages. ## SQL Server Database Engine SQL Server 2017 includes many new Database Engine features, enhancements, and performance improvements. From 7ad67fd188e1ab37777b4a4e1cd49aa79a0f5dfe Mon Sep 17 00:00:00 2001 From: ulvii Date: Thu, 13 Jul 2017 12:35:00 -0700 Subject: [PATCH 268/336] Addressing Acrolinx issues --- docs/connect/php/installation-tutorial-linux-mac.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/connect/php/installation-tutorial-linux-mac.md b/docs/connect/php/installation-tutorial-linux-mac.md index b3638f120cb..e16897750d3 100644 --- a/docs/connect/php/installation-tutorial-linux-mac.md +++ b/docs/connect/php/installation-tutorial-linux-mac.md @@ -141,7 +141,7 @@ To test your installation, see **Testing Your Installation** at the end of this   ## Installing the drivers on Red Hat 7 for PHP 7.0 and 7.1 ### Step 1. Install PHP -To install PHP 7.1, simply replace remi-php70 with remi-php71 in the commands below. +To install PHP 7.1, replace remi-php70 with remi-php71 in the following commands. ``` sudo su wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm @@ -280,7 +280,7 @@ To test your installation, see **Testing Your Installation** at the end of this   ## Installing the drivers on MacOS El Capitan and Sierra ### Step 1. Install PHP -To install PHP 7.1, simply replace php70 with php71 in the commands below. +To install PHP 7.1, replace php70 with php71 in the following commands. ``` /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" brew tap @@ -316,7 +316,7 @@ sudo apachectl restart To test your installation, see **Testing Your Installation** at the end of this document.   ## Testing Your Installation -To test this sample script, create a file called testsql.php in /var/www/html/ (/usr/local/var/www/htdocs on MacOS) and copy the script below to it, replacing the server, database, username, and password as appropriate. +To test this sample script, create a file called testsql.php in /var/www/html/ (/usr/local/var/www/htdocs on MacOS) and copy the following script to it, replacing the server, database, username, and password as appropriate. ``` Date: Thu, 13 Jul 2017 12:36:09 -0700 Subject: [PATCH 269/336] Updating failover cluster manual steps --- docs/linux/sql-server-linux-release-notes.md | 17 +++++++++++++++++ ...nux-shared-disk-cluster-red-hat-7-operate.md | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-release-notes.md b/docs/linux/sql-server-linux-release-notes.md index 3cde0a90831..4b314686908 100644 --- a/docs/linux/sql-server-linux-release-notes.md +++ b/docs/linux/sql-server-linux-release-notes.md @@ -138,6 +138,23 @@ The following sections describe known issues with this release of SQL Server 201 - Distributed transactions requiring the Microsoft Distributed Transaction Coordinator service are not supported on SQL Server running on Linux. SQL Server to SQL Server distributed transactions are supported. +#### Shared disk cluster instance upgrade + +- Upgrade of an existing shared disk cluster instance from CTP 2.1 to RC1 requires additional steps: + + 1. Upgrade secondary (passive) cluster node first. + - Upgrade `mssql-server`. + - Upgrade `mssql-server-ha`. + 1. Manually fail over to the upgraded node. + `pcs resource move ` + - Resource fails initially because the resource agent checks the actual and expected serverName. The expected serverName will be different. + - Cluster will restart SQL Server resource on the same node. This will update the server name. + 1. Upgrade the other node. + - Upgrade `mssql-server`. + - Upgrade `mssql-server-ha`. + 1. Remove the constraint added by the manual resource move. See [Failover cluster manually](sql-server-linux-shared-disk-cluster-red-hat-7-operate.md#failManual). + 2. If desired, fail back to the original primary node. + #### Full-Text Search - Not all filters are available with this release, including filters for Office documents. For a list of supported filters, see [Install SQL Server Full-Text Search on Linux](sql-server-linux-setup-full-text-search.md#filters). diff --git a/docs/linux/sql-server-linux-shared-disk-cluster-red-hat-7-operate.md b/docs/linux/sql-server-linux-shared-disk-cluster-red-hat-7-operate.md index 3b5b782968b..628fbda849f 100644 --- a/docs/linux/sql-server-linux-shared-disk-cluster-red-hat-7-operate.md +++ b/docs/linux/sql-server-linux-shared-disk-cluster-red-hat-7-operate.md @@ -44,7 +44,7 @@ The following diagram illustrates the components in a Linux cluster with SQL Ser For more details on cluster configuration, resource agents options, and management, visit [RHEL reference documentation](http://access.redhat.com/documentation/Red_Hat_Enterprise_Linux/7/html/High_Availability_Add-On_Reference/index.html). -## Failover cluster manually +## Failover cluster manually The `resource move` command creates a constraint forcing the resource to start on the target node.  After executing the `move` command, executing resource `clear` will remove the constraint so it is possible to move the resource again or have the resource automatically fail over. From 6a0fbbca5bcab23aa2bdc907a8a13f195b2b52b5 Mon Sep 17 00:00:00 2001 From: ulvii Date: Thu, 13 Jul 2017 12:38:59 -0700 Subject: [PATCH 270/336] Addressing more Acrolinx issues --- docs/connect/php/installation-tutorial-linux-mac.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/connect/php/installation-tutorial-linux-mac.md b/docs/connect/php/installation-tutorial-linux-mac.md index e16897750d3..69a9c51d7c7 100644 --- a/docs/connect/php/installation-tutorial-linux-mac.md +++ b/docs/connect/php/installation-tutorial-linux-mac.md @@ -141,7 +141,7 @@ To test your installation, see **Testing Your Installation** at the end of this   ## Installing the drivers on Red Hat 7 for PHP 7.0 and 7.1 ### Step 1. Install PHP -To install PHP 7.1, replace remi-php70 with remi-php71 in the following commands. +To install PHP 7.1, replace remi-php70 with remi-php71 in the following commands: ``` sudo su wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm @@ -280,7 +280,7 @@ To test your installation, see **Testing Your Installation** at the end of this   ## Installing the drivers on MacOS El Capitan and Sierra ### Step 1. Install PHP -To install PHP 7.1, replace php70 with php71 in the following commands. +To install PHP 7.1, replace php70 with php71 in the following commands: ``` /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" brew tap From 3ddb1d1ad5f68e4f4f3ed43cc0be13299f2f8d9c Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Thu, 13 Jul 2017 15:45:06 -0400 Subject: [PATCH 271/336] Added tip for hostname for Docker --- docs/linux/quickstart-install-connect-docker.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/linux/quickstart-install-connect-docker.md b/docs/linux/quickstart-install-connect-docker.md index e92a88cf4ed..9690e1eed5f 100644 --- a/docs/linux/quickstart-install-connect-docker.md +++ b/docs/linux/quickstart-install-connect-docker.md @@ -96,6 +96,15 @@ The following steps increase the memory for Docker for Windows to 4 GB. 1. If the **STATUS** column shows a status of **Up**, then SQL Server is running in the container and listening on the port specified in the **PORTS** column. If the **STATUS** column for your SQL Server container shows **Exited**, see the [Troubleshooting section of the configuration guide](sql-server-linux-configure-docker.md#troubleshooting). +> [!TIP] +> Two other useful options for `docker run` are `-h` (host name) and `--name` (name). Setting the host name changes the internal name of the container. This is the name you'll see returned in the following query: +> +> ```sql +> SELECT @@SERVERNAME, SERVERPROPERTY('ComputerNamePhysicalNetBIOS'), SERVERPROPERTY('MachineName'), SERVERPROPERTY('ServerName') +> ``` +> +> You can also use the `--name` parameter to use the same name for the container. + ## Change the SA password The SA account is a system administrator on the SQL Server instance that gets created during setup. After creating your SQL Server container, the `SA_PASSWORD` environment variable you specified is discoverable by running `echo $SA_PASSWORD` in the container. For security purposes, change your SA password. From 8ab4994ee649875f6de62127f7b3ba8e25fd1501 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 13 Jul 2017 12:46:50 -0700 Subject: [PATCH 272/336] Change heading --- docs/linux/sql-server-linux-release-notes.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/linux/sql-server-linux-release-notes.md b/docs/linux/sql-server-linux-release-notes.md index 4b314686908..944a8f0cb8a 100644 --- a/docs/linux/sql-server-linux-release-notes.md +++ b/docs/linux/sql-server-linux-release-notes.md @@ -143,15 +143,15 @@ The following sections describe known issues with this release of SQL Server 201 - Upgrade of an existing shared disk cluster instance from CTP 2.1 to RC1 requires additional steps: 1. Upgrade secondary (passive) cluster node first. - - Upgrade `mssql-server`. - - Upgrade `mssql-server-ha`. + - Upgrade **mssql-server**. + - Upgrade **mssql-server-ha**. 1. Manually fail over to the upgraded node. `pcs resource move ` - Resource fails initially because the resource agent checks the actual and expected serverName. The expected serverName will be different. - Cluster will restart SQL Server resource on the same node. This will update the server name. 1. Upgrade the other node. - - Upgrade `mssql-server`. - - Upgrade `mssql-server-ha`. + - Upgrade **mssql-server**. + - Upgrade **mssql-server-ha**. 1. Remove the constraint added by the manual resource move. See [Failover cluster manually](sql-server-linux-shared-disk-cluster-red-hat-7-operate.md#failManual). 2. If desired, fail back to the original primary node. From dfdbc18d7016250ce0b6838a3589fc61a01e6178 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Thu, 13 Jul 2017 15:51:59 -0400 Subject: [PATCH 273/336] Minor update --- docs/linux/quickstart-install-connect-docker.md | 2 +- docs/linux/sql-server-linux-configure-docker.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/linux/quickstart-install-connect-docker.md b/docs/linux/quickstart-install-connect-docker.md index 9690e1eed5f..49a610387b8 100644 --- a/docs/linux/quickstart-install-connect-docker.md +++ b/docs/linux/quickstart-install-connect-docker.md @@ -97,7 +97,7 @@ The following steps increase the memory for Docker for Windows to 4 GB. 1. If the **STATUS** column shows a status of **Up**, then SQL Server is running in the container and listening on the port specified in the **PORTS** column. If the **STATUS** column for your SQL Server container shows **Exited**, see the [Troubleshooting section of the configuration guide](sql-server-linux-configure-docker.md#troubleshooting). > [!TIP] -> Two other useful options for `docker run` are `-h` (host name) and `--name` (name). Setting the host name changes the internal name of the container. This is the name you'll see returned in the following query: +> Another useful option for `docker run` is `-h` (host name). Setting the host name changes the internal name of the container. This is the name you'll see returned in the following query: > > ```sql > SELECT @@SERVERNAME, SERVERPROPERTY('ComputerNamePhysicalNetBIOS'), SERVERPROPERTY('MachineName'), SERVERPROPERTY('ServerName') diff --git a/docs/linux/sql-server-linux-configure-docker.md b/docs/linux/sql-server-linux-configure-docker.md index ab6d265fdb5..c1c234c97bb 100644 --- a/docs/linux/sql-server-linux-configure-docker.md +++ b/docs/linux/sql-server-linux-configure-docker.md @@ -6,7 +6,7 @@ description: Explore different ways of using and interacting with SQL Server 201 author: rothja ms.author: jroth manager: jhubbard -ms.date: 05/31/2017 +ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine From d57da22d7725704e3b56edf293fb275d7185c440 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 13 Jul 2017 12:52:26 -0700 Subject: [PATCH 274/336] Removing one level of indentation --- docs/linux/sql-server-linux-release-notes.md | 28 ++++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/linux/sql-server-linux-release-notes.md b/docs/linux/sql-server-linux-release-notes.md index 944a8f0cb8a..477c0445bdf 100644 --- a/docs/linux/sql-server-linux-release-notes.md +++ b/docs/linux/sql-server-linux-release-notes.md @@ -140,20 +140,20 @@ The following sections describe known issues with this release of SQL Server 201 #### Shared disk cluster instance upgrade -- Upgrade of an existing shared disk cluster instance from CTP 2.1 to RC1 requires additional steps: - - 1. Upgrade secondary (passive) cluster node first. - - Upgrade **mssql-server**. - - Upgrade **mssql-server-ha**. - 1. Manually fail over to the upgraded node. - `pcs resource move ` - - Resource fails initially because the resource agent checks the actual and expected serverName. The expected serverName will be different. - - Cluster will restart SQL Server resource on the same node. This will update the server name. - 1. Upgrade the other node. - - Upgrade **mssql-server**. - - Upgrade **mssql-server-ha**. - 1. Remove the constraint added by the manual resource move. See [Failover cluster manually](sql-server-linux-shared-disk-cluster-red-hat-7-operate.md#failManual). - 2. If desired, fail back to the original primary node. +Upgrade of an existing shared disk cluster instance from CTP 2.1 to RC1 requires additional steps: + +1. Upgrade secondary (passive) cluster node first. + - Upgrade **mssql-server** package. + - Upgrade **mssql-server-ha** package. +1. Manually fail over to the upgraded node. + `pcs resource move ` + - Resource fails initially because the resource agent checks the actual and expected serverName. The expected serverName will be different. + - Cluster will restart SQL Server resource on the same node. This will update the server name. +1. Upgrade the other node. + - Upgrade **mssql-server** package. + - Upgrade **mssql-server-ha** package. +1. Remove the constraint added by the manual resource move. See [Failover cluster manually](sql-server-linux-shared-disk-cluster-red-hat-7-operate.md#failManual). +2. If desired, fail back to the original primary node. #### Full-Text Search - Not all filters are available with this release, including filters for Office documents. For a list of supported filters, see [Install SQL Server Full-Text Search on Linux](sql-server-linux-setup-full-text-search.md#filters). From cdfeffd268545ac2f8da2fad736b6b6d553692af Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 13 Jul 2017 12:53:56 -0700 Subject: [PATCH 275/336] Removed note about virtual network name. --- .../sql-server-linux-shared-disk-cluster-red-hat-7-configure.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure.md b/docs/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure.md index a2fb311bb73..f23635b5c01 100644 --- a/docs/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure.md +++ b/docs/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure.md @@ -38,7 +38,7 @@ For more details on cluster configuration, resource agents options, and manageme > [!NOTE] -> At this point, SQL Server's integration with Pacemaker is not as coupled as with WSFC on Windows. From within SQL, there is no knowledge about the presence of the cluster, all orchestration is outside in and the service is controlled as a standalone instance by Pacemaker. Also, virtual network name is specific to WSFC, there is no equivalent of the same in Pacemaker. It is expected that @@servername and sys.servers to return the node name, while the cluster dmvs sys.dm_os_cluster_nodes and sys.dm_os_cluster_properties will no records. +> At this point, SQL Server's integration with Pacemaker is not as coupled as with WSFC on Windows. From within SQL, there is no knowledge about the presence of the cluster, all orchestration is outside in and the service is controlled as a standalone instance by Pacemaker. Also for example, cluster dmvs sys.dm_os_cluster_nodes and sys.dm_os_cluster_properties will no records. To use a connection string that points to a string server name and not use the IP, they will have to register in their DNS server the IP used to create the virtual IP resource (as explained below) with the chosen server name. > [!NOTE] From 8d21f97e02914984a99869e0028ef24fcfecda9b Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Thu, 13 Jul 2017 16:09:59 -0400 Subject: [PATCH 276/336] Removing TIP to prevent tip overload but leaving text --- docs/linux/quickstart-install-connect-docker.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/docs/linux/quickstart-install-connect-docker.md b/docs/linux/quickstart-install-connect-docker.md index 49a610387b8..9c7e17b28e3 100644 --- a/docs/linux/quickstart-install-connect-docker.md +++ b/docs/linux/quickstart-install-connect-docker.md @@ -96,14 +96,13 @@ The following steps increase the memory for Docker for Windows to 4 GB. 1. If the **STATUS** column shows a status of **Up**, then SQL Server is running in the container and listening on the port specified in the **PORTS** column. If the **STATUS** column for your SQL Server container shows **Exited**, see the [Troubleshooting section of the configuration guide](sql-server-linux-configure-docker.md#troubleshooting). -> [!TIP] -> Another useful option for `docker run` is `-h` (host name). Setting the host name changes the internal name of the container. This is the name you'll see returned in the following query: -> -> ```sql -> SELECT @@SERVERNAME, SERVERPROPERTY('ComputerNamePhysicalNetBIOS'), SERVERPROPERTY('MachineName'), SERVERPROPERTY('ServerName') -> ``` -> -> You can also use the `--name` parameter to use the same name for the container. +There are two useful `docker run` options not used in the previous example for simplicity. The `-h` (host name) parameter changes the internal name of the container to a custom value. This is the name you'll see returned in the following Transact-SQL query: + +```sql +SELECT @@SERVERNAME, SERVERPROPERTY('ComputerNamePhysicalNetBIOS'), SERVERPROPERTY('MachineName'), SERVERPROPERTY('ServerName') +``` + +You also might find the `--name` parameter useful to name your container rather than having a generated container name. Setting `-h` and `--name` to the same value is a good way to easily identify the target container. ## Change the SA password From c18fb59d65ce228b779f2e02dca545ca4950b6fe Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Thu, 13 Jul 2017 16:10:30 -0400 Subject: [PATCH 277/336] Formatting --- docs/linux/quickstart-install-connect-docker.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/linux/quickstart-install-connect-docker.md b/docs/linux/quickstart-install-connect-docker.md index 9c7e17b28e3..a7445f66181 100644 --- a/docs/linux/quickstart-install-connect-docker.md +++ b/docs/linux/quickstart-install-connect-docker.md @@ -99,7 +99,10 @@ The following steps increase the memory for Docker for Windows to 4 GB. There are two useful `docker run` options not used in the previous example for simplicity. The `-h` (host name) parameter changes the internal name of the container to a custom value. This is the name you'll see returned in the following Transact-SQL query: ```sql -SELECT @@SERVERNAME, SERVERPROPERTY('ComputerNamePhysicalNetBIOS'), SERVERPROPERTY('MachineName'), SERVERPROPERTY('ServerName') +SELECT @@SERVERNAME, + SERVERPROPERTY('ComputerNamePhysicalNetBIOS'), + SERVERPROPERTY('MachineName'), + SERVERPROPERTY('ServerName') ``` You also might find the `--name` parameter useful to name your container rather than having a generated container name. Setting `-h` and `--name` to the same value is a good way to easily identify the target container. From af489e2d0725b8c2759fb0d5cf3fd48bd0f93e8a Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 13 Jul 2017 13:17:51 -0700 Subject: [PATCH 278/336] Update to explain why. --- docs/linux/sql-server-linux-release-notes.md | 2 +- docs/linux/sql-server-linux-whats-new.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-release-notes.md b/docs/linux/sql-server-linux-release-notes.md index 477c0445bdf..4c778ed56b2 100644 --- a/docs/linux/sql-server-linux-release-notes.md +++ b/docs/linux/sql-server-linux-release-notes.md @@ -140,7 +140,7 @@ The following sections describe known issues with this release of SQL Server 201 #### Shared disk cluster instance upgrade -Upgrade of an existing shared disk cluster instance from CTP 2.1 to RC1 requires additional steps: +In RC1 the cluster resource agent sets the virtual server name like it does in a Failover Cluster Instance on Windows. Prior to RC1 @@servername on a shared disk cluster returned the specific node name. After failover @@servername returned a different value. In RC1 the serverName of the shared disk cluster instance is updated with the resource name when the resource is added to the cluster. Because of this, upgrade of an existing shared disk cluster instance from CTP 2.1 to RC1 requires the following additional steps: 1. Upgrade secondary (passive) cluster node first. - Upgrade **mssql-server** package. diff --git a/docs/linux/sql-server-linux-whats-new.md b/docs/linux/sql-server-linux-whats-new.md index 563c7bd0a8d..4daee6f5788 100644 --- a/docs/linux/sql-server-linux-whats-new.md +++ b/docs/linux/sql-server-linux-whats-new.md @@ -28,6 +28,7 @@ The RC1 release contains the following improvements and fixes: - Added IPV6 support. - Added environment variables for initial SQL Server setup. For more information, see [Configure SQL Server settings with environment variables on Linux](sql-server-linux-configure-environment-variables.md). - Removed **sqlpackage** from installed binaries. SqlPackage can still be run against Linux remotely from Windows. +- Shared disk cluster resource agent sets the resource name like it does on a Windows SQL Server failover cluster instance. `@@ServerName` returns the SQL Server shared disk cluster resource name; prior to RC1 it returned the name of the cluster node that owned the resource. ## CTP 2.1 From d43d4a135e699af363efaf8ba2d281d06e00e635 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 13 Jul 2017 13:28:43 -0700 Subject: [PATCH 279/336] Update introduction to shared disk cluster upgrade. --- docs/linux/sql-server-linux-release-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-release-notes.md b/docs/linux/sql-server-linux-release-notes.md index 4c778ed56b2..3512fffedc5 100644 --- a/docs/linux/sql-server-linux-release-notes.md +++ b/docs/linux/sql-server-linux-release-notes.md @@ -140,7 +140,7 @@ The following sections describe known issues with this release of SQL Server 201 #### Shared disk cluster instance upgrade -In RC1 the cluster resource agent sets the virtual server name like it does in a Failover Cluster Instance on Windows. Prior to RC1 @@servername on a shared disk cluster returned the specific node name. After failover @@servername returned a different value. In RC1 the serverName of the shared disk cluster instance is updated with the resource name when the resource is added to the cluster. Because of this, upgrade of an existing shared disk cluster instance from CTP 2.1 to RC1 requires the following additional steps: +In RC1 the cluster resource agent sets the virtual server name like it does in a Failover Cluster Instance on Windows. Prior to RC1 `@@servername` on a shared disk cluster returned the specific node name so after failover `@@servername` returned a different value. In RC1 the serverName of the shared disk cluster instance is updated with the resource name when the resource is added to the cluster. Because of this, the cluster will have to restart the SQL Server after the manual failover during the upgrade - as in the following steps: 1. Upgrade secondary (passive) cluster node first. - Upgrade **mssql-server** package. From a18f391c664121ab34e1493facbae9102052c300 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 13 Jul 2017 13:52:32 -0700 Subject: [PATCH 280/336] Updated R (Machine Learning) components. --- .../editions-and-components-of-sql-server-2017.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/sql-server/editions-and-components-of-sql-server-2017.md b/docs/sql-server/editions-and-components-of-sql-server-2017.md index 91793f6bed9..11bd20534a4 100644 --- a/docs/sql-server/editions-and-components-of-sql-server-2017.md +++ b/docs/sql-server/editions-and-components-of-sql-server-2017.md @@ -101,7 +101,9 @@ For the latest release notes and what's new information, see the following: |[!INCLUDE[ssRSnoversion](../includes/ssrsnoversion-md.md)]|[!INCLUDE[ssRSnoversion](../includes/ssrsnoversion-md.md)] includes server and client components for creating, managing, and deploying tabular, matrix, graphical, and free-form reports. [!INCLUDE[ssRSnoversion](../includes/ssrsnoversion-md.md)] is also an extensible platform that you can use to develop report applications.| |[!INCLUDE[ssISnoversion](../includes/ssisnoversion-md.md)]|[!INCLUDE[ssISnoversion](../includes/ssisnoversion-md.md)] is a set of graphical tools and programmable objects for moving, copying, and transforming data. It also includes the [!INCLUDE[ssDQSnoversion](../includes/ssdqsnoversion-md.md)] (DQS) component for [!INCLUDE[ssISnoversion](../includes/ssisnoversion-md.md)].| |[!INCLUDE[ssMDSshort](../includes/ssmdsshort-md.md)]|[!INCLUDE[ssMDSshort](../includes/ssmdsshort-md.md)] (MDS) is the [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] solution for master data management. MDS can be configured to manage any domain (products, customers, accounts) and includes hierarchies, granular security, transactions, data versioning, and business rules, as well as an [!INCLUDE[ssMDSXLS](../includes/ssmdsxls-md.md)] that can be used to manage data.| -|[!INCLUDE[rsql_productname](../includes/rsql-productname-md.md)]|[!INCLUDE[rsql_productname](../includes/rsql-productname-md.md)] supports distributed, scalable R solutions on multiple platforms and using multiple enterprise data sources, including Linux, Hadoop, and Teradata.| +|Machine Learning Services (In-Database)|Machine Learning Services (In-Database) supports distributed, scalable machine learning solutions using enterprise data sources. In SQL Server 2016, the R language was supported. SQL Server 2017 supports R and Python.| +|Machine Learning Server (Standalone)|Machine Learning Server (Standalone) supports deployment of distributed, scalable machine learning solutions on multiple platforms and using multiple enterprise data sources, including Linux, Hadoop, and Teradata. In SQL Server 2016, the R language was supported. SQL Server 2017 supports R and Python.| + |Management tools|Description| |----------------------|-----------------| @@ -275,7 +277,9 @@ The Developer edition continues to support only 1 client for [SQL Server Distrib |-------------|----------------|--------------|---------|------------------------------------|------------------------| |Basic R integration|Yes|Yes|Yes|Yes|No| |Advanced R integration|Yes|No|No|No|No| -|R Server (Standalone)|Yes|No|No|No|No| +|Basic Python integration|Yes|Yes|Yes|Yes|No| +|Advanced Python integration|Yes|No|No|No|No| +|Machine Learning Server (Standalone)|Yes|No|No|No|No| |Polybase compute node|Yes|Yes 1|Yes 1, 2|Yes 1,|Yes 1, | |Polybase head node|Yes|No|No|No|No| |JSON|Yes|Yes|Yes|Yes|Yes| From 5a505500594f37ffc61db66d5b9384780f1143ad Mon Sep 17 00:00:00 2001 From: Meet Bhagdev Date: Thu, 13 Jul 2017 13:53:03 -0700 Subject: [PATCH 281/336] Update sql-server-linux-whats-new.md --- docs/linux/sql-server-linux-whats-new.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/sql-server-linux-whats-new.md b/docs/linux/sql-server-linux-whats-new.md index 4daee6f5788..7dd29506e62 100644 --- a/docs/linux/sql-server-linux-whats-new.md +++ b/docs/linux/sql-server-linux-whats-new.md @@ -23,7 +23,7 @@ This topic describes what's new for SQL Server 2017 running on Linux. The RC1 release contains the following improvements and fixes: - Enabled Transparent Layer Security (TLS) for encrypted connections. For more information, see [Encrypting Connections to SQL Server on Linux](sql-server-linux-encrypted-connections.md). -- Enabled [Windows Authentication](sql-server-linux-active-directory-authentication.md). +- Enabled [Active Directory Authentication](sql-server-linux-active-directory-authentication.md). - Enabled [DB Mail](../relational-databases/database-mail/database-mail.md). - Added IPV6 support. - Added environment variables for initial SQL Server setup. For more information, see [Configure SQL Server settings with environment variables on Linux](sql-server-linux-configure-environment-variables.md). From 6e43e1ba51737fa4f4a69d931eafed417e538351 Mon Sep 17 00:00:00 2001 From: David Puglielli Date: Thu, 13 Jul 2017 14:12:46 -0700 Subject: [PATCH 282/336] Changes according to review comments --- docs/connect/php/azure-active-directory.md | 24 ++++++++++++++-------- docs/connect/php/connection-resiliency.md | 20 ++++++++++-------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/docs/connect/php/azure-active-directory.md b/docs/connect/php/azure-active-directory.md index cf14c35950b..9546811a757 100644 --- a/docs/connect/php/azure-active-directory.md +++ b/docs/connect/php/azure-active-directory.md @@ -1,7 +1,7 @@ --- title: "Azure Active Directory | Microsoft Docs" ms.custom: "" -ms.date: "07/10/2017" +ms.date: "07/13/2017" ms.prod: "sql-non-specified" ms.reviewer: "" ms.suite: "" @@ -11,26 +11,32 @@ ms.tgt_pltfrm: "" ms.topic: "article" helpviewer_keywords: - "" -ms.assetid: caps.latest.revision: 1 -author: "" -ms.author: "" -manager: "" +author: "david-puglielli" +ms.author: "v-dapugl" +manager: "v-hakaka" --- # Azure Active Directory [!INCLUDE[Driver_PHP_Download](../../includes/driver_php_download.md)] [Azure Active Directory](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-whatis) (Azure AD) is a central user ID management technology that operates as an alternative to [SQL Server authentication](../../connect/php/how-to-connect-using-sql-server-authentication.md). Azure AD allows connections to Microsoft Azure SQL Database and SQL Data Warehouse with federated identities in Azure AD using a username and password, Windows Integrated Authentication, or an Azure AD access token; the PHP drivers for SQL Server offer partial support for these features. -To use Azure AD, use the **Authentication** keyword. This keyword can take on two values: **SqlPassword** and **ActiveDirectoryPassword**. To connect to a SQL Server instance (which may be an Azure instance), set **Authentication** to **SqlPassword**. To connect to an Azure SQL database using an Azure AD account username and password, set **Authentication** to **ActiveDirectoryPassword** in the connection string. +To use Azure AD, use the **Authentication** keyword. By default it is not set -- see the table below for details. -When using the **Authentication** keyword, the username and password must be passed into the connection string using the **UID** and **PWD** keywords. By default, the **Encrypt** keyword is set to true, so the client will request encryption; moreover, the server certificate will be validated irrespective of the encryption setting unless **TrustServerCertificate** is set to true. This is distinguished from the old, and less secure, login method, in which the server certificate is not validated unless encryption is specifically requested in the connection string. +|Values for **Authentication**|Description| +|-|-| +|(not set)|Authentication mode determined by other keywords (existing legacy connection options). | +| (empty string)| Connection string only. Override and unset an `Authentication` value set in the DSN.| +|`SqlPassword`|Directly authenticate to a SQL Server instance (which may be an Azure instance) using a username and password. The username and password must be passed into the connection string using the **UID** and **PWD** keywords. | +| `ActiveDirectoryPassword`|Authenticate with an Azure Active Directory identity using a username and password. The username and password must be passed into the connection string using the **UID** and **PWD** keywords. | -Before using Azure AD with the PHP drivers for SQL Server, ensure that you have installed the [Active Directory Authentication Library for SQL Server](https://www.microsoft.com/en-us/download/details.aspx?id=48742) and the [Microsoft Online Services Sign-In Assistant](https://www.microsoft.com/en-ca/download/details.aspx?id=41950). +The **Authentication** keyword affects the connection security settings. If it is set in the connection string, then by default the **Encrypt** keyword is set to true, so the client will request encryption. Moreover, the server certificate will be validated irrespective of the encryption setting unless **TrustServerCertificate** is set to true. This is distinguished from the old, and less secure, login method, in which the server certificate is not validated unless encryption is specifically requested in the connection string. + +Before using Azure AD with the PHP drivers for SQL Server on Windows, ensure that you have installed the [Microsoft Online Services Sign-In Assistant](https://www.microsoft.com/en-ca/download/details.aspx?id=41950) (not required for Linux and MacOS). #### Limitations -On Windows, the underlying ODBC driver supports a third value for the **Authentication** keyword, **ActiveDirectoryIntegrated**, but the PHP drivers do not support this value on any platform and hence also do not support Azure AD token-based authentication. +On Windows, the underlying ODBC driver supports one more value for the **Authentication** keyword, **ActiveDirectoryIntegrated**, but the PHP drivers do not support this value on any platform and hence also do not support Azure AD token-based authentication. ## Example diff --git a/docs/connect/php/connection-resiliency.md b/docs/connect/php/connection-resiliency.md index bdb4afd2c2f..8b36fac9a27 100644 --- a/docs/connect/php/connection-resiliency.md +++ b/docs/connect/php/connection-resiliency.md @@ -1,7 +1,7 @@ --- -title: "Connection Resiliency | Microsoft Docs" +title: "Idle Connection Resiliency" ms.custom: "" -ms.date: "07/10/2017" +ms.date: "07/13/2017" ms.prod: "sql-non-specified" ms.reviewer: "" ms.suite: "" @@ -11,11 +11,10 @@ ms.tgt_pltfrm: "" ms.topic: "article" helpviewer_keywords: - "" -ms.assetid: caps.latest.revision: 1 -author: "" -ms.author: "" -manager: "" +author: "david-puglielli" +ms.author: "v-dapugl" +manager: "v-hakaka" --- ## Idle Connection Resiliency [!INCLUDE[Driver_PHP_Download](../../includes/driver_php_download.md)] @@ -24,8 +23,10 @@ manager: "" Connection resiliency is implemented with two connection keywords that can be added to connection strings: **ConnectRetryCount** and **ConnectRetryInterval**. -* **ConnectRetryCount** refers to the maximum number of times an attempt to reestablish a broken connection is made before giving up. This is an integer between 0 and 255 (inclusive). The default value is 1, i.e., a single attempt is made to reestablish a connection when broken. A value of 0 means that no reconnection will be attempted. -* **ConnectRetryInterval** refers to the time between attempts to reestablish a connection. This is an integer that varies from 1 second to 60 seconds (inclusive). The default is 1, but note that the application will attempt to reconnect immediately upon detecting a broken connection, and will then wait **ConnectRetryInterval** seconds before trying again. This keyword is ignored if **ConnectRetryCount** is equal to 0. +|Name|Values|Default|Description| +|-|-|-|-| +|**ConnectRetryCount**| Integer between 0 and 255 (inclusive)|1|The maximum number of attempts to reestablish a broken connection before giving up. By default, a single attempt is made to reestablish a connection when broken. A value of 0 means that no reconnection will be attempted.| +|**ConnectRetryInterval**| Integer between 1 and 60 (inclusive)|1| The time, in seconds, between attempts to reestablish a connection. The application will attempt to reconnect immediately upon detecting a broken connection, and will then wait **ConnectRetryInterval** seconds before trying again. This keyword is ignored if **ConnectRetryCount** is equal to 0. If **ConnectRetryCount*ConnectRetryInterval** is larger than **LoginTimeout**, then the client will cease attempting to connect once **LoginTimeout** is reached; otherwise, it will continue to try to reconnect until **ConnectRetryCount** is reached. @@ -46,6 +47,8 @@ Connection resiliency applies when the connection is idle. Failures that occur w The following code connects to a database and executes a query. The connection is interrupted by killing the session and a new query is attempted using the broken connection. This example uses the [AdventureWorks](https://msdn.microsoft.com/en-us/library/ms124501%28v=sql.100%29.aspx) sample database. +In this example, we specify a buffered cursor before breaking the connection. If we do not specify a buffered cursor, the connection would not be reestablished because there would be an active server-side cursor and thus the connection would not be idle when broken. However, in that case we could call sqlsrv_free_stmt() before breaking the connection to vacate the cursor, and the connection would be successfully reestablished. + ```php Date: Thu, 13 Jul 2017 14:35:27 -0700 Subject: [PATCH 283/336] Few more changes --- docs/connect/php/azure-active-directory.md | 26 ++++++++-------------- docs/connect/php/connection-resiliency.md | 20 +++++------------ 2 files changed, 15 insertions(+), 31 deletions(-) diff --git a/docs/connect/php/azure-active-directory.md b/docs/connect/php/azure-active-directory.md index 9546811a757..c8cbe9483e0 100644 --- a/docs/connect/php/azure-active-directory.md +++ b/docs/connect/php/azure-active-directory.md @@ -1,27 +1,19 @@ --- title: "Azure Active Directory | Microsoft Docs" -ms.custom: "" -ms.date: "07/13/2017" -ms.prod: "sql-non-specified" -ms.reviewer: "" -ms.suite: "" -ms.technology: - - "drivers" -ms.tgt_pltfrm: "" -ms.topic: "article" -helpviewer_keywords: - - "" -caps.latest.revision: 1 -author: "david-puglielli" -ms.author: "v-dapugl" -manager: "v-hakaka" ---- +ms.date: "07/13/2017" +ms.prod: "sql-non-specified" +ms.technology: + - "drivers" +ms.topic: "article" +author: "david-puglielli" +ms.author: "v-dapugl" +--- # Azure Active Directory [!INCLUDE[Driver_PHP_Download](../../includes/driver_php_download.md)] [Azure Active Directory](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-whatis) (Azure AD) is a central user ID management technology that operates as an alternative to [SQL Server authentication](../../connect/php/how-to-connect-using-sql-server-authentication.md). Azure AD allows connections to Microsoft Azure SQL Database and SQL Data Warehouse with federated identities in Azure AD using a username and password, Windows Integrated Authentication, or an Azure AD access token; the PHP drivers for SQL Server offer partial support for these features. -To use Azure AD, use the **Authentication** keyword. By default it is not set -- see the table below for details. +To use Azure AD, use the **Authentication** keyword. By default it is not set -- see the following table for details. |Values for **Authentication**|Description| |-|-| diff --git a/docs/connect/php/connection-resiliency.md b/docs/connect/php/connection-resiliency.md index 8b36fac9a27..d1529cfcb28 100644 --- a/docs/connect/php/connection-resiliency.md +++ b/docs/connect/php/connection-resiliency.md @@ -1,25 +1,17 @@ --- title: "Idle Connection Resiliency" -ms.custom: "" -ms.date: "07/13/2017" +ms.date: "07/13/2017" ms.prod: "sql-non-specified" -ms.reviewer: "" -ms.suite: "" -ms.technology: +ms.technology: - "drivers" -ms.tgt_pltfrm: "" -ms.topic: "article" -helpviewer_keywords: - - "" -caps.latest.revision: 1 -author: "david-puglielli" +ms.topic: "article" +author: "david-puglielli" ms.author: "v-dapugl" -manager: "v-hakaka" ---- +--- ## Idle Connection Resiliency [!INCLUDE[Driver_PHP_Download](../../includes/driver_php_download.md)] -[Connection resiliency](https://msdn.microsoft.com/en-us/library/dn632678.aspx) is the principle that an idle connection that is broken can be reestablished, within certain constraints. If a connection to Microsoft SQL Server fails, connection resiliency allows the client to automatically attempt to reestablish the connection. Connection resiliency is a property of the data source; only SQL Server 2014 and later and Azure SQL Database support connection resiliency. +[Connection resiliency](https://msdn.microsoft.com/en-us/library/dn632678.aspx) is the principle that a broken idle connection can be reestablished, within certain constraints. If a connection to Microsoft SQL Server fails, connection resiliency allows the client to automatically attempt to reestablish the connection. Connection resiliency is a property of the data source; only SQL Server 2014 and later and Azure SQL Database support connection resiliency. Connection resiliency is implemented with two connection keywords that can be added to connection strings: **ConnectRetryCount** and **ConnectRetryInterval**. From 2560b69e7bb2dd865a3deb2615caa3bcef365486 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Thu, 13 Jul 2017 15:19:47 -0700 Subject: [PATCH 284/336] change according to David's comments --- docs/connect/php/pdo-getattribute.md | 2 +- docs/connect/php/pdo-setattribute.md | 2 +- docs/connect/php/pdostatement-setattribute.md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/connect/php/pdo-getattribute.md b/docs/connect/php/pdo-getattribute.md index f5dca5258d4..a77b5f29a55 100644 --- a/docs/connect/php/pdo-getattribute.md +++ b/docs/connect/php/pdo-getattribute.md @@ -51,7 +51,7 @@ The following table contains the list of supported attributes. |PDO::SQLSRV_ATTR_DIRECT_QUERY|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|true

      false|Specifies direct or prepared query execution. For more information, see [Direct Statement Execution and Prepared Statement Execution in the PDO_SQLSRV Driver](../../connect/php/direct-statement-execution-prepared-statement-execution-pdo-sqlsrv-driver.md).| |PDO::SQLSRV_ATTR_ENCODING|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|PDO::SQLSRV_ENCODING_UTF8

      PDO::SQLSRV_ENCODING_SYSTEM|Specifies the character set encoding used by the driver to communicate with the server.

      The default is PDO::SQLSRV_ENCODING_UTF8.| |PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|true or false|Handles numeric fetches from columns with numeric SQL types (bit, integer, smallint, tinyint, float, or real).

      When connection option flag ATTR_STRINGIFY_FETCHES is on, even when SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is on, the return value is a string.

      When the returned PDO type in bind column is PDO_PARAM_INT, the return value from an integer column is an int even if SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is off.| -|PDO::SQLSRV_ATTR_QUERY_TIMEOUT|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|integer|Sets the query timeout in seconds.

      The default is 0, which means the driver waits indefinitely for results.

      Negative numbers are not allowed.| +|PDO::SQLSRV_ATTR_QUERY_TIMEOUT|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|integer|Sets the query timeout in seconds.

      The default is 0, which means the driver will wait indefinitely for results.

      Negative numbers are not allowed.| PDO processes some of the predefined attributes while it requires the driver to handle others. All custom attributes and connection options are handled by the driver, an unsupported attribute or connection option returns null. diff --git a/docs/connect/php/pdo-setattribute.md b/docs/connect/php/pdo-setattribute.md index a6d5288e582..cc1f3298bca 100644 --- a/docs/connect/php/pdo-setattribute.md +++ b/docs/connect/php/pdo-setattribute.md @@ -49,7 +49,7 @@ Returns true on success, otherwise false. |PDO::SQLSRV_ATTR_DIRECT_QUERY|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|true

      false|Specifies direct or prepared query execution. For more information, see [Direct Statement Execution and Prepared Statement Execution in the PDO_SQLSRV Driver](../../connect/php/direct-statement-execution-prepared-statement-execution-pdo-sqlsrv-driver.md).| |PDO::SQLSRV_ATTR_ENCODING|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|PDO::SQLSRV_ENCODING_UTF8

      PDO::SQLSRV_ENCODING_SYSTEM.|Sets the character set encoding used by the driver to communicate with the server.

      PDO::SQLSRV_ENCODING_BINARY is not supported.

      The default is PDO::SQLSRV_ENCODING_UTF8.| |PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|true or false|Handles numeric fetches from columns with numeric SQL types (bit, integer, smallint, tinyint, float, or real).

      When connection option flag ATTR_STRINGIFY_FETCHES is on, even when SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is on, the return value is a string.

      When the returned PDO type in bind column is PDO_PARAM_INT, the return value from an integer column is an int even if SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is off.| -|PDO::SQLSRV_ATTR_QUERY_TIMEOUT|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|integer|Sets the query timeout in seconds.

      The default is 0, which means the driver waits indefinitely for results.

      Negative numbers are not allowed.| +|PDO::SQLSRV_ATTR_QUERY_TIMEOUT|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|integer|Sets the query timeout in seconds.

      The default is 0, which means the driver will wait indefinitely for results.

      Negative numbers are not allowed.| |PDO::SQLSRV_CLIENT_BUFFER_MAX_SIZE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|integer|Sets the size of the query buffer.

      The default is 0, which indicates unlimited buffer size.

      Negative numbers are not allowed.

      For more information about queries that create a client-side cursor, see [Cursor Types (PDO_SQLSRV Driver)](../../connect/php/cursor-types-pdo-sqlsrv-driver.md).| PDO processes some of the predefined attributes and requires the driver to process others. All custom attributes and connection options are processed by the driver. An unsupported attribute, connection option, or unsupported value is reported according to the setting of PDO::ATTR_ERRMODE. diff --git a/docs/connect/php/pdostatement-setattribute.md b/docs/connect/php/pdostatement-setattribute.md index 4c877ceaf59..5d1fb08c97c 100644 --- a/docs/connect/php/pdostatement-setattribute.md +++ b/docs/connect/php/pdostatement-setattribute.md @@ -42,8 +42,8 @@ The following table contains the list of available attributes: |-------------|----------|---------------| |PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE|1 to the PHP memory limit.|Configures the size of the buffer that holds the result set for a client-side cursor.

      The default is 10,240 KB (10 MB).

      For more information about client-side cursors, see [Cursor Types (PDO_SQLSRV Driver)](../../connect/php/cursor-types-pdo-sqlsrv-driver.md).| |PDO::SQLSRV_ATTR_ENCODING|Integer

      PDO::SQLSRV_ENCODING_UTF8 (Default)

      PDO::SQLSRV_ENCODING_SYSTEM

      PDO::SQLSRV_ENCODING_BINARY|Sets the character set encoding to be used by the driver to communicate with the server.| -|PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE|true or false|Handles numeric fetches from columns with numeric SQL types (bit, integer, smallint, tinyint, float, or real).

      When connection option flag ATTR_STRINGIFY_FETCHES is on, even when SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is on, the return value is a string.

      When the returned PDO type in bind column is PDO_PARAM_INT, the return value from an integer column is an int even if SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is off.| -|PDO::SQLSRV_ATTR_QUERY_TIMEOUT|Integer|Sets the query timeout in seconds.

      By default, the driver waits indefinitely for results. Negative numbers are not allowed.

      0 means no timeout.| +|PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE|true or false|Handles numeric fetches from columns with numeric SQL types (bit, integer, smallint, tinyint, float, or real).

      When connection option flag ATTR_STRINGIFY_FETCHES is on, the return value is a string even when SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is on.

      When the returned PDO type in bind column is PDO_PARAM_INT, the return value from an integer column is an int even if SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is off.| +|PDO::SQLSRV_ATTR_QUERY_TIMEOUT|Integer|Sets the query timeout in seconds.

      By default, the driver will wait indefinitely for results. Negative numbers are not allowed.

      0 means no timeout.| ## Example From 1bd2077decc550d1cc5e53f8f0b686da1a413e95 Mon Sep 17 00:00:00 2001 From: Mihaela Blendea Date: Thu, 13 Jul 2017 17:18:20 -0700 Subject: [PATCH 285/336] Update Server Collation known issue for RC1 Update Server Collation known issue for RC1 --- docs/linux/sql-server-linux-release-notes.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/linux/sql-server-linux-release-notes.md b/docs/linux/sql-server-linux-release-notes.md index 3512fffedc5..9a06941b18a 100644 --- a/docs/linux/sql-server-linux-release-notes.md +++ b/docs/linux/sql-server-linux-release-notes.md @@ -138,6 +138,9 @@ The following sections describe known issues with this release of SQL Server 201 - Distributed transactions requiring the Microsoft Distributed Transaction Coordinator service are not supported on SQL Server running on Linux. SQL Server to SQL Server distributed transactions are supported. +#### Server Collation +When using the MSSQL_COLLATION override, OR when doing a localized (non English) install, it is possible SQL Server will hit a deadlock when trying to set the server collation, which generates a dump. Setup does complete successfully, however the server collation will not have been set. The workaround is to simply run ./mssql-conf set-collation and enter the collation name desired when prompted (the collation name can be found in the errorlog at the line: “Attempting to change default collation to …”). + #### Shared disk cluster instance upgrade In RC1 the cluster resource agent sets the virtual server name like it does in a Failover Cluster Instance on Windows. Prior to RC1 `@@servername` on a shared disk cluster returned the specific node name so after failover `@@servername` returned a different value. In RC1 the serverName of the shared disk cluster instance is updated with the resource name when the resource is added to the cluster. Because of this, the cluster will have to restart the SQL Server after the manual failover during the upgrade - as in the following steps: From 7929c7d931b781b98fa44930e562d1a83e753cf3 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Thu, 13 Jul 2017 17:20:38 -0700 Subject: [PATCH 286/336] sentence restructure --- docs/connect/php/pdo-setattribute.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/connect/php/pdo-setattribute.md b/docs/connect/php/pdo-setattribute.md index cc1f3298bca..0db3ee24abb 100644 --- a/docs/connect/php/pdo-setattribute.md +++ b/docs/connect/php/pdo-setattribute.md @@ -48,7 +48,7 @@ Returns true on success, otherwise false. |PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|1 to the PHP memory limit.|Configures the size of the buffer that holds the result set.

      The default is 10,240 KB (10 MB).

      For more information about queries that create a client-side cursor, see [Cursor Types (PDO_SQLSRV Driver)](../../connect/php/cursor-types-pdo-sqlsrv-driver.md).| |PDO::SQLSRV_ATTR_DIRECT_QUERY|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|true

      false|Specifies direct or prepared query execution. For more information, see [Direct Statement Execution and Prepared Statement Execution in the PDO_SQLSRV Driver](../../connect/php/direct-statement-execution-prepared-statement-execution-pdo-sqlsrv-driver.md).| |PDO::SQLSRV_ATTR_ENCODING|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|PDO::SQLSRV_ENCODING_UTF8

      PDO::SQLSRV_ENCODING_SYSTEM.|Sets the character set encoding used by the driver to communicate with the server.

      PDO::SQLSRV_ENCODING_BINARY is not supported.

      The default is PDO::SQLSRV_ENCODING_UTF8.| -|PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|true or false|Handles numeric fetches from columns with numeric SQL types (bit, integer, smallint, tinyint, float, or real).

      When connection option flag ATTR_STRINGIFY_FETCHES is on, even when SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is on, the return value is a string.

      When the returned PDO type in bind column is PDO_PARAM_INT, the return value from an integer column is an int even if SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is off.| +|PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|true or false|Handles numeric fetches from columns with numeric SQL types (bit, integer, smallint, tinyint, float, or real).

      When connection option flag ATTR_STRINGIFY_FETCHES is on, the return value is a string even when SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is on.

      When the returned PDO type in bind column is PDO_PARAM_INT, the return value from an integer column is an int even if SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is off.| |PDO::SQLSRV_ATTR_QUERY_TIMEOUT|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|integer|Sets the query timeout in seconds.

      The default is 0, which means the driver will wait indefinitely for results.

      Negative numbers are not allowed.| |PDO::SQLSRV_CLIENT_BUFFER_MAX_SIZE|[!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]|integer|Sets the size of the query buffer.

      The default is 0, which indicates unlimited buffer size.

      Negative numbers are not allowed.

      For more information about queries that create a client-side cursor, see [Cursor Types (PDO_SQLSRV Driver)](../../connect/php/cursor-types-pdo-sqlsrv-driver.md).| From 293ab737ece0a9fc88dca232c2738a5d709b15b8 Mon Sep 17 00:00:00 2001 From: ulvii Date: Thu, 13 Jul 2017 19:26:50 -0700 Subject: [PATCH 287/336] Update step-1-configure-development-environment-for-php-development.md Adding a link to the newly created page --- ...p-1-configure-development-environment-for-php-development.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/connect/php/step-1-configure-development-environment-for-php-development.md b/docs/connect/php/step-1-configure-development-environment-for-php-development.md index 53c8cac4e2a..2cf1376086c 100644 --- a/docs/connect/php/step-1-configure-development-environment-for-php-development.md +++ b/docs/connect/php/step-1-configure-development-environment-for-php-development.md @@ -35,4 +35,4 @@ manager: "jhubbard" ### Linux -* Configure loading the PHP driver and configure your web server to host PHP applications, as noted here: [PHP Linux Drivers for SQL Server - Installation Tutorial](https://github.com/Microsoft/msphpsql/blob/PHP-7.0-Linux/LinuxTutorial.md) +* Configure loading the PHP driver and configure your web server to host PHP applications, as noted here: [PHP Linux and Mac Drivers Installation Tutorial](../../connect/php/installation-tutorial-linux-mac.md) From 6a01e1139f924ab16325a33b6d90530a4c6e586d Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 13 Jul 2017 20:40:59 -0700 Subject: [PATCH 288/336] Updating features. --- .../editions-and-components-of-sql-server-2017.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/sql-server/editions-and-components-of-sql-server-2017.md b/docs/sql-server/editions-and-components-of-sql-server-2017.md index 11bd20534a4..9aeb09fef29 100644 --- a/docs/sql-server/editions-and-components-of-sql-server-2017.md +++ b/docs/sql-server/editions-and-components-of-sql-server-2017.md @@ -153,13 +153,16 @@ The Developer edition continues to support only 1 client for [SQL Server Distrib |Basic availability groups 2|No|Yes

      Support for 2 nodes|No|No|No| |Online page and file restore|Yes|No|No|No|No| |Online indexing|Yes|No|No|No|No| +|Resumable online index rebuilds|Yes|No|No|No|No| |Online schema change|Yes|No|No|No|No| |Fast recovery|Yes|No|No|No|No| |Mirrored backups|Yes|No|No|No|No| |Hot add memory and CPU|Yes|No|No|No|No| |Database recovery advisor|Yes|Yes|Yes|Yes|Yes| |Encrypted backup|Yes|Yes|No|No|No| -|Hybrid backup to Windows Azure (backup to URL)|Yes|Yes|No|No|No| +|Hybrid backup to Windows Azure (backup to URL)|Yes|Yes|No|No|No| +|Clusterless availability group|Yes|Yes|Yes|No|No|No| +|Minimum replica commit availability group|Yes|Yes|Yes|No|No|No| 1 For more information on installing SQL Server on Server Core, see [Install SQL Server on Server Core](../database-engine/install-windows/install-sql-server-on-server-core.md). @@ -170,6 +173,8 @@ The Developer edition continues to support only 1 client for [SQL Server Distrib |Feature|Enterprise|Standard|Web|Express with Advanced Services|Express| |-------------|----------------|--------------|---------|------------------------------------|------------------------| |Columnstore 1|Yes|Yes|Yes|Yes|Yes| +|Large object binaries in clustered columnstore indexes|Yes|Yes|Yes|Yes|Yes| +|Online non-clustered columnstore index rebuild|Yes|No|No|No|No| |In-Memory OLTP 1|Yes|Yes|Yes|Yes, 2|Yes| |Stretch Database|Yes|Yes|Yes|Yes|Yes| |Persistent Main Memory|Yes|Yes|Yes|Yes|Yes| @@ -183,6 +188,11 @@ The Developer edition continues to support only 1 client for [SQL Server Distrib |Buffer Pool Extension|Yes|Yes|No|No|No| |IO Resource Governance|Yes|No|No|No|No| |Delayed Durability|Yes|Yes|Yes|Yes|Yes| +|Automatic Tuning|Yes|No|No|No|No| +|Batch Mode Adaptive Joins|Yes|No|No|No|No| +|Batch Memory Grant Feedback|Yes|No|No|No|No| +|Bulk insert improvements|Yes|Yes|Yes|Yes|Yes| + 1 In-Memory OLTP data size and Columnstore segment cache are limited to the amount of memory specified by edition in the Scale Limits section. The max degrees of parallelism is limited. The degrees of process parallelism (DOP) for an index build is limited to 2 DOP for the Standard Edition and 1 DOP for the Web and Express Editions. This refers to columnstore indexes created over disk-based tables and memory-optimized tables. @@ -297,6 +307,8 @@ The Developer edition continues to support only 1 client for [SQL Server Distrib |Specification of language in query|Yes|Yes|Yes|Yes|No| |Service Broker (messaging)|Yes|Yes|No (Client only)|No (Client only)|No (Client only)| |Transact-SQL endpoints|Yes|Yes|Yes|No|No| +|Graph|Yes|Yes|Yes|Yes|Yes| + 1 Scale out with multiple compute nodes requires a head node. From 3266fe7213dde270018a89c933647a2bcfb49d4a Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Thu, 13 Jul 2017 20:59:07 -0700 Subject: [PATCH 289/336] UPdate date. --- docs/sql-server/editions-and-components-of-sql-server-2017.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sql-server/editions-and-components-of-sql-server-2017.md b/docs/sql-server/editions-and-components-of-sql-server-2017.md index 9aeb09fef29..e70450f1276 100644 --- a/docs/sql-server/editions-and-components-of-sql-server-2017.md +++ b/docs/sql-server/editions-and-components-of-sql-server-2017.md @@ -3,7 +3,7 @@ title: "Editions and supported features of SQL Server 2017 | Microsoft Docs" ms.custom: - "SQL2016_New_Updated" - "SQL2017_New_Updated" -ms.date: "06/26/2017" +ms.date: "07/13/2017" ms.prod: "sql-server-2017" ms.reviewer: "" ms.suite: "" From 2d05a2cfb7c2a08b9685089a5056037eeb938c34 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Fri, 14 Jul 2017 12:11:34 -0400 Subject: [PATCH 290/336] Miscellaneous updates for RC1 release --- .openpublishing.redirection.json | 8 ++++---- docs/linux/TOC.md | 3 ++- docs/linux/quickstart-install-connect-docker.md | 1 + docs/linux/quickstart-install-connect-red-hat.md | 16 ++-------------- docs/linux/quickstart-install-connect-suse.md | 16 ++-------------- docs/linux/quickstart-install-connect-ubuntu.md | 3 ++- docs/linux/sql-server-linux-release-notes.md | 13 +++++++------ docs/linux/sql-server-linux-setup-ssis.md | 6 +++--- docs/linux/sql-server-linux-setup-tools.md | 4 ++-- 9 files changed, 25 insertions(+), 45 deletions(-) diff --git a/.openpublishing.redirection.json b/.openpublishing.redirection.json index 39df05433c6..8bf4d20d62c 100644 --- a/.openpublishing.redirection.json +++ b/.openpublishing.redirection.json @@ -18,22 +18,22 @@ { "source_path": "docs/linux/sql-server-linux-setup-suse-linux-enterprise-server.md", "redirect_url": "/sql/linux/quickstart-install-connect-suse", - "redirect_document_id": false + "redirect_document_id": true }, { "source_path": "docs/linux/sql-server-linux-setup-red-hat.md", "redirect_url": "/sql/linux/quickstart-install-connect-red-hat", - "redirect_document_id": false + "redirect_document_id": true }, { "source_path": "docs/linux/sql-server-linux-setup-ubuntu.md", "redirect_url": "/sql/linux/quickstart-install-connect-ubuntu", - "redirect_document_id": false + "redirect_document_id": true }, { "source_path": "docs/linux/sql-server-linux-setup-docker.md", "redirect_url": "/sql/linux/quickstart-install-connect-docker", - "redirect_document_id": false + "redirect_document_id": true }, { "source_path": "docs/relational-databases/relational-databases-new-updated-sql-docs-pr.md", diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index e519c967acf..d9c240d66cb 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -17,7 +17,8 @@ ### [Install SQL Server tools](sql-server-linux-setup-tools.md) ### [Install SQL Server Agent](sql-server-linux-setup-sql-agent.md) ### [Install SQL Server Full-Text Search](sql-server-linux-setup-full-text-search.md) -### [Provision a SQL Server VM in Azure](sql-server-linux-azure-virtual-machine.md) +### [Install SQL Server Integration Services](sql-server-linux-setup-ssis.md) +### [Provision a SQL VM in Azure](sql-server-linux-azure-virtual-machine.md) ## Configure ### [Configure with mssql-conf](sql-server-linux-configure-mssql-conf.md) diff --git a/docs/linux/quickstart-install-connect-docker.md b/docs/linux/quickstart-install-connect-docker.md index a7445f66181..7f3baae9e5e 100644 --- a/docs/linux/quickstart-install-connect-docker.md +++ b/docs/linux/quickstart-install-connect-docker.md @@ -8,6 +8,7 @@ ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine +ms.assetid: 82737f18-f5d6-4dce-a255-688889fdde69 --- # Run the SQL Server 2017 container image with Docker diff --git a/docs/linux/quickstart-install-connect-red-hat.md b/docs/linux/quickstart-install-connect-red-hat.md index c2e0c292d9d..fb10e518e23 100644 --- a/docs/linux/quickstart-install-connect-red-hat.md +++ b/docs/linux/quickstart-install-connect-red-hat.md @@ -1,7 +1,7 @@ --- # required metadata title: Get started with SQL Server 2017 on Red Hat Enterprise Linux | Microsoft Docs -description: Describes how to install SQL Server 2017 RC1 on Red Hat Enterprise Linux. +description: This quick start tutorial shows how to install SQL Server 2017 on Red Hat Enterprise Linux and then create and query a database with sqlcmd. author: sabotta ms.author: carlasab manager: craigg @@ -9,19 +9,7 @@ ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine -ms.assetid: "" - -# optional metadata - -# keywords: "" -# ROBOTS: "" -# audience: "" -# ms.devlang: "" -# ms.reviewer: "" -# ms.suite: "" -# ms.tgt_pltfrm: "" -# ms.custom: "" - +ms.assetid: 92503f59-96dc-4f6a-b1b0-d135c43e935e --- # Install SQL Server and create a database on Red Hat diff --git a/docs/linux/quickstart-install-connect-suse.md b/docs/linux/quickstart-install-connect-suse.md index 487e715e244..0f497e9dcfd 100644 --- a/docs/linux/quickstart-install-connect-suse.md +++ b/docs/linux/quickstart-install-connect-suse.md @@ -1,7 +1,7 @@ --- # required metadata title: Get started with SQL Server 2017 on SUSE Linux Enterprise Server | Microsoft Docs -description: Describes how to install SQL Server 2017 RC1 on SUSE Linux Enterprise Server. +description: This quick start tutorial shows how to install SQL Server 2017 on SUSE Linux Enterprise Server and then create and query a database with sqlcmd. author: sabotta ms.author: carlasab manager: craigg @@ -9,19 +9,7 @@ ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine -ms.assetid: "" - -# optional metadata - -# keywords: "" -# ROBOTS: "" -# audience: "" -# ms.devlang: "" -# ms.reviewer: "" -# ms.suite: "" -# ms.tgt_pltfrm: "" -# ms.custom: "" - +ms.assetid: 31ddfb80-f75c-4f51-8540-de6213cb68b8 --- # Install SQL Server and create a database on SUSE Linux Enterprise Server diff --git a/docs/linux/quickstart-install-connect-ubuntu.md b/docs/linux/quickstart-install-connect-ubuntu.md index dd32750a8d0..efa630a4e56 100644 --- a/docs/linux/quickstart-install-connect-ubuntu.md +++ b/docs/linux/quickstart-install-connect-ubuntu.md @@ -1,6 +1,6 @@ --- title: Get started with SQL Server 2017 on Ubuntu | Microsoft Docs -description: This quick start tutorial shows how to install SQL Server on Ubuntu and then create and query a database with sqlcmd. +description: This quick start tutorial shows how to install SQL Server 2017 on Ubuntu and then create and query a database with sqlcmd. author: rothja ms.author: jroth manager: jhubbard @@ -8,6 +8,7 @@ ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine +ms.assetid: 31c8c92e-12fe-4728-9b95-4bc028250d85 --- # Install SQL Server and create a database on Ubuntu diff --git a/docs/linux/sql-server-linux-release-notes.md b/docs/linux/sql-server-linux-release-notes.md index 9a06941b18a..9ff92da1e45 100644 --- a/docs/linux/sql-server-linux-release-notes.md +++ b/docs/linux/sql-server-linux-release-notes.md @@ -32,7 +32,7 @@ The following table lists the releases of SQL Server 2017 covered in this topic. | Release | Version | Release date | |-----|-----|-----| -| [RC1](#RC1) | 00.0.000.000 | 7-2017 | +| [RC1](#RC1) | 14.0.800.90 | 7-2017 | | [CTP 2.1](#ctp21) | 14.0.600.250 | 5-2017 | | [CTP 2.0](#ctp20) | 14.0.500.272 | 4-2017 | | [CTP 1.4](#ctp14) | 14.0.405.198 | 3-2017 | @@ -42,7 +42,7 @@ The following table lists the releases of SQL Server 2017 covered in this topic. | [CTP 1.0](#ctp10) | 14.0.1.246 | 11-2016 | ## RC1 (July 2017) -The SQL Server engine version for this release is 00.0.000.000. +The SQL Server engine version for this release is 14.0.800.90. ### Supported platforms @@ -66,9 +66,9 @@ Package details and download locations for the RPM and Debian packages are liste | Package | Package version | Downloads | |-----|-----|-----| -| Red Hat RPM package | 00.0.000.000-0 | [Engine RPM package](https://packages.microsoft.com/rhel/7/mssql-server/mssql-server-00.0.000.000-0.x86_64.rpm)
      [High Availability RPM package](https://packages.microsoft.com/rhel/7/mssql-server/mssql-server-ha-00.0.000.000-0.x86_64.rpm)
      [Full-text Search RPM package](https://packages.microsoft.com/rhel/7/mssql-server/mssql-server-fts-00.0.000.000-0.x86_64.rpm)
      [SQL Server Agent RPM package](https://packages.microsoft.com/rhel/7/mssql-server/mssql-server-agent-00.0.000.000-0.x86_64.rpm) | -| SLES RPM package | 00.0.000.000-0 | [mssql-server Engine RPM package](https://packages.microsoft.com/sles/12/mssql-server/mssql-server-00.0.000.000-0.x86_64.rpm)
      [High Availability RPM package](https://packages.microsoft.com/sles/12/mssql-server/mssql-server-ha-00.0.000.000-0.x86_64.rpm)
      [Full-text Search RPM package](https://packages.microsoft.com/sles/12/mssql-server/mssql-server-fts-00.0.000.000-0.x86_64.rpm)
      [SQL Server Agent RPM package](https://packages.microsoft.com/rhel/7/mssql-server/mssql-server-agent-00.0.000.000-0.x86_64.rpm) | -| Ubuntu 16.04 Debian package | 00.0.000.000-0 | [Engine Debian package](https://packages.microsoft.com/ubuntu/16.04/mssql-server/pool/main/m/mssql-server/mssql-server_00.0.000.000-0_amd64.deb)
      [High Availability Debian package](https://packages.microsoft.com/ubuntu/16.04/mssql-server/pool/main/m/mssql-server-ha/mssql-server-ha_00.0.000.000-0_amd64.deb)
      [Full-text Search Debian package](https://packages.microsoft.com/ubuntu/16.04/mssql-server/pool/main/m/mssql-server-fts/mssql-server-fts_00.0.000.000-0_amd64.deb)
      [SQL Server Agent Debian package](https://packages.microsoft.com/ubuntu/16.04/mssql-server/pool/main/m/mssql-server-agent/mssql-server-agent_00.0.000.000-0_amd64.deb) | +| Red Hat RPM package | 14.0.800.90-2 | [Engine RPM package](https://packages.microsoft.com/rhel/7/mssql-server/mssql-server-14.0.800.90-2.x86_64.rpm)
      [High Availability RPM package](https://packages.microsoft.com/rhel/7/mssql-server/mssql-server-ha-14.0.800.90-2.x86_64.rpm)
      [Full-text Search RPM package](https://packages.microsoft.com/rhel/7/mssql-server/mssql-server-fts-14.0.800.90-2.x86_64.rpm)
      [SQL Server Agent RPM package](https://packages.microsoft.com/rhel/7/mssql-server/mssql-server-agent-14.0.800.90-2.x86_64.rpm) | +| SLES RPM package | 14.0.800.90-2 | [mssql-server Engine RPM package](https://packages.microsoft.com/sles/12/mssql-server/mssql-server-14.0.800.90-2.x86_64.rpm)
      [High Availability RPM package](https://packages.microsoft.com/sles/12/mssql-server/mssql-server-ha-14.0.800.90-2.x86_64.rpm)
      [Full-text Search RPM package](https://packages.microsoft.com/sles/12/mssql-server/mssql-server-fts-14.0.800.90-2.x86_64.rpm)
      [SQL Server Agent RPM package](https://packages.microsoft.com/rhel/7/mssql-server/mssql-server-agent-14.0.800.90-2.x86_64.rpm) | +| Ubuntu 16.04 Debian package | 14.0.800.90-2 | [Engine Debian package](https://packages.microsoft.com/ubuntu/16.04/mssql-server/pool/main/m/mssql-server/mssql-server_14.0.800.90-2_amd64.deb)
      [High Availability Debian package](https://packages.microsoft.com/ubuntu/16.04/mssql-server/pool/main/m/mssql-server-ha/mssql-server-ha_14.0.800.90-2_amd64.deb)
      [Full-text Search Debian package](https://packages.microsoft.com/ubuntu/16.04/mssql-server/pool/main/m/mssql-server-fts/mssql-server-fts_14.0.800.90-2_amd64.deb)
      [SQL Server Agent Debian package](https://packages.microsoft.com/ubuntu/16.04/mssql-server/pool/main/m/mssql-server-agent/mssql-server-agent_14.0.800.90-2_amd64.deb) | ### Supported client tools @@ -76,7 +76,7 @@ Package details and download locations for the RPM and Debian packages are liste |-----|-----| | [SQL Server Management Studio (SSMS) for Windows](https://go.microsoft.com/fwlink/?linkid=847722) | 17.0 | | [SQL Server Data Tools for Visual Studio](https://go.microsoft.com/fwlink/?linkid=846626) | 17.0 | -| [Visual Studio Code](https://code.visualstudio.com) with the [mssql extension](https://aka.ms/mssql-marketplace) | Latest (1.12) | +| [Visual Studio Code](https://code.visualstudio.com) with the [mssql extension](https://aka.ms/mssql-marketplace) | Latest | ### Unsupported features and services The following features and services are not available on Linux at this time. The support of these features will be increasingly enabled during the monthly updates cadence of the preview program. @@ -139,6 +139,7 @@ The following sections describe known issues with this release of SQL Server 201 - Distributed transactions requiring the Microsoft Distributed Transaction Coordinator service are not supported on SQL Server running on Linux. SQL Server to SQL Server distributed transactions are supported. #### Server Collation + When using the MSSQL_COLLATION override, OR when doing a localized (non English) install, it is possible SQL Server will hit a deadlock when trying to set the server collation, which generates a dump. Setup does complete successfully, however the server collation will not have been set. The workaround is to simply run ./mssql-conf set-collation and enter the collation name desired when prompted (the collation name can be found in the errorlog at the line: “Attempting to change default collation to …”). #### Shared disk cluster instance upgrade diff --git a/docs/linux/sql-server-linux-setup-ssis.md b/docs/linux/sql-server-linux-setup-ssis.md index b9e741d57d2..932a7b39adc 100644 --- a/docs/linux/sql-server-linux-setup-ssis.md +++ b/docs/linux/sql-server-linux-setup-ssis.md @@ -23,13 +23,13 @@ ms.assetid: # ms.tgt_pltfrm: "" # ms.custom: "" --- -# Installing SQL Server Integration Services (SSIS) on Linux +# Install SQL Server Integration Services (SSIS) on Linux Follow the steps in this article to install SQL Server Integration Services (`mssql-server-is`) on Linux. For info about the features supported in this release of Integration Services for Linux, see the [Release Notes](sql-server-linux-release-notes.md). - -At this time, Integration Services on Linux is supported only on the Ubuntu platform. +> [IMPORTANT] +> At this time, Integration Services on Linux is supported only on the Ubuntu platform. ## Install SSIS on Ubuntu diff --git a/docs/linux/sql-server-linux-setup-tools.md b/docs/linux/sql-server-linux-setup-tools.md index 2e499aeb5f8..f6b560c25e3 100644 --- a/docs/linux/sql-server-linux-setup-tools.md +++ b/docs/linux/sql-server-linux-setup-tools.md @@ -6,7 +6,7 @@ description: This topic describes how to install the SQL Server Tools on Linux. author: rothja ms.author: jroth manager: jhubbard -ms.date: 05/17/2017 +ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -264,7 +264,7 @@ To manually install these packages, use the following steps: ## Next steps -For an example of how to use **sqlcmd** to create a database, see one of the following quick start tutorials: +For an example of how to use **sqlcmd** to connect to SQL Server and create a database, see one of the following quick start tutorials: - [Install on Red Hat Enterprise Linux](quickstart-install-connect-red-hat.md) - [Install on SUSE Linux Enterprise Server](quickstart-install-connect-suse.md) From 0aaa0b78c679dd13efa4fb622b130c8899c399f4 Mon Sep 17 00:00:00 2001 From: v-chojas Date: Fri, 14 Jul 2017 10:25:12 -0700 Subject: [PATCH 291/336] Formatting and spelling fixes. --- .../connect/odbc/custom-keystore-providers.md | 19 ++++++++++--------- ...g-always-encrypted-with-the-odbc-driver.md | 19 ++++++++++++------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/docs/connect/odbc/custom-keystore-providers.md b/docs/connect/odbc/custom-keystore-providers.md index 1effdcd7d6f..bc5ad107687 100644 --- a/docs/connect/odbc/custom-keystore-providers.md +++ b/docs/connect/odbc/custom-keystore-providers.md @@ -81,7 +81,7 @@ typedef struct CEKeystoreProvider { |Field Name|Description| |:--|:--| |`Name`|The name of the keystore provider. It must not be the same as any other keystore provider previously loaded by the driver or present in this library. Null-terminated, wide-character* string.| -|`Init`|Initialisation function. If an initialisation function is not required, this field may be null.| +|`Init`|Initialization function. If an initialization function is not required, this field may be null.| |`Read`|Provider read function. May be null if not required.| |`Write`|Provider write function. Required if Read is not null. May be null if not required.| |`DecryptCEK`|ECEK decryption function. This function is the reason for existence of a keystore provider, and must not be null.| @@ -93,7 +93,7 @@ With the exception of Free, the functions in this interface all have a pair of p ``` int Init(CEKEYSTORECONTEXT *ctx, errFunc onError); ``` -Placeholder name for a provider-defined initialization function. The driver calls this function once, after a provider has been loaded, but before the first time it needs it to perform ECEK decryption or Read()/Write() requests. Use this function to perform any initialisation it needs. +Placeholder name for a provider-defined initialization function. The driver calls this function once, after a provider has been loaded, but before the first time it needs it to perform ECEK decryption or Read()/Write() requests. Use this function to perform any initialization it needs. |Argument|Description| |:--|:--| @@ -141,7 +141,7 @@ Placeholder name for a provider-defined ECEK decryption function. The driver cal |`alg`|[Input] The value of the [ALGORITHM](../../t-sql/statements/create-column-encryption-key-transact-sql.md) metadata attribute for the given ECEK. Null-terminated wide-character* string. This is intended to identify the encryption algorithm used to encrypt the given ECEK.| |`ecek`|[Input] Pointer to the ECEK to be decrypted.| |`ecekLen`|[Input] Length of the ECEK.| -|`cekOut`|[Output] The provider shall allocate memory for the decrypted ECEK and write its address to the pointer pointed to by cekOut. It must be possible to free this block of memory using the [LocalFree](https://msdn.microsoft.com/en-us/library/windows/desktop/aa366730(v=vs.85).aspx) (Windows) or free (Linux/Mac) function. If no memory was allocated due to an error or otherwise, the provider shall set *cekOut to a null pointer.| +|`cekOut`|[Output] The provider shall allocate memory for the decrypted ECEK and write its address to the pointer pointed to by cekOut. It must be possible to free this block of memory using the [LocalFree](https://msdn.microsoft.com/library/windows/desktop/aa366730(v=vs.85).aspx) (Windows) or free (Linux/Mac) function. If no memory was allocated due to an error or otherwise, the provider shall set *cekOut to a null pointer.| |`cekLen`|[Output] The provider shall write to the address pointed to by cekLen the length of the decrypted ECEK that it has written to **cekOut.| |`Return Value`|Return nonzero to indicate success, or zero to indicate failure.| @@ -158,7 +158,7 @@ Placeholder name for a provider-defined CEK encryption function. The driver does |`alg`|[Input] The value of the [ALGORITHM](../../t-sql/statements/create-column-encryption-key-transact-sql.md) metadata attribute for the given ECEK. Null-terminated wide-character* string. This is intended to identify the encryption algorithm used to encrypt the given ECEK.| |`cek`|[Input] Pointer to the CEK to be encrypted.| |`cekLen`|[Input] Length of the CEK.| -|`ecekOut`|[Output] The provider shall allocate memory for the encrypted CEK and write its address to the pointer pointed to by ecekOut. It must be possible to free this block of memory using the [LocalFree](https://msdn.microsoft.com/en-us/library/windows/desktop/aa366730(v=vs.85).aspx) (Windows) or free (Linux/Mac) function. If no memory was allocated due to an error or otherwise, the provider shall set *ecekOut to a null pointer.| +|`ecekOut`|[Output] The provider shall allocate memory for the encrypted CEK and write its address to the pointer pointed to by ecekOut. It must be possible to free this block of memory using the [LocalFree](https://msdn.microsoft.com/library/windows/desktop/aa366730(v=vs.85).aspx) (Windows) or free (Linux/Mac) function. If no memory was allocated due to an error or otherwise, the provider shall set *ecekOut to a null pointer.| |`ecekLen`|[Output] The provider shall write to the address pointed to by ecekLen the length of the encrypted CEK that it has written to **ecekOut.| |`Return Value`|Return nonzero to indicate success, or zero to indicate failure.| @@ -167,7 +167,8 @@ void (*Free)(); ``` Placeholder name for a provider-defined termination function. The driver may call this function upon normal termination of the process. -*NB: Wide-character strings are 2-byte characters (UTF-16) due to how SQL Server stores them.* +> [!NOTE] +> *Wide-character strings are 2-byte characters (UTF-16) due to how SQL Server stores them.* ### Error Handling @@ -183,7 +184,7 @@ The **onError** parameter points to an error-reporting function, with the follow |Argument|Description| |:--|:--| |`ctx`|[Input] The context to report the error on.| -|`msg`|[Input] The error message to report. Null-terminated wide-character string. To allow parameterized information to be present, this string may contain insert-formatting sequences of the form accepted by the [FormatMessage](https://msdn.microsoft.com/en-us/library/windows/desktop/ms679351(v=vs.85).aspx) function. Extended functionality may be specified by this parameter as described below.| +|`msg`|[Input] The error message to report. Null-terminated wide-character string. To allow parameterized information to be present, this string may contain insert-formatting sequences of the form accepted by the [FormatMessage](https://msdn.microsoft.com/library/windows/desktop/ms679351(v=vs.85).aspx) function. Extended functionality may be specified by this parameter as described below.| |...|[Input] Additional variadic parameters to fit format specifiers in msg, as appropriate.| To report when an error has occurred, the provider calls onError, supplying the context parameter passed into the provider function by the driver and an error message with optional additional parameters to be formatted in it. The provider may call this function multiple times to post multiple error messages consecutively within one provider-function invocation. For example: @@ -292,7 +293,7 @@ int __stdcall KeystoreDecrypt(CEKEYSTORECONTEXT *ctx, errFunc *onError, const wc return 0; } if (!g_encryptKey) { - onError(ctx, L"Keystore provider not initialised with key"); + onError(ctx, L"Keystore provider not initialized with key"); return 0; } #ifndef _WIN32 @@ -323,7 +324,7 @@ int KeystoreEncrypt(CEKEYSTORECONTEXT *ctx, errFunc *onError, unsigned int i; printf("KSP Encrypt() function called (cekLen=%u)\n", cekLen); if (!g_encryptKey) { - onError(ctx, L"Keystore provider not initialised with key"); + onError(ctx, L"Keystore provider not initialized with key"); return 0; } *ecekOut = malloc(cekLen); @@ -473,7 +474,7 @@ int main(int argc, char **argv) { return 4; FoundProv: if (pKsp->Init && !pKsp->Init(&ctx, postKspError)) { - fprintf(stderr, "Could not initialise provider\n"); + fprintf(stderr, "Could not initialize provider\n"); return 5; } #ifdef _WIN32 diff --git a/docs/connect/odbc/using-always-encrypted-with-the-odbc-driver.md b/docs/connect/odbc/using-always-encrypted-with-the-odbc-driver.md index 4eaac35f7b2..ae2c3c0426b 100644 --- a/docs/connect/odbc/using-always-encrypted-with-the-odbc-driver.md +++ b/docs/connect/odbc/using-always-encrypted-with-the-odbc-driver.md @@ -40,7 +40,7 @@ Always Encrypted may also be enabled in the DSN configuration, using the same ke SQLSetConnectAttr(hdbc, SQL_COPT_SS_COLUMN_ENCRYPTION, (SQLPOINTER)SQL_COLUMN_ENCRYPTION_ENABLE, 0); ``` -Once enabled for the connection, the behaviour of Always Encrypted may be adjusted for individual queries. See [Controlling the Performance Impact of Always Encrypted](#controlling-the-performance-impact-of-always-encrypted) below for more information. +Once enabled for the connection, the behavior of Always Encrypted may be adjusted for individual queries. See [Controlling the Performance Impact of Always Encrypted](#controlling-the-performance-impact-of-always-encrypted) below for more information. Note that enabling Always Encrypted is not sufficient for encryption or decryption to succeed; you also need to make sure that: @@ -280,7 +280,7 @@ This section describes the built-in performance optimizations in the ODBC Driver If Always Encrypted is enabled for a connection, the ODBC Driver 13.1 for SQL Server will, by default, call [sys.sp_describe_parameter_encryption](https://msdn.microsoft.com/library/mt631693.aspx) for each parameterized query, passing the query statement (without any parameter values) to SQL Server. This stored procedure analyzes the query statement to find out if any parameters need to be encrypted, and if so, returns the encryption-related information for each parameter to allow the driver to encrypt them. The above behavior ensures a high-level of transparency to the client application: The application (and the application developer) does not need to be aware of which queries access encrypted columns, as long as the values targeting encrypted columns are passed to the driver in parameters. -### Per-Statement Always Encrypted Behaviour +### Per-Statement Always Encrypted Behavior To control the performance impact of retrieving encryption metadata for parameterized queries, you can alter the Always Encrypted behavior for individual queries if it has been enabled on the connection. This way, you can ensure that `sys.sp_describe_parameter_encryption` is invoked only for queries that you know have parameters targeting encrypted columns. Note, however, that by doing so, you reduce transparency of encryption: if you encrypt additional columns in your database, you may need to change the code of your application to align it with the schema changes. @@ -320,7 +320,8 @@ If SQL Server informs the driver that the parameter does not need to be encrypte To reduce the number of calls to a column master key store to decrypt column encryption keys, the driver caches the plaintext CEKs in memory. After receiving the ECEK from database metadata, the driver first tries to find the plaintext CEK corresponding to the encrypted key value in the cache. The driver calls the key store containing the CMK only if it cannot find the corresponding plaintext CEK in the cache. -**Note:** In the ODBC Driver 13.1 for SQL Server, the entries in the cache are evicted after a two hour timeout. This means that for a given ECEK, the driver contacts the key store only once during the lifetime of the application or every two hours, whichever is less. +> [!NOTE] +> In the ODBC Driver 13.1 for SQL Server, the entries in the cache are evicted after a two hour timeout. This means that for a given ECEK, the driver contacts the key store only once during the lifetime of the application or every two hours, whichever is less. ## Working with Column Master Key Stores @@ -416,13 +417,15 @@ The driver attempts to load the library identified by the ValuePtr parameter usi `SQLSetConnectAttr` returns the usual error or success values, and additional information is available for any errors which occurred via the standard ODBC diagnostic mechanism. -NOTE: The application programmer must ensure that any custom providers are loaded before any query requiring them is sent over any connection. Failure to do so results in the error: +> [!NOTE] +> The application programmer must ensure that any custom providers are loaded before any query requiring them is sent over any connection. Failure to do so results in the error: | Error | Description | |:--|:--| |`CE200`|Keystore provider %1 not found. Ensure that the appropriate keystore provider library has been loaded.| -NOTE: Keystore provider implementors should avoid the use of `MSSQL` in the name of their custom providers. This term is reserved exclusively for Microsoft use and may cause conflicts with future built-in providers. Using this term in the name of a custom provider may result in an ODBC warning. +> [!NOTE] +> Keystore provider implementors should avoid the use of `MSSQL` in the name of their custom providers. This term is reserved exclusively for Microsoft use and may cause conflicts with future built-in providers. Using this term in the name of a custom provider may result in an ODBC warning. #### Getting the List of Loaded Providers @@ -445,7 +448,8 @@ To allow retrieving the entire list, every Get operation returns the current pro The `SQL_COPT_SS_CEKEYSTOREDATA` connection attribute enables a client application to communicate with loaded keystore providers for configuring additional parameters, keying material, etc. The communication between a client application and a provider follows a simple request-response protocol, based on Get and Set requests using this connection attribute. Communication is initiated only by the client application. -NOTE: Due to the nature of the ODBC calls CEKeyStoreProvider’s respond to (SQLGet/SetConnectAttr), the ODBC interface only supports setting data at the resolution of the connection context. +> [!NOTE] +> Due to the nature of the ODBC calls CEKeyStoreProvider’s respond to (SQLGet/SetConnectAttr), the ODBC interface only supports setting data at the resolution of the connection context. The application communicates with keystore providers through the driver via the CEKeystoreData structure: @@ -477,7 +481,8 @@ SQLRETURN SQLSetConnectAttr( SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQL Additional detailed error information may be obtained via [SQLGetDiacRec](https://msdn.microsoft.com/library/ms710921(v=vs.85).aspx). -NOTE: The provider can use the connection handle to associate the written data to a specific connection, if it so desires. This is useful for implementing per-connection configuration. It may also ignore the connection context and treat the data identically regardless of the connection used to send the data. See [Context Association](../../connect/odbc/custom-keystore-providers.md#context-association) for more information. +> [!NOTE] +> The provider can use the connection handle to associate the written data to a specific connection, if it so desires. This is useful for implementing per-connection configuration. It may also ignore the connection context and treat the data identically regardless of the connection used to send the data. See [Context Association](../../connect/odbc/custom-keystore-providers.md#context-association) for more information. #### Reading data from a provider From 9dbaaae964c37d0df0b107307d022f6a86901266 Mon Sep 17 00:00:00 2001 From: Gene Milener Date: Fri, 14 Jul 2017 10:44:29 -0700 Subject: [PATCH 292/336] Follows PR 2370 (which followed 2275 and 2282), this time to fix index.md redirect_url values, so the values match the first single-hash # entry at top inside TOC.md in same folder. Also, erases trailing ?toc= noise. C# BreadGm2.exe /ac23 was used. MightyPen = genemi. --- .../multidimensional-models-adomd-net-client/index.md | 2 +- .../multidimensional-models-adomd-net-server/index.md | 2 +- .../index.md | 2 +- .../index.md | 2 +- .../index.md | 2 +- .../index.md | 2 +- .../multidimensional-models/adomd-net/index.md | 2 +- .../analysis-management-objects/index.md | 2 +- .../multidimensional-models/extending-olap/index.md | 2 +- .../multidimensional-models/olap-logical/index.md | 2 +- .../multidimensional-models/olap-physical/index.md | 2 +- .../scripting-language-assl/index.md | 2 +- docs/analysis-services/schema-rowsets/data-mining/index.md | 2 +- docs/analysis-services/schema-rowsets/index.md | 2 +- docs/analysis-services/schema-rowsets/ole-db-olap/index.md | 2 +- docs/analysis-services/schema-rowsets/ole-db/index.md | 2 +- docs/analysis-services/schema-rowsets/xml/index.md | 2 +- docs/analysis-services/scripting/collections/index.md | 2 +- docs/analysis-services/scripting/data-type/index.md | 2 +- docs/analysis-services/scripting/index.md | 2 +- docs/analysis-services/scripting/objects/index.md | 2 +- docs/analysis-services/scripting/properties/index.md | 2 +- .../index.md | 2 +- .../conceptual-schema-definition-language-csdl/index.md | 2 +- .../index.md | 2 +- .../representation/index.md | 2 +- .../tabular-models-scripting-language-commands/index.md | 2 +- .../tabular-models-scripting-language-objects/index.md | 2 +- docs/analysis-services/xmla/index.md | 2 +- docs/analysis-services/xmla/xml-data-types/index.md | 2 +- docs/analysis-services/xmla/xml-elements-commands/index.md | 2 +- docs/analysis-services/xmla/xml-elements-headers/index.md | 2 +- .../analysis-services/xmla/xml-elements-properties/index.md | 2 +- docs/connect/jdbc/index.md | 2 +- docs/connect/jdbc/reference/index.md | 2 +- docs/connect/odbc/windows/index.md | 2 +- docs/connect/php/index.md | 4 ++-- docs/database-engine/availability-groups/windows/index.md | 6 +++--- .../building-packages-programmatically/index.md | 2 +- .../index.md | 2 +- .../connection-manager/index.md | 2 +- .../extending-packages-custom-objects/data-flow/index.md | 2 +- .../foreach-enumerator/index.md | 2 +- .../extending-packages-custom-objects/index.md | 2 +- .../extending-packages-custom-objects/log-provider/index.md | 2 +- .../extending-packages-custom-objects/task/index.md | 2 +- .../index.md | 2 +- .../index.md | 2 +- .../extending-packages-scripting-task-examples/index.md | 2 +- .../data-flow-script-component/index.md | 2 +- .../extending-packages-scripting/index.md | 2 +- .../extending-packages-scripting/task/index.md | 2 +- .../run-manage-packages-programmatically/index.md | 2 +- docs/master-data-services/develop/index.md | 2 +- .../index.md | 6 +++--- docs/odbc/index.md | 2 +- .../clr-integration-data-access-in-process-ado-net/index.md | 2 +- .../clr-integration-data-access-transactions/index.md | 2 +- .../index.md | 2 +- .../index.md | 2 +- .../index.md | 2 +- .../index.md | 2 +- .../clr-integration/assemblies/index.md | 2 +- .../clr-integration/data-access/index.md | 2 +- .../clr-integration/database-objects/index.md | 2 +- docs/relational-databases/clr-integration/index.md | 2 +- docs/relational-databases/clr-integration/security/index.md | 2 +- .../express-localdb-error-messages/index.md | 2 +- .../express-localdb-instance-apis/index.md | 2 +- .../extended-stored-procedures-programming/index.md | 2 +- .../extended-stored-procedures-reference/index.md | 2 +- docs/relational-databases/native-client-odbc-api/index.md | 2 +- .../native-client-odbc-bulk-copy-operations/index.md | 2 +- .../native-client-odbc-communication/index.md | 2 +- .../native-client-odbc-cursors/implementation/index.md | 2 +- .../native-client-odbc-cursors/index.md | 2 +- .../native-client-odbc-cursors/programming/index.md | 2 +- .../native-client-odbc-cursors/properties/index.md | 2 +- .../native-client-odbc-date-time/index.md | 2 +- .../native-client-odbc-error-messages/index.md | 2 +- .../index.md | 2 +- .../native-client-odbc-how-to/bulk-copy/index.md | 2 +- .../native-client-odbc-how-to/cursors/index.md | 2 +- .../native-client-odbc-how-to/execute-queries/index.md | 2 +- .../relational-databases/native-client-odbc-how-to/index.md | 2 +- .../executing-statements/index.md | 2 +- .../native-client-odbc-queries/index.md | 2 +- .../native-client-odbc-results/index.md | 2 +- .../native-client-odbc-stored-procedures/index.md | 2 +- .../native-client-odbc-table-valued-parameters/index.md | 2 +- .../native-client-odbc-text-image-columns/index.md | 2 +- .../native-client-ole-db-blobs/index.md | 2 +- .../native-client-ole-db-commands/index.md | 2 +- .../native-client-ole-db-data-source-objects/index.md | 2 +- .../native-client-ole-db-data-types/index.md | 2 +- .../native-client-ole-db-date-time/index.md | 2 +- .../native-client-ole-db-errors/index.md | 2 +- .../native-client-ole-db-how-to/filestream/index.md | 2 +- .../native-client-ole-db-how-to/index.md | 2 +- .../native-client-ole-db-how-to/results/index.md | 2 +- .../native-client-ole-db-interfaces/index.md | 2 +- .../native-client-ole-db-provider/index.md | 2 +- .../native-client-ole-db-rowsets/index.md | 2 +- .../native-client-ole-db-table-valued-parameters/index.md | 2 +- .../native-client-ole-db-tables-indexes/index.md | 2 +- .../native-client-ole-db-transactions/index.md | 2 +- .../native-client/applications/index.md | 2 +- docs/relational-databases/native-client/features/index.md | 2 +- docs/relational-databases/native-client/index.md | 2 +- docs/relational-databases/native-client/odbc/index.md | 2 +- docs/relational-databases/native-client/ole-db/index.md | 2 +- docs/relational-databases/replication/concepts/index.md | 2 +- .../server-management-objects-smo/create-program/index.md | 2 +- .../server-management-objects-smo/index.md | 2 +- .../server-management-objects-smo/tasks/index.md | 2 +- .../sqlxml-annotated-xsd-schemas-using/index.md | 2 +- .../bulk-load-xml/index.md | 2 +- .../caching-templates-xml-schemas/index.md | 2 +- .../data-access-components-provider/index.md | 2 +- .../diffgram/index.md | 2 +- .../sqlxml-annotated-xsd-schemas-xpath-queries/index.md | 2 +- .../location-path/index.md | 2 +- .../net-framework-classes/index.md | 2 +- .../samples/index.md | 2 +- .../security/index.md | 2 +- .../updategrams/index.md | 2 +- .../sqlxml/annotated-xsd-schemas/index.md | 2 +- docs/relational-databases/sqlxml/formatting/index.md | 2 +- docs/relational-databases/sqlxml/index.md | 2 +- .../clientnetlibinfo-class/index.md | 2 +- .../clientnetworkprotocol-class/index.md | 2 +- .../clientnetworkprotocolproperty-class/index.md | 2 +- .../clientsettingsgeneralflag-class/index.md | 2 +- .../wmi-provider-configuration-classes/index.md | 2 +- .../securitycertificate-class/index.md | 2 +- .../servernetworkprotocol-class/index.md | 2 +- .../servernetworkprotocolipaddress-class/index.md | 2 +- .../servernetworkprotocolproperty-class/index.md | 2 +- .../serversettings-class/index.md | 2 +- .../serversettingsgeneralflag-class/index.md | 2 +- .../sinstance-class/index.md | 2 +- .../sqlserveralias-class/index.md | 2 +- .../sqlservice-class/index.md | 2 +- .../sqlserviceadvancedproperty-class/index.md | 2 +- .../wmi-provider-configuration/index.md | 2 +- .../wmi-provider-server-events/index.md | 2 +- docs/reporting-services/custom-assemblies/index.md | 2 +- docs/reporting-services/custom-report-items/index.md | 2 +- docs/reporting-services/extensions/data-processing/index.md | 2 +- .../extensions/delivery-extension/index.md | 2 +- docs/reporting-services/extensions/index.md | 2 +- .../extensions/rendering-extension/index.md | 2 +- .../extensions/secure-development/index.md | 2 +- .../extensions/security-extension/index.md | 2 +- .../best-practices/index.md | 2 +- .../index.md | 2 +- .../soapexception-class/index.md | 2 +- .../index.md | 2 +- docs/reporting-services/report-server-web-service/index.md | 2 +- .../report-server-web-service/methods/index.md | 2 +- .../report-server-web-service/net-framework/index.md | 2 +- docs/ssdt/index.md | 2 +- docs/ssma/index.md | 2 +- docs/ssms/index.md | 2 +- docs/tools/index.md | 6 +++--- 165 files changed, 172 insertions(+), 172 deletions(-) diff --git a/docs/analysis-services/multidimensional-models-adomd-net-client/index.md b/docs/analysis-services/multidimensional-models-adomd-net-client/index.md index 1941d743d91..1eb56417e44 100644 --- a/docs/analysis-services/multidimensional-models-adomd-net-client/index.md +++ b/docs/analysis-services/multidimensional-models-adomd-net-client/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/multidimensional-models-adomd-net-client/adomd-net-client-functionality?toc=%2fsql%2fanalysis-services%2fmultidimensional-models-adomd-net-client%2ftoc.json +redirect_url: /sql/analysis-services/multidimensional-models-adomd-net-client/adomd-net-client-functionality --- diff --git a/docs/analysis-services/multidimensional-models-adomd-net-server/index.md b/docs/analysis-services/multidimensional-models-adomd-net-server/index.md index bd82128a34b..acdc0f4c046 100644 --- a/docs/analysis-services/multidimensional-models-adomd-net-server/index.md +++ b/docs/analysis-services/multidimensional-models-adomd-net-server/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/multidimensional-models-adomd-net-server/adomd-net-server-functionality?toc=%2fsql%2fanalysis-services%2fmultidimensional-models-adomd-net-server%2ftoc.json +redirect_url: /sql/analysis-services/multidimensional-models-adomd-net-server/adomd-net-server-functionality --- diff --git a/docs/analysis-services/multidimensional-models-extending-olap-stored-procedures/index.md b/docs/analysis-services/multidimensional-models-extending-olap-stored-procedures/index.md index d6fe4fbd2f1..2d8e0e0b400 100644 --- a/docs/analysis-services/multidimensional-models-extending-olap-stored-procedures/index.md +++ b/docs/analysis-services/multidimensional-models-extending-olap-stored-procedures/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/multidimensional-models-extending-olap-stored-procedures/accessing-query-context-in-stored-procedures?toc=%2fsql%2fanalysis-services%2fmultidimensional-models-extending-olap-stored-procedures%2ftoc.json +redirect_url: /sql/analysis-services/multidimensional-models-extending-olap-stored-procedures/accessing-query-context-in-stored-procedures --- diff --git a/docs/analysis-services/multidimensional-models-olap-logical-cube-objects/index.md b/docs/analysis-services/multidimensional-models-olap-logical-cube-objects/index.md index ee348697dbb..986ef60d1ac 100644 --- a/docs/analysis-services/multidimensional-models-olap-logical-cube-objects/index.md +++ b/docs/analysis-services/multidimensional-models-olap-logical-cube-objects/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/multidimensional-models-olap-logical-cube-objects/aggregations-and-aggregation-designs?toc=%2fsql%2fanalysis-services%2fmultidimensional-models-olap-logical-cube-objects%2ftoc.json +redirect_url: /sql/analysis-services/multidimensional-models-olap-logical-cube-objects/aggregations-and-aggregation-designs --- diff --git a/docs/analysis-services/multidimensional-models-olap-logical-dimension-objects/index.md b/docs/analysis-services/multidimensional-models-olap-logical-dimension-objects/index.md index d54ee634778..1d6b84e6b60 100644 --- a/docs/analysis-services/multidimensional-models-olap-logical-dimension-objects/index.md +++ b/docs/analysis-services/multidimensional-models-olap-logical-dimension-objects/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/multidimensional-models-olap-logical-dimension-objects/attribute-relationships?toc=%2fsql%2fanalysis-services%2fmultidimensional-models-olap-logical-dimension-objects%2ftoc.json +redirect_url: /sql/analysis-services/multidimensional-models-olap-logical-dimension-objects/attribute-relationships --- diff --git a/docs/analysis-services/multidimensional-models-scripting-language-assl-xmla/index.md b/docs/analysis-services/multidimensional-models-scripting-language-assl-xmla/index.md index 1eb8228c637..2689d96886a 100644 --- a/docs/analysis-services/multidimensional-models-scripting-language-assl-xmla/index.md +++ b/docs/analysis-services/multidimensional-models-scripting-language-assl-xmla/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/multidimensional-models-scripting-language-assl-xmla/backing-up-restoring-and-synchronizing-databases-xmla?toc=%2fsql%2fanalysis-services%2fmultidimensional-models-scripting-language-assl-xmla%2ftoc.json +redirect_url: /sql/analysis-services/multidimensional-models-scripting-language-assl-xmla/backing-up-restoring-and-synchronizing-databases-xmla --- diff --git a/docs/analysis-services/multidimensional-models/adomd-net/index.md b/docs/analysis-services/multidimensional-models/adomd-net/index.md index 69d1f83381d..729704cb3b0 100644 --- a/docs/analysis-services/multidimensional-models/adomd-net/index.md +++ b/docs/analysis-services/multidimensional-models/adomd-net/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/multidimensional-models/adomd-net/developing-with-adomd-net?toc=%2fsql%2fanalysis-services%2fmultidimensional-models%2fadomd-net%2ftoc.json +redirect_url: /sql/analysis-services/multidimensional-models/adomd-net/developing-with-adomd-net --- diff --git a/docs/analysis-services/multidimensional-models/analysis-management-objects/index.md b/docs/analysis-services/multidimensional-models/analysis-management-objects/index.md index 8b7b6391b68..54ce6591763 100644 --- a/docs/analysis-services/multidimensional-models/analysis-management-objects/index.md +++ b/docs/analysis-services/multidimensional-models/analysis-management-objects/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/multidimensional-models/analysis-management-objects/amo-classes-introduction?toc=%2fsql%2fanalysis-services%2fmultidimensional-models%2fanalysis-management-objects%2ftoc.json +redirect_url: /sql/analysis-services/multidimensional-models/analysis-management-objects/amo-classes-introduction --- diff --git a/docs/analysis-services/multidimensional-models/extending-olap/index.md b/docs/analysis-services/multidimensional-models/extending-olap/index.md index d43860225c2..b39474fa357 100644 --- a/docs/analysis-services/multidimensional-models/extending-olap/index.md +++ b/docs/analysis-services/multidimensional-models/extending-olap/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/multidimensional-models/extending-olap/analysis-services-personalization-extensions?toc=%2fsql%2fanalysis-services%2fmultidimensional-models%2fextending-olap%2ftoc.json +redirect_url: /sql/analysis-services/multidimensional-models/extending-olap/analysis-services-personalization-extensions --- diff --git a/docs/analysis-services/multidimensional-models/olap-logical/index.md b/docs/analysis-services/multidimensional-models/olap-logical/index.md index 43990664548..8b623e2333b 100644 --- a/docs/analysis-services/multidimensional-models/olap-logical/index.md +++ b/docs/analysis-services/multidimensional-models/olap-logical/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/multidimensional-models/olap-logical/database-objects-analysis-services-multidimensional-data?toc=%2fsql%2fanalysis-services%2fmultidimensional-models%2folap-logical%2ftoc.json +redirect_url: /sql/analysis-services/multidimensional-models/olap-logical/database-objects-analysis-services-multidimensional-data --- diff --git a/docs/analysis-services/multidimensional-models/olap-physical/index.md b/docs/analysis-services/multidimensional-models/olap-physical/index.md index e8e00f74613..e60d759e715 100644 --- a/docs/analysis-services/multidimensional-models/olap-physical/index.md +++ b/docs/analysis-services/multidimensional-models/olap-physical/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/multidimensional-models/olap-physical/client-architecture-requirements-for-analysis-services-development?toc=%2fsql%2fanalysis-services%2fmultidimensional-models%2folap-physical%2ftoc.json +redirect_url: /sql/analysis-services/multidimensional-models/olap-physical/client-architecture-requirements-for-analysis-services-development --- diff --git a/docs/analysis-services/multidimensional-models/scripting-language-assl/index.md b/docs/analysis-services/multidimensional-models/scripting-language-assl/index.md index e2938f3b904..c747f5c8b62 100644 --- a/docs/analysis-services/multidimensional-models/scripting-language-assl/index.md +++ b/docs/analysis-services/multidimensional-models/scripting-language-assl/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/multidimensional-models/scripting-language-assl/assl-objects-and-object-characteristics?toc=%2fsql%2fanalysis-services%2fmultidimensional-models%2fscripting-language-assl%2ftoc.json +redirect_url: /sql/analysis-services/multidimensional-models/scripting-language-assl/assl-objects-and-object-characteristics --- diff --git a/docs/analysis-services/schema-rowsets/data-mining/index.md b/docs/analysis-services/schema-rowsets/data-mining/index.md index 3273624d83e..0ba029abc1a 100644 --- a/docs/analysis-services/schema-rowsets/data-mining/index.md +++ b/docs/analysis-services/schema-rowsets/data-mining/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/schema-rowsets/data-mining/data-mining-schema-rowsets?toc=%2fsql%2fanalysis-services%2fschema-rowsets%2fdata-mining%2ftoc.json +redirect_url: /sql/analysis-services/schema-rowsets/data-mining/data-mining-schema-rowsets --- diff --git a/docs/analysis-services/schema-rowsets/index.md b/docs/analysis-services/schema-rowsets/index.md index c475bacf7c4..eac14b21cda 100644 --- a/docs/analysis-services/schema-rowsets/index.md +++ b/docs/analysis-services/schema-rowsets/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/schema-rowsets/analysis-services-schema-rowsets?toc=%2fsql%2fanalysis-services%2fschema-rowsets%2ftoc.json +redirect_url: /sql/analysis-services/schema-rowsets/analysis-services-schema-rowsets --- diff --git a/docs/analysis-services/schema-rowsets/ole-db-olap/index.md b/docs/analysis-services/schema-rowsets/ole-db-olap/index.md index 24a20f3844c..a04bdba9f4d 100644 --- a/docs/analysis-services/schema-rowsets/ole-db-olap/index.md +++ b/docs/analysis-services/schema-rowsets/ole-db-olap/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/schema-rowsets/ole-db-olap/discover-instances-rowset?toc=%2fsql%2fanalysis-services%2fschema-rowsets%2fole-db-olap%2ftoc.json +redirect_url: /sql/analysis-services/schema-rowsets/ole-db-olap/discover-instances-rowset --- diff --git a/docs/analysis-services/schema-rowsets/ole-db/index.md b/docs/analysis-services/schema-rowsets/ole-db/index.md index 92f7b848f09..89925250b1a 100644 --- a/docs/analysis-services/schema-rowsets/ole-db/index.md +++ b/docs/analysis-services/schema-rowsets/ole-db/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/schema-rowsets/ole-db/dbschema-catalogs-rowset?toc=%2fsql%2fanalysis-services%2fschema-rowsets%2fole-db%2ftoc.json +redirect_url: /sql/analysis-services/schema-rowsets/ole-db/dbschema-catalogs-rowset --- diff --git a/docs/analysis-services/schema-rowsets/xml/index.md b/docs/analysis-services/schema-rowsets/xml/index.md index 28de83e51a2..181747a7949 100644 --- a/docs/analysis-services/schema-rowsets/xml/index.md +++ b/docs/analysis-services/schema-rowsets/xml/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/schema-rowsets/xml/discover-calc-dependency-rowset?toc=%2fsql%2fanalysis-services%2fschema-rowsets%2fxml%2ftoc.json +redirect_url: /sql/analysis-services/schema-rowsets/xml/discover-calc-dependency-rowset --- diff --git a/docs/analysis-services/scripting/collections/index.md b/docs/analysis-services/scripting/collections/index.md index 65792a8d01e..05274acaec8 100644 --- a/docs/analysis-services/scripting/collections/index.md +++ b/docs/analysis-services/scripting/collections/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/scripting/collections/accounts-element-assl?toc=%2fsql%2fanalysis-services%2fscripting%2fcollections%2ftoc.json +redirect_url: /sql/analysis-services/scripting/collections/accounts-element-assl --- diff --git a/docs/analysis-services/scripting/data-type/index.md b/docs/analysis-services/scripting/data-type/index.md index 6cead455fb0..290c7ceffd1 100644 --- a/docs/analysis-services/scripting/data-type/index.md +++ b/docs/analysis-services/scripting/data-type/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/scripting/data-type/action-data-type-assl?toc=%2fsql%2fanalysis-services%2fscripting%2fdata-type%2ftoc.json +redirect_url: /sql/analysis-services/scripting/data-type/action-data-type-assl --- diff --git a/docs/analysis-services/scripting/index.md b/docs/analysis-services/scripting/index.md index d776546ec56..233e5085391 100644 --- a/docs/analysis-services/scripting/index.md +++ b/docs/analysis-services/scripting/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/scripting/analysis-services-scripting-language-assl-for-xmla?toc=%2fsql%2fanalysis-services%2fscripting%2ftoc.json +redirect_url: /sql/analysis-services/scripting/analysis-services-scripting-language-assl-for-xmla --- diff --git a/docs/analysis-services/scripting/objects/index.md b/docs/analysis-services/scripting/objects/index.md index 4dc7ad3e9f2..210c1416e6b 100644 --- a/docs/analysis-services/scripting/objects/index.md +++ b/docs/analysis-services/scripting/objects/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/scripting/objects/account-element-assl?toc=%2fsql%2fanalysis-services%2fscripting%2fobjects%2ftoc.json +redirect_url: /sql/analysis-services/scripting/objects/account-element-assl --- diff --git a/docs/analysis-services/scripting/properties/index.md b/docs/analysis-services/scripting/properties/index.md index d2e5736ea46..89736e32a88 100644 --- a/docs/analysis-services/scripting/properties/index.md +++ b/docs/analysis-services/scripting/properties/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/scripting/properties/access-element-assl?toc=%2fsql%2fanalysis-services%2fscripting%2fproperties%2ftoc.json +redirect_url: /sql/analysis-services/scripting/properties/access-element-assl --- diff --git a/docs/analysis-services/tabular-model-programming-compatibility-level-1200/index.md b/docs/analysis-services/tabular-model-programming-compatibility-level-1200/index.md index a29dbbc859e..3bb41bb09f7 100644 --- a/docs/analysis-services/tabular-model-programming-compatibility-level-1200/index.md +++ b/docs/analysis-services/tabular-model-programming-compatibility-level-1200/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/tabular-model-programming-compatibility-level-1200/add-a-data-source-to-tabular-model-analysis-services-amo-tom?toc=%2fsql%2fanalysis-services%2ftabular-model-programming-compatibility-level-1200%2ftoc.json +redirect_url: /sql/analysis-services/tabular-model-programming-compatibility-level-1200/tabular-model-programming-for-compatibility-level-1200 --- diff --git a/docs/analysis-services/tabular-model-programming-compatibility-levels-1050-1103/conceptual-schema-definition-language-csdl/index.md b/docs/analysis-services/tabular-model-programming-compatibility-levels-1050-1103/conceptual-schema-definition-language-csdl/index.md index 326cc4c987e..fe9c0ba0021 100644 --- a/docs/analysis-services/tabular-model-programming-compatibility-levels-1050-1103/conceptual-schema-definition-language-csdl/index.md +++ b/docs/analysis-services/tabular-model-programming-compatibility-levels-1050-1103/conceptual-schema-definition-language-csdl/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/tabular-model-programming-compatibility-levels-1050-1103/conceptual-schema-definition-language-csdl/associationset-element-csdlbi?toc=%2fsql%2fanalysis-services%2ftabular-model-programming-compatibility-levels-1050-1103%2fconceptual-schema-definition-language-csdl%2ftoc.json +redirect_url: /sql/analysis-services/tabular-model-programming-compatibility-levels-1050-1103/conceptual-schema-definition-language-csdl/associationset-element-csdlbi --- diff --git a/docs/analysis-services/tabular-model-programming-compatibility-levels-1050-1103/index.md b/docs/analysis-services/tabular-model-programming-compatibility-levels-1050-1103/index.md index 9f06f8235b4..ccf81d0cdf0 100644 --- a/docs/analysis-services/tabular-model-programming-compatibility-levels-1050-1103/index.md +++ b/docs/analysis-services/tabular-model-programming-compatibility-levels-1050-1103/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/tabular-model-programming-compatibility-levels-1050-1103/csdl-annotations-for-business-intelligence-csdlbi?toc=%2fsql%2fanalysis-services%2ftabular-model-programming-compatibility-levels-1050-1103%2ftoc.json +redirect_url: /sql/analysis-services/tabular-model-programming-compatibility-levels-1050-1103/tabular-model-programming-for-compatibility-levels-1050-through-1103 --- diff --git a/docs/analysis-services/tabular-model-programming-compatibility-levels-1050-1103/representation/index.md b/docs/analysis-services/tabular-model-programming-compatibility-levels-1050-1103/representation/index.md index 8e16ae1645f..9c3781dea68 100644 --- a/docs/analysis-services/tabular-model-programming-compatibility-levels-1050-1103/representation/index.md +++ b/docs/analysis-services/tabular-model-programming-compatibility-levels-1050-1103/representation/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/tabular-model-programming-compatibility-levels-1050-1103/representation/connection-representation-tabular?toc=%2fsql%2fanalysis-services%2ftabular-model-programming-compatibility-levels-1050-1103%2frepresentation%2ftoc.json +redirect_url: /sql/analysis-services/tabular-model-programming-compatibility-levels-1050-1103/representation/connection-representation-tabular --- diff --git a/docs/analysis-services/tabular-models-scripting-language-commands/index.md b/docs/analysis-services/tabular-models-scripting-language-commands/index.md index 2d34fe63d1d..d4d70f1631a 100644 --- a/docs/analysis-services/tabular-models-scripting-language-commands/index.md +++ b/docs/analysis-services/tabular-models-scripting-language-commands/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/tabular-models-scripting-language-commands/alter-command-tmsl?toc=%2fsql%2fanalysis-services%2ftabular-models-scripting-language-commands%2ftoc.json +redirect_url: /sql/analysis-services/tabular-models-scripting-language-commands/tmsl-reference-commands --- diff --git a/docs/analysis-services/tabular-models-scripting-language-objects/index.md b/docs/analysis-services/tabular-models-scripting-language-objects/index.md index d252b8a021b..05cdbe4eb86 100644 --- a/docs/analysis-services/tabular-models-scripting-language-objects/index.md +++ b/docs/analysis-services/tabular-models-scripting-language-objects/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/tabular-models-scripting-language-objects/database-object-tmsl?toc=%2fsql%2fanalysis-services%2ftabular-models-scripting-language-objects%2ftoc.json +redirect_url: /sql/analysis-services/tabular-models-scripting-language-objects/tmsl-reference-tabular-objects --- diff --git a/docs/analysis-services/xmla/index.md b/docs/analysis-services/xmla/index.md index 90d139391e4..0cc959d3e60 100644 --- a/docs/analysis-services/xmla/index.md +++ b/docs/analysis-services/xmla/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/xmla/xml-elements-methods-discover?toc=%2fsql%2fanalysis-services%2fxmla%2ftoc.json +redirect_url: /sql/analysis-services/xmla/xml-for-analysis-xmla-reference --- diff --git a/docs/analysis-services/xmla/xml-data-types/index.md b/docs/analysis-services/xmla/xml-data-types/index.md index 9c0a27eba04..f050ffcb4d8 100644 --- a/docs/analysis-services/xmla/xml-data-types/index.md +++ b/docs/analysis-services/xmla/xml-data-types/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/xmla/xml-data-types/emptyresult-data-type-xmla?toc=%2fsql%2fanalysis-services%2fxmla%2fxml-data-types%2ftoc.json +redirect_url: /sql/analysis-services/xmla/xml-data-types/xml-data-types-xmla --- diff --git a/docs/analysis-services/xmla/xml-elements-commands/index.md b/docs/analysis-services/xmla/xml-elements-commands/index.md index dd76b07b0c7..cdca08cf64c 100644 --- a/docs/analysis-services/xmla/xml-elements-commands/index.md +++ b/docs/analysis-services/xmla/xml-elements-commands/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/xmla/xml-elements-commands/alter-element-xmla?toc=%2fsql%2fanalysis-services%2fxmla%2fxml-elements-commands%2ftoc.json +redirect_url: /sql/analysis-services/xmla/xml-elements-commands/xml-elements-commands --- diff --git a/docs/analysis-services/xmla/xml-elements-headers/index.md b/docs/analysis-services/xmla/xml-elements-headers/index.md index 88eb0130d2b..8fb49e67584 100644 --- a/docs/analysis-services/xmla/xml-elements-headers/index.md +++ b/docs/analysis-services/xmla/xml-elements-headers/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/xmla/xml-elements-headers/beginsession-element-xmla?toc=%2fsql%2fanalysis-services%2fxmla%2fxml-elements-headers%2ftoc.json +redirect_url: /sql/analysis-services/xmla/xml-elements-headers/xml-elements-headers --- diff --git a/docs/analysis-services/xmla/xml-elements-properties/index.md b/docs/analysis-services/xmla/xml-elements-properties/index.md index 0e31fefa9ed..ca483586fcc 100644 --- a/docs/analysis-services/xmla/xml-elements-properties/index.md +++ b/docs/analysis-services/xmla/xml-elements-properties/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/analysis-services/xmla/xml-elements-properties/allowoverwrite-element-xmla?toc=%2fsql%2fanalysis-services%2fxmla%2fxml-elements-properties%2ftoc.json +redirect_url: /sql/analysis-services/xmla/xml-elements-properties/xml-elements-properties --- diff --git a/docs/connect/jdbc/index.md b/docs/connect/jdbc/index.md index 2ae4d5a14b8..f0f9ccf207d 100644 --- a/docs/connect/jdbc/index.md +++ b/docs/connect/jdbc/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/connect/jdbc/overview-of-the-jdbc-driver?toc=%2fsql%2fconnect%2fjdbc%2ftoc.json +redirect_url: /sql/connect/jdbc/microsoft-jdbc-driver-for-sql-server --- diff --git a/docs/connect/jdbc/reference/index.md b/docs/connect/jdbc/reference/index.md index 61a25a8c264..f5ef2a91f7e 100644 --- a/docs/connect/jdbc/reference/index.md +++ b/docs/connect/jdbc/reference/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/connect/jdbc/reference/datetimeoffset-class?toc=%2fsql%2fconnect%2fjdbc%2freference%2ftoc.json +redirect_url: /sql/connect/jdbc/reference/datetimeoffset-class --- diff --git a/docs/connect/odbc/windows/index.md b/docs/connect/odbc/windows/index.md index 7a25401d826..33ede296567 100644 --- a/docs/connect/odbc/windows/index.md +++ b/docs/connect/odbc/windows/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/connect/odbc/windows/microsoft-odbc-driver-for-sql-server-on-windows +redirect_url: /sql/connect/odbc/windows/asynchronous-execution-notification-method-sample --- diff --git a/docs/connect/php/index.md b/docs/connect/php/index.md index 3f43bdc7e22..4e364ba9b0c 100644 --- a/docs/connect/php/index.md +++ b/docs/connect/php/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/connect/php/microsoft-php-driver-for-sql-server?toc=%2fsql%2fconnect%2fphp%2ftoc.json ---- \ No newline at end of file +redirect_url: /sql/connect/php/microsoft-php-driver-for-sql-server +--- diff --git a/docs/database-engine/availability-groups/windows/index.md b/docs/database-engine/availability-groups/windows/index.md index 3ee7b32e09c..a45d853a97c 100644 --- a/docs/database-engine/availability-groups/windows/index.md +++ b/docs/database-engine/availability-groups/windows/index.md @@ -1,3 +1,3 @@ ---- -redirect_url: /sql/database-engine/availability-groups/windows/always-on-availability-groups-sql-server ---- +--- +redirect_url: /sql/database-engine/availability-groups/windows/overview-of-always-on-availability-groups-sql-server +--- diff --git a/docs/integration-services/building-packages-programmatically/index.md b/docs/integration-services/building-packages-programmatically/index.md index 0df7aa2c368..36afd92f03a 100644 --- a/docs/integration-services/building-packages-programmatically/index.md +++ b/docs/integration-services/building-packages-programmatically/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/integration-services/building-packages-programmatically/adding-connections-programmatically?toc=%2fsql%2fintegration-services%2fbuilding-packages-programmatically%2ftoc.json +redirect_url: /sql/integration-services/building-packages-programmatically/adding-connections-programmatically --- diff --git a/docs/integration-services/extending-packages-custom-objects-data-flow-types/index.md b/docs/integration-services/extending-packages-custom-objects-data-flow-types/index.md index c1964593eaf..370c7848ced 100644 --- a/docs/integration-services/extending-packages-custom-objects-data-flow-types/index.md +++ b/docs/integration-services/extending-packages-custom-objects-data-flow-types/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/integration-services/extending-packages-custom-objects-data-flow-types/developing-a-custom-destination-component?toc=%2fsql%2fintegration-services%2fextending-packages-custom-objects-data-flow-types%2ftoc.json +redirect_url: /sql/integration-services/extending-packages-custom-objects-data-flow-types/developing-a-custom-destination-component --- diff --git a/docs/integration-services/extending-packages-custom-objects/connection-manager/index.md b/docs/integration-services/extending-packages-custom-objects/connection-manager/index.md index 64325c95b30..71aa9413c9d 100644 --- a/docs/integration-services/extending-packages-custom-objects/connection-manager/index.md +++ b/docs/integration-services/extending-packages-custom-objects/connection-manager/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/integration-services/extending-packages-custom-objects/connection-manager/coding-a-custom-connection-manager?toc=%2fsql%2fintegration-services%2fextending-packages-custom-objects%2fconnection-manager%2ftoc.json +redirect_url: /sql/integration-services/extending-packages-custom-objects/connection-manager/developing-a-custom-connection-manager --- diff --git a/docs/integration-services/extending-packages-custom-objects/data-flow/index.md b/docs/integration-services/extending-packages-custom-objects/data-flow/index.md index 3cecc32688b..256d51fa46a 100644 --- a/docs/integration-services/extending-packages-custom-objects/data-flow/index.md +++ b/docs/integration-services/extending-packages-custom-objects/data-flow/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/integration-services/extending-packages-custom-objects/data-flow/creating-a-custom-data-flow-component?toc=%2fsql%2fintegration-services%2fextending-packages-custom-objects%2fdata-flow%2ftoc.json +redirect_url: /sql/integration-services/extending-packages-custom-objects/data-flow/developing-a-custom-data-flow-component --- diff --git a/docs/integration-services/extending-packages-custom-objects/foreach-enumerator/index.md b/docs/integration-services/extending-packages-custom-objects/foreach-enumerator/index.md index eb3d0493fda..37b53bf7c47 100644 --- a/docs/integration-services/extending-packages-custom-objects/foreach-enumerator/index.md +++ b/docs/integration-services/extending-packages-custom-objects/foreach-enumerator/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/integration-services/extending-packages-custom-objects/foreach-enumerator/coding-a-custom-foreach-enumerator?toc=%2fsql%2fintegration-services%2fextending-packages-custom-objects%2fforeach-enumerator%2ftoc.json +redirect_url: /sql/integration-services/extending-packages-custom-objects/foreach-enumerator/developing-a-custom-foreach-enumerator --- diff --git a/docs/integration-services/extending-packages-custom-objects/index.md b/docs/integration-services/extending-packages-custom-objects/index.md index d811470a772..fdccf8adde8 100644 --- a/docs/integration-services/extending-packages-custom-objects/index.md +++ b/docs/integration-services/extending-packages-custom-objects/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/integration-services/extending-packages-custom-objects/building-deploying-and-debugging-custom-objects?toc=%2fsql%2fintegration-services%2fextending-packages-custom-objects%2ftoc.json +redirect_url: /sql/integration-services/extending-packages-custom-objects/extending-packages-with-custom-objects --- diff --git a/docs/integration-services/extending-packages-custom-objects/log-provider/index.md b/docs/integration-services/extending-packages-custom-objects/log-provider/index.md index dd51885ae86..beedf515d27 100644 --- a/docs/integration-services/extending-packages-custom-objects/log-provider/index.md +++ b/docs/integration-services/extending-packages-custom-objects/log-provider/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/integration-services/extending-packages-custom-objects/log-provider/coding-a-custom-log-provider?toc=%2fsql%2fintegration-services%2fextending-packages-custom-objects%2flog-provider%2ftoc.json +redirect_url: /sql/integration-services/extending-packages-custom-objects/log-provider/developing-a-custom-log-provider --- diff --git a/docs/integration-services/extending-packages-custom-objects/task/index.md b/docs/integration-services/extending-packages-custom-objects/task/index.md index 088c903a89b..029c3f7a37a 100644 --- a/docs/integration-services/extending-packages-custom-objects/task/index.md +++ b/docs/integration-services/extending-packages-custom-objects/task/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/integration-services/extending-packages-custom-objects/task/adding-support-for-debugging-in-a-custom-task?toc=%2fsql%2fintegration-services%2fextending-packages-custom-objects%2ftask%2ftoc.json +redirect_url: /sql/integration-services/extending-packages-custom-objects/task/developing-a-custom-task --- diff --git a/docs/integration-services/extending-packages-scripting-data-flow-script-component-examples/index.md b/docs/integration-services/extending-packages-scripting-data-flow-script-component-examples/index.md index f87bbaed3c5..d169f6091a0 100644 --- a/docs/integration-services/extending-packages-scripting-data-flow-script-component-examples/index.md +++ b/docs/integration-services/extending-packages-scripting-data-flow-script-component-examples/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/integration-services/extending-packages-scripting-data-flow-script-component-examples/additional-script-component-examples?toc=%2fsql%2fintegration-services%2fextending-packages-scripting-data-flow-script-component-examples%2ftoc.json +redirect_url: /sql/integration-services/extending-packages-scripting-data-flow-script-component-examples/additional-script-component-examples --- diff --git a/docs/integration-services/extending-packages-scripting-data-flow-script-component-types/index.md b/docs/integration-services/extending-packages-scripting-data-flow-script-component-types/index.md index fe24b1b51f5..5e19830c793 100644 --- a/docs/integration-services/extending-packages-scripting-data-flow-script-component-types/index.md +++ b/docs/integration-services/extending-packages-scripting-data-flow-script-component-types/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/integration-services/extending-packages-scripting-data-flow-script-component-types/developing-specific-types-of-script-components?toc=%2fsql%2fintegration-services%2fextending-packages-scripting-data-flow-script-component-types%2ftoc.json +redirect_url: /sql/integration-services/extending-packages-scripting-data-flow-script-component-types/developing-specific-types-of-script-components --- diff --git a/docs/integration-services/extending-packages-scripting-task-examples/index.md b/docs/integration-services/extending-packages-scripting-task-examples/index.md index a2d79bc1fc1..346e6370b28 100644 --- a/docs/integration-services/extending-packages-scripting-task-examples/index.md +++ b/docs/integration-services/extending-packages-scripting-task-examples/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/integration-services/extending-packages-scripting-task-examples/script-task-examples?toc=%2fsql%2fintegration-services%2fextending-packages-scripting-task-examples%2ftoc.json +redirect_url: /sql/integration-services/extending-packages-scripting-task-examples/script-task-examples --- diff --git a/docs/integration-services/extending-packages-scripting/data-flow-script-component/index.md b/docs/integration-services/extending-packages-scripting/data-flow-script-component/index.md index b7fa6348d0c..500450b99ad 100644 --- a/docs/integration-services/extending-packages-scripting/data-flow-script-component/index.md +++ b/docs/integration-services/extending-packages-scripting/data-flow-script-component/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/integration-services/extending-packages-scripting/data-flow-script-component/coding-and-debugging-the-script-component?toc=%2fsql%2fintegration-services%2fextending-packages-scripting%2fdata-flow-script-component%2ftoc.json +redirect_url: /sql/integration-services/extending-packages-scripting/data-flow-script-component/extending-the-data-flow-with-the-script-component --- diff --git a/docs/integration-services/extending-packages-scripting/index.md b/docs/integration-services/extending-packages-scripting/index.md index af17396e7e1..4f3d94dbe7d 100644 --- a/docs/integration-services/extending-packages-scripting/index.md +++ b/docs/integration-services/extending-packages-scripting/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/integration-services/extending-packages-scripting/comparing-scripting-solutions-and-custom-objects?toc=%2fsql%2fintegration-services%2fextending-packages-scripting%2ftoc.json +redirect_url: /sql/integration-services/extending-packages-scripting/extending-packages-with-scripting --- diff --git a/docs/integration-services/extending-packages-scripting/task/index.md b/docs/integration-services/extending-packages-scripting/task/index.md index da71a5c0754..07aa3bec9e2 100644 --- a/docs/integration-services/extending-packages-scripting/task/index.md +++ b/docs/integration-services/extending-packages-scripting/task/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/integration-services/extending-packages-scripting/task/coding-and-debugging-the-script-task?toc=%2fsql%2fintegration-services%2fextending-packages-scripting%2ftask%2ftoc.json +redirect_url: /sql/integration-services/extending-packages-scripting/task/extending-the-package-with-the-script-task --- diff --git a/docs/integration-services/run-manage-packages-programmatically/index.md b/docs/integration-services/run-manage-packages-programmatically/index.md index 9f6f96ff0d4..bc53ec17217 100644 --- a/docs/integration-services/run-manage-packages-programmatically/index.md +++ b/docs/integration-services/run-manage-packages-programmatically/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/integration-services/run-manage-packages-programmatically/running-and-managing-packages-programmatically?toc=%2fsql%2fintegration-services%2frun-manage-packages-programmatically%2ftoc.json +redirect_url: /sql/integration-services/run-manage-packages-programmatically/running-and-managing-packages-programmatically --- diff --git a/docs/master-data-services/develop/index.md b/docs/master-data-services/develop/index.md index 086e5dbeb38..0a43ea0661f 100644 --- a/docs/master-data-services/develop/index.md +++ b/docs/master-data-services/develop/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/master-data-services/develop/categorized-web-service-operations-master-data-services?toc=%2fsql%2fmaster-data-services%2fdevelop%2ftoc.json +redirect_url: /sql/master-data-services/develop/categorized-web-service-operations-master-data-services --- diff --git a/docs/master-data-services/installing-mds-in-an-alwayson-group-environment/index.md b/docs/master-data-services/installing-mds-in-an-alwayson-group-environment/index.md index 9a42b2d3353..0f651428585 100644 --- a/docs/master-data-services/installing-mds-in-an-alwayson-group-environment/index.md +++ b/docs/master-data-services/installing-mds-in-an-alwayson-group-environment/index.md @@ -1,3 +1,3 @@ ---- -redirect_url: /sql/whitepapers/installing-mds-in-an-alwayson-group-environment/installing-mds-in-an-alwayson-group-environment ---- +--- +redirect_url: /sql/master-data-services/installing-mds-in-an-alwayson-group-environment/installing-mds-in-an-alwayson-group-environment +--- diff --git a/docs/odbc/index.md b/docs/odbc/index.md index 6328fe5573c..d0c1e1edc2b 100644 --- a/docs/odbc/index.md +++ b/docs/odbc/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/odbc/microsoft-open-database-connectivity-odbc?toc=%2fsql%2fodbc%2ftoc.json +redirect_url: /sql/odbc/microsoft-open-database-connectivity-odbc --- diff --git a/docs/relational-databases/clr-integration-data-access-in-process-ado-net/index.md b/docs/relational-databases/clr-integration-data-access-in-process-ado-net/index.md index fffdd40fd6d..ae50fec97db 100644 --- a/docs/relational-databases/clr-integration-data-access-in-process-ado-net/index.md +++ b/docs/relational-databases/clr-integration-data-access-in-process-ado-net/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/clr-integration-data-access-in-process-ado-net/sql-server-in-process-specific-extensions-to-ado-net?toc=%2fsql%2frelational-databases%2fclr-integration-data-access-in-process-ado-net%2ftoc.json +redirect_url: /sql/relational-databases/clr-integration-data-access-in-process-ado-net/sql-server-in-process-specific-extensions-to-ado-net --- diff --git a/docs/relational-databases/clr-integration-data-access-transactions/index.md b/docs/relational-databases/clr-integration-data-access-transactions/index.md index 987f7acacce..5cb9f09a154 100644 --- a/docs/relational-databases/clr-integration-data-access-transactions/index.md +++ b/docs/relational-databases/clr-integration-data-access-transactions/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/clr-integration-data-access-transactions/clr-integration-and-transactions?toc=%2fsql%2frelational-databases%2fclr-integration-data-access-transactions%2ftoc.json +redirect_url: /sql/relational-databases/clr-integration-data-access-transactions/clr-integration-and-transactions --- diff --git a/docs/relational-databases/clr-integration-database-objects-types-net-framework/index.md b/docs/relational-databases/clr-integration-database-objects-types-net-framework/index.md index b28fa2c9815..9ce3447be8a 100644 --- a/docs/relational-databases/clr-integration-database-objects-types-net-framework/index.md +++ b/docs/relational-databases/clr-integration-database-objects-types-net-framework/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/clr-integration-database-objects-types-net-framework/sql-server-data-types-in-the-net-framework?toc=%2fsql%2frelational-databases%2fclr-integration-database-objects-types-net-framework%2ftoc.json +redirect_url: /sql/relational-databases/clr-integration-database-objects-types-net-framework/sql-server-data-types-in-the-net-framework --- diff --git a/docs/relational-databases/clr-integration-database-objects-user-defined-functions/index.md b/docs/relational-databases/clr-integration-database-objects-user-defined-functions/index.md index e6535e06330..a6b31850c01 100644 --- a/docs/relational-databases/clr-integration-database-objects-user-defined-functions/index.md +++ b/docs/relational-databases/clr-integration-database-objects-user-defined-functions/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/clr-integration-database-objects-user-defined-functions/clr-user-defined-functions?toc=%2fsql%2frelational-databases%2fclr-integration-database-objects-user-defined-functions%2ftoc.json +redirect_url: /sql/relational-databases/clr-integration-database-objects-user-defined-functions/clr-user-defined-functions --- diff --git a/docs/relational-databases/clr-integration-database-objects-user-defined-types/index.md b/docs/relational-databases/clr-integration-database-objects-user-defined-types/index.md index 0c339c6413f..33f8465a07d 100644 --- a/docs/relational-databases/clr-integration-database-objects-user-defined-types/index.md +++ b/docs/relational-databases/clr-integration-database-objects-user-defined-types/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/clr-integration-database-objects-user-defined-types/clr-user-defined-types?toc=%2fsql%2frelational-databases%2fclr-integration-database-objects-user-defined-types%2ftoc.json +redirect_url: /sql/relational-databases/clr-integration-database-objects-user-defined-types/clr-user-defined-types --- diff --git a/docs/relational-databases/clr-integration-security-host-protection-attributes/index.md b/docs/relational-databases/clr-integration-security-host-protection-attributes/index.md index ffb07992308..0419cda7830 100644 --- a/docs/relational-databases/clr-integration-security-host-protection-attributes/index.md +++ b/docs/relational-databases/clr-integration-security-host-protection-attributes/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/clr-integration-security-host-protection-attributes/host-protection-attributes-and-clr-integration-programming?toc=%2fsql%2frelational-databases%2fclr-integration-security-host-protection-attributes%2ftoc.json +redirect_url: /sql/relational-databases/clr-integration-security-host-protection-attributes/host-protection-attributes-and-clr-integration-programming --- diff --git a/docs/relational-databases/clr-integration/assemblies/index.md b/docs/relational-databases/clr-integration/assemblies/index.md index 19df37401b1..f3b65643c97 100644 --- a/docs/relational-databases/clr-integration/assemblies/index.md +++ b/docs/relational-databases/clr-integration/assemblies/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/clr-integration/assemblies/managing-clr-integration-assemblies?toc=%2fsql%2frelational-databases%2fclr-integration%2fassemblies%2ftoc.json +redirect_url: /sql/relational-databases/clr-integration/assemblies/managing-clr-integration-assemblies --- diff --git a/docs/relational-databases/clr-integration/data-access/index.md b/docs/relational-databases/clr-integration/data-access/index.md index 7696e44a9eb..31ebc13bee7 100644 --- a/docs/relational-databases/clr-integration/data-access/index.md +++ b/docs/relational-databases/clr-integration/data-access/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/clr-integration/data-access/data-access-from-clr-database-objects?toc=%2fsql%2frelational-databases%2fclr-integration%2fdata-access%2ftoc.json +redirect_url: /sql/relational-databases/clr-integration/data-access/data-access-from-clr-database-objects --- diff --git a/docs/relational-databases/clr-integration/database-objects/index.md b/docs/relational-databases/clr-integration/database-objects/index.md index 8a42a47e437..a66d83d6a85 100644 --- a/docs/relational-databases/clr-integration/database-objects/index.md +++ b/docs/relational-databases/clr-integration/database-objects/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/clr-integration/database-objects/building-database-objects-with-common-language-runtime-clr-integration?toc=%2fsql%2frelational-databases%2fclr-integration%2fdatabase-objects%2ftoc.json +redirect_url: /sql/relational-databases/clr-integration/database-objects/building-database-objects-with-common-language-runtime-clr-integration --- diff --git a/docs/relational-databases/clr-integration/index.md b/docs/relational-databases/clr-integration/index.md index 2efb9b87639..493c60d49b1 100644 --- a/docs/relational-databases/clr-integration/index.md +++ b/docs/relational-databases/clr-integration/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/clr-integration/common-language-runtime-clr-integration-programming-concepts?toc=%2fsql%2frelational-databases%2fclr-integration%2ftoc.json +redirect_url: /sql/relational-databases/clr-integration/common-language-runtime-clr-integration-programming-concepts --- diff --git a/docs/relational-databases/clr-integration/security/index.md b/docs/relational-databases/clr-integration/security/index.md index d6b4f46c106..1323c4edab3 100644 --- a/docs/relational-databases/clr-integration/security/index.md +++ b/docs/relational-databases/clr-integration/security/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/clr-integration/security/clr-integration-code-access-security?toc=%2fsql%2frelational-databases%2fclr-integration%2fsecurity%2ftoc.json +redirect_url: /sql/relational-databases/clr-integration/security/clr-integration-code-access-security --- diff --git a/docs/relational-databases/express-localdb-error-messages/index.md b/docs/relational-databases/express-localdb-error-messages/index.md index 1ecdd535640..90b4d9b20e7 100644 --- a/docs/relational-databases/express-localdb-error-messages/index.md +++ b/docs/relational-databases/express-localdb-error-messages/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/express-localdb-error-messages/sql-server-express-localdb-reference-error-messages?toc=%2fsql%2frelational-databases%2fexpress-localdb-error-messages%2ftoc.json +redirect_url: /sql/relational-databases/express-localdb-error-messages/sql-server-express-localdb-reference-error-messages --- diff --git a/docs/relational-databases/express-localdb-instance-apis/index.md b/docs/relational-databases/express-localdb-instance-apis/index.md index d32c1fa35a6..76a56bdb48c 100644 --- a/docs/relational-databases/express-localdb-instance-apis/index.md +++ b/docs/relational-databases/express-localdb-instance-apis/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/express-localdb-instance-apis/sql-server-express-localdb-reference-instance-apis?toc=%2fsql%2frelational-databases%2fexpress-localdb-instance-apis%2ftoc.json +redirect_url: /sql/relational-databases/express-localdb-instance-apis/sql-server-express-localdb-reference-instance-apis --- diff --git a/docs/relational-databases/extended-stored-procedures-programming/index.md b/docs/relational-databases/extended-stored-procedures-programming/index.md index 66f6a5b79fe..297868f79c6 100644 --- a/docs/relational-databases/extended-stored-procedures-programming/index.md +++ b/docs/relational-databases/extended-stored-procedures-programming/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/extended-stored-procedures-programming/database-engine-extended-stored-procedures-programming?toc=%2fsql%2frelational-databases%2fextended-stored-procedures-programming%2ftoc.json +redirect_url: /sql/relational-databases/extended-stored-procedures-programming/database-engine-extended-stored-procedures-programming --- diff --git a/docs/relational-databases/extended-stored-procedures-reference/index.md b/docs/relational-databases/extended-stored-procedures-reference/index.md index 4dfd55550b3..6ce6fb71033 100644 --- a/docs/relational-databases/extended-stored-procedures-reference/index.md +++ b/docs/relational-databases/extended-stored-procedures-reference/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/extended-stored-procedures-reference/database-engine-extended-stored-procedures-reference?toc=%2fsql%2frelational-databases%2fextended-stored-procedures-reference%2ftoc.json +redirect_url: /sql/relational-databases/extended-stored-procedures-reference/database-engine-extended-stored-procedures-reference --- diff --git a/docs/relational-databases/native-client-odbc-api/index.md b/docs/relational-databases/native-client-odbc-api/index.md index 8292a23a3e9..51e6cc2bebb 100644 --- a/docs/relational-databases/native-client-odbc-api/index.md +++ b/docs/relational-databases/native-client-odbc-api/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-odbc-api/odbc-api-implementation-details?toc=%2fsql%2frelational-databases%2fnative-client-odbc-api%2ftoc.json +redirect_url: /sql/relational-databases/native-client-odbc-api/odbc-api-implementation-details --- diff --git a/docs/relational-databases/native-client-odbc-bulk-copy-operations/index.md b/docs/relational-databases/native-client-odbc-bulk-copy-operations/index.md index 2ad9c0ff3ef..b29d79adcc8 100644 --- a/docs/relational-databases/native-client-odbc-bulk-copy-operations/index.md +++ b/docs/relational-databases/native-client-odbc-bulk-copy-operations/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-odbc-bulk-copy-operations/performing-bulk-copy-operations-odbc?toc=%2fsql%2frelational-databases%2fnative-client-odbc-bulk-copy-operations%2ftoc.json +redirect_url: /sql/relational-databases/native-client-odbc-bulk-copy-operations/performing-bulk-copy-operations-odbc --- diff --git a/docs/relational-databases/native-client-odbc-communication/index.md b/docs/relational-databases/native-client-odbc-communication/index.md index 0b9ca9162c8..51caba77edc 100644 --- a/docs/relational-databases/native-client-odbc-communication/index.md +++ b/docs/relational-databases/native-client-odbc-communication/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-odbc-communication/communicating-with-sql-server-odbc?toc=%2fsql%2frelational-databases%2fnative-client-odbc-communication%2ftoc.json +redirect_url: /sql/relational-databases/native-client-odbc-communication/communicating-with-sql-server-odbc --- diff --git a/docs/relational-databases/native-client-odbc-cursors/implementation/index.md b/docs/relational-databases/native-client-odbc-cursors/implementation/index.md index fbfa6eb500d..1c698c4dfee 100644 --- a/docs/relational-databases/native-client-odbc-cursors/implementation/index.md +++ b/docs/relational-databases/native-client-odbc-cursors/implementation/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-odbc-cursors/implementation/how-cursors-are-implemented?toc=%2fsql%2frelational-databases%2fnative-client-odbc-cursors%2fimplementation%2ftoc.json +redirect_url: /sql/relational-databases/native-client-odbc-cursors/implementation/how-cursors-are-implemented --- diff --git a/docs/relational-databases/native-client-odbc-cursors/index.md b/docs/relational-databases/native-client-odbc-cursors/index.md index 1b6aff7cc73..116ee6f5606 100644 --- a/docs/relational-databases/native-client-odbc-cursors/index.md +++ b/docs/relational-databases/native-client-odbc-cursors/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-odbc-cursors/using-cursors-odbc?toc=%2fsql%2frelational-databases%2fnative-client-odbc-cursors%2ftoc.json +redirect_url: /sql/relational-databases/native-client-odbc-cursors/using-cursors-odbc --- diff --git a/docs/relational-databases/native-client-odbc-cursors/programming/index.md b/docs/relational-databases/native-client-odbc-cursors/programming/index.md index 042efbdd0f3..bc84faf5f58 100644 --- a/docs/relational-databases/native-client-odbc-cursors/programming/index.md +++ b/docs/relational-databases/native-client-odbc-cursors/programming/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-odbc-cursors/programming/cursor-programming-details-odbc?toc=%2fsql%2frelational-databases%2fnative-client-odbc-cursors%2fprogramming%2ftoc.json +redirect_url: /sql/relational-databases/native-client-odbc-cursors/programming/cursor-programming-details-odbc --- diff --git a/docs/relational-databases/native-client-odbc-cursors/properties/index.md b/docs/relational-databases/native-client-odbc-cursors/properties/index.md index fdb0d99db97..9ab4c898e3a 100644 --- a/docs/relational-databases/native-client-odbc-cursors/properties/index.md +++ b/docs/relational-databases/native-client-odbc-cursors/properties/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-odbc-cursors/properties/cursor-properties?toc=%2fsql%2frelational-databases%2fnative-client-odbc-cursors%2fproperties%2ftoc.json +redirect_url: /sql/relational-databases/native-client-odbc-cursors/properties/cursor-properties --- diff --git a/docs/relational-databases/native-client-odbc-date-time/index.md b/docs/relational-databases/native-client-odbc-date-time/index.md index 56acc983fde..9f5f278a09e 100644 --- a/docs/relational-databases/native-client-odbc-date-time/index.md +++ b/docs/relational-databases/native-client-odbc-date-time/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-odbc-date-time/date-and-time-improvements-odbc?toc=%2fsql%2frelational-databases%2fnative-client-odbc-date-time%2ftoc.json +redirect_url: /sql/relational-databases/native-client-odbc-date-time/date-and-time-improvements-odbc --- diff --git a/docs/relational-databases/native-client-odbc-error-messages/index.md b/docs/relational-databases/native-client-odbc-error-messages/index.md index e0dcce29d16..135588e8171 100644 --- a/docs/relational-databases/native-client-odbc-error-messages/index.md +++ b/docs/relational-databases/native-client-odbc-error-messages/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-odbc-error-messages/handling-errors-and-messages?toc=%2fsql%2frelational-databases%2fnative-client-odbc-error-messages%2ftoc.json +redirect_url: /sql/relational-databases/native-client-odbc-error-messages/handling-errors-and-messages --- diff --git a/docs/relational-databases/native-client-odbc-extensions-bulk-copy-functions/index.md b/docs/relational-databases/native-client-odbc-extensions-bulk-copy-functions/index.md index 90b29ed4b81..bf998a2c895 100644 --- a/docs/relational-databases/native-client-odbc-extensions-bulk-copy-functions/index.md +++ b/docs/relational-databases/native-client-odbc-extensions-bulk-copy-functions/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-odbc-extensions-bulk-copy-functions/sql-server-driver-extensions-bulk-copy-functions?toc=%2fsql%2frelational-databases%2fnative-client-odbc-extensions-bulk-copy-functions%2ftoc.json +redirect_url: /sql/relational-databases/native-client-odbc-extensions-bulk-copy-functions/sql-server-driver-extensions-bulk-copy-functions --- diff --git a/docs/relational-databases/native-client-odbc-how-to/bulk-copy/index.md b/docs/relational-databases/native-client-odbc-how-to/bulk-copy/index.md index a1d15bf4176..da77a503666 100644 --- a/docs/relational-databases/native-client-odbc-how-to/bulk-copy/index.md +++ b/docs/relational-databases/native-client-odbc-how-to/bulk-copy/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-odbc-how-to/bulk-copy/bulk-copying-with-the-sql-server-odbc-driver-how-to-topics-odbc?toc=%2fsql%2frelational-databases%2fnative-client-odbc-how-to%2fbulk-copy%2ftoc.json +redirect_url: /sql/relational-databases/native-client-odbc-how-to/bulk-copy/bulk-copying-with-the-sql-server-odbc-driver-how-to-topics-odbc --- diff --git a/docs/relational-databases/native-client-odbc-how-to/cursors/index.md b/docs/relational-databases/native-client-odbc-how-to/cursors/index.md index 1341513c28a..bbb3f61bd3c 100644 --- a/docs/relational-databases/native-client-odbc-how-to/cursors/index.md +++ b/docs/relational-databases/native-client-odbc-how-to/cursors/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-odbc-how-to/cursors/using-cursors-how-to-topics-odbc?toc=%2fsql%2frelational-databases%2fnative-client-odbc-how-to%2fcursors%2ftoc.json +redirect_url: /sql/relational-databases/native-client-odbc-how-to/cursors/using-cursors-how-to-topics-odbc --- diff --git a/docs/relational-databases/native-client-odbc-how-to/execute-queries/index.md b/docs/relational-databases/native-client-odbc-how-to/execute-queries/index.md index 8c0b9430e95..dfc012bebad 100644 --- a/docs/relational-databases/native-client-odbc-how-to/execute-queries/index.md +++ b/docs/relational-databases/native-client-odbc-how-to/execute-queries/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-odbc-how-to/execute-queries/executing-queries-how-to-topics-odbc?toc=%2fsql%2frelational-databases%2fnative-client-odbc-how-to%2fexecute-queries%2ftoc.json +redirect_url: /sql/relational-databases/native-client-odbc-how-to/execute-queries/executing-queries-how-to-topics-odbc --- diff --git a/docs/relational-databases/native-client-odbc-how-to/index.md b/docs/relational-databases/native-client-odbc-how-to/index.md index 7c27f59571f..47acd650964 100644 --- a/docs/relational-databases/native-client-odbc-how-to/index.md +++ b/docs/relational-databases/native-client-odbc-how-to/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-odbc-how-to/odbc-how-to-topics?toc=%2fsql%2frelational-databases%2fnative-client-odbc-how-to%2ftoc.json +redirect_url: /sql/relational-databases/native-client-odbc-how-to/odbc-how-to-topics --- diff --git a/docs/relational-databases/native-client-odbc-queries/executing-statements/index.md b/docs/relational-databases/native-client-odbc-queries/executing-statements/index.md index 98f4828909e..5c97cba4322 100644 --- a/docs/relational-databases/native-client-odbc-queries/executing-statements/index.md +++ b/docs/relational-databases/native-client-odbc-queries/executing-statements/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-odbc-queries/executing-statements/executing-statements-odbc?toc=%2fsql%2frelational-databases%2fnative-client-odbc-queries%2fexecuting-statements%2ftoc.json +redirect_url: /sql/relational-databases/native-client-odbc-queries/executing-statements/executing-statements-odbc --- diff --git a/docs/relational-databases/native-client-odbc-queries/index.md b/docs/relational-databases/native-client-odbc-queries/index.md index cf4616c6aa9..f661c0ebd12 100644 --- a/docs/relational-databases/native-client-odbc-queries/index.md +++ b/docs/relational-databases/native-client-odbc-queries/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-odbc-queries/executing-queries-odbc?toc=%2fsql%2frelational-databases%2fnative-client-odbc-queries%2ftoc.json +redirect_url: /sql/relational-databases/native-client-odbc-queries/executing-queries-odbc --- diff --git a/docs/relational-databases/native-client-odbc-results/index.md b/docs/relational-databases/native-client-odbc-results/index.md index a4c2c6b7ecb..d8e4b3436d2 100644 --- a/docs/relational-databases/native-client-odbc-results/index.md +++ b/docs/relational-databases/native-client-odbc-results/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-odbc-results/processing-results-odbc?toc=%2fsql%2frelational-databases%2fnative-client-odbc-results%2ftoc.json +redirect_url: /sql/relational-databases/native-client-odbc-results/processing-results-odbc --- diff --git a/docs/relational-databases/native-client-odbc-stored-procedures/index.md b/docs/relational-databases/native-client-odbc-stored-procedures/index.md index 565182fa77e..cb27c8b1ff7 100644 --- a/docs/relational-databases/native-client-odbc-stored-procedures/index.md +++ b/docs/relational-databases/native-client-odbc-stored-procedures/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-odbc-stored-procedures/running-stored-procedures?toc=%2fsql%2frelational-databases%2fnative-client-odbc-stored-procedures%2ftoc.json +redirect_url: /sql/relational-databases/native-client-odbc-stored-procedures/running-stored-procedures --- diff --git a/docs/relational-databases/native-client-odbc-table-valued-parameters/index.md b/docs/relational-databases/native-client-odbc-table-valued-parameters/index.md index f78b3e78854..41c72428931 100644 --- a/docs/relational-databases/native-client-odbc-table-valued-parameters/index.md +++ b/docs/relational-databases/native-client-odbc-table-valued-parameters/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-odbc-table-valued-parameters/table-valued-parameters-odbc?toc=%2fsql%2frelational-databases%2fnative-client-odbc-table-valued-parameters%2ftoc.json +redirect_url: /sql/relational-databases/native-client-odbc-table-valued-parameters/table-valued-parameters-odbc --- diff --git a/docs/relational-databases/native-client-odbc-text-image-columns/index.md b/docs/relational-databases/native-client-odbc-text-image-columns/index.md index 5ff4617aa3b..3d6c41c3491 100644 --- a/docs/relational-databases/native-client-odbc-text-image-columns/index.md +++ b/docs/relational-databases/native-client-odbc-text-image-columns/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-odbc-text-image-columns/managing-text-and-image-columns?toc=%2fsql%2frelational-databases%2fnative-client-odbc-text-image-columns%2ftoc.json +redirect_url: /sql/relational-databases/native-client-odbc-text-image-columns/managing-text-and-image-columns --- diff --git a/docs/relational-databases/native-client-ole-db-blobs/index.md b/docs/relational-databases/native-client-ole-db-blobs/index.md index e1d7d8d2295..85a20dc9957 100644 --- a/docs/relational-databases/native-client-ole-db-blobs/index.md +++ b/docs/relational-databases/native-client-ole-db-blobs/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-ole-db-blobs/blobs-and-ole-objects?toc=%2fsql%2frelational-databases%2fnative-client-ole-db-blobs%2ftoc.json +redirect_url: /sql/relational-databases/native-client-ole-db-blobs/blobs-and-ole-objects --- diff --git a/docs/relational-databases/native-client-ole-db-commands/index.md b/docs/relational-databases/native-client-ole-db-commands/index.md index fa26c00e04a..6ec999e8cf7 100644 --- a/docs/relational-databases/native-client-ole-db-commands/index.md +++ b/docs/relational-databases/native-client-ole-db-commands/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-ole-db-commands/commands?toc=%2fsql%2frelational-databases%2fnative-client-ole-db-commands%2ftoc.json +redirect_url: /sql/relational-databases/native-client-ole-db-commands/commands --- diff --git a/docs/relational-databases/native-client-ole-db-data-source-objects/index.md b/docs/relational-databases/native-client-ole-db-data-source-objects/index.md index 0a82bc5103a..ed3eaa657af 100644 --- a/docs/relational-databases/native-client-ole-db-data-source-objects/index.md +++ b/docs/relational-databases/native-client-ole-db-data-source-objects/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-ole-db-data-source-objects/data-source-objects-ole-db?toc=%2fsql%2frelational-databases%2fnative-client-ole-db-data-source-objects%2ftoc.json +redirect_url: /sql/relational-databases/native-client-ole-db-data-source-objects/data-source-objects-ole-db --- diff --git a/docs/relational-databases/native-client-ole-db-data-types/index.md b/docs/relational-databases/native-client-ole-db-data-types/index.md index d12fa5c1380..b648428e6ba 100644 --- a/docs/relational-databases/native-client-ole-db-data-types/index.md +++ b/docs/relational-databases/native-client-ole-db-data-types/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-ole-db-data-types/data-types-ole-db?toc=%2fsql%2frelational-databases%2fnative-client-ole-db-data-types%2ftoc.json +redirect_url: /sql/relational-databases/native-client-ole-db-data-types/data-types-ole-db --- diff --git a/docs/relational-databases/native-client-ole-db-date-time/index.md b/docs/relational-databases/native-client-ole-db-date-time/index.md index e928705ac84..6f59545d3c4 100644 --- a/docs/relational-databases/native-client-ole-db-date-time/index.md +++ b/docs/relational-databases/native-client-ole-db-date-time/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-ole-db-date-time/date-and-time-improvements-ole-db?toc=%2fsql%2frelational-databases%2fnative-client-ole-db-date-time%2ftoc.json +redirect_url: /sql/relational-databases/native-client-ole-db-date-time/date-and-time-improvements-ole-db --- diff --git a/docs/relational-databases/native-client-ole-db-errors/index.md b/docs/relational-databases/native-client-ole-db-errors/index.md index f62cfd91cfa..342e5bc5305 100644 --- a/docs/relational-databases/native-client-ole-db-errors/index.md +++ b/docs/relational-databases/native-client-ole-db-errors/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-ole-db-errors/errors?toc=%2fsql%2frelational-databases%2fnative-client-ole-db-errors%2ftoc.json +redirect_url: /sql/relational-databases/native-client-ole-db-errors/errors --- diff --git a/docs/relational-databases/native-client-ole-db-how-to/filestream/index.md b/docs/relational-databases/native-client-ole-db-how-to/filestream/index.md index 39aeebf72d5..ba58d478b28 100644 --- a/docs/relational-databases/native-client-ole-db-how-to/filestream/index.md +++ b/docs/relational-databases/native-client-ole-db-how-to/filestream/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-ole-db-how-to/filestream/filestream-and-ole-db?toc=%2fsql%2frelational-databases%2fnative-client-ole-db-how-to%2ffilestream%2ftoc.json +redirect_url: /sql/relational-databases/native-client-ole-db-how-to/filestream/filestream-and-ole-db --- diff --git a/docs/relational-databases/native-client-ole-db-how-to/index.md b/docs/relational-databases/native-client-ole-db-how-to/index.md index 088d98d19ad..32ae0dae45f 100644 --- a/docs/relational-databases/native-client-ole-db-how-to/index.md +++ b/docs/relational-databases/native-client-ole-db-how-to/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-ole-db-how-to/ole-db-how-to-topics?toc=%2fsql%2frelational-databases%2fnative-client-ole-db-how-to%2ftoc.json +redirect_url: /sql/relational-databases/native-client-ole-db-how-to/ole-db-how-to-topics --- diff --git a/docs/relational-databases/native-client-ole-db-how-to/results/index.md b/docs/relational-databases/native-client-ole-db-how-to/results/index.md index 961c5a6125d..9be4967ad25 100644 --- a/docs/relational-databases/native-client-ole-db-how-to/results/index.md +++ b/docs/relational-databases/native-client-ole-db-how-to/results/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-ole-db-how-to/results/processing-results-how-to-topics-ole-db?toc=%2fsql%2frelational-databases%2fnative-client-ole-db-how-to%2fresults%2ftoc.json +redirect_url: /sql/relational-databases/native-client-ole-db-how-to/results/processing-results-how-to-topics-ole-db --- diff --git a/docs/relational-databases/native-client-ole-db-interfaces/index.md b/docs/relational-databases/native-client-ole-db-interfaces/index.md index 214ec582df4..fb26ccd8547 100644 --- a/docs/relational-databases/native-client-ole-db-interfaces/index.md +++ b/docs/relational-databases/native-client-ole-db-interfaces/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-ole-db-interfaces/sql-server-native-client-ole-db-interfaces?toc=%2fsql%2frelational-databases%2fnative-client-ole-db-interfaces%2ftoc.json +redirect_url: /sql/relational-databases/native-client-ole-db-interfaces/sql-server-native-client-ole-db-interfaces --- diff --git a/docs/relational-databases/native-client-ole-db-provider/index.md b/docs/relational-databases/native-client-ole-db-provider/index.md index 82a3fa61b51..16462158341 100644 --- a/docs/relational-databases/native-client-ole-db-provider/index.md +++ b/docs/relational-databases/native-client-ole-db-provider/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-ole-db-provider/creating-a-sql-server-native-client-ole-db-provider-application?toc=%2fsql%2frelational-databases%2fnative-client-ole-db-provider%2ftoc.json +redirect_url: /sql/relational-databases/native-client-ole-db-provider/creating-a-sql-server-native-client-ole-db-provider-application --- diff --git a/docs/relational-databases/native-client-ole-db-rowsets/index.md b/docs/relational-databases/native-client-ole-db-rowsets/index.md index 707e899ad0d..62ed79c197b 100644 --- a/docs/relational-databases/native-client-ole-db-rowsets/index.md +++ b/docs/relational-databases/native-client-ole-db-rowsets/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-ole-db-rowsets/rowsets?toc=%2fsql%2frelational-databases%2fnative-client-ole-db-rowsets%2ftoc.json +redirect_url: /sql/relational-databases/native-client-ole-db-rowsets/rowsets --- diff --git a/docs/relational-databases/native-client-ole-db-table-valued-parameters/index.md b/docs/relational-databases/native-client-ole-db-table-valued-parameters/index.md index 37d8d8aae38..26822157516 100644 --- a/docs/relational-databases/native-client-ole-db-table-valued-parameters/index.md +++ b/docs/relational-databases/native-client-ole-db-table-valued-parameters/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-ole-db-table-valued-parameters/table-valued-parameters-ole-db?toc=%2fsql%2frelational-databases%2fnative-client-ole-db-table-valued-parameters%2ftoc.json +redirect_url: /sql/relational-databases/native-client-ole-db-table-valued-parameters/table-valued-parameters-ole-db --- diff --git a/docs/relational-databases/native-client-ole-db-tables-indexes/index.md b/docs/relational-databases/native-client-ole-db-tables-indexes/index.md index 248ef2a3402..cc529ec0068 100644 --- a/docs/relational-databases/native-client-ole-db-tables-indexes/index.md +++ b/docs/relational-databases/native-client-ole-db-tables-indexes/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-ole-db-tables-indexes/tables-and-indexes?toc=%2fsql%2frelational-databases%2fnative-client-ole-db-tables-indexes%2ftoc.json +redirect_url: /sql/relational-databases/native-client-ole-db-tables-indexes/tables-and-indexes --- diff --git a/docs/relational-databases/native-client-ole-db-transactions/index.md b/docs/relational-databases/native-client-ole-db-transactions/index.md index f1425b92382..1549c018e41 100644 --- a/docs/relational-databases/native-client-ole-db-transactions/index.md +++ b/docs/relational-databases/native-client-ole-db-transactions/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client-ole-db-transactions/transactions?toc=%2fsql%2frelational-databases%2fnative-client-ole-db-transactions%2ftoc.json +redirect_url: /sql/relational-databases/native-client-ole-db-transactions/transactions --- diff --git a/docs/relational-databases/native-client/applications/index.md b/docs/relational-databases/native-client/applications/index.md index 35f72236882..887cb52aac7 100644 --- a/docs/relational-databases/native-client/applications/index.md +++ b/docs/relational-databases/native-client/applications/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client/applications/building-applications-with-sql-server-native-client?toc=%2fsql%2frelational-databases%2fnative-client%2fapplications%2ftoc.json +redirect_url: /sql/relational-databases/native-client/applications/building-applications-with-sql-server-native-client --- diff --git a/docs/relational-databases/native-client/features/index.md b/docs/relational-databases/native-client/features/index.md index a5829717ff9..b0049284dd8 100644 --- a/docs/relational-databases/native-client/features/index.md +++ b/docs/relational-databases/native-client/features/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client/features/sql-server-native-client-features?toc=%2fsql%2frelational-databases%2fnative-client%2ffeatures%2ftoc.json +redirect_url: /sql/relational-databases/native-client/features/sql-server-native-client-features --- diff --git a/docs/relational-databases/native-client/index.md b/docs/relational-databases/native-client/index.md index 147ec1df608..7081fc94919 100644 --- a/docs/relational-databases/native-client/index.md +++ b/docs/relational-databases/native-client/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client/sql-server-native-client-programming?toc=%2fsql%2frelational-databases%2fnative-client%2ftoc.json +redirect_url: /sql/relational-databases/native-client/sql-server-native-client-programming --- diff --git a/docs/relational-databases/native-client/odbc/index.md b/docs/relational-databases/native-client/odbc/index.md index 72cd7f1d66c..964f0c602a9 100644 --- a/docs/relational-databases/native-client/odbc/index.md +++ b/docs/relational-databases/native-client/odbc/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client/odbc/sql-server-native-client-odbc?toc=%2fsql%2frelational-databases%2fnative-client%2fodbc%2ftoc.json +redirect_url: /sql/relational-databases/native-client/odbc/sql-server-native-client-odbc --- diff --git a/docs/relational-databases/native-client/ole-db/index.md b/docs/relational-databases/native-client/ole-db/index.md index 4e433acb7af..9bbe0427a47 100644 --- a/docs/relational-databases/native-client/ole-db/index.md +++ b/docs/relational-databases/native-client/ole-db/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/native-client/ole-db/sql-server-native-client-ole-db?toc=%2fsql%2frelational-databases%2fnative-client%2fole-db%2ftoc.json +redirect_url: /sql/relational-databases/native-client/ole-db/sql-server-native-client-ole-db --- diff --git a/docs/relational-databases/replication/concepts/index.md b/docs/relational-databases/replication/concepts/index.md index 7c8d9c12fce..3981b7b98f3 100644 --- a/docs/relational-databases/replication/concepts/index.md +++ b/docs/relational-databases/replication/concepts/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/replication/concepts/replication-developer-documentation?toc=%2fsql%2frelational-databases%2freplication%2fconcepts%2ftoc.json +redirect_url: /sql/relational-databases/replication/concepts/replication-developer-documentation --- diff --git a/docs/relational-databases/server-management-objects-smo/create-program/index.md b/docs/relational-databases/server-management-objects-smo/create-program/index.md index 60fd734659d..075359660f3 100644 --- a/docs/relational-databases/server-management-objects-smo/create-program/index.md +++ b/docs/relational-databases/server-management-objects-smo/create-program/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/server-management-objects-smo/create-program/calling-methods?toc=%2fsql%2frelational-databases%2fserver-management-objects-smo%2fcreate-program%2ftoc.json +redirect_url: /sql/relational-databases/server-management-objects-smo/create-program/calling-methods --- diff --git a/docs/relational-databases/server-management-objects-smo/index.md b/docs/relational-databases/server-management-objects-smo/index.md index 63fbb4c16e2..f088e419e72 100644 --- a/docs/relational-databases/server-management-objects-smo/index.md +++ b/docs/relational-databases/server-management-objects-smo/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/server-management-objects-smo/sql-server-management-objects-smo-programming-guide?toc=%2fsql%2frelational-databases%2fserver-management-objects-smo%2ftoc.json +redirect_url: /sql/relational-databases/server-management-objects-smo/overview-smo --- diff --git a/docs/relational-databases/server-management-objects-smo/tasks/index.md b/docs/relational-databases/server-management-objects-smo/tasks/index.md index d8a1b90fe1e..2c67d27468b 100644 --- a/docs/relational-databases/server-management-objects-smo/tasks/index.md +++ b/docs/relational-databases/server-management-objects-smo/tasks/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/server-management-objects-smo/tasks/backing-up-and-restoring-databases-and-transaction-logs?toc=%2fsql%2frelational-databases%2fserver-management-objects-smo%2ftasks%2ftoc.json +redirect_url: /sql/relational-databases/server-management-objects-smo/tasks/backing-up-and-restoring-databases-and-transaction-logs --- diff --git a/docs/relational-databases/sqlxml-annotated-xsd-schemas-using/index.md b/docs/relational-databases/sqlxml-annotated-xsd-schemas-using/index.md index f7b46da0b72..6b458c9bd1a 100644 --- a/docs/relational-databases/sqlxml-annotated-xsd-schemas-using/index.md +++ b/docs/relational-databases/sqlxml-annotated-xsd-schemas-using/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-using/using-annotations-in-xsd-schemas-sqlxml-4-0?toc=%2fsql%2frelational-databases%2fsqlxml-annotated-xsd-schemas-using%2ftoc.json +redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-using/using-annotations-in-xsd-schemas-sqlxml-4-0 --- diff --git a/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/bulk-load-xml/index.md b/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/bulk-load-xml/index.md index a93959a5398..0165e004351 100644 --- a/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/bulk-load-xml/index.md +++ b/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/bulk-load-xml/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/bulk-load-xml/performing-bulk-load-of-xml-data-sqlxml-4-0?toc=%2fsql%2frelational-databases%2fsqlxml-annotated-xsd-schemas-xpath-queries%2fbulk-load-xml%2ftoc.json +redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/bulk-load-xml/performing-bulk-load-of-xml-data-sqlxml-4-0 --- diff --git a/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/caching-templates-xml-schemas/index.md b/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/caching-templates-xml-schemas/index.md index c70a16803ae..d4a6d28ee90 100644 --- a/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/caching-templates-xml-schemas/index.md +++ b/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/caching-templates-xml-schemas/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/caching-templates-xml-schemas/caching-templates-xsl-and-schemas-sqlxml-4-0?toc=%2fsql%2frelational-databases%2fsqlxml-annotated-xsd-schemas-xpath-queries%2fcaching-templates-xml-schemas%2ftoc.json +redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/caching-templates-xml-schemas/caching-templates-xsl-and-schemas-sqlxml-4-0 --- diff --git a/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/data-access-components-provider/index.md b/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/data-access-components-provider/index.md index 509b5b86aeb..67853161b16 100644 --- a/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/data-access-components-provider/index.md +++ b/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/data-access-components-provider/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/data-access-components-provider/sqlxml-4-0-data-access-components-sqlxmloledb-provider?toc=%2fsql%2frelational-databases%2fsqlxml-annotated-xsd-schemas-xpath-queries%2fdata-access-components-provider%2ftoc.json +redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/data-access-components-provider/sqlxml-4-0-data-access-components-sqlxmloledb-provider --- diff --git a/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/diffgram/index.md b/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/diffgram/index.md index 9e9fdaf4acb..aeb4e54933d 100644 --- a/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/diffgram/index.md +++ b/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/diffgram/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/diffgram/sqlxml-4-0-net-framework-support-using-diffgrams-to-modify-data?toc=%2fsql%2frelational-databases%2fsqlxml-annotated-xsd-schemas-xpath-queries%2fdiffgram%2ftoc.json +redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/diffgram/sqlxml-4-0-net-framework-support-using-diffgrams-to-modify-data --- diff --git a/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/index.md b/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/index.md index 381fc196ebb..3b5cb1ab0e3 100644 --- a/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/index.md +++ b/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/using-xpath-queries-in-sqlxml-4-0?toc=%2fsql%2frelational-databases%2fsqlxml-annotated-xsd-schemas-xpath-queries%2ftoc.json +redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/using-xpath-queries-in-sqlxml-4-0 --- diff --git a/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/location-path/index.md b/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/location-path/index.md index 5f1fe8551a9..cb9fdf86a1d 100644 --- a/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/location-path/index.md +++ b/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/location-path/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/location-path/specifying-a-location-path-sqlxml-4-0?toc=%2fsql%2frelational-databases%2fsqlxml-annotated-xsd-schemas-xpath-queries%2flocation-path%2ftoc.json +redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/location-path/specifying-a-location-path-sqlxml-4-0 --- diff --git a/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/net-framework-classes/index.md b/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/net-framework-classes/index.md index 8215abdcfd8..1107c2c9acc 100644 --- a/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/net-framework-classes/index.md +++ b/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/net-framework-classes/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/net-framework-classes/sqlxml-4-0-net-framework-support-managed-classes?toc=%2fsql%2frelational-databases%2fsqlxml-annotated-xsd-schemas-xpath-queries%2fnet-framework-classes%2ftoc.json +redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/net-framework-classes/sqlxml-4-0-net-framework-support-managed-classes --- diff --git a/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/samples/index.md b/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/samples/index.md index 9d931759cb5..210d8945f2f 100644 --- a/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/samples/index.md +++ b/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/samples/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/samples/sample-xpath-queries-sqlxml-4-0?toc=%2fsql%2frelational-databases%2fsqlxml-annotated-xsd-schemas-xpath-queries%2fsamples%2ftoc.json +redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/samples/sample-xpath-queries-sqlxml-4-0 --- diff --git a/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/security/index.md b/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/security/index.md index 4e37bbaa13b..a5c6cc76405 100644 --- a/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/security/index.md +++ b/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/security/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/security/sqlxml-4-0-security-considerations?toc=%2fsql%2frelational-databases%2fsqlxml-annotated-xsd-schemas-xpath-queries%2fsecurity%2ftoc.json +redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/security/sqlxml-4-0-security-considerations --- diff --git a/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/updategrams/index.md b/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/updategrams/index.md index e4e9834212b..56778b79108 100644 --- a/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/updategrams/index.md +++ b/docs/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/updategrams/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/updategrams/using-updategrams-to-modify-data-in-sqlxml-4-0?toc=%2fsql%2frelational-databases%2fsqlxml-annotated-xsd-schemas-xpath-queries%2fupdategrams%2ftoc.json +redirect_url: /sql/relational-databases/sqlxml-annotated-xsd-schemas-xpath-queries/updategrams/using-updategrams-to-modify-data-in-sqlxml-4-0 --- diff --git a/docs/relational-databases/sqlxml/annotated-xsd-schemas/index.md b/docs/relational-databases/sqlxml/annotated-xsd-schemas/index.md index 4c3aa8db369..a6474a95c24 100644 --- a/docs/relational-databases/sqlxml/annotated-xsd-schemas/index.md +++ b/docs/relational-databases/sqlxml/annotated-xsd-schemas/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/sqlxml/annotated-xsd-schemas/annotated-xsd-schemas-in-sqlxml-4-0?toc=%2fsql%2frelational-databases%2fsqlxml%2fannotated-xsd-schemas%2ftoc.json +redirect_url: /sql/relational-databases/sqlxml/annotated-xsd-schemas/annotated-xsd-schemas-in-sqlxml-4-0 --- diff --git a/docs/relational-databases/sqlxml/formatting/index.md b/docs/relational-databases/sqlxml/formatting/index.md index 6a58a24457c..77880ddbe73 100644 --- a/docs/relational-databases/sqlxml/formatting/index.md +++ b/docs/relational-databases/sqlxml/formatting/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/sqlxml/formatting/client-side-and-server-side-formatting-sqlxml-4-0?toc=%2fsql%2frelational-databases%2fsqlxml%2fformatting%2ftoc.json +redirect_url: /sql/relational-databases/sqlxml/formatting/client-side-and-server-side-formatting-sqlxml-4-0 --- diff --git a/docs/relational-databases/sqlxml/index.md b/docs/relational-databases/sqlxml/index.md index 8ae920e91c7..c5f92aec873 100644 --- a/docs/relational-databases/sqlxml/index.md +++ b/docs/relational-databases/sqlxml/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/sqlxml/requirements-for-running-sqlxml-examples?toc=%2fsql%2frelational-databases%2fsqlxml%2ftoc.json +redirect_url: /sql/relational-databases/sqlxml/requirements-for-running-sqlxml-examples --- diff --git a/docs/relational-databases/wmi-provider-configuration-classes/clientnetlibinfo-class/index.md b/docs/relational-databases/wmi-provider-configuration-classes/clientnetlibinfo-class/index.md index eb9fe7da42b..f43d70a4eb5 100644 --- a/docs/relational-databases/wmi-provider-configuration-classes/clientnetlibinfo-class/index.md +++ b/docs/relational-databases/wmi-provider-configuration-classes/clientnetlibinfo-class/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/clientnetlibinfo-class/clientnetlibinfo-class?toc=%2fsql%2frelational-databases%2fwmi-provider-configuration-classes%2fclientnetlibinfo-class%2ftoc.json +redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/clientnetlibinfo-class/clientnetlibinfo-class --- diff --git a/docs/relational-databases/wmi-provider-configuration-classes/clientnetworkprotocol-class/index.md b/docs/relational-databases/wmi-provider-configuration-classes/clientnetworkprotocol-class/index.md index e526fc3dac1..39d5bbb5217 100644 --- a/docs/relational-databases/wmi-provider-configuration-classes/clientnetworkprotocol-class/index.md +++ b/docs/relational-databases/wmi-provider-configuration-classes/clientnetworkprotocol-class/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/clientnetworkprotocol-class/clientnetworkprotocol-class?toc=%2fsql%2frelational-databases%2fwmi-provider-configuration-classes%2fclientnetworkprotocol-class%2ftoc.json +redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/clientnetworkprotocol-class/clientnetworkprotocol-class --- diff --git a/docs/relational-databases/wmi-provider-configuration-classes/clientnetworkprotocolproperty-class/index.md b/docs/relational-databases/wmi-provider-configuration-classes/clientnetworkprotocolproperty-class/index.md index 65e96affea1..5da1ba8202c 100644 --- a/docs/relational-databases/wmi-provider-configuration-classes/clientnetworkprotocolproperty-class/index.md +++ b/docs/relational-databases/wmi-provider-configuration-classes/clientnetworkprotocolproperty-class/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/clientnetworkprotocolproperty-class/clientnetworkprotocolproperty-class?toc=%2fsql%2frelational-databases%2fwmi-provider-configuration-classes%2fclientnetworkprotocolproperty-class%2ftoc.json +redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/clientnetworkprotocolproperty-class/clientnetworkprotocolproperty-class --- diff --git a/docs/relational-databases/wmi-provider-configuration-classes/clientsettingsgeneralflag-class/index.md b/docs/relational-databases/wmi-provider-configuration-classes/clientsettingsgeneralflag-class/index.md index 3fbab01b28d..6ceff4619df 100644 --- a/docs/relational-databases/wmi-provider-configuration-classes/clientsettingsgeneralflag-class/index.md +++ b/docs/relational-databases/wmi-provider-configuration-classes/clientsettingsgeneralflag-class/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/clientsettingsgeneralflag-class/clientsettingsgeneralflag-class?toc=%2fsql%2frelational-databases%2fwmi-provider-configuration-classes%2fclientsettingsgeneralflag-class%2ftoc.json +redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/clientsettingsgeneralflag-class/clientsettingsgeneralflag-class --- diff --git a/docs/relational-databases/wmi-provider-configuration-classes/index.md b/docs/relational-databases/wmi-provider-configuration-classes/index.md index 82bb34aac89..f78c88a0004 100644 --- a/docs/relational-databases/wmi-provider-configuration-classes/index.md +++ b/docs/relational-databases/wmi-provider-configuration-classes/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/wmi-provider-for-configuration-management-classes?toc=%2fsql%2frelational-databases%2fwmi-provider-configuration-classes%2ftoc.json +redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/wmi-provider-for-configuration-management-classes --- diff --git a/docs/relational-databases/wmi-provider-configuration-classes/securitycertificate-class/index.md b/docs/relational-databases/wmi-provider-configuration-classes/securitycertificate-class/index.md index ed82f9dcb8f..04f36a98337 100644 --- a/docs/relational-databases/wmi-provider-configuration-classes/securitycertificate-class/index.md +++ b/docs/relational-databases/wmi-provider-configuration-classes/securitycertificate-class/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/securitycertificate-class/context-property-securitycertificate-class?toc=%2fsql%2frelational-databases%2fwmi-provider-configuration-classes%2fsecuritycertificate-class%2ftoc.json +redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/securitycertificate-class/context-property-securitycertificate-class --- diff --git a/docs/relational-databases/wmi-provider-configuration-classes/servernetworkprotocol-class/index.md b/docs/relational-databases/wmi-provider-configuration-classes/servernetworkprotocol-class/index.md index 4ec34728299..b79a37c46c2 100644 --- a/docs/relational-databases/wmi-provider-configuration-classes/servernetworkprotocol-class/index.md +++ b/docs/relational-databases/wmi-provider-configuration-classes/servernetworkprotocol-class/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/servernetworkprotocol-class/enabled-property-servernetworkprotocol-class?toc=%2fsql%2frelational-databases%2fwmi-provider-configuration-classes%2fservernetworkprotocol-class%2ftoc.json +redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/servernetworkprotocol-class/enabled-property-servernetworkprotocol-class --- diff --git a/docs/relational-databases/wmi-provider-configuration-classes/servernetworkprotocolipaddress-class/index.md b/docs/relational-databases/wmi-provider-configuration-classes/servernetworkprotocolipaddress-class/index.md index 972d174f4b0..e3745cb7e6c 100644 --- a/docs/relational-databases/wmi-provider-configuration-classes/servernetworkprotocolipaddress-class/index.md +++ b/docs/relational-databases/wmi-provider-configuration-classes/servernetworkprotocolipaddress-class/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/servernetworkprotocolipaddress-class/enabled-property-servernetworkprotocolipaddress-class?toc=%2fsql%2frelational-databases%2fwmi-provider-configuration-classes%2fservernetworkprotocolipaddress-class%2ftoc.json +redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/servernetworkprotocolipaddress-class/enabled-property-servernetworkprotocolipaddress-class --- diff --git a/docs/relational-databases/wmi-provider-configuration-classes/servernetworkprotocolproperty-class/index.md b/docs/relational-databases/wmi-provider-configuration-classes/servernetworkprotocolproperty-class/index.md index a2dd1a54e1c..e30a7dc569c 100644 --- a/docs/relational-databases/wmi-provider-configuration-classes/servernetworkprotocolproperty-class/index.md +++ b/docs/relational-databases/wmi-provider-configuration-classes/servernetworkprotocolproperty-class/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/servernetworkprotocolproperty-class/instancename-property-servernetworkprotocolproperty-class?toc=%2fsql%2frelational-databases%2fwmi-provider-configuration-classes%2fservernetworkprotocolproperty-class%2ftoc.json +redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/servernetworkprotocolproperty-class/instancename-property-servernetworkprotocolproperty-class --- diff --git a/docs/relational-databases/wmi-provider-configuration-classes/serversettings-class/index.md b/docs/relational-databases/wmi-provider-configuration-classes/serversettings-class/index.md index e4e0f1e7256..36f3f87f1c9 100644 --- a/docs/relational-databases/wmi-provider-configuration-classes/serversettings-class/index.md +++ b/docs/relational-databases/wmi-provider-configuration-classes/serversettings-class/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/serversettings-class/generalflags-property-serversettings-class?toc=%2fsql%2frelational-databases%2fwmi-provider-configuration-classes%2fserversettings-class%2ftoc.json +redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/serversettings-class/generalflags-property-serversettings-class --- diff --git a/docs/relational-databases/wmi-provider-configuration-classes/serversettingsgeneralflag-class/index.md b/docs/relational-databases/wmi-provider-configuration-classes/serversettingsgeneralflag-class/index.md index 23623ee20d1..a6668ce6799 100644 --- a/docs/relational-databases/wmi-provider-configuration-classes/serversettingsgeneralflag-class/index.md +++ b/docs/relational-databases/wmi-provider-configuration-classes/serversettingsgeneralflag-class/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/serversettingsgeneralflag-class/flagname-property-serversettingsgeneralflag-class?toc=%2fsql%2frelational-databases%2fwmi-provider-configuration-classes%2fserversettingsgeneralflag-class%2ftoc.json +redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/serversettingsgeneralflag-class/flagname-property-serversettingsgeneralflag-class --- diff --git a/docs/relational-databases/wmi-provider-configuration-classes/sinstance-class/index.md b/docs/relational-databases/wmi-provider-configuration-classes/sinstance-class/index.md index f0c0fc18d76..ed42988dd9c 100644 --- a/docs/relational-databases/wmi-provider-configuration-classes/sinstance-class/index.md +++ b/docs/relational-databases/wmi-provider-configuration-classes/sinstance-class/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/sinstance-class/sinstance-class?toc=%2fsql%2frelational-databases%2fwmi-provider-configuration-classes%2fsinstance-class%2ftoc.json +redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/sinstance-class/sinstance-class --- diff --git a/docs/relational-databases/wmi-provider-configuration-classes/sqlserveralias-class/index.md b/docs/relational-databases/wmi-provider-configuration-classes/sqlserveralias-class/index.md index 5c53c79fbf3..308b32d64d5 100644 --- a/docs/relational-databases/wmi-provider-configuration-classes/sqlserveralias-class/index.md +++ b/docs/relational-databases/wmi-provider-configuration-classes/sqlserveralias-class/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/sqlserveralias-class/aliasname-property-sqlserveralias-class?toc=%2fsql%2frelational-databases%2fwmi-provider-configuration-classes%2fsqlserveralias-class%2ftoc.json +redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/sqlserveralias-class/aliasname-property-sqlserveralias-class --- diff --git a/docs/relational-databases/wmi-provider-configuration-classes/sqlservice-class/index.md b/docs/relational-databases/wmi-provider-configuration-classes/sqlservice-class/index.md index a9bfe4f8813..f6f65521c4e 100644 --- a/docs/relational-databases/wmi-provider-configuration-classes/sqlservice-class/index.md +++ b/docs/relational-databases/wmi-provider-configuration-classes/sqlservice-class/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/sqlservice-class/acceptpause-property-sqlservice-class?toc=%2fsql%2frelational-databases%2fwmi-provider-configuration-classes%2fsqlservice-class%2ftoc.json +redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/sqlservice-class/acceptpause-property-sqlservice-class --- diff --git a/docs/relational-databases/wmi-provider-configuration-classes/sqlserviceadvancedproperty-class/index.md b/docs/relational-databases/wmi-provider-configuration-classes/sqlserviceadvancedproperty-class/index.md index 932ad074ef9..6bf1e122f15 100644 --- a/docs/relational-databases/wmi-provider-configuration-classes/sqlserviceadvancedproperty-class/index.md +++ b/docs/relational-databases/wmi-provider-configuration-classes/sqlserviceadvancedproperty-class/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/sqlserviceadvancedproperty-class/isreadonly-property-sqlserviceadvancedproperty-class?toc=%2fsql%2frelational-databases%2fwmi-provider-configuration-classes%2fsqlserviceadvancedproperty-class%2ftoc.json +redirect_url: /sql/relational-databases/wmi-provider-configuration-classes/sqlserviceadvancedproperty-class/isreadonly-property-sqlserviceadvancedproperty-class --- diff --git a/docs/relational-databases/wmi-provider-configuration/index.md b/docs/relational-databases/wmi-provider-configuration/index.md index f1b5d68345c..8fe4a480e1e 100644 --- a/docs/relational-databases/wmi-provider-configuration/index.md +++ b/docs/relational-databases/wmi-provider-configuration/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/wmi-provider-configuration/wmi-provider-for-configuration-management?toc=%2fsql%2frelational-databases%2fwmi-provider-configuration%2ftoc.json +redirect_url: /sql/relational-databases/wmi-provider-configuration/wmi-provider-for-configuration-management --- diff --git a/docs/relational-databases/wmi-provider-server-events/index.md b/docs/relational-databases/wmi-provider-server-events/index.md index 8a15e79be66..04bab2859b8 100644 --- a/docs/relational-databases/wmi-provider-server-events/index.md +++ b/docs/relational-databases/wmi-provider-server-events/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/relational-databases/wmi-provider-server-events/wmi-provider-for-server-events-concepts?toc=%2fsql%2frelational-databases%2fwmi-provider-server-events%2ftoc.json +redirect_url: /sql/relational-databases/wmi-provider-server-events/wmi-provider-for-server-events-concepts --- diff --git a/docs/reporting-services/custom-assemblies/index.md b/docs/reporting-services/custom-assemblies/index.md index 833d41ffce8..73e08f2acd7 100644 --- a/docs/reporting-services/custom-assemblies/index.md +++ b/docs/reporting-services/custom-assemblies/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/reporting-services/custom-assemblies/accessing-custom-assemblies-through-expressions?toc=%2fsql%2freporting-services%2fcustom-assemblies%2ftoc.json +redirect_url: /sql/reporting-services/custom-assemblies/accessing-custom-assemblies-through-expressions --- diff --git a/docs/reporting-services/custom-report-items/index.md b/docs/reporting-services/custom-report-items/index.md index 76b719b69a2..35adc51096c 100644 --- a/docs/reporting-services/custom-report-items/index.md +++ b/docs/reporting-services/custom-report-items/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/reporting-services/custom-report-items/creating-a-custom-report-item-design-time-component?toc=%2fsql%2freporting-services%2fcustom-report-items%2ftoc.json +redirect_url: /sql/reporting-services/custom-report-items/creating-a-custom-report-item-design-time-component --- diff --git a/docs/reporting-services/extensions/data-processing/index.md b/docs/reporting-services/extensions/data-processing/index.md index 708df30e0fb..fbecbd5b0b3 100644 --- a/docs/reporting-services/extensions/data-processing/index.md +++ b/docs/reporting-services/extensions/data-processing/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/reporting-services/extensions/data-processing/creating-a-data-processing-extension-library?toc=%2fsql%2freporting-services%2fextensions%2fdata-processing%2ftoc.json +redirect_url: /sql/reporting-services/extensions/data-processing/creating-a-data-processing-extension-library --- diff --git a/docs/reporting-services/extensions/delivery-extension/index.md b/docs/reporting-services/extensions/delivery-extension/index.md index b5ff95ec6a7..561d421f005 100644 --- a/docs/reporting-services/extensions/delivery-extension/index.md +++ b/docs/reporting-services/extensions/delivery-extension/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/reporting-services/extensions/delivery-extension/creating-a-delivery-extension-library?toc=%2fsql%2freporting-services%2fextensions%2fdelivery-extension%2ftoc.json +redirect_url: /sql/reporting-services/extensions/delivery-extension/creating-a-delivery-extension-library --- diff --git a/docs/reporting-services/extensions/index.md b/docs/reporting-services/extensions/index.md index f3bac4f27e2..5e409431048 100644 --- a/docs/reporting-services/extensions/index.md +++ b/docs/reporting-services/extensions/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/reporting-services/extensions/reporting-services-extension-library?toc=%2fsql%2freporting-services%2fextensions%2ftoc.json +redirect_url: /sql/reporting-services/extensions/reporting-services-extension-library --- diff --git a/docs/reporting-services/extensions/rendering-extension/index.md b/docs/reporting-services/extensions/rendering-extension/index.md index 03ffcb92931..a196a5c8e23 100644 --- a/docs/reporting-services/extensions/rendering-extension/index.md +++ b/docs/reporting-services/extensions/rendering-extension/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/reporting-services/extensions/rendering-extension/deploying-a-rendering-extension?toc=%2fsql%2freporting-services%2fextensions%2frendering-extension%2ftoc.json +redirect_url: /sql/reporting-services/extensions/rendering-extension/deploying-a-rendering-extension --- diff --git a/docs/reporting-services/extensions/secure-development/index.md b/docs/reporting-services/extensions/secure-development/index.md index d68a1981b51..00f609af572 100644 --- a/docs/reporting-services/extensions/secure-development/index.md +++ b/docs/reporting-services/extensions/secure-development/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/reporting-services/extensions/secure-development/code-access-security-in-reporting-services?toc=%2fsql%2freporting-services%2fextensions%2fsecure-development%2ftoc.json +redirect_url: /sql/reporting-services/extensions/secure-development/code-access-security-in-reporting-services --- diff --git a/docs/reporting-services/extensions/security-extension/index.md b/docs/reporting-services/extensions/security-extension/index.md index 2ef3727c815..d69371edbcc 100644 --- a/docs/reporting-services/extensions/security-extension/index.md +++ b/docs/reporting-services/extensions/security-extension/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/reporting-services/extensions/security-extension/authentication-in-reporting-services?toc=%2fsql%2freporting-services%2fextensions%2fsecurity-extension%2ftoc.json +redirect_url: /sql/reporting-services/extensions/security-extension/authentication-in-reporting-services --- diff --git a/docs/reporting-services/report-server-web-service-net-framework-exception-handling/best-practices/index.md b/docs/reporting-services/report-server-web-service-net-framework-exception-handling/best-practices/index.md index b87e7a4e72c..820a834d9e9 100644 --- a/docs/reporting-services/report-server-web-service-net-framework-exception-handling/best-practices/index.md +++ b/docs/reporting-services/report-server-web-service-net-framework-exception-handling/best-practices/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/reporting-services/report-server-web-service-net-framework-exception-handling/best-practices/best-practices-for-reporting-services-exception-handling?toc=%2fsql%2freporting-services%2freport-server-web-service-net-framework-exception-handling%2fbest-practices%2ftoc.json +redirect_url: /sql/reporting-services/report-server-web-service-net-framework-exception-handling/best-practices/best-practices-for-reporting-services-exception-handling --- diff --git a/docs/reporting-services/report-server-web-service-net-framework-exception-handling/index.md b/docs/reporting-services/report-server-web-service-net-framework-exception-handling/index.md index 02570073a80..5488913c0ce 100644 --- a/docs/reporting-services/report-server-web-service-net-framework-exception-handling/index.md +++ b/docs/reporting-services/report-server-web-service-net-framework-exception-handling/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/reporting-services/report-server-web-service-net-framework-exception-handling/introducing-exception-handling-in-reporting-services?toc=%2fsql%2freporting-services%2freport-server-web-service-net-framework-exception-handling%2ftoc.json +redirect_url: /sql/reporting-services/report-server-web-service-net-framework-exception-handling/introducing-exception-handling-in-reporting-services --- diff --git a/docs/reporting-services/report-server-web-service-net-framework-exception-handling/soapexception-class/index.md b/docs/reporting-services/report-server-web-service-net-framework-exception-handling/soapexception-class/index.md index f72d031fa21..4e3c7944962 100644 --- a/docs/reporting-services/report-server-web-service-net-framework-exception-handling/soapexception-class/index.md +++ b/docs/reporting-services/report-server-web-service-net-framework-exception-handling/soapexception-class/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/reporting-services/report-server-web-service-net-framework-exception-handling/soapexception-class/reporting-services-soapexception-class?toc=%2fsql%2freporting-services%2freport-server-web-service-net-framework-exception-handling%2fsoapexception-class%2ftoc.json +redirect_url: /sql/reporting-services/report-server-web-service-net-framework-exception-handling/soapexception-class/reporting-services-soapexception-class --- diff --git a/docs/reporting-services/report-server-web-service-net-framework-soap-headers/index.md b/docs/reporting-services/report-server-web-service-net-framework-soap-headers/index.md index e4466cfab56..cc1f5dac978 100644 --- a/docs/reporting-services/report-server-web-service-net-framework-soap-headers/index.md +++ b/docs/reporting-services/report-server-web-service-net-framework-soap-headers/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/reporting-services/report-server-web-service-net-framework-soap-headers/using-reporting-services-soap-headers?toc=%2fsql%2freporting-services%2freport-server-web-service-net-framework-soap-headers%2ftoc.json +redirect_url: /sql/reporting-services/report-server-web-service-net-framework-soap-headers/using-reporting-services-soap-headers --- diff --git a/docs/reporting-services/report-server-web-service/index.md b/docs/reporting-services/report-server-web-service/index.md index a3f5bf87a06..02c15b7418d 100644 --- a/docs/reporting-services/report-server-web-service/index.md +++ b/docs/reporting-services/report-server-web-service/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/reporting-services/report-server-web-service/report-server-web-service?toc=%2fsql%2freporting-services%2freport-server-web-service%2ftoc.json +redirect_url: /sql/reporting-services/report-server-web-service/report-server-web-service --- diff --git a/docs/reporting-services/report-server-web-service/methods/index.md b/docs/reporting-services/report-server-web-service/methods/index.md index 39a9656988d..117bac72dc4 100644 --- a/docs/reporting-services/report-server-web-service/methods/index.md +++ b/docs/reporting-services/report-server-web-service/methods/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/reporting-services/report-server-web-service/methods/report-server-web-service-methods?toc=%2fsql%2freporting-services%2freport-server-web-service%2fmethods%2ftoc.json +redirect_url: /sql/reporting-services/report-server-web-service/methods/report-server-web-service-methods --- diff --git a/docs/reporting-services/report-server-web-service/net-framework/index.md b/docs/reporting-services/report-server-web-service/net-framework/index.md index 0e66d0eb764..8d32606b043 100644 --- a/docs/reporting-services/report-server-web-service/net-framework/index.md +++ b/docs/reporting-services/report-server-web-service/net-framework/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/reporting-services/report-server-web-service/net-framework/building-applications-using-the-web-service-and-the-net-framework?toc=%2fsql%2freporting-services%2freport-server-web-service%2fnet-framework%2ftoc.json +redirect_url: /sql/reporting-services/report-server-web-service/net-framework/building-applications-using-the-web-service-and-the-net-framework --- diff --git a/docs/ssdt/index.md b/docs/ssdt/index.md index 52539dbf0d5..aa05d8946bc 100644 --- a/docs/ssdt/index.md +++ b/docs/ssdt/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/ssdt/download-sql-server-data-tools-ssdt?toc=%2fsql%2fssdt%2ftoc.json +redirect_url: /sql/ssdt/download-sql-server-data-tools-ssdt --- diff --git a/docs/ssma/index.md b/docs/ssma/index.md index 779bf34ff8b..c5c4112776d 100644 --- a/docs/ssma/index.md +++ b/docs/ssma/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/ssma/sql-server-migration-assistant?toc=%2fsql%2fssma%2ftoc.json +redirect_url: /sql/ssma/sql-server-migration-assistant --- diff --git a/docs/ssms/index.md b/docs/ssms/index.md index 7e2b109144b..0a2f0b28ba8 100644 --- a/docs/ssms/index.md +++ b/docs/ssms/index.md @@ -1,3 +1,3 @@ --- -redirect_url: /sql/ssms/download-sql-server-management-studio-ssms?toc=%2fsql%2fssms%2ftoc.json +redirect_url: /sql/ssms/download-sql-server-management-studio-ssms --- diff --git a/docs/tools/index.md b/docs/tools/index.md index aa43f85a5ce..c3f134de516 100644 --- a/docs/tools/index.md +++ b/docs/tools/index.md @@ -1,3 +1,3 @@ ---- -redirect_url: /sql/tools/download-sql-server-management-studio-ssms ---- +--- +redirect_url: /sql/tools/overview-sql-tools +--- From e2c5b80cd68c2a0d11cd366a9558992da5de32a9 Mon Sep 17 00:00:00 2001 From: ulvii Date: Fri, 14 Jul 2017 11:11:10 -0700 Subject: [PATCH 293/336] Update installation-tutorial-linux-mac.md --- docs/connect/php/installation-tutorial-linux-mac.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/connect/php/installation-tutorial-linux-mac.md b/docs/connect/php/installation-tutorial-linux-mac.md index 69a9c51d7c7..56c9c880259 100644 --- a/docs/connect/php/installation-tutorial-linux-mac.md +++ b/docs/connect/php/installation-tutorial-linux-mac.md @@ -9,10 +9,10 @@ author: "ulvii" ms.author: "v-ulibra" --- # PHP Linux and Mac Drivers Installation Tutorial -The following instructions assume a clean environment and show how to install PHP 7.x, Microsoft ODBC driver, apache, and Microsoft PHP drivers on Ubuntu 15, 16, RedHat 7, Debian 8, and Mac OS X. +The following instructions assume a clean environment and show how to install PHP 7.x, Microsoft ODBC driver, apache, and Microsoft PHP drivers on Ubuntu 15.10, 16.04, RedHat 7, Debian 8, and Mac OS X. ## Installing the drivers on Ubuntu 15.10 for PHP 7.0 -### Step 1. Install PHP Note that there is no PHP 7.1 package available for Ubuntu 15.10. +### Step 1. Install PHP ``` sudo su sh -c 'echo "deb http://packages.dotdeb.org jessie all \ndeb-src http://packages.dotdeb.org jessie all" >> /etc/apt/sources.list' From 196957fd71581e78c064a8584f619b265dce7361 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Fri, 14 Jul 2017 14:14:25 -0400 Subject: [PATCH 294/336] Updated resources for support --- docs/linux/TOC.md | 1 + docs/linux/sql-server-linux-overview.md | 12 +++++++----- docs/linux/sql-server-linux-troubleshooting-guide.md | 8 +++++++- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index d9c240d66cb..460c397c8d3 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -79,6 +79,7 @@ # Resources ## [Troubleshoot](sql-server-linux-troubleshooting-guide.md) ## [SQL Server Documentation](../sql-server/sql-server-technical-documentation.md) +## [DBA Stack Exchange](https://dba.stackexchange.com/questions/tagged/sql-server) ## [Stack Overflow](http://stackoverflow.com/questions/tagged/sql-server) ## [MSDN Forums](https://social.msdn.microsoft.com/Forums/en-US/home?category=sqlserver) ## [Microsoft Connect](https://connect.microsoft.com/SQLServer/Feedback) diff --git a/docs/linux/sql-server-linux-overview.md b/docs/linux/sql-server-linux-overview.md index d919679db1f..f3ef208ab9a 100644 --- a/docs/linux/sql-server-linux-overview.md +++ b/docs/linux/sql-server-linux-overview.md @@ -57,8 +57,10 @@ SQL Server 2017 has the same underlying database engine on all supported platfor If you are already familiar with SQL Server, review the [Release notes](sql-server-linux-release-notes.md) for general guidelines and known issues for this release. Then look at [what's new for SQL Server on Linux](sql-server-linux-whats-new.md) as well as [what's new for SQL Server 2017 overall](../sql-server/what-s-new-in-sql-server-2017.md). -## ![info_tip](./media/general/info_tip.png) Engage with the SQL Server engineering team -- [Stack Overflow (tag sql-server) - ask technical questions](http://stackoverflow.com/questions/tagged/sql-server) -- [MSDN Forums - ask technical questions](https://social.msdn.microsoft.com/Forums/en-US/home?category=sqlserver) -- [Microsoft Connect - report bugs and request features](https://connect.microsoft.com/SQLServer/Feedback) -- [Reddit - discuss SQL Server](https://www.reddit.com/r/SQLServer/) \ No newline at end of file +## ![info_tip](./media/general/info_tip.png) Engage with the SQL Server engineering team + +- [DBA Stack Exchange](https://dba.stackexchange.com/questions/tagged/sql-server): Ask database administration questions +- [Stack Overflow](http://stackoverflow.com/questions/tagged/sql-server): Ask development questions +- [MSDN Forums](https://social.msdn.microsoft.com/Forums/en-US/home?category=sqlserver): Ask technical questions +- [Microsoft Connect](https://connect.microsoft.com/SQLServer/Feedback): Report bugs and request feature +- [Reddit](https://www.reddit.com/r/SQLServer/): Discuss SQL Server \ No newline at end of file diff --git a/docs/linux/sql-server-linux-troubleshooting-guide.md b/docs/linux/sql-server-linux-troubleshooting-guide.md index e6264d1bd62..694ccb59276 100644 --- a/docs/linux/sql-server-linux-troubleshooting-guide.md +++ b/docs/linux/sql-server-linux-troubleshooting-guide.md @@ -173,4 +173,10 @@ For SQL dumps ## Support -Support is available through the community and monitored by the engineering team. For specific questions head to [Stack Overflow](http://stackoverflow.com/), discuss on [reddit.com/r/sqlserver](http://www.reddit.com/r/sqlserver), and report bugs to [connect](http://connect.microsoft.com/). +Support is available through the community and monitored by the engineering team. For specific questions, use the following resources: + +- [DBA Stack Exchange](https://dba.stackexchange.com/questions/tagged/sql-server): Ask database administration questions +- [Stack Overflow](http://stackoverflow.com/questions/tagged/sql-server): Ask development questions +- [MSDN Forums](https://social.msdn.microsoft.com/Forums/en-US/home?category=sqlserver): Ask technical questions +- [Microsoft Connect](https://connect.microsoft.com/SQLServer/Feedback): Report bugs and request feature +- [Reddit](https://www.reddit.com/r/SQLServer/): Discuss SQL Server \ No newline at end of file From 097db8a2a931379f59b7b71c2816e09ad8cc042f Mon Sep 17 00:00:00 2001 From: David Puglielli Date: Fri, 14 Jul 2017 11:24:20 -0700 Subject: [PATCH 295/336] Changes per review comments, modified existing pages --- docs/connect/php/azure-active-directory.md | 17 +++++++++-------- docs/connect/php/connecting-to-the-server.md | 13 +++++++------ docs/connect/php/connection-options.md | 18 +++++++++--------- docs/connect/php/connection-resiliency.md | 5 +++-- 4 files changed, 28 insertions(+), 25 deletions(-) diff --git a/docs/connect/php/azure-active-directory.md b/docs/connect/php/azure-active-directory.md index c8cbe9483e0..359a66d2755 100644 --- a/docs/connect/php/azure-active-directory.md +++ b/docs/connect/php/azure-active-directory.md @@ -7,20 +7,21 @@ ms.technology: ms.topic: "article" author: "david-puglielli" ms.author: "v-dapugl" +manager: "v-hakaka" --- -# Azure Active Directory +# How to: Connect Using Azure Active Directory Authentication [!INCLUDE[Driver_PHP_Download](../../includes/driver_php_download.md)] [Azure Active Directory](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-whatis) (Azure AD) is a central user ID management technology that operates as an alternative to [SQL Server authentication](../../connect/php/how-to-connect-using-sql-server-authentication.md). Azure AD allows connections to Microsoft Azure SQL Database and SQL Data Warehouse with federated identities in Azure AD using a username and password, Windows Integrated Authentication, or an Azure AD access token; the PHP drivers for SQL Server offer partial support for these features. -To use Azure AD, use the **Authentication** keyword. By default it is not set -- see the following table for details. +To use Azure AD, use the **Authentication** keyword. The values that **Authentication** can take on are explained in the following table. -|Values for **Authentication**|Description| -|-|-| -|(not set)|Authentication mode determined by other keywords (existing legacy connection options). | -| (empty string)| Connection string only. Override and unset an `Authentication` value set in the DSN.| -|`SqlPassword`|Directly authenticate to a SQL Server instance (which may be an Azure instance) using a username and password. The username and password must be passed into the connection string using the **UID** and **PWD** keywords. | -| `ActiveDirectoryPassword`|Authenticate with an Azure Active Directory identity using a username and password. The username and password must be passed into the connection string using the **UID** and **PWD** keywords. | +|Keyword|Values|Description| +|-|| +|**Authentication**|Not set (default)|Authentication mode determined by other keywords. For more information, see [Connection Options](../../connect/php/connection-options.md). | +|| (empty string)| Connection string only. Override and unset an `Authentication` value set in the DSN.| +||`SqlPassword`|Directly authenticate to a SQL Server instance (which may be an Azure instance) using a username and password. The username and password must be passed into the connection string using the **UID** and **PWD** keywords. | +||`ActiveDirectoryPassword`|Authenticate with an Azure Active Directory identity using a username and password. The username and password must be passed into the connection string using the **UID** and **PWD** keywords. | The **Authentication** keyword affects the connection security settings. If it is set in the connection string, then by default the **Encrypt** keyword is set to true, so the client will request encryption. Moreover, the server certificate will be validated irrespective of the encryption setting unless **TrustServerCertificate** is set to true. This is distinguished from the old, and less secure, login method, in which the server certificate is not validated unless encryption is specifically requested in the connection string. diff --git a/docs/connect/php/connecting-to-the-server.md b/docs/connect/php/connecting-to-the-server.md index 9284fd18e48..ce35bf53c8f 100644 --- a/docs/connect/php/connecting-to-the-server.md +++ b/docs/connect/php/connecting-to-the-server.md @@ -5,7 +5,7 @@ ms.date: "01/19/2017" ms.prod: "sql-non-specified" ms.reviewer: "" ms.suite: "" -ms.technology: +ms.technology: - "drivers" ms.tgt_pltfrm: "" ms.topic: "article" @@ -19,15 +19,16 @@ manager: "jhubbard" [!INCLUDE[Driver_PHP_Download](../../includes/driver_php_download.md)] The topics in this section describe the options and procedures for connecting to [!INCLUDE[ssNoVersion](../../includes/ssnoversion_md.md)] with the [!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]. - + The [!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)] can connect to [!INCLUDE[ssNoVersion](../../includes/ssnoversion_md.md)] by using Windows Authentication or by using SQL Server Authentication. By default, the [!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)] try to connect to the server by using Windows Authentication. - + ## In This Section - + |Topic|Description| |---------|---------------| |[How to: Connect Using Windows Authentication](../../connect/php/how-to-connect-using-windows-authentication.md)|Describes how to establish a connection by using Windows Authentication.| |[How to: Connect Using SQL Server Authentication](../../connect/php/how-to-connect-using-sql-server-authentication.md)|Describes how to establish a connection by using SQL Server Authentication.| +|[How to: Connect Using Azure Active Directory Authentication](../../connect/php/azure-active-directory.md)|Describes how to set the authentication mode and connect using Azure Active Directory identities.| |[How to: Connect on a Specified Port](../../connect/php/how-to-connect-on-a-specified-port.md)|Describes how to connect to the server on a specific port.| |[Connection Pooling](../../connect/php/connection-pooling-microsoft-drivers-for-php-for-sql-server.md)|Provides information about connection pooling in the driver.| |[How to: Disable Multiple Active Resultsets (MARS)](../../connect/php/how-to-disable-multiple-active-resultsets-mars.md)|Describes how to disable the MARS feature when making a connection.| @@ -35,8 +36,8 @@ The [!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)] can connect to [!I |[PHP Driver for SQL Server Support for LocalDB](../../connect/php/php-driver-for-sql-server-support-for-localdb.md)|Describes [!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)] support for the LocalDB feature, which was added in [!INCLUDE[ssSQL11](../../includes/sssql11_md.md)].| |[PHP Driver for SQL Server Support for High Availability, Disaster Recovery](../../connect/php/php-driver-for-sql-server-support-for-high-availability-disaster-recovery.md)|Discusses how your application can be configured to take advantage of the high-availability, disaster recovery features added in [!INCLUDE[ssSQL11](../../includes/sssql11_md.md)].| |[Connecting to Microsoft Azure SQL Database](../../connect/php/connecting-to-microsoft-azure-sql-database.md)|Discusses how to connect to an Azure SQL Database.| - +|[Connection Resiliency](../../connect/php/connection-resiliency.md)|Discusses the connection resiliency feature that reestablishes broken connections.| + ## See Also [Programming Guide for PHP SQL Driver](../../connect/php/programming-guide-for-php-sql-driver.md) [Example Application (SQLSRV Driver)](../../connect/php/example-application-sqlsrv-driver.md) - diff --git a/docs/connect/php/connection-options.md b/docs/connect/php/connection-options.md index 8be03597532..82ec3822688 100644 --- a/docs/connect/php/connection-options.md +++ b/docs/connect/php/connection-options.md @@ -5,7 +5,7 @@ ms.date: "01/19/2017" ms.prod: "sql-non-specified" ms.reviewer: "" ms.suite: "" -ms.technology: +ms.technology: - "drivers" ms.tgt_pltfrm: "" ms.topic: "article" @@ -19,16 +19,17 @@ manager: "jhubbard" [!INCLUDE[Driver_PHP_Download](../../includes/driver_php_download.md)] This topic lists the options that are permitted in the associative array (when using [sqlsrv_connect](../../connect/php/sqlsrv-connect.md) in the SQLSRV driver) or the keywords that are permitted in the data source name (dsn) (when using [PDO::__construct](../../connect/php/pdo-construct.md) in the PDO_SQLSRV driver). - + |Key|Value|Description|Default| |-------|---------|---------------|-----------| |APP|String|Specifies the application name used in tracing.|No value set.| |ApplicationIntent|String|Declares the application workload type when connecting to a server. Possible values are ReadOnly and ReadWrite.

      For more information about [!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)] support for [!INCLUDE[ssHADR](../../includes/sshadr_md.md)], see [PHP Driver for SQL Server Support for High Availability, Disaster Recovery](../../connect/php/php-driver-for-sql-server-support-for-high-availability-disaster-recovery.md).|ReadWrite| |AttachDBFileName|String|Specifies which database file the server should attach.|No value set.| +|Authentication|One of the following:

      '' (empty string)

      'SqlPassword'

      'ActiveDirectoryPassword'|Specifies the authentication mode.|Not set.| |CharacterSet

      (not supported in the PDO_SQLSRV driver)|String|Specifies the character set used to send data to the server.

      Possible values are SQLSRV_ENC_CHAR and UTF-8. For more information, see [How to: Send and Retrieve UTF-8 Data Using Built-In UTF-8 Support](../../connect/php/how-to-send-and-retrieve-utf-8-data-using-built-in-utf-8-support.md).|SQLSRV_ENC_CHAR| |ConnectionPooling|1 or **true** for connection pooling on.

      0 or **false** for connection pooling off.|Specifies whether the connection is assigned from a connection pool (1 or **true**) or not (0 or **false**).|**true** (1)| |Database|String|Specifies the name of the database in use for the connection being established1.|The default database for the login being used.| -|Encrypt|1 or **true** for encryption on.

      0 or **false** for encryption off.|Specifies whether the communication with SQL Server is encrypted (1 or **true**) or unencrypted (0 or **false**)2.|**false** (0)| +|Encrypt|1 or **true** for encryption on.

      0 or **false** for encryption off.|Specifies whether the communication with SQL Server is encrypted (1 or **true**) or unencrypted (0 or **false**)2.|**true** (1) if **Authentication** is set, **false** (0) otherwise| |Failover_Partner|String|Specifies the server and instance of the database's mirror (if enabled and configured) to use when the primary server is unavailable.

      There are restrictions to using Failover_Partner with MultiSubnetFailover. For more information, see [PHP Driver for SQL Server Support for High Availability, Disaster Recovery](../../connect/php/php-driver-for-sql-server-support-for-high-availability-disaster-recovery.md).|No value set.| |LoginTimeout|Integer (SQLSRV driver

      String (PDO_SQLSRV driver|Specifies the number of seconds to wait before failing the connection attempt.|No timeout.| |MultipleActiveResultSets|1 or **true** to use multiple active result sets.

      0 or **false** to disable multiple active result sets.|Disables or explicitly enables support for multiple active Result sets (MARS).

      For more information, see [How to: Disable Multiple Active Resultsets (MARS)](../../connect/php/how-to-disable-multiple-active-resultsets-mars.md).|true (1)| @@ -44,15 +45,14 @@ This topic lists the options that are permitted in the associative array (when u |TrustServerCertificate|1 or **true** to trust certificate.

      0 or **false** to not trust certificate.|Specifies whether the client should trust (1 or **true**) or reject (0 or **false**) a self-signed server certificate.|**false** (0)| |UID

      (not supported in the PDO_SQLSRV driver)|String|Specifies the User ID to be used when connecting with SQL Server Authentication3.|No value set.| |WSID|String|Specifies the name of the computer for tracing.|No value set.| - + 1. All queries executed on the established connection will be made to the database that is specified by the *Database* attribute. However, data in other databases can be accessed by using a fully-qualified name if the user has the appropriate permissions. For example, if the *master* database is set with the *Database* connection attribute, it is still possible to execute a Transact-SQL query that accesses the *AdventureWorks.HumanResources.Employee* table by using the fully-qualified name. - + 2. Enabling *Encryption* can impact the performance of some applications due to the computational overhead required to encrypt data. - + 3. The *UID* and *PWD* attributes must both be set when connecting with [!INCLUDE[ssNoVersion](../../includes/ssnoversion_md.md)] Authentication. - + Many of the supported keys are ODBC connection string attributes. For information about ODBC connection strings, see [Using Connection String Keywords with SQL Native Client](http://go.microsoft.com/fwlink/?LinkId=105504). - + ## See Also [Connecting to the Server](../../connect/php/connecting-to-the-server.md) - diff --git a/docs/connect/php/connection-resiliency.md b/docs/connect/php/connection-resiliency.md index d1529cfcb28..142e2b8f8ad 100644 --- a/docs/connect/php/connection-resiliency.md +++ b/docs/connect/php/connection-resiliency.md @@ -7,6 +7,7 @@ ms.technology: ms.topic: "article" author: "david-puglielli" ms.author: "v-dapugl" +manager: "v-hakaka" --- ## Idle Connection Resiliency [!INCLUDE[Driver_PHP_Download](../../includes/driver_php_download.md)] @@ -15,12 +16,12 @@ ms.author: "v-dapugl" Connection resiliency is implemented with two connection keywords that can be added to connection strings: **ConnectRetryCount** and **ConnectRetryInterval**. -|Name|Values|Default|Description| +|Keyword|Values|Default|Description| |-|-|-|-| |**ConnectRetryCount**| Integer between 0 and 255 (inclusive)|1|The maximum number of attempts to reestablish a broken connection before giving up. By default, a single attempt is made to reestablish a connection when broken. A value of 0 means that no reconnection will be attempted.| |**ConnectRetryInterval**| Integer between 1 and 60 (inclusive)|1| The time, in seconds, between attempts to reestablish a connection. The application will attempt to reconnect immediately upon detecting a broken connection, and will then wait **ConnectRetryInterval** seconds before trying again. This keyword is ignored if **ConnectRetryCount** is equal to 0. -If **ConnectRetryCount*ConnectRetryInterval** is larger than **LoginTimeout**, then the client will cease attempting to connect once **LoginTimeout** is reached; otherwise, it will continue to try to reconnect until **ConnectRetryCount** is reached. +If the product of **ConnectRetryCount** multiplied by **ConnectRetryInterval** is larger than **LoginTimeout**, then the client will cease attempting to connect once **LoginTimeout** is reached; otherwise, it will continue to try to reconnect until **ConnectRetryCount** is reached. #### Remarks From ddb5dc6dcf1c2eea730966ac4f40806c34ea2929 Mon Sep 17 00:00:00 2001 From: David Puglielli Date: Fri, 14 Jul 2017 11:31:49 -0700 Subject: [PATCH 296/336] Small table fix --- docs/connect/php/azure-active-directory.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/connect/php/azure-active-directory.md b/docs/connect/php/azure-active-directory.md index 359a66d2755..f18227ef365 100644 --- a/docs/connect/php/azure-active-directory.md +++ b/docs/connect/php/azure-active-directory.md @@ -17,7 +17,7 @@ manager: "v-hakaka" To use Azure AD, use the **Authentication** keyword. The values that **Authentication** can take on are explained in the following table. |Keyword|Values|Description| -|-|| +|-|-|-| |**Authentication**|Not set (default)|Authentication mode determined by other keywords. For more information, see [Connection Options](../../connect/php/connection-options.md). | || (empty string)| Connection string only. Override and unset an `Authentication` value set in the DSN.| ||`SqlPassword`|Directly authenticate to a SQL Server instance (which may be an Azure instance) using a username and password. The username and password must be passed into the connection string using the **UID** and **PWD** keywords. | From 3ae3864b43770bc4322b584cd2b2b4b70182b8db Mon Sep 17 00:00:00 2001 From: ulvii Date: Fri, 14 Jul 2017 11:32:03 -0700 Subject: [PATCH 297/336] Update installation-tutorial-linux-mac.md --- docs/connect/php/installation-tutorial-linux-mac.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/connect/php/installation-tutorial-linux-mac.md b/docs/connect/php/installation-tutorial-linux-mac.md index 56c9c880259..a4c6f94a5c9 100644 --- a/docs/connect/php/installation-tutorial-linux-mac.md +++ b/docs/connect/php/installation-tutorial-linux-mac.md @@ -7,6 +7,7 @@ ms.technology: ms.topic: "article" author: "ulvii" ms.author: "v-ulibra" +manager: "Hadis Fard" --- # PHP Linux and Mac Drivers Installation Tutorial The following instructions assume a clean environment and show how to install PHP 7.x, Microsoft ODBC driver, apache, and Microsoft PHP drivers on Ubuntu 15.10, 16.04, RedHat 7, Debian 8, and Mac OS X. From c9e965d734fcd1fe4de3e9b6beab0c6a38d6bfb3 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 14 Jul 2017 11:48:02 -0700 Subject: [PATCH 298/336] Added preliminary bullet --- .../editions-and-components-of-sql-server-2017.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/sql-server/editions-and-components-of-sql-server-2017.md b/docs/sql-server/editions-and-components-of-sql-server-2017.md index e70450f1276..4b2312c29c9 100644 --- a/docs/sql-server/editions-and-components-of-sql-server-2017.md +++ b/docs/sql-server/editions-and-components-of-sql-server-2017.md @@ -3,7 +3,7 @@ title: "Editions and supported features of SQL Server 2017 | Microsoft Docs" ms.custom: - "SQL2016_New_Updated" - "SQL2017_New_Updated" -ms.date: "07/13/2017" +ms.date: "07/14/2017" ms.prod: "sql-server-2017" ms.reviewer: "" ms.suite: "" @@ -44,12 +44,16 @@ manager: "jhubbard" -This topic provides details of features supported by the various editions of SQL Server 2017. +This topic provides details of features supported by the various editions of SQL Server 2017. For information about older versions, see: * [SQL Server 2016](editions-and-components-of-sql-server-2016.md). * [SQL Server 2014](http://msdn.microsoft.com/library/cc645993(v=sql.120).aspx). + +>[NOTE!] +>All of the information in this article is subject to change because it applies to a preliminary release of SQL Server 2017. + Installation requirements vary based on your application needs. The different editions of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] accommodate the unique performance, runtime, and price requirements of organizations and individuals. The [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] components that you install also depend on your specific requirements. The following sections help you understand how to make the best choice among the editions and components available in [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)]. From 63e4a686a44f48a4ab7aa389c97240b2e8559454 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 14 Jul 2017 11:49:59 -0700 Subject: [PATCH 299/336] Remove extra space --- docs/sql-server/editions-and-components-of-sql-server-2017.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/sql-server/editions-and-components-of-sql-server-2017.md b/docs/sql-server/editions-and-components-of-sql-server-2017.md index 4b2312c29c9..3577f1c5fd6 100644 --- a/docs/sql-server/editions-and-components-of-sql-server-2017.md +++ b/docs/sql-server/editions-and-components-of-sql-server-2017.md @@ -53,7 +53,6 @@ For information about older versions, see: >[NOTE!] >All of the information in this article is subject to change because it applies to a preliminary release of SQL Server 2017. - Installation requirements vary based on your application needs. The different editions of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] accommodate the unique performance, runtime, and price requirements of organizations and individuals. The [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] components that you install also depend on your specific requirements. The following sections help you understand how to make the best choice among the editions and components available in [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)]. From 64a8419ef7c9e54187ff025d26d26c84b11ac426 Mon Sep 17 00:00:00 2001 From: Barbara Kess Date: Fri, 14 Jul 2017 11:50:55 -0700 Subject: [PATCH 300/336] VSTS 1037903 --- docs/advanced-analytics/r/create-a-standalone-r-server.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/advanced-analytics/r/create-a-standalone-r-server.md b/docs/advanced-analytics/r/create-a-standalone-r-server.md index 9b48e6848c5..2130ebeb1a2 100644 --- a/docs/advanced-analytics/r/create-a-standalone-r-server.md +++ b/docs/advanced-analytics/r/create-a-standalone-r-server.md @@ -111,7 +111,7 @@ If you installed an earlier version of Microsoft R Server (Standalone) you can u ### Change in Default Folder for R Packages -When you install using SLq Server setup, the R libraries are installed in a folder associated with the SQL Server version that you used for setup. In this folder you will also find sample data, documentation for the R base packages, and documentation of the R tools and runtime. +When you install using SQL Server setup, the R libraries are installed in a folder associated with the SQL Server version that you used for setup. In this folder you will also find sample data, documentation for the R base packages, and documentation of the R tools and runtime. **R Server (Standalone) with setup using SQL Server 2016** From 5ec2e89ab3b60de1a4000c603afc9d623ca6ef15 Mon Sep 17 00:00:00 2001 From: MikeRayMSFT Date: Fri, 14 Jul 2017 12:22:52 -0700 Subject: [PATCH 301/336] Updated note syntax. --- docs/sql-server/editions-and-components-of-sql-server-2017.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sql-server/editions-and-components-of-sql-server-2017.md b/docs/sql-server/editions-and-components-of-sql-server-2017.md index 3577f1c5fd6..70cf33f4701 100644 --- a/docs/sql-server/editions-and-components-of-sql-server-2017.md +++ b/docs/sql-server/editions-and-components-of-sql-server-2017.md @@ -51,7 +51,7 @@ For information about older versions, see: * [SQL Server 2016](editions-and-components-of-sql-server-2016.md). * [SQL Server 2014](http://msdn.microsoft.com/library/cc645993(v=sql.120).aspx). ->[NOTE!] +>[!NOTE] >All of the information in this article is subject to change because it applies to a preliminary release of SQL Server 2017. Installation requirements vary based on your application needs. The different editions of [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] accommodate the unique performance, runtime, and price requirements of organizations and individuals. The [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)] components that you install also depend on your specific requirements. The following sections help you understand how to make the best choice among the editions and components available in [!INCLUDE[ssNoVersion](../includes/ssnoversion-md.md)]. From 7973c0b0c75c0df034a53e3440752e6fed22a9c1 Mon Sep 17 00:00:00 2001 From: Pedro Lopes Date: Fri, 14 Jul 2017 13:09:36 -0700 Subject: [PATCH 302/336] Update spatial-types-geometry-transact-sql.md Removed redundant header on version --- .../spatial-types-geometry-transact-sql.md | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/docs/t-sql/spatial-geometry/spatial-types-geometry-transact-sql.md b/docs/t-sql/spatial-geometry/spatial-types-geometry-transact-sql.md index ba424926e63..56fda1045a5 100644 --- a/docs/t-sql/spatial-geometry/spatial-types-geometry-transact-sql.md +++ b/docs/t-sql/spatial-geometry/spatial-types-geometry-transact-sql.md @@ -31,11 +31,6 @@ manager: "jhubbard" The error tolerance for the geometry methods can be as large as 1.0e-7 * extents. The extents refer to the approximate maximal distance between points of the **geometry**object. - -|| -|-| -|**Applies to**: [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] ([!INCLUDE[ssKatmai](../../includes/sskatmai-md.md)] through [current version](http://go.microsoft.com/fwlink/p/?LinkId=299658)), [!INCLUDE[ssSDSfull](../../includes/sssdsfull-md.md)].| - ## Registering the geometry Type The **geometry** type is predefined and available in each database. You can create table columns of type **geometry** and operate on **geometry** data in the same manner as you would use other CLR types. Can be used in persisted and non-persisted computed columns. @@ -44,7 +39,7 @@ manager: "jhubbard" ### A. Showing how to add and query geometry data The following two examples show how to add and query geometry data. The first example creates a table with an identity column and a `geometry` column, `GeomCol1`. A third column renders the `geometry` column into its Open Geospatial Consortium (OGC) Well-Known Text (WKT) representation, and uses the `STAsText()` method. Two rows are then inserted: one row contains a `LineString` instance of `geometry`, and one row contains a `Polygon` instance. -``` +```tsql IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL DROP TABLE dbo.SpatialTable; GO @@ -66,7 +61,7 @@ GO ### B. Returning the intersection of two geometry instances The second example uses the `STIntersection()` method to return the points where the two previously inserted `geometry` instances intersect. -``` +```tsql DECLARE @geom1 geometry; DECLARE @geom2 geometry; DECLARE @result geometry; @@ -80,7 +75,7 @@ SELECT @result.STAsText(); ### C. Using geometry in a computed column The following example creates a table with a persisted computed column using a **geometry** type. -``` +```tsql IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL DROP TABLE dbo.SpatialTable; GO @@ -96,4 +91,4 @@ CREATE TABLE SpatialTable ## See Also [Spatial Data (SQL Server)](../../relational-databases/spatial/spatial-data-sql-server.md) - \ No newline at end of file + From bea8a7b74e109a1b20798690541efcbed70ff8bb Mon Sep 17 00:00:00 2001 From: Pedro Lopes Date: Fri, 14 Jul 2017 13:14:20 -0700 Subject: [PATCH 303/336] Update query-spatial-data-for-nearest-neighbor.md Added code snippet code type --- ...query-spatial-data-for-nearest-neighbor.md | 178 +++++++++--------- 1 file changed, 89 insertions(+), 89 deletions(-) diff --git a/docs/relational-databases/spatial/query-spatial-data-for-nearest-neighbor.md b/docs/relational-databases/spatial/query-spatial-data-for-nearest-neighbor.md index acc3a62aee9..727e621f4a0 100644 --- a/docs/relational-databases/spatial/query-spatial-data-for-nearest-neighbor.md +++ b/docs/relational-databases/spatial/query-spatial-data-for-nearest-neighbor.md @@ -16,92 +16,92 @@ ms.author: "rickbyh" manager: "jhubbard" --- # Query Spatial Data for Nearest Neighbor - A common query used with spatial data is the Nearest Neighbor query. Nearest Neighbor queries are used to find the closest spatial objects to a specific spatial object. For example a store locater for a Web site often must find the closest store locations to a customer location. - - A Nearest Neighbor query can be written in a variety of valid query formats, but for the Nearest Neighbor query to use a spatial index the following syntax must be used. - -## Syntax - -```vb -SELECT TOP ( number ) - [ WITH TIES ] - [ * | expression ] - [, ...] - FROM spatial_table_reference, ... - [ WITH - ( - [ INDEX ( index_ref ) ] - [ , SPATIAL_WINDOW_MAX_CELLS = ] - [ ,... ] - ) - ] - WHERE - column_ref.STDistance ( @spatial_ object ) - { - [ IS NOT NULL ] | [ < const ] | [ > const ] - | [ <= const ] | [ >= const ] | [ <> const ] ] - } - [ AND { other_predicate } ] - } - ORDER BY column_ref.STDistance ( @spatial_ object ) [ ,...n ] -[ ; ] - -``` - -## Nearest Neighbor Query and Spatial Indexes - In [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)], **TOP** and **ORDER BY** clauses are used to perform a Nearest Neighbor query on spatial data columns. The **ORDER BY** clause contains a call to the `STDistance()` method for the spatial column data type. The **TOP** clause indicates the number of objects to return for the query. - - The following requirements must be met for a Nearest Neighbor query to use a spatial index: - -1. A spatial index must be present on one of the spatial columns and the `STDistance()` method must use that column in the **WHERE** and **ORDER BY** clauses. - -2. The **TOP** clause cannot contain a **PERCENT** statement. - -3. The **WHERE** clause must contain a `STDistance()` method. - -4. If there are multiple predicates in the **WHERE** clause then the predicate containing `STDistance()` method must be connected by an **AND** conjunction to the other predicates. The `STDistance()` method cannot be in an optional part of the **WHERE** clause. - -5. The first expression in the **ORDER BY** clause must use the `STDistance()` method. - -6. Sort order for the first `STDistance()` expression in the **ORDER BY** clause must be **ASC**. - -7. All the rows for which `STDistance` returns **NULL** must be filtered out. - -> [!WARNING] -> Methods that take **geography** or **geometry** data types as arguments will return **NULL** if the SRIDs are not the same for the types. - - It is recommended that the new spatial index tessellations be used for indexes used in Nearest Neighbor queries. For more information on spatial index tessellations, see [Spatial Data (SQL Server)](../../relational-databases/spatial/spatial-data-sql-server.md). - -## Example - The following code example shows a Nearest Neighbor query that can use a spatial index. The example uses the `Person.Address` table in `AdventureWorks2012` database. - -``` -USE AdventureWorks2012 -GO -DECLARE @g geography = 'POINT(-121.626 47.8315)'; -SELECT TOP(7) SpatialLocation.ToString(), City FROM Person.Address -WHERE SpatialLocation.STDistance(@g) IS NOT NULL -ORDER BY SpatialLocation.STDistance(@g); - -``` - - Create a spatial index on the column SpatialLocation to see how a Nearest Neighbor query uses a spatial index. For more information on creating spatial indexes, see [Create, Modify, and Drop Spatial Indexes](../../relational-databases/spatial/create-modify-and-drop-spatial-indexes.md). - -## Example - The following code example shows a Nearest Neighbor query that cannot use a spatial index. - -``` -USE AdventureWorks2012 -GO -DECLARE @g geography = 'POINT(-121.626 47.8315)'; -SELECT TOP(7) SpatialLocation.ToString(), City FROM Person.Address -ORDER BY SpatialLocation.STDistance(@g); - -``` - - The query lacks a **WHERE** clause that uses `STDistance()` in a form specified in the syntax section so the query cannot use a spatial index. - -## See Also - [Spatial Data (SQL Server)](../../relational-databases/spatial/spatial-data-sql-server.md) - - \ No newline at end of file + A common query used with spatial data is the Nearest Neighbor query. Nearest Neighbor queries are used to find the closest spatial objects to a specific spatial object. For example a store locater for a Web site often must find the closest store locations to a customer location. + + A Nearest Neighbor query can be written in a variety of valid query formats, but for the Nearest Neighbor query to use a spatial index the following syntax must be used. + +## Syntax + +``` +SELECT TOP ( number ) + [ WITH TIES ] + [ * | expression ] + [, ...] + FROM spatial_table_reference, ... + [ WITH + ( + [ INDEX ( index_ref ) ] + [ , SPATIAL_WINDOW_MAX_CELLS = ] + [ ,... ] + ) + ] + WHERE + column_ref.STDistance ( @spatial_ object ) + { + [ IS NOT NULL ] | [ < const ] | [ > const ] + | [ <= const ] | [ >= const ] | [ <> const ] ] + } + [ AND { other_predicate } ] + } + ORDER BY column_ref.STDistance ( @spatial_ object ) [ ,...n ] +[ ; ] + +``` + +## Nearest Neighbor Query and Spatial Indexes + In [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)], **TOP** and **ORDER BY** clauses are used to perform a Nearest Neighbor query on spatial data columns. The **ORDER BY** clause contains a call to the `STDistance()` method for the spatial column data type. The **TOP** clause indicates the number of objects to return for the query. + + The following requirements must be met for a Nearest Neighbor query to use a spatial index: + +1. A spatial index must be present on one of the spatial columns and the `STDistance()` method must use that column in the **WHERE** and **ORDER BY** clauses. + +2. The **TOP** clause cannot contain a **PERCENT** statement. + +3. The **WHERE** clause must contain a `STDistance()` method. + +4. If there are multiple predicates in the **WHERE** clause then the predicate containing `STDistance()` method must be connected by an **AND** conjunction to the other predicates. The `STDistance()` method cannot be in an optional part of the **WHERE** clause. + +5. The first expression in the **ORDER BY** clause must use the `STDistance()` method. + +6. Sort order for the first `STDistance()` expression in the **ORDER BY** clause must be **ASC**. + +7. All the rows for which `STDistance` returns **NULL** must be filtered out. + +> [!WARNING] +> Methods that take **geography** or **geometry** data types as arguments will return **NULL** if the SRIDs are not the same for the types. + + It is recommended that the new spatial index tessellations be used for indexes used in Nearest Neighbor queries. For more information on spatial index tessellations, see [Spatial Data (SQL Server)](../../relational-databases/spatial/spatial-data-sql-server.md). + +## Example + The following code example shows a Nearest Neighbor query that can use a spatial index. The example uses the `Person.Address` table in `AdventureWorks2012` database. + +```tsql +USE AdventureWorks2012 +GO +DECLARE @g geography = 'POINT(-121.626 47.8315)'; +SELECT TOP(7) SpatialLocation.ToString(), City FROM Person.Address +WHERE SpatialLocation.STDistance(@g) IS NOT NULL +ORDER BY SpatialLocation.STDistance(@g); + +``` + + Create a spatial index on the column SpatialLocation to see how a Nearest Neighbor query uses a spatial index. For more information on creating spatial indexes, see [Create, Modify, and Drop Spatial Indexes](../../relational-databases/spatial/create-modify-and-drop-spatial-indexes.md). + +## Example + The following code example shows a Nearest Neighbor query that cannot use a spatial index. + +```tsql +USE AdventureWorks2012 +GO +DECLARE @g geography = 'POINT(-121.626 47.8315)'; +SELECT TOP(7) SpatialLocation.ToString(), City FROM Person.Address +ORDER BY SpatialLocation.STDistance(@g); + +``` + + The query lacks a **WHERE** clause that uses `STDistance()` in a form specified in the syntax section so the query cannot use a spatial index. + +## See Also + [Spatial Data (SQL Server)](../../relational-databases/spatial/spatial-data-sql-server.md) + + From 2cc8325e86920f005e45b46fc2f198032a0f25a3 Mon Sep 17 00:00:00 2001 From: Gene Milener Date: Fri, 14 Jul 2017 13:20:51 -0700 Subject: [PATCH 304/336] Add trailing 's', now is sql-server-drivers Wrong was href="/sql/connect/sql-server-driver". '-drivers' is plural in the .md filename. Adding the 's' now. --- docs/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/index.md b/docs/index.md index 8ae43445f1b..9f76b238913 100644 --- a/docs/index.md +++ b/docs/index.md @@ -190,7 +190,7 @@ description: Learn about SQL

      Design

      Tools

      @@ -421,4 +421,4 @@ description: Learn about SQL
    - \ No newline at end of file + From 01c14e75c6a13e8a12be8e33f47c674cc6b3d963 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Fri, 14 Jul 2017 16:34:22 -0400 Subject: [PATCH 305/336] Changing SA_PASSWORD to MSSQL_SA_PASSWORD --- .../quickstart-install-connect-docker.md | 8 +++---- .../linux/sample-unattended-install-redhat.md | 20 ++++++++--------- docs/linux/sample-unattended-install-suse.md | 20 ++++++++--------- .../linux/sample-unattended-install-ubuntu.md | 20 ++++++++--------- .../sql-server-linux-configure-docker.md | 22 +++++++++---------- ...r-linux-configure-environment-variables.md | 12 +++++----- docs/linux/sql-server-linux-release-notes.md | 16 ++++++++++++-- docs/linux/sql-server-linux-setup.md | 4 ++-- 8 files changed, 67 insertions(+), 55 deletions(-) diff --git a/docs/linux/quickstart-install-connect-docker.md b/docs/linux/quickstart-install-connect-docker.md index 7f3baae9e5e..df5f70f3a14 100644 --- a/docs/linux/quickstart-install-connect-docker.md +++ b/docs/linux/quickstart-install-connect-docker.md @@ -62,13 +62,13 @@ The following steps increase the memory for Docker for Windows to 4 GB. 1. To run the container image with Docker, you can use the following command from a bash shell (Linux/macOS): ```bash - docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' -e 'MSSQL_PID=Developer' --cap-add SYS_PTRACE -p 1401:1433 -d microsoft/mssql-server-linux + docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=' -e 'MSSQL_PID=Developer' --cap-add SYS_PTRACE -p 1401:1433 -d microsoft/mssql-server-linux ``` If you are using Docker for Windows, use the following command from an elevated PowerShell command-prompt: ```PowerShell - docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d microsoft/mssql-server-linux + docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d microsoft/mssql-server-linux ``` > [!NOTE] @@ -79,7 +79,7 @@ The following steps increase the memory for Docker for Windows to 4 GB. | Parameter | Description | |-----|-----| | **-e 'ACCEPT_EULA=Y'** | Set the **ACCEPT_EULA** variable to any value to confirm your acceptance of the [End-User Licensing Agreement](http://go.microsoft.com/fwlink/?LinkId=746388). Required setting for the SQL Server image. | - | **-e 'SA_PASSWORD=\'** | Specify your own strong password that is at least 8 characters and meets [SQL Server's password requirements](../relational-databases/security/password-policy.md). Required setting for the SQL Server image. | + | **-e 'MSSQL_SA_PASSWORD=\'** | Specify your own strong password that is at least 8 characters and meets [SQL Server's password requirements](../relational-databases/security/password-policy.md). Required setting for the SQL Server image. | | **-e 'MSSQL_PID=Developer'** | Specifies the edition or product key. In this example, the freely licensed Developer Edition is used for non-production testing. For other values, see [Configure SQL Server settings with environment variables on Linux](sql-server-linux-configure-environment-variables.md). | | **--cap-add SYS_PTRACE** | Adds the Linux capability to trace a process. This enables SQL Server to generate dumps on an exception. | | **-p 1401:1433** | Map a TCP port on the host environment (first value) with a TCP port in the container (second value). In this example, SQL Server is listening on TCP 1433 in the container and this is exposed to the port, 1401, on the host. | @@ -110,7 +110,7 @@ You also might find the `--name` parameter useful to name your container rather ## Change the SA password -The SA account is a system administrator on the SQL Server instance that gets created during setup. After creating your SQL Server container, the `SA_PASSWORD` environment variable you specified is discoverable by running `echo $SA_PASSWORD` in the container. For security purposes, change your SA password. +The SA account is a system administrator on the SQL Server instance that gets created during setup. After creating your SQL Server container, the `MSSQL_SA_PASSWORD` environment variable you specified is discoverable by running `echo $MSSQL_SA_PASSWORD` in the container. For security purposes, change your SA password. 1. Choose a strong password to use for the SA user. diff --git a/docs/linux/sample-unattended-install-redhat.md b/docs/linux/sample-unattended-install-redhat.md index bdb7a029060..15be05d8e15 100644 --- a/docs/linux/sample-unattended-install-redhat.md +++ b/docs/linux/sample-unattended-install-redhat.md @@ -32,7 +32,7 @@ replace the variable values in the script. You can also set any of the scripting # Use the following variables to control your install: # Password for the SA user (required) -SA_PASSWORD='' +MSSQL_SA_PASSWORD='' # Product ID of the version of SQL server you're installing # Must be evaluation, developer, express, web, standard, enterprise, or your 25 digit product key @@ -49,9 +49,9 @@ SQL_INSTALL_AGENT='y' # SQL_INSTALL_USER='' # SQL_INSTALL_USER_PASSWORD='' -if [ -z $SA_PASSWORD ] +if [ -z $MSSQL_SA_PASSWORD ] then - echo Environment variable SA_PASSWORD must be set for unattended install + echo Environment variable MSSQL_SA_PASSWORD must be set for unattended install exit 1 fi @@ -66,7 +66,7 @@ echo Installing SQL Server... sudo yum install -y mssql-server echo Running mssql-conf setup... -sudo SA_PASSWORD=$SA_PASSWORD \ +sudo MSSQL_SA_PASSWORD=$MSSQL_SA_PASSWORD \ MSSQL_PID=$MSSQL_PID \ /opt/mssql/bin/mssql-conf -n setup accept-eula @@ -116,7 +116,7 @@ do /opt/mssql-tools/bin/sqlcmd \ -S localhost \ -U SA \ - -P $SA_PASSWORD \ + -P $MSSQL_SA_PASSWORD \ -Q "SELECT @@VERSION" 2>/dev/null errstatus=$? ((counter++)) @@ -136,7 +136,7 @@ then /opt/mssql-tools/bin/sqlcmd \ -S localhost \ -U SA \ - -P $SA_PASSWORD \ + -P $MSSQL_SA_PASSWORD \ -Q "CREATE LOGIN [$SQL_INSTALL_USER] WITH PASSWORD=N'$SQL_INSTALL_USER_PASSWORD', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=ON, CHECK_POLICY=ON; ALTER SERVER ROLE [sysadmin] ADD MEMBER [$SQL_INSTALL_USER]" fi @@ -149,7 +149,7 @@ To run the script 1. Paste the sample into your favorite text editor and save it with a memorable name, like `install_sql.sh`. -1. Customize `SA_PASSWORD`, `MSSQL_PID`, and any of the other variables you'd like to change. +1. Customize `MSSQL_SA_PASSWORD`, `MSSQL_PID`, and any of the other variables you'd like to change. 1. Mark the script as executable @@ -165,7 +165,7 @@ To run the script ## Understanding the script -The first thing the Bash script does is set a few variables. These can be either scripting variables, like the sample, or environment variables. The variable ``` SA_PASSWORD ``` is **required** by SQL Server installation, the others are custom variables created for the script. The sample script performs the following steps: +The first thing the Bash script does is set a few variables. These can be either scripting variables, like the sample, or environment variables. The variable ``` MSSQL_SA_PASSWORD ``` is **required** by SQL Server installation, the others are custom variables created for the script. The sample script performs the following steps: 1. Import the public Microsoft GPG keys. @@ -175,7 +175,7 @@ The first thing the Bash script does is set a few variables. These can be eithe 1. Install SQL Server -1. Configure SQL Server with the ```SA_PASSWORD``` and automatically accept the End-User License Agreement. +1. Configure SQL Server with the ```MSSQL_SA_PASSWORD``` and automatically accept the End-User License Agreement. 1. Automatically accept the End-User License Agreement for the SQL Server command-line tools, install them, and install the unixodbc-dev package. @@ -201,7 +201,7 @@ Simplify multiple unattended installs and create a stand-alone Bash script that ```bash #!/bin/bash -export SA_PASSWORD='' +export MSSQL_SA_PASSWORD='' export MSSQL_PID='evaluation' export SQL_INSTALL_AGENT='y' export SQL_INSTALL_USER='' diff --git a/docs/linux/sample-unattended-install-suse.md b/docs/linux/sample-unattended-install-suse.md index 1fb683e9d5a..b1cff92d59f 100644 --- a/docs/linux/sample-unattended-install-suse.md +++ b/docs/linux/sample-unattended-install-suse.md @@ -33,7 +33,7 @@ This sample Bash script installs SQL Server 2017 CTP 2.1 on SUSE Linux Enterpris # Use the following variables to control your install: # Password for the SA user (required) -SA_PASSWORD='' +MSSQL_SA_PASSWORD='' # Product ID of the version of SQL server you're installing # Must be evaluation, developer, express, web, standard, enterprise, or your 25 digit product key @@ -50,9 +50,9 @@ SQL_INSTALL_AGENT='y' # SQL_INSTALL_USER='' # SQL_INSTALL_USER_PASSWORD='' -if [ -z $SA_PASSWORD ] +if [ -z $MSSQL_SA_PASSWORD ] then - echo Environment variable SA_PASSWORD must be set for unattended install + echo Environment variable MSSQL_SA_PASSWORD must be set for unattended install exit 1 fi @@ -68,7 +68,7 @@ echo Installing SQL Server... sudo zypper install -y mssql-server echo Running mssql-conf setup... -sudo SA_PASSWORD=$SA_PASSWORD \ +sudo MSSQL_SA_PASSWORD=$MSSQL_SA_PASSWORD \ MSSQL_PID=$MSSQL_PID \ /opt/mssql/bin/mssql-conf -n setup accept-eula @@ -119,7 +119,7 @@ do /opt/mssql-tools/bin/sqlcmd \ -S localhost \ -U SA \ - -P $SA_PASSWORD \ + -P $MSSQL_SA_PASSWORD \ -Q "SELECT @@VERSION" 2>/dev/null errstatus=$? ((counter++)) @@ -139,7 +139,7 @@ then /opt/mssql-tools/bin/sqlcmd \ -S localhost \ -U SA \ - -P $SA_PASSWORD \ + -P $MSSQL_SA_PASSWORD \ -Q "CREATE LOGIN [$SQL_INSTALL_USER] WITH PASSWORD=N'$SQL_INSTALL_USER_PASSWORD', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=ON, CHECK_POLICY=ON; ALTER SERVER ROLE [sysadmin] ADD MEMBER [$SQL_INSTALL_USER]" fi @@ -152,7 +152,7 @@ To run the script 1. Paste the sample into your favorite text editor and save it with a memorable name, like `install_sql.sh`. -1. Customize `SA_PASSWORD`, `MSSQL_PID`, and any of the other variables you'd like to change. +1. Customize `MSSQL_SA_PASSWORD`, `MSSQL_PID`, and any of the other variables you'd like to change. 1. Mark the script as executable @@ -167,7 +167,7 @@ To run the script ``` ### Understanding the script -The first thing the Bash script does is set a few variables. These can be either scripting variables, like the sample, or environment variables. The variable ``` SA_PASSWORD ``` is **required** by SQL Server installation, the others are custom variables created for the script. The sample script performs the following steps: +The first thing the Bash script does is set a few variables. These can be either scripting variables, like the sample, or environment variables. The variable ``` MSSQL_SA_PASSWORD ``` is **required** by SQL Server installation, the others are custom variables created for the script. The sample script performs the following steps: 1. Import the public Microsoft GPG keys. @@ -177,7 +177,7 @@ The first thing the Bash script does is set a few variables. These can be either 1. Install SQL Server -1. Configure SQL Server with the ```SA_PASSWORD``` and automatically accept the End-User License Agreement. +1. Configure SQL Server with the ```MSSQL_SA_PASSWORD``` and automatically accept the End-User License Agreement. 1. Automatically accept the End-User License Agreement for the SQL Server command-line tools, install them, and install the unixodbc-dev package. @@ -203,7 +203,7 @@ Simplify multiple unattended installs and create a stand-alone Bash script that ```bash #!/bin/bash -export SA_PASSWORD='' +export MSSQL_SA_PASSWORD='' export MSSQL_PID='evaluation' export SQL_INSTALL_AGENT='y' export SQL_INSTALL_USER='' diff --git a/docs/linux/sample-unattended-install-ubuntu.md b/docs/linux/sample-unattended-install-ubuntu.md index d3546669023..55effefcaea 100644 --- a/docs/linux/sample-unattended-install-ubuntu.md +++ b/docs/linux/sample-unattended-install-ubuntu.md @@ -30,7 +30,7 @@ This sample Bash script installs SQL Server 2017 CTP 2.1 on Ubuntu 16.04 without # Use the following variables to control your install: # Password for the SA user (required) -SA_PASSWORD='' +MSSQL_SA_PASSWORD='' # Product ID of the version of SQL server you're installing # Must be evaluation, developer, express, web, standard, enterprise, or your 25 digit product key @@ -47,9 +47,9 @@ SQL_INSTALL_AGENT='y' # SQL_INSTALL_USER='' # SQL_INSTALL_USER_PASSWORD='' -if [ -z $SA_PASSWORD ] +if [ -z $MSSQL_SA_PASSWORD ] then - echo Environment variable SA_PASSWORD must be set for unattended install + echo Environment variable MSSQL_SA_PASSWORD must be set for unattended install exit 1 fi @@ -67,7 +67,7 @@ echo Installing SQL Server... sudo apt-get install -y mssql-server echo Running mssql-conf setup... -sudo SA_PASSWORD=$SA_PASSWORD \ +sudo MSSQL_SA_PASSWORD=$MSSQL_SA_PASSWORD \ MSSQL_PID=$MSSQL_PID \ /opt/mssql/bin/mssql-conf -n setup accept-eula @@ -117,7 +117,7 @@ do /opt/mssql-tools/bin/sqlcmd \ -S localhost \ -U SA \ - -P $SA_PASSWORD \ + -P $MSSQL_SA_PASSWORD \ -Q "SELECT @@VERSION" 2>/dev/null errstatus=$? ((counter++)) @@ -137,7 +137,7 @@ then /opt/mssql-tools/bin/sqlcmd \ -S localhost \ -U SA \ - -P $SA_PASSWORD \ + -P $MSSQL_SA_PASSWORD \ -Q "CREATE LOGIN [$SQL_INSTALL_USER] WITH PASSWORD=N'$SQL_INSTALL_USER_PASSWORD', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=ON, CHECK_POLICY=ON; ALTER SERVER ROLE [sysadmin] ADD MEMBER [$SQL_INSTALL_USER]" fi @@ -150,7 +150,7 @@ To run the script 1. Paste the sample into your favorite text editor and save it with a memorable name, like `install_sql.sh`. -1. Customize `SA_PASSWORD`, `MSSQL_PID`, and any of the other variables you'd like to change. +1. Customize `MSSQL_SA_PASSWORD`, `MSSQL_PID`, and any of the other variables you'd like to change. 1. Mark the script as executable @@ -165,7 +165,7 @@ To run the script ``` ### Understanding the script -The first thing the Bash script does is set a few variables. These can be either scripting variables, like the sample, or environment variables. The variable ``` SA_PASSWORD ``` is **required** by SQL Server installation, the others are custom variables created for the script. The sample script performs the following steps: +The first thing the Bash script does is set a few variables. These can be either scripting variables, like the sample, or environment variables. The variable ``` MSSQL_SA_PASSWORD ``` is **required** by SQL Server installation, the others are custom variables created for the script. The sample script performs the following steps: 1. Import the public Microsoft GPG keys. @@ -175,7 +175,7 @@ The first thing the Bash script does is set a few variables. These can be either 1. Install SQL Server -1. Configure SQL Server with the ```SA_PASSWORD``` and automatically accept the End-User License Agreement. +1. Configure SQL Server with the ```MSSQL_SA_PASSWORD``` and automatically accept the End-User License Agreement. 1. Automatically accept the End-User License Agreement for the SQL Server command-line tools, install them, and install the unixodbc-dev package. @@ -201,7 +201,7 @@ Simplify multiple unattended installs and create a stand-alone Bash script that ```bash #!/bin/bash -export SA_PASSWORD='' +export MSSQL_SA_PASSWORD='' export MSSQL_PID='evaluation' export SQL_INSTALL_AGENT='y' export SQL_INSTALL_USER='' diff --git a/docs/linux/sql-server-linux-configure-docker.md b/docs/linux/sql-server-linux-configure-docker.md index c1c234c97bb..0239ed55a23 100644 --- a/docs/linux/sql-server-linux-configure-docker.md +++ b/docs/linux/sql-server-linux-configure-docker.md @@ -101,13 +101,13 @@ Docker provides a way to run multiple SQL Server containers on the same host mac The following example creates two SQL Server containers and maps them to ports **1401** and **1402** on the host machine. ```bash -docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' --cap-add SYS_PTRACE -p 1401:1433 -d microsoft/mssql-server-linux -docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' --cap-add SYS_PTRACE -p 1402:1433 -d microsoft/mssql-server-linux +docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=' --cap-add SYS_PTRACE -p 1401:1433 -d microsoft/mssql-server-linux +docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=' --cap-add SYS_PTRACE -p 1402:1433 -d microsoft/mssql-server-linux ``` ```PowerShell -docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" --cap-add SYS_PTRACE -p 1401:1433 -d microsoft/mssql-server-linux -docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" --cap-add SYS_PTRACE -p 1402:1433 -d microsoft/mssql-server-linux +docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=" --cap-add SYS_PTRACE -p 1401:1433 -d microsoft/mssql-server-linux +docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=" --cap-add SYS_PTRACE -p 1402:1433 -d microsoft/mssql-server-linux ``` Now there are two instances of SQL Server running in separate containers. Clients can connect to each SQL Server instance by using the IP address of the Docker host and the port number for the container. @@ -134,11 +134,11 @@ Your SQL Server configuration changes and database files are persisted in the co The first option is to mount a directory on your host as a data volume in your container. To do that, use the `docker run` command with the `-v :/var/opt/mssql` flag. This allows the data to be restored between container executions. ```bash -docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' --cap-add SYS_PTRACE -p 1433:1433 -v :/var/opt/mssql -d microsoft/mssql-server-linux +docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=' --cap-add SYS_PTRACE -p 1433:1433 -v :/var/opt/mssql -d microsoft/mssql-server-linux ``` ```PowerShell -docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" --cap-add SYS_PTRACE -p 1433:1433 -v :/var/opt/mssql -d microsoft/mssql-server-linux +docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=" --cap-add SYS_PTRACE -p 1433:1433 -v :/var/opt/mssql -d microsoft/mssql-server-linux ``` This technique also enables you to share and view the files on the host outside of Docker. @@ -151,11 +151,11 @@ This technique also enables you to share and view the files on the host outside The second option is to use a data volume container. You can create a data volume container by specifying a volume name instead of a host directory with the `-v` parameter. The following example creates a shared data volume named **sqlvolume**. ```bash -docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' --cap-add SYS_PTRACE -p 1433:1433 -v sqlvolume:/var/opt/mssql -d microsoft/mssql-server-linux +docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=' --cap-add SYS_PTRACE -p 1433:1433 -v sqlvolume:/var/opt/mssql -d microsoft/mssql-server-linux ``` ```PowerShell -docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" --cap-add SYS_PTRACE -p 1433:1433 -v sqlvolume:/var/opt/mssql -d microsoft/mssql-server-linux +docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=" --cap-add SYS_PTRACE -p 1433:1433 -v sqlvolume:/var/opt/mssql -d microsoft/mssql-server-linux ``` > [!NOTE] @@ -282,11 +282,11 @@ If the SQL Server container fails to run, try the following tests: - If you get an error such as **'failed to create endpoint CONTAINER_NAME on network bridge. Error starting proxy: listen tcp 0.0.0.0:1433 bind: address already in use.'**, then you are attempting to map the container port 1433 to a port that is already in use. This can happen if you're running SQL Server locally on the host machine. It can also happen if you start two SQL Server containers and try to map them both to the same host port. If this happens, use the `-p` parameter to map the container port 1433 to a different host port. For example: ```bash - docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' --cap-add SYS_PTRACE -p 1400:1433 -d microsoft/mssql-server-linux`. + docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=' --cap-add SYS_PTRACE -p 1400:1433 -d microsoft/mssql-server-linux`. ``` ```PowerShell - docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=" --cap-add SYS_PTRACE -p 1400:1433 -d microsoft/mssql-server-linux`. + docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=" --cap-add SYS_PTRACE -p 1400:1433 -d microsoft/mssql-server-linux`. ``` - Check to see if there are any error messages from container. @@ -317,7 +317,7 @@ If you can't connect to the SQL Server instance running in your container, try t sqlcmd -S 10.3.2.4,1401 -U SA -P "" ``` -- If you used `docker run` with an existing mapped data volume or data volume container, SQL Server ignores the value of `SA_PASSWORD`. Instead, the pre-configured SA user password is used from the SQL Server data in the data volume or data volume container. Verify that you are using the SA password associated with the data you're attaching to. +- If you used `docker run` with an existing mapped data volume or data volume container, SQL Server ignores the value of `MSSQL_SA_PASSWORD`. Instead, the pre-configured SA user password is used from the SQL Server data in the data volume or data volume container. Verify that you are using the SA password associated with the data you're attaching to. - Review the [SQL Server setup and error logs](#errorlogs). diff --git a/docs/linux/sql-server-linux-configure-environment-variables.md b/docs/linux/sql-server-linux-configure-environment-variables.md index e9219fc4f44..11fcb473ab4 100644 --- a/docs/linux/sql-server-linux-configure-environment-variables.md +++ b/docs/linux/sql-server-linux-configure-environment-variables.md @@ -38,7 +38,7 @@ You can use several different environment variables to configure SQL Server 2017 | Environment variable | Description | |-----|-----| | **ACCEPT_EULA** | Accept the SQL Server license agreement when set to any value (for example, 'Y'). | -| **SA_PASSWORD** | Configure the SA user password. | +| **MSSQL_SA_PASSWORD** | Configure the SA user password. | | **MSSQL_PID** | Set the SQL Server edition or product key. Possible values include: Evaluation, Developer, Express, Web, Standard, Enterprise, or a product key in the form of #####-#####-#####-#####-#####, where '#' is a number or a letter. | | **MSSQL_LCID** | Sets the language ID to use for SQL Server. For example 1036 is French. | | **MSSQL_COLLATION** | Sets the default collation for SQL Server. This overrides the default mapping of language id (LCID) to collation. | @@ -57,11 +57,11 @@ This example runs `mssql-conf setup` without prompts (`-n`). This mode looks for - **ACCEPT_EULA** accepts the end user license agreement. - **MSSSQL_PID** specifies the freely licensed Developer Edition of SQL Server for non-production use. -- **SA_PASSWORD** sets a strong password. +- **MSSQL_SA_PASSWORD** sets a strong password. - **MSSQL_TCP_PORT** sets the TCP port that SQL Server listens on to 1234. ```bash -sudo ACCEPT_EULA='Y' MSSQL_PID='Developer' SA_PASSWORD='' MSSQL_TCP_PORT=1234 /opt/mssql/bin/mssql-conf -n setup +sudo ACCEPT_EULA='Y' MSSQL_PID='Developer' MSSQL_SA_PASSWORD='' MSSQL_TCP_PORT=1234 /opt/mssql/bin/mssql-conf -n setup ``` ## Example: Docker @@ -70,19 +70,19 @@ This example docker command uses the following environment variables to create a - **ACCEPT_EULA** accepts the end user license agreement. - **MSSSQL_PID** specifies the freely licensed Developer Edition of SQL Server for non-production use. -- **SA_PASSWORD** sets a strong password. +- **MSSQL_SA_PASSWORD** sets a strong password. - **MSSQL_TCP_PORT** sets the TCP port that SQL Server listens on to 1234. This means that instead of mapping port 1433 (default) to a host port, the custom TCP port must be mapped with the `-p 1234:1234` command in this example. If you are running Docker on Linux/macOS, use the following syntax with single quotes: ```bash -docker run -e ACCEPT_EULA=Y -e MSSQL_PID='Developer' -e SA_PASSWORD='' -e MSSQL_TCP_PORT=1234 --cap-add SYS_PTRACE -p 1234:1234 -d microsoft/mssql-server-linux +docker run -e ACCEPT_EULA=Y -e MSSQL_PID='Developer' -e MSSQL_SA_PASSWORD='' -e MSSQL_TCP_PORT=1234 --cap-add SYS_PTRACE -p 1234:1234 -d microsoft/mssql-server-linux ``` If you are running Docker on Windows, use the following syntax with double quotes: ```bash -docker run -e ACCEPT_EULA=Y -e MSSQL_PID="Developer" -e SA_PASSWORD="" -e MSSQL_TCP_PORT=1234 --cap-add SYS_PTRACE -p 1234:1234 -d microsoft/mssql-server-linux +docker run -e ACCEPT_EULA=Y -e MSSQL_PID="Developer" -e MSSQL_SA_PASSWORD="" -e MSSQL_TCP_PORT=1234 --cap-add SYS_PTRACE -p 1234:1234 -d microsoft/mssql-server-linux ``` ## Next steps diff --git a/docs/linux/sql-server-linux-release-notes.md b/docs/linux/sql-server-linux-release-notes.md index 9ff92da1e45..3b5b0c8f317 100644 --- a/docs/linux/sql-server-linux-release-notes.md +++ b/docs/linux/sql-server-linux-release-notes.md @@ -138,9 +138,21 @@ The following sections describe known issues with this release of SQL Server 201 - Distributed transactions requiring the Microsoft Distributed Transaction Coordinator service are not supported on SQL Server running on Linux. SQL Server to SQL Server distributed transactions are supported. -#### Server Collation +#### Localization -When using the MSSQL_COLLATION override, OR when doing a localized (non English) install, it is possible SQL Server will hit a deadlock when trying to set the server collation, which generates a dump. Setup does complete successfully, however the server collation will not have been set. The workaround is to simply run ./mssql-conf set-collation and enter the collation name desired when prompted (the collation name can be found in the errorlog at the line: “Attempting to change default collation to …”). +- If your locale is not English (en_us) during setup, you must use UTF-8 encoding in your bash session/terminal. If you use ASCII encoding, you might see an error similar to the following: + + ``` + UnicodeEncodeError: 'ascii' codec can't encode character u'\xf1' in position 8: ordinal not in range(128) + ``` + + If you cannot use UTF-8 encoding, run setup using the MSSQL_LCID environment variable to specify your language choice. + + ```bash + sudo MSSQL_LCID= /opt/mssql/bin/mssql-conf setup + ``` + +- When using the MSSQL_COLLATION override, OR when doing a localized (non English) install, it is possible SQL Server will hit a deadlock when trying to set the server collation, which generates a dump. Setup does complete successfully, however the server collation will not have been set. The workaround is to simply run ./mssql-conf set-collation and enter the collation name desired when prompted (the collation name can be found in the errorlog at the line: “Attempting to change default collation to …”). #### Shared disk cluster instance upgrade diff --git a/docs/linux/sql-server-linux-setup.md b/docs/linux/sql-server-linux-setup.md index 90b23675c3c..00394e17335 100644 --- a/docs/linux/sql-server-linux-setup.md +++ b/docs/linux/sql-server-linux-setup.md @@ -102,10 +102,10 @@ You can perform an unattended installation in the following way: - Follow the initial steps in the [quick start tutorials](#platforms) to register the repositories and install SQL Server. - When you run `mssql-conf setup`, set [environment variables](sql-server-linux-configure-environment-variables.md) and use the `-n` (no prompt) option. -The following example configures the Developer edition of SQL Server with the **MSSQL_PID** environment variable. It also sets the SA user password with the **SA_PASSWORD** environment variable. The `-n` parameter pulls in these values for a simple unattended install: +The following example configures the Developer edition of SQL Server with the **MSSQL_PID** environment variable. It also sets the SA user password with the **MSSQL_SA_PASSWORD** environment variable. The `-n` parameter pulls in these values for a simple unattended install: ```bash -sudo MSSQL_PID=Developer SA_PASSWORD='' /opt/mssql/bin/mssql-conf -n setup +sudo MSSQL_PID=Developer MSSQL_SA_PASSWORD='' /opt/mssql/bin/mssql-conf -n setup ``` You can also create a script that performs other actions. For example, you could install other SQL Server packages. From 5e4c928f21b1fbeddb2a05e72ef7efbaf2caa914 Mon Sep 17 00:00:00 2001 From: Craig Guyer Date: Fri, 14 Jul 2017 13:49:44 -0700 Subject: [PATCH 306/336] Update tools-and-setup.md --- contributor-guide/tools-and-setup.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contributor-guide/tools-and-setup.md b/contributor-guide/tools-and-setup.md index 7ae9fae8fed..b831acc1942 100644 --- a/contributor-guide/tools-and-setup.md +++ b/contributor-guide/tools-and-setup.md @@ -1,4 +1,5 @@ # Install and set up tools for authoring in GitHub > [!NOTE] -> See the contributors guide in the [azure-docs repo](https://github.com/MicrosoftDocs/azure-docs/tree/master/contributor-guide). \ No newline at end of file +> See the contributors guide in the [azure-docs repo](https://github.com/MicrosoftDocs/azure-docs/tree/master/contributor-guide). +The guide contains informaton on permissions, installation of tools, and the basics for making edits and pull erquests. From 3d1c8a7be47ef4c29d0b80fb3c568a725e881a46 Mon Sep 17 00:00:00 2001 From: Mihaela Blendea Date: Fri, 14 Jul 2017 13:50:56 -0700 Subject: [PATCH 307/336] Update LISTENER_URL parameter --- docs/t-sql/statements/create-availability-group-transact-sql.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/t-sql/statements/create-availability-group-transact-sql.md b/docs/t-sql/statements/create-availability-group-transact-sql.md index 8941da53ff8..c793df50d46 100644 --- a/docs/t-sql/statements/create-availability-group-transact-sql.md +++ b/docs/t-sql/statements/create-availability-group-transact-sql.md @@ -87,7 +87,7 @@ CREATE AVAILABILITY GROUP group_name ::= WITH ( - LISTENER = 'TCP://system-address:port', + LISTENER_URL = 'TCP://system-address:port', AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT }, FAILOVER_MODE = MANUAL, SEEDING_MODE = { AUTOMATIC | MANUAL } From 87129d8a31dfced9be95de50e6776df3e559a055 Mon Sep 17 00:00:00 2001 From: Mihaela Blendea Date: Fri, 14 Jul 2017 14:02:07 -0700 Subject: [PATCH 308/336] Updated the LISTENER_URL parameter --- .../t-sql/statements/alter-availability-group-transact-sql.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/t-sql/statements/alter-availability-group-transact-sql.md b/docs/t-sql/statements/alter-availability-group-transact-sql.md index eb19e3f9ae2..69c19ebbc0b 100644 --- a/docs/t-sql/statements/alter-availability-group-transact-sql.md +++ b/docs/t-sql/statements/alter-availability-group-transact-sql.md @@ -114,7 +114,7 @@ ALTER AVAILABILITY GROUP group_name ::= WITH ( - LISTENER = 'TCP://system-address:port', + LISTENER_URL = 'TCP://system-address:port', AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT }, FAILOVER_MODE = MANUAL, SEEDING_MODE = { AUTOMATIC | MANUAL } @@ -616,4 +616,4 @@ GO [Overview of Always On Availability Groups (SQL Server)](../../database-engine/availability-groups/windows/overview-of-always-on-availability-groups-sql-server.md) [Availability Group Listeners, Client Connectivity, and Application Failover (SQL Server)](../../database-engine/availability-groups/windows/listeners-client-connectivity-application-failover.md) - \ No newline at end of file + From d247cdbb732b8357037eea2cf60820d36a958de4 Mon Sep 17 00:00:00 2001 From: ulvii Date: Fri, 14 Jul 2017 14:13:32 -0700 Subject: [PATCH 309/336] Update step-1-configure-development-environment-for-php-development.md --- ...p-1-configure-development-environment-for-php-development.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/connect/php/step-1-configure-development-environment-for-php-development.md b/docs/connect/php/step-1-configure-development-environment-for-php-development.md index 2cf1376086c..4f7e0af05ad 100644 --- a/docs/connect/php/step-1-configure-development-environment-for-php-development.md +++ b/docs/connect/php/step-1-configure-development-environment-for-php-development.md @@ -32,7 +32,7 @@ manager: "jhubbard" * Configure loading the PHP driver, as noted here: [Loading the PHP SQL Driver](../../connect/php/loading-the-php-sql-driver.md) * Configure IIS to host PHP applications, as noted here: [Configuring IIS for PHP SQL Driver](../../connect/php/configuring-iis-for-php-sql-driver.md) -### Linux +### Linux and Mac * Configure loading the PHP driver and configure your web server to host PHP applications, as noted here: [PHP Linux and Mac Drivers Installation Tutorial](../../connect/php/installation-tutorial-linux-mac.md) From 5f0d7be30f56dde780ee57b1a298c9a11a0e65b6 Mon Sep 17 00:00:00 2001 From: David Puglielli Date: Fri, 14 Jul 2017 14:53:53 -0700 Subject: [PATCH 310/336] Removed empty string from Authentication values --- docs/connect/php/azure-active-directory.md | 1 - docs/connect/php/connection-options.md | 17 ++++++++--------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/docs/connect/php/azure-active-directory.md b/docs/connect/php/azure-active-directory.md index f18227ef365..67d22329d66 100644 --- a/docs/connect/php/azure-active-directory.md +++ b/docs/connect/php/azure-active-directory.md @@ -19,7 +19,6 @@ To use Azure AD, use the **Authentication** keyword. The values that **Authentic |Keyword|Values|Description| |-|-|-| |**Authentication**|Not set (default)|Authentication mode determined by other keywords. For more information, see [Connection Options](../../connect/php/connection-options.md). | -|| (empty string)| Connection string only. Override and unset an `Authentication` value set in the DSN.| ||`SqlPassword`|Directly authenticate to a SQL Server instance (which may be an Azure instance) using a username and password. The username and password must be passed into the connection string using the **UID** and **PWD** keywords. | ||`ActiveDirectoryPassword`|Authenticate with an Azure Active Directory identity using a username and password. The username and password must be passed into the connection string using the **UID** and **PWD** keywords. | diff --git a/docs/connect/php/connection-options.md b/docs/connect/php/connection-options.md index 70555917ede..f24d996c172 100644 --- a/docs/connect/php/connection-options.md +++ b/docs/connect/php/connection-options.md @@ -5,7 +5,7 @@ ms.date: "07/14/2017" ms.prod: "sql-non-specified" ms.reviewer: "" ms.suite: "" -ms.technology: +ms.technology: - "drivers" ms.tgt_pltfrm: "" ms.topic: "article" @@ -19,13 +19,13 @@ manager: "jhubbard" [!INCLUDE[Driver_PHP_Download](../../includes/driver_php_download.md)] This topic lists the options that are permitted in the associative array (when using [sqlsrv_connect](../../connect/php/sqlsrv-connect.md) in the SQLSRV driver) or the keywords that are permitted in the data source name (dsn) (when using [PDO::__construct](../../connect/php/pdo-construct.md) in the PDO_SQLSRV driver). - + |Key|Value|Description|Default| |-------|---------|---------------|-----------| |APP|String|Specifies the application name used in tracing.|No value set.| |ApplicationIntent|String|Declares the application workload type when connecting to a server. Possible values are ReadOnly and ReadWrite.

    For more information about [!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)] support for [!INCLUDE[ssHADR](../../includes/sshadr_md.md)], see [PHP Driver for SQL Server Support for High Availability, Disaster Recovery](../../connect/php/php-driver-for-sql-server-support-for-high-availability-disaster-recovery.md).|ReadWrite| |AttachDBFileName|String|Specifies which database file the server should attach.|No value set.| -|Authentication|One of the following strings:

    '' (empty string)

    'SqlPassword'

    'ActiveDirectoryPassword'|Specifies the authentication mode.|Not set.| +|Authentication|One of the following strings:

    'SqlPassword'

    'ActiveDirectoryPassword'|Specifies the authentication mode.|Not set.| |CharacterSet

    (not supported in the PDO_SQLSRV driver)|String|Specifies the character set used to send data to the server.

    Possible values are SQLSRV_ENC_CHAR and UTF-8. For more information, see [How to: Send and Retrieve UTF-8 Data Using Built-In UTF-8 Support](../../connect/php/how-to-send-and-retrieve-utf-8-data-using-built-in-utf-8-support.md).|SQLSRV_ENC_CHAR| |ConnectionPooling|1 or **true** for connection pooling on.

    0 or **false** for connection pooling off.|Specifies whether the connection is assigned from a connection pool (1 or **true**) or not (0 or **false**).1|**true** (1)| |Database|String|Specifies the name of the database in use for the connection being established2.|The default database for the login being used.| @@ -47,16 +47,15 @@ This topic lists the options that are permitted in the associative array (when u |UID

    (not supported in the PDO_SQLSRV driver)|String|Specifies the User ID to be used when connecting with SQL Server Authentication4.|No value set.| |WSID|String|Specifies the name of the computer for tracing.|No value set.| -1. The `ConnectionPooling` attribute cannot be used to enable/disable connection pooling in Linux and Mac. See [Connection Pooling (Microsoft Drivers for PHP for SQL Server)](../../connect/php/connection-pooling-microsoft-drivers-for-php-for-sql-server.md). +1. The `ConnectionPooling` attribute cannot be used to enable/disable connection pooling in Linux and Mac. See [Connection Pooling (Microsoft Drivers for PHP for SQL Server)](../../connect/php/connection-pooling-microsoft-drivers-for-php-for-sql-server.md). 2. All queries executed on the established connection are made to the database that is specified by the *Database* attribute. However, if the user has the appropriate permissions, data in other databases can be accessed by using a fully qualified name. For example, if the *master* database is set with the *Database* connection attribute, it is still possible to execute a Transact-SQL query that accesses the *AdventureWorks.HumanResources.Employee* table by using the fully qualified name. - + 3. Enabling *Encryption* can impact the performance of some applications due to the computational overhead required to encrypt data. - + 4. The *UID* and *PWD* attributes must both be set when connecting with [!INCLUDE[ssNoVersion](../../includes/ssnoversion_md.md)] Authentication. - + Many of the supported keys are ODBC connection string attributes. For information about ODBC connection strings, see [Using Connection String Keywords with SQL Native Client](http://go.microsoft.com/fwlink/?LinkId=105504). - + ## See Also [Connecting to the Server](../../connect/php/connecting-to-the-server.md) - \ No newline at end of file From 07069e09ac5dcdbdff9ac3def58764f15c1e155f Mon Sep 17 00:00:00 2001 From: Craig Guyer Date: Fri, 14 Jul 2017 15:56:11 -0700 Subject: [PATCH 311/336] Update what-s-new-in-sql-server-2017.md version bump a few strings from ctp to rc --- docs/sql-server/what-s-new-in-sql-server-2017.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sql-server/what-s-new-in-sql-server-2017.md b/docs/sql-server/what-s-new-in-sql-server-2017.md index beb1e2093cc..8e044aa0508 100644 --- a/docs/sql-server/what-s-new-in-sql-server-2017.md +++ b/docs/sql-server/what-s-new-in-sql-server-2017.md @@ -18,7 +18,7 @@ manager: "jhubbard" # What's new in SQL Server 2017 SQL Server 2017 represents a major step towards making SQL Server a platform that gives you choices of development languages, data types, on-premises or cloud, and operating systems by bringing the power of SQL Server to Linux, Linux-based Docker containers, and Windows. This topic summarizes what is new for specific feature areas in the most recent SQL Server 2017 Release Candidate (RC1, July 2017) and Community Technical Preview (CTP) releases. -**Try it out:** [Download the SQL Server 2017 Community Technology Preview](http://go.microsoft.com/fwlink/?LinkID=829477) +**Try it out:** [Download the SQL Server 2017 Release Candidate (RC)](http://go.microsoft.com/fwlink/?LinkID=829477) >[!TIP] >**Run SQL Server on Linux!** For more information, see [SQL Server on Linux Documentation](https://docs.microsoft.com/sql/linux/) and [What's new for SQL Server 2017 on Linux](https://docs.microsoft.com/sql/linux/sql-server-linux-whats-new). From 81584e80ab29b7d9174df83f55ee2fa6354ff80b Mon Sep 17 00:00:00 2001 From: Anthony van Gemert Date: Fri, 14 Jul 2017 16:53:25 -0700 Subject: [PATCH 312/336] Update TCP/IP prerequisites --- docs/relational-databases/polybase/polybase-installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/relational-databases/polybase/polybase-installation.md b/docs/relational-databases/polybase/polybase-installation.md index d653bd76ac6..e5218c8a284 100644 --- a/docs/relational-databases/polybase/polybase-installation.md +++ b/docs/relational-databases/polybase/polybase-installation.md @@ -35,7 +35,7 @@ manager: "jhubbard" - Minimum hard disk space: 2GB -- TCP/IP connectivity must be enabled. (See [Enable or Disable a Server Network Protocol](../../database-engine/configure-windows/enable-or-disable-a-server-network-protocol.md).) TCP/IP connectivity is disabled by default with SQL Server Developer and Express Editions. This must be manually enabled for PolyBase to be functional. +- TCP/IP must to be enabled for Polybase to function correctly. TCP/IP is enabled by default on all editions of SQL Server except for the Developer and Express SQL Server editions. For Polybase to function correctly on the Developer and Express editions you must enable TCP/IP connectivity (See [Enable or Disable a Server Network Protocol](../../database-engine/configure-windows/enable-or-disable-a-server-network-protocol.md).) **Notes** From d4288dcd4428e51475fdc77a0d5a4268a7a63163 Mon Sep 17 00:00:00 2001 From: Anthony van Gemert Date: Fri, 14 Jul 2017 17:01:34 -0700 Subject: [PATCH 313/336] Update TCP/IP prerequisites --- docs/relational-databases/polybase/polybase-installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/relational-databases/polybase/polybase-installation.md b/docs/relational-databases/polybase/polybase-installation.md index e5218c8a284..dbd6c5f46c8 100644 --- a/docs/relational-databases/polybase/polybase-installation.md +++ b/docs/relational-databases/polybase/polybase-installation.md @@ -35,7 +35,7 @@ manager: "jhubbard" - Minimum hard disk space: 2GB -- TCP/IP must to be enabled for Polybase to function correctly. TCP/IP is enabled by default on all editions of SQL Server except for the Developer and Express SQL Server editions. For Polybase to function correctly on the Developer and Express editions you must enable TCP/IP connectivity (See [Enable or Disable a Server Network Protocol](../../database-engine/configure-windows/enable-or-disable-a-server-network-protocol.md).) +- TCP/IP must be enabled for Polybase to function correctly. TCP/IP is enabled by default on all editions of SQL Server except for the Developer and Express SQL Server editions. For Polybase to function correctly on the Developer and Express editions you must enable TCP/IP connectivity (See [Enable or Disable a Server Network Protocol](../../database-engine/configure-windows/enable-or-disable-a-server-network-protocol.md).) **Notes** From 1e4a9ec572dcfe1d65307ffa700f0514ccab8d90 Mon Sep 17 00:00:00 2001 From: Ron Ortloff Date: Fri, 14 Jul 2017 21:23:56 -0700 Subject: [PATCH 314/336] Replicated table Changed details on where replicated tables are stored. --- .../t-sql/statements/create-table-azure-sql-data-warehouse.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/t-sql/statements/create-table-azure-sql-data-warehouse.md b/docs/t-sql/statements/create-table-azure-sql-data-warehouse.md index aa8e21070b7..a9d6a817633 100644 --- a/docs/t-sql/statements/create-table-azure-sql-data-warehouse.md +++ b/docs/t-sql/statements/create-table-azure-sql-data-warehouse.md @@ -1,7 +1,7 @@ --- title: "CREATE TABLE (Azure SQL Data Warehouse) | Microsoft Docs" ms.custom: "" -ms.date: "06/12/2017" +ms.date: "07/14/2017" ms.prod: "sql-non-specified" ms.reviewer: "" ms.service: "sql-data-warehouse" @@ -145,7 +145,7 @@ Assigns each row to one distribution by hashing the value stored in *distributio Distributes the rows evenly across all the distributions in a round-robin fashion. This is the default for [!INCLUDE[ssSDW](../../includes/sssdw-md.md)]. `DISTRIBUTION = REPLICATE` -Stores one copy of the table on each Compute node. For [!INCLUDE[ssSDW](../../includes/sssdw-md.md)] the table is stored on the first distribution database of each Compute node. For [!INCLUDE[ssPDW](../../includes/sspdw-md.md)], the table is stored in a [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] filegroup that spans the Compute node. This is the default for [!INCLUDE[ssPDW](../../includes/sspdw-md.md)]. +Stores one copy of the table on each Compute node. For [!INCLUDE[ssSDW](../../includes/sssdw-md.md)] the table is stored on a distribution database on each Compute node. For [!INCLUDE[ssPDW](../../includes/sspdw-md.md)], the table is stored in a [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] filegroup that spans the Compute node. This is the default for [!INCLUDE[ssPDW](../../includes/sspdw-md.md)]. ### Table partition options For guidance on using table partitions, see [Partitioning tables in SQL Data Warehouse](https://azure.microsoft.com/documentation/articles/sql-data-warehouse-tables-partition/). From 4ad9953ae0706eb4ba5b376358470a6478eaa193 Mon Sep 17 00:00:00 2001 From: craigg-msft Date: Sat, 15 Jul 2017 11:34:19 -0700 Subject: [PATCH 315/336] bit of cleanup for rc1 --- docs/sql-server/sql-server-2017-release-notes.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/docs/sql-server/sql-server-2017-release-notes.md b/docs/sql-server/sql-server-2017-release-notes.md index 0ce9901c666..a820db337ad 100644 --- a/docs/sql-server/sql-server-2017-release-notes.md +++ b/docs/sql-server/sql-server-2017-release-notes.md @@ -16,7 +16,7 @@ ms.author: "craigg" manager: "jhubbard" --- # SQL Server 2017 Release Notes -This topic describes limitations and issues with [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)]. For related informaiton, see the following: +This topic describes limitations and issues with [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)]. For related information, see the following: - [What's New in SQL Server 2017](../sql-server/what-s-new-in-sql-server-2017.md). - [SQL Server on Linux Release notes](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-release-notes). @@ -34,11 +34,6 @@ This topic describes limitations and issues with [!INCLUDE[ssSQLv14_md](../inclu - **Issue and customer impact:** SQL Server Management Studio (SSMS) 17.1 and earlier versions can't trigger package execution in Scale Out in RC1. The error message is: "*@runincluster* is not a parameter for procedure **create_execution**." This issue is fixed in the next release of SSMS, version 17.2. Versions 17.2 and later of SSMS support the new parameter name and package execution in Scale Out. - **Workaround:** Until SSMS version 17.2 is available, you can use your existing version of SSMS to generate the package execution script, then change the name of the *runincluster* parameter to *runinscaleout* in the script, and run the script. -## SQL Server 2017 Release Candidate (RC0 - June 2017) -### Documentation (RC0) -- **Issue and customer impact:** Documentation for [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] is limited and content is included with the [!INCLUDE[ssSQL15_md](../includes/sssql15-md.md)] documentation set. Content in articles that is specific to [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)] will be noted with **Applies To**. -- **Issue and customer impact:** No offline content is available for [!INCLUDE[ssSQLv14_md](../includes/sssqlv14-md.md)]. - ![horizontal_bar](../sql-server/media/horizontal-bar.png) ## SQL Server 2017 CTP 2.1 (May 2017) ### Documentation (CTP 2.1) From fa1e7d3ea7fee79add6e4486b32e9538c5ed748c Mon Sep 17 00:00:00 2001 From: Jovan Popovic Date: Mon, 17 Jul 2017 15:41:18 +0200 Subject: [PATCH 316/336] SQL Server 2017 RC1 Updates Updated content with changes in RC1 --- .../automatic-tuning/automatic-tuning.md | 24 +++++++++++++----- .../media/force-last-good-plan.png | Bin 32754 -> 36098 bytes ...-db-tuning-recommendations-transact-sql.md | 6 ++--- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/docs/relational-databases/automatic-tuning/automatic-tuning.md b/docs/relational-databases/automatic-tuning/automatic-tuning.md index 23f18be3d47..bd812038614 100644 --- a/docs/relational-databases/automatic-tuning/automatic-tuning.md +++ b/docs/relational-databases/automatic-tuning/automatic-tuning.md @@ -74,21 +74,33 @@ Use the following query to obtain a script that will fix the issue: ``` SELECT reason, score, - JSON_VALUE(details, '$.implementationDetails.script') script, - planForceDetails.* + script = JSON_VALUE(details, '$.implementationDetails.script'), + planForceDetails.*, + estimated_gain = (regressedPlanExecutionCount+recommendedPlanExecutionCount) + *(regressedPlanCpuTimeAverage-recommendedPlanCpuTimeAverage)/1000000, + error_prone = IIF(regressedPlanErrorCount>recommendedPlanErrorCount), 'YES','NO'), FROM sys.dm_db_tuning_recommendations CROSS APPLY OPENJSON (Details, '$.planForceDetails') WITH ( [query_id] int '$.queryId', [new plan_id] int '$.regressedPlanId', - [recommended plan_id] int '$.forcedPlanId' + [recommended plan_id] int '$.recommendedPlanId', + + regressedPlanErrorCount int, + recommendedPlanErrorCount int, + + regressedPlanExecutionCount int, + regressedPlanCpuTimeAverage float, + recommendedPlanExecutionCount int, + recommendedPlanCpuTimeAverage float + ) as planForceDetails; ``` [!INCLUDE[ssresult-md](../../includes/ssresult-md.md)] -| reason | score | script | query\_id | new plan\_id | recommended plan\_id | -| --- | --- | --- | --- | --- | --- | --- | -| CPU time changed from 3ms to 46ms | 36 | EXEC sp\_query\_store\_force\_plan 12, 17; | 12 | 28 | 17 | +| reason | score | script | query\_id | new plan\_id | recommended plan\_id | estimated\_gain | error\_prone +| --- | --- | --- | --- | --- | --- | --- | --- | --- | +| CPU time changed from 3ms to 46ms | 36 | EXEC sp\_query\_store\_force\_plan 12, 17; | 12 | 28 | 17 | 11.59 | 0 ## Automatic plan choice correction diff --git a/docs/relational-databases/automatic-tuning/media/force-last-good-plan.png b/docs/relational-databases/automatic-tuning/media/force-last-good-plan.png index 957334fd7e7ea858e247e8e52252dee25dc10fbc..ee504f261bfaaef3b446e7fe1d960b338991a7f8 100644 GIT binary patch literal 36098 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 literal 32754 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≦^pXMJ5}62$+`o&ieWeYJ|)vn~p*g1q)S;R)%+} zSq1NO>%z)02qr_g43m8jHz#HAelh&Qhvv&=>g`n9mJsCov&;vl!+F(1b-acp%Zern z(wpD{v>;w!jWJ&Q;4~ZN8o?M^X!fkVDO7Uqja1aQW)L)JM{4p4x5ZWybH4y0Iu&Q4 zwnHDr3yHox3uo*Xp(=eJJ_q)uyKf~2qs7#C-@44_TBwzCha~FxTmz0<>2>Xp57mYh z76vczeu=tX`^lzTZGrzZ6O9%B6Z3UEMYZjU4}5P5NQFv?JE!Nn6LZ*Hw##WlPYvj& zfAJ6jX_?{-2yG)A$mY01iitJW3sUk&h4PmEtm;aad!zENi#v93B0=-5YR7z&uiUtlM`Z0c-gE?J1#-6OK(vr};#|YD=^- zldpybk^AUUI0?_UVVD$FvkejfWM<4&~Mf*Xbp~wpZuWxs*lI|3U+fVTD@D|MydgAW2yn;^h(iY95MLZFB(gGVR2U!5 zSMSWhYL`RPCTRS4N^`ir3Y`YNM{M!7Dm8xy9ivk&i2X5 zqLvCv5_B!S>6ZrZT!;oRuhzN*NUMbsUC5IW!rprI7LkSA1?^ z6T8d|3>>kqwg!{I+S*pN3qRVjl4%~tDa~8`)gtzt+!263?h&`rxk{We6QQA@1Z=uO zUq`bhCnsl}{@pSKI>FgTC!baa5P%>uk5B1DJ>awDMgUU32WX6fDB}EL!Pa)Z3fiwm zty`8@H*J%M^#&a{H|TZrCnWp9{{HtPua&Xn5cjvoW0Nn*y`t7-V&5U|&PMPU*w`Re ztv-m-`mL17NtJl;BcF`;7*{ZjE0Qx#78z9X`|0<;09yQeKB2GzxE0{=?f`G)larC* zaD2Q+yV7Ttl$6X&QLn4NELt^uq!9q!J)AB7A(1+?<)z9&t-&$15_W|EYQjhI?EgX%foFLTnYLmdBzrERNq0g5!*KYMLu4z~1Y z@QF&ZN<){%{I5fNr<}Xe^#9(U5Q%7e9&%f6d^%IX#-(~RdF;&XjEVc>hblrnE(K&t zO6T!O0JRRLaLc}xriun4#G|2h1Y#@z#1@1H*zo(l;pMY3ib*M!6irP{0k^+@0Be{W zpS-)fJ6x#E^g8VWI3>WIbPWu$L4=Q*L2jBR7x$Z27e`CC019+eaun>!8&4iO)KxGIIncusQ_rPMSCFOuLBdbD4_>Tais)kV)o#kcCk#KhVF zpK#Df;xd>HdZXZ5xyocgvSBF!*FflAR!r^LjHOR^IPJS{+$x~il^LUvjlJ0LW zbqk>`MOSicY{OTaWMP2OSxliNfA(2Jy==Y5my<32Qb99bLCawN{H1{D@T<#RFo!cE z|Katud9%kHNcK6F$c`smRf|G@QI2l|2v7bIea^T2u^#W-)4812Izxc$4FsJ>-ssw} zTab#oZ(?q~JDe`~wp?_A78u=*QRS-Qf}XwP=~~yah<8l{vB^&f?S&d=z6YU z%!f|dy^wZFR57EsdSO_~_@qFOQLn+*xkEf%wkI4b&q@>JOnvEDm@D~6Q0w8L5X=)NPE&yyy znePxVOCUB4mORE3J0~#Y^1p<$Lj36%*4|$R9fLG-sY33jb@uB7%wPTj;TRAnx<3CC^Kw%)xtwQ8 zbsj~*rAF7PQ_6<@nX*h?+hyz8B^Q9P!FR@t29r2;N*jQrW9M&Fnf%h3Qg_Qkm5Nji zxDQOTx&c0|H8yO=SE39^W)lD~jf=yJ@PzNFDk>^&nyl_+^#BtSL|s5wdH3ZrN*i~) zX-0R(o2YtFiU6z}cQvYuw5Y*=`js^>3Qf(FWX0F7>EtCqA3KJ=go`4**h~qc_X|vH>ZgK;e^>jp;FDK&T4PZ z+o#VDbZy6)FSmprnh4NLyl$=c1&?WNhp|NH$+_tFoOl2!>_2`r5XX?sW1YjJ)%d^t zYN6#iFl~5o5pz4;jE#w@Wj$gsQO{+PAOYnix?kVH!2tkbleSTz|3p8nW^On@I$s5R z1c6--W>0{jE&&)7)rJTKsV;Vjm7E=bCG6A|wPvs0{7K?vbJ|MYeEkkvY2Ni{kZ+eJ zwP)S;%3uVY?Q3-KZR7E{&l$;k^)OPRrYpnHJdqQL@z#g8aP?hv|pkSqdA=#M*GwQ;3vKtiy~8!OAaKRu}5PJy_)2j^#;Zp51Q zU!B}A_`aq~Vemy1`=n%$Ej2HE-d)jC$YzvOQsQEgRdCOP8^tO_PhkdQapToZkxp`05L5AqFopfr@Sb_iEC=`A9DL| zL{!>%)Ib7=H3g|Q4FG6ds4^F)dRPWjUwX@x7H?IaM?`?Vkt_b_u>Uvc?*B7BoYVr# zfJK-_9aP-1*MPWHv|itnG_-!UymR9^$g*xlXzak@!Ov!JZ% z`(i(02v|M$$`Mp$)A7!HnXq#odL(*!J*<2KJhUIOAJ2W&!s`dEE!ZS)D5xAQxui61_Wl4 zM4gK%bv;1X@Fe#>S9-Wd0Qt~d_puJ-pPPDPUNmGXxL;Cv1n7*9=`KObhKODNTa(g1 zZwd8Q>O4O`2dMek)bcj!11;%PAnYl!OEqK#b1ty}t&+K*BZz&Cd?cpz?4) z4Bujig0yB<4W>C&sv~GT{`phz%CYb5VXXrHW*l(Te!kw(3^D;_?V`pFLHZ$<`uVLG zHm0Bz&&-_Jg6T*^hPR9Usqxa!&5gQ9LHXiB6w!OPodCkBuag`$X=kBKb+|WMseii& z!JXGLtpd94lCla|CECzxE21f`%WqF>b|-QnnPhjnbj|a3UYF%P7PPdhqW2uaBL-iC9NAvYld=))27Umhf8sLIO2&#zQvS=y@&i)#YhXmRo&Ed7q70n z3)JR3JUjqlPHZoncR8uf3c!#6?>A3yX9Ys#7yU}f*cf0WCjW&Yd3@pVEV%a8OY`P` zJ^&cfZA7>+!&etQprQp)Go<4h?cH;GoQO$`=PaNla&5fsx)PpOU~_kWtJvtGlnPtt zp2-_b-4;CQ9LklBov61|-$rNsl^Bn|7IypASW&)liQj(zWigs>&D;Tt zvY_tNu0r3iN~uJ3u#e6}dvsL4R~$9~HF<3oD@g#|E zD?e+YTZ%eQV-FCVAnM-iTfpTUwQxV{{HYuNrX5bh22hO zcqvoM2b`=|%d(DPz56`M+N3DzwuX9m>?;kf4kxKL9XgM@M{rM8+3Fo`XTm3Ps9<0^ zE>+JB91J*&6NklWMii-1j}o*7y64y(rZKY+la!~&^*X6wYi>Jj_3<3yUn-qb`SqR{ zL)2l}cgX7_H$ak)UrWhDD)m}@R(u~2K(P~$mIB|r{+05WEh5}XY_X)6Ry01_VILO< zPBB5lVUm`*Dd)FlJxf=MSE=epDMkg;v2VLbbW@zRjdIJpZW>ou7R(DhxwVJ$Hu*)5 z85j0`@l(HG^>oN|d7jRbxTFTD#gBB@gFr`XZC3z@(*(T4gD`7Xd^~{=<^Iok*$?QK z>)yE<7<83}BM(GNaaLzoG3nM;x^=)?J!Z*IZJ56p6dYktrECog6%TB7|Ljmo9Wt$* zYt=rTzPZb{X>_}tht?K+1m^n%2C);sI0xt=f#>mgO6n4{kbK}kQ~$OP^H!w$CuVBL zuHDNH9}ByAOP@$~?9;a^MJv$5m;Qz#5mgQ|LJC=nZft6W$mP)hco*C1f#>Spu436D zuC`B@L_^NJ@wI4(87>q3a}5v!EVuq0N2PxgUu7U_bxgFDB4{|BZJ*&hpu%no>MJ{x zz+my{4+CK?G&dc(@l-S)9xLCg`ncgz@5+dd(A}qxbh)e%Gud{(o3NjwC2kGZRc*t< zl~a(Z#W<^%CAd?=^=C@w*1ae2+Ass3muI3$4UFt?6?*3y`9%{Gzf<{FNnfS-F^q%R zKx$K)yLHJd9<6Wckjvz`w8RCQ60szy?fqFx=%@YR`_Y!Cf#0xX#jhn-!h;B#8F5LJpd@SvveQDsLC zUn}`R-pF?&H#B%0PCk;uDT@I%o*+#-{m%uAJygpsn!hOB{4-6yJopx77&Yi zs^n&UtZy}z941A;)KaZ=?s1jrzictxf4w*pl;!EZWshUq;cwi>H*+GxQy~}S+0%^| z93d%T_Zd_Ck6E_8)Cj*6d__>0l5KAqEOYPd{?kjW4E9bTV!DC!$gx3Z38rBS=P6n; z#qw{eQiZuHgKg=KQn0 znfBEFQNb?E@;b(HaKEq6Dz#*oyT3;9El2F*ymxOpvCWIXW*Zj_CVWF`dt-Txk5*8{ zdti6QYem_NkvCVk4nKRLar%6AVv+k3u@&pyb9kgKbiRA9Wr8h>1lMCSYI$UBjaqax zF&a(LCB?xruXtNBEtcuAFC0CcnQ2T{xViDrXx*MZMy^8Y)lYRYn#B_Wx_K@5uOpB` z&>Oi91FndaOfjxHmP>~`;O4&HDGRw94V}t6wW8E(VDA&E84L>KWs{2kxD+tY3OLJU zka48Syg1#Q6sU+y5dhc?AgH_b;UX%Hfz;7{{|C#1_28tjvQe9iYne$>F}kDAvSn7e zj=N-ERQpC;6Z}CmY;`f;0k><%`Vpvp`&!+M+vd?riDvTQ7T0d0(BK50n4(nAI zb$8!wf|^2-)VGJ3{%+uM6bs1*HO{6gjFKLkT?Tx)kOTt_6abw|ijUuf_Zy)BA@m~g z6W2Ibb2!eclvRB$VmbT#{DukYn@b69$dX*=_1vBMS${2)wK)5a)erQz!G!jVHTY#` zF9zQ7oYki>R>qhm)%Z+Wg2_pRZtHy?{*Fe(gy*UF`Y=kiXkDMwtW~pK4+RPQVoSL} zT&`p~jmrQ!0#?v^OE4P%S2py$O?z~AIUfa>k~qeLbg=hb5c?ReicW9U&bOl(7aIq! zQ55lX%tX2`C+jz5vdsZ|yyRg*DFdt1>q@!p>9nan%jZjj;YPd!%-fTzb`rVKcn(h)1OD)a9hh%^CRc1x?C`LiND& zO3R)apu^(7yN9aFf!+(CDzyw0^dHePpe7CTt-m_^NctZke0Q^537u78`DYPZ%O?#! zVu$&~zKd7uFTF7_l@g1mvc!%8&=HW#3{KN90D;-8EbjquM%NY)*YJb@wE+|2eQSNT zU_ivT1EsHI8d1yTW~{ zC-tt{#(Qi;5y{+*+hr^DYo)Ir>gjFA)h+cR_e5E6$Yyt^&lXnBulos?pb>(%A`iVg zV(L!yty=5gf+L0iKQNES!l6bxPI^PTB2 zCK+h$2A>?1K^7o^hm>vUr@PQ(BB%yj6K>A1n`}OZXFNwo)enNKco?Vw8fX*)E)XKcXX+YnO-*Ux$CJeo#u4MAyYwL2*ZPiWmz zDV6OJ21Mxe&s>=r5@^Xo77l9Q*^l4rH#C#RA(jmti0%{_S^XurdMK{-UR6|1A@XS1y5Rh{45ApHQ%Ii@pAS55Fv!iP9p-y|F>~oggT+f9Xv}g2)?9J=ND(zy~OT~NCFV;1J~Y~9oH8!`umPvbdb>X3hd2k zWS?uaSnx|wXvQ>~y!AxE5YSiSy#T12fF1-?E9mqOfsQeESQ~>@&JdrNmV2=~BT5jZ zd%hrnZK|$f&47^T;GAZaOJ@%6^cD-(NHNY-&hg#Vj_hk+y)Cx)v3tK~O~{4sho)@h zJv(p4^W-XDi|#&%?i41jl@M-}U`0zX>P46OC<;3^fx_Yn$?)dU`(253rcs07L3uAe ziukF=8{S<+>-y4Ivl9;DoxkofklS2U{ntcR;cdiXFhFh=7cj^c+1aRG%uwJwbC10eQ~1C$Jo z>2kQ?Rfw1rA8=n0f(dpr(fHXVtyMKDYwt$zwZc69^fD~nZOpECmH%1UsxKH?$myZy zk;Eb4v~)6gV|Walcn@?gB9eS zJ08w_8NQqWh>)nW=p3P(>MLTdovZaoUIh!VP zReFPjbRVUDJ?$NcZ6>?AcXyf&j9fI|*m1RASufjN_ho4FwfJ`PX-7l!R{gzNnjmMr z{hFCi_RGB=CC)tsiBMN4bqH~0W<#-6F`c4m@he>>4p%ay67wVGpe6j$yHRWg4X7M| z*gxeLTKCUxlH0I;F+efKxDsyxV8P`s`{jWBJ5y;P?>hVAezpx;PoaFmxuq|C|#$%%qqm(($bv%9cYMZd!%9WgC zmPGoRj9$9eF@RGfK&oi0Tz zFmg_#4&DSDfC1iL@v0*%`w^dlLDyX$rVInWsGq-H$e3bomOHTP^z|uHmLN&KlxXNq z%87VOLSF2{*G{&54V^SHFM2d|{`tGI|VU6RA!@-V}2f{P>wMgXUlSu>{5Ly#jH<|k0*vnys$ec@AmqGT}J%!}5uf2qf#STDpG{)S$l>5sm+0tiE@SVFdC*wvcxabobf2x1$FXNYw$7Qj@c43^ohe zi6QWphnLn;Sg$F@Eq=4FPQK z%dbU`{L4|wi)$z&a-#u9T-m9r#uG*$gM)Vk?#TH~H+Q&IhnLeyJZfdP084 z^MOIt+z*iBS9^oKnU)>~< zOdszTA4`lC=$t$E`rZ87O)w&Gc%tMspm0Hm*N<=x`x_+{&gl2uEGfIIvzqz7@7 zz8eX>#4HByv3XeUiI0ReiaiLoiiZJXR;66u$v-ab(}}~|o~S7Y4#b4KB6L5SHP--| zqbt6D`g^A$-{%NGpw2Q-(qkYE@jt`p+@h-{TB?#X>qZ!Z3l$gcY^@QNnthR`APQ-w zq^yU4wfnU}UQWkl;%fV~CJ*nj+NWQB)u344Zrs8|e228|pG(+8KQx!8J_wpl6r^=1 zgVn7W8V^o1Y<+biN5)74_zohB%`9R#O?-9bB~a~d?lj82%pZD$;%}?I#J5k9#N=;P z2L@wNdEe1cRzskn@TC}W4Mi~yWkRIcs6+K^vs%x&01NUKJLX{Vfv3ja>(3m3Z2l#J zwp6VJy@`aC68Gs8NYMMvtX^HW5l?mQZyyqD$C~!x2<`A$(v*Shp1F&DSJ%*juV<{& z1llF>Y~0|Y=!`Y1xK)tseg4XljEi8Mts3!i&*y6sI{~Y?UDo@*UZ%?2P4{+Cx{VV= z&QqtiC&(QnjzWz;EhA$610{W*+a1>;ithGmBO}J$$wWO&F`Ez_nhV-c2Gl{+L^|@y;hGRDTd|>Gm1@Yd!9B zl*7_GE(F6#)p}4u_w;UgZS83OmDV??qtOt38ZR=v+H!f%<1Tpr=~^`o$qV6&GreWK zZ26Apo%4L;D(lSz|I`dUq{g9ygK2TfGi~g>&j4n?XyeStoIiJiBj_84pc$E(TTD*f zUI`N>LZYf~gU*j3WSMKA%9aQQEde;>;u-s zpf4f{AN_fZC5D+1PD(`ldR_6#Bwy1&;6>;;p>3q0$eqo=^D;K~%T!^#<-+#vbo|IW zv+K-d-5Q6p?^87nwuM<-ikb$jSNeQ6r`wj~Ufz8(6PI_GdN3~$_XR{5+x1K^{Im^y z75ix$r*8I?S>8?QfTXbP(d1R#htH!jH)K=cdzp(FEvu>Tean>vJGrqhh}c&5o`rm* zPN+S<9+0sffxm#WkqR7ODr7lbwa=XOyHa#}u)JtsSKp(p70h;C;c~5k#|HWTV&R;R z-oYABzp#|PcK|lsAu+5lcQL^Age2 zv_!l0^V3V9CMZR*0T`%AOKr;b)SLZs`{)iF)t(DS?i?2L5^lpOw{T} z8xAzP#~Etfo$`&Aa!1c>v$XpdRgpWMGK~iWpWIDeghwdpwc_A{ZRIcmJ_7v&nhj3o z_9xM&6W;f*8^=xDRvnMR3Ky-eO7gP%g{Ubl7w&T`y~)=>O9|0?8zah%njsRoT%LzD zr+3epJEp|Gae~vW@CJb`L4|pB<1IS(t99|>hN7P(HY`wS)>4ueclvc*dF3qexu|An z%ueTh4d~pfc5dT&GC+e0&}rERbPU&<47B(*AAI{gId>6S zbDb>QT7uU*#UrFKz`4aEQaU80o z^(zY|DqoJr(HRlcwcKrEc|tEV+#bCo5mysUXBZc0+GUW%-IkHRGS-m7W6o za`s{dqMP*hu`JIBx+CY(<_F^1ws`my_5Y~2`G~*wm`l7UBO3w~ zncx#DjY~d23;D9gK8$zC2@LF40d{ei>+-1t@Ax&W+G^&VroQ=}KA%EZ{nj=a!X5MX zhhMu0r?1?JXi%B&@xsvNatb&8q%?bcBww(9$C&7Y>vg=sU_mv|oOtKgdj^ht15D9D zQVNfCQ3O!H-9J(OHV*p&SMHgn9y*L?Q#+91z%=|>m>DUr7;^6&|1Mm|dR;mcn}{A)2ynVGy+ zC%7NpRx&6u7wW??-C?Ss~S+Cb#z``daKJA8+a}KLG8U~Ho zQ!)S1QLc`@9~`fNSTU`&Uf$HG&Sx(B+Pa*eHWXnUA`o#XA0LhnsJSs?Q9n3%hU}gF29-3R_TopXn1AwR9b%RvX***RlSRBWqJ$k)Kbb;HzfM5 zV(ZTJ1qXAd>wAI!N6Kjuo|4f8ReVh~C8go{Z>OgY^3C`rl?j`eWVOznSb{Fwgz<@q zC%ist!$Ipca!JjV-Jqg%xc)m)=kd2zA29G<1^SgJ&v%$R*KuPgvSiD6$OrOj|)lga{cAS7o|77c^T z#(Mot<7uP;lJ^$S%j5`pVIpHR3YRHnY^y(E>+zu7BvVD@@3U3ONr;rPF2b!yj(^jG zcm9TDt~ln2&19*%;bI{$2vW8sMpN3GERr6l?-4ukR|qxQB;lHv@e1W?FGD6JBhYht zNuED(63s8X(e~rnN&8XasM0}$7m1#Q{_`rdMF^Vr;wrTLC{^Ja5}`^mAxbjW8KAG` zcc2f|nG(ggM&k*IYAV0}GT>vrkQFAA*XZpBJtcT=BT-hA1|B7>hz|B#jk9XNf)-|F zX`qVuPt1Y}+sNrzSWpA+dbmXS=aLD~f_6j{bpf6tNQ?dIit(9`ZI+PYd#}~~fQ&_K z(3kH6s8q#!mh2l4gs!jqN(3QL!a+sT@uS{k1!PqSft!mYwUTW>=KcFGi!-}+H(t7o z(7$oj)|1sHra}6A`fu8P4#+vY%bYiO!c9m>$dTicYIN7HFms^06D%FBv@Wa4vj6R+YBily(l*>_K~T zaFRF+Ck*d++hMS!vuwj?FUjrcz%DveaOt6L^PPqGPfIu>D5lR~V&Ry9En;39CX~S( zbpPC_zTO?DafJZG<*$|fOPA|`n$3-bubT7>ahbzNu1Qk*3duT3G0GaKQlIP-6m+#Y z%wQ1nz_UQdikKzspAO)f(5hB;(HU|sHG@}BnVL02a^)b~Hk5#CvY;gb)aw*uTC==a z*W+Py4`-&jbR1>vh)?%Ni~30d=UA_CmfR6Idio=fTjp`_!EDfN#Q~J&AXjZE&_mX* z?XGEYG^0l|DX-32QnF4`c#XL`4!O=&3$U$IYcXl|Ds>`a#ns3)c<+x`7S_Ss`Sy>h zA*C2y0pHQ|rfPxyS`w~MB=PLUMIHG@SUWi?=MLt}`wUQf^iDtQJ6+J0`}47&GApmu zzTGLNHk*>yp?}r^!F|(Z-m9%pBV;tWeu1eJYi8MHE_sjUMQw1No zE8*?OO&iY&8=1!DU%x2kR%l2uZaT<5`@aQ(h|YyEWJvXk?pKwykrAd>{>>^M?Gpz| zI%R1i@JeHXl4Hr}UvbD$iCAQjnfk;~tCr>Ej2_wjS%QP8L{w2(vV{RhWuRtvJnaa` z4i?2jHAGUCDT;O9r2mWe$Isl(M^{8Wmel+zX%-ao*8EEt=*_v`R~+7UoafWC>9q^{ zwjvND!6L+DWF2np8L#0KtMy2yG8?h>`IH5>iS@#7ICTp*R(^y$JF_)9mZvD0BD0uOxa7c=l z!EN}1zWVojaK~^{Q$!JNBwblkyINgp%gYWC$WkBQ)=@vp>9J|9^MJXpPKBd~kCLuT zOAFoKpr(oGNU9fI+9t?kkuwYQ3?WbO1oiz(6thKl_7~6HYB?G3Ft?88RdEH$nq#gLQ%GM3gp$cFL4`6RnstjshZ!aH@ za7RsZc|tC?&3K*CLU+parxj+8@hV)HTq@7lAVK%Q8xhYI@t?DT&Ift?mGobkY>N*^ zmBGr5&NlgGS-r#WR6b%=E~u-m$xeh;1I=&JmEoWqO3&|L^jQIygTngrnL_J~XN*9d zVRyQ|TBEPjbY7lCP*AYg$b|O06YP`aRFU(5)KIukO7m!bKy}1h0gIyq587piqn{d$ zE;eRrF*Di&6UdKS0>_-F73gC@X$-?acb)kKSH+y{d#=cYl#C@9r}ac|*EtpC07{Cr zE4px(4RM=|r4pZ6$7KHX(tI8wUmQ|}N5I1i_y33wg@!M<>}abh!Ck(x$cDD#AOeWP zMhlv4YD-F3vK7mhR*z=O!D=ZYEmE|b3=DIJP>Bcps@^Ke>jP;|m;QsX{J>g^LY~I4 zX~n``8&~I@(Q^Ah^i>796J#h2f3di9a}1-RvFo=dwB(sUhfeYI;W^;~3GX}^8veZ1 zFy>nUt`Qe?w#^f2qpr3n09_QDEXe1@N%ZHA`PuP}=Scokvre6y-K?6N%2w2f5o~tc zW_6?0V_$PhK>D#9HaMszMT-x_tc_=>1U5@WCdD;F7Ns=S7#u$a(x>xf30+=U0nH^b zioLPX8OudFkUhygzxN;M>zG)Y&G%hy+~&BnsP%GxH$2(Tw+>49tf;K)s4R}W3RH=z z2W(`~BF0;~w|)rGT#E2E+IwfJ7S$iV;eD|3Z0(Wj{~Df2LH5eY(<($j|n zsqhM767+g}Ob|qMf0`wAU7SnHh3BCNRF!ZOu0q?#z@W3RDqhIiRpJj_;S)?rU)4P9 zcEKd!v2!^Z=Pw(~hmCpE@;iEtHN3aAKf9P4${p$;>9A>x4OfWmmP@S~7+f5FGY9Ak zFN6-0{v6Nf)r29oYQZ$!$4pHD4ujDD(Qmk4gDa0n_(~G8_?bU&a-O z_1~X3a`5Ao^LxLSb}}k!(JE?KD1b~DDpC4O1BDrGph|h~y9)i$Wmr8uDulU11V}wf z`>C?zi?LIs(}{geWzRujf>5xcGxqQ1)2^GIWi4*&5V8OjNFc~i=BjK|apFR;Rhf0JKAr9X`wn*&m1 z$k{G(rB(eI_0hp9H2P~nCoJz2Z_;@%Po8Q2PiwygTvO$3ymc-v^}o#$0COoz+J-1& zFlcjUW?EoJydcTvQUz#=)Hz`xcySkCA`(&ZL9wCqAB6#w*B`TJkac}Gi7gq1HwpHY z5$BF$09eb^t{qfj{~FqlVgP6{-sjs8kKPZo()bPWdq4O|_CC?zngja}fW2JPWqPf4 zs~?T4)#PBvOjMuj6qzuzLL_w`>|*bg)BS&as!PVp zd_Et8#Ba%}_}aNuC%mu;&KUEpVWtuSIl;2nR4mDJ*x6H-fy2BDx zbT^2S0@Aes>6GpU0qJHVus28ws7Odi3J3}UzKiegednBi&Y3wg$G>!j(Z{{lv(~+? z`@TNc_1XRMg`v8BLe{MA(x%Pqh2he>b()Z(;=1!(3WYMx&2(wmj+4b%Ee{I}0-8Uc zzujNuyEk=%VR62mea82_Q{<)5qp4&C8s7JRBMYpbwY(}nldnUC6=c2NlIWI&Tu#cR7HY!~!)`2m}+q}CMY&mh1n2nc%I%(WUA_>{Us zlFs_iy;!#N&EU@Y5X4qCZLgY60L<>(%;HqBO8nU#(vsw7?mnuWOkuubLa1W#GU4#+ zqS;#i&(BE_61eU*aRvwftTP!fHF?$qW~9}_%=2~edICceg1n>=yQ`_j6ZgE)_YA41 zy^n}eaN>!8DyfQ5Ry)Fg=sDgg)?T~1)Rj036aF*Q`rL5!4Yq~Y&QVb1%>)a&wbrVY z!I@@#ua7Vxn6afJiccnB%l(U{E`dIfh2`n+PGxdcG}BV$HaI)UG(;3 zO3QC8{49`vvhmv*?ZxXe;q8b3%p0=joBL@0iDr&j^jYEHDdL#QYU4;^DkHuP_UtFJ zIi(i0PHRc3p()P&(7c$KMOcJayxLGBBw!Q;&4aW^mjl~aS&B1EMuu%RqeqNr$*vqT z@I}ec$;%QUPv84SKAymz$(6lVr)=lwn@9|^x-xcz+A?sPv>&pb%uk@Tk9w2t{EW$X zpIJQHKBdMTkykA$4t_B8(OiqucD4fnSdf}{H3=(@5on)G|G{jcqo9|!kV7dR8?Zc} zgv-)m0>5L>^1)JSBn9t4A@R(4HRvY%?-t<0+Nw0m@dNJ#%)|v!Br~g&<4oTFFcQoX2?~cRtboGqI+B7t(rDQ0rgd2kufPdpvrN zM9GPn9(;U0Z{&MW7>X~893kNeqQQQ}gTK7|s`x6x+v&)DVQ^M8J~2ArV)TKmBE2;f z#2(9kTkwmS+2}MYlCHZ-*fVQMJruHH3&!aZW%KWDXVR0g*f_q3krMoLR<0Z<**j`7 zDVz&>!vR-0ulo|TZWCkqtBfE%8O#?EJgqT@>mD7*e^2n7b<18?=^w3=Tf$3TXhyky zI3W775?z=siqt+~N$O9eB&Xt2+1C8u2HVWixb#vhYfD{PEd2u*cPVTM99hI%3%(j* zzk8D#>|XcjkoM`TKftwoHzRfG@qe64S7h4@ox2x?2xjob#IB(;MX1ywfH;N<^G0El zSOCA9>&tB(&Yjgo-(Ir(90Pvz_Xmc#mYWJ<9~&UX=;e}nIm^fzIhNo*=(MijM!Pe; z-(e`LJw9L^dYLu4*>&9cSx0;`8rbKJA@Nzjn|PJJ3u7`^KA>xkHmq8d47KWVc4km>i_@) zT$uCJ1dJgNY4Q%uLZN7R?6%t_#4=IWH&GFF4zpa;Sy>R{idoe2xT|_%+H=+4bxPI2 zEUh&fcAuY!8rXSP7&N3CaoL_yq`1IlC2~8IAR1btP3gpczq;#OzpGJX>9p=6&Iqj? zQ&Wc|@OZHpN7hBl;=c35YnzkpOQ;j=Bxcg}hzvTU_+@cHeh7thJchQOQLPnKu(NPl z8!fb^6=$k>usHBPWw6uNWKsEhsbN=TjmR3C>7MG$6V_sZEsXuru;Z^w_8hcg?#!%< z_Q)oJYFzca?9lktxn!EK6y{iYkTuphxUA9M;%jtQuQ#z=(Y_o1vV_-&kGPsR_}E9B z-0NQ{82C%)HIEd&xqP$Ou>3~l!kS)@{yX)`_6;PU>Hvl4V1+Dd(BfJEr;%G-GE1*| zo#`$^uawkejYYiUoxh&9Q$haVChm zus9_eB^Wtba|%e-m>8ISXc*HEqSMb>p;_WAZP3uqqFAbnX3sNX(W105?xhJaLTTrm z9G49-fLff^Ds>dgCf56HFSpWuU-sX2r3-P&vGhBTwe~_3VlDOjNve$|9Mcwki9_1l zojz5iXKZArEql=1O1zzB#p;ikqtB{IEv+-WZ64M6+~C^GS!#ZsTPeN)(XACmA*135 zf!aXY_LfDA%HAW?YR$oS8t2)p!Ct}Hx@MiDQRWq}_+#;((HkKSb=^%}+xG?4H0+BU ztDN=P&#?QQ_&@{c7>p|zi^|Wqz`z`Z=Ssiyc%E0qek%JO(sa#L+(^U;LicIq*K1g< zRbnZ}1(^^{W~ENubE$N7j)s+SWJ(Wik%E)({btFH0p5^vN?JaInp*?3_&~$DFBBGg zyEB;rVUic4GV&$&LR{-(?bbf|eRq9&mKt#mU~vPaXi@@DgyPCGqyC zSvID%wY9yK3Xm+@F>f*Tb9A5KzEGgo#SQ7Gc${w;`c$g!`n?cedqrpdTCMVJet6EV z+VU43DBjUWjSjiA-KqJ)RVNLf_m9tyEGG$)c`OX1-le<9UF^C1VG7V>Le0u_jTq_Y zn*5|dW^Ukzu)40d31(p^XMu^0mdPUq4ed9(EhuwpqfbcpF(LH>@5Wtg3eBonI_AU< z<9LSys=R~ST2$na6vWLbyyAp_L8O|*X438gatSm{K67sDN^R~s1!B$NlT|I7QQ*W z_qxTg?rLYGuu%66`ndgwP2yO)?W&1+H7&2oVzQ1|>T6bdg~`@gj3!j0i!ZyCbNIJj zqZM`)?-{0o{+-ErvIY{9UgAlO#%lt*pH8dlb;Qt?UU9kdd?&Uad$C0Pnr>}T7Sz}` z7Ir)L>0oBvp?bif1a3l#^|#F+|DZ|3JA5%-$D?9nLk*1ejj!K2IBNu_ODKoR>*fuL zGjT|*IvN|C@Lk39ts1kKw~rO*8m)35ARh886&vb8>C}`ga1Ah25D$SQ)-iK+tMAO# zE)W~38QG&D0U~c$k>&N|f?Okrd7g#5;=q$Md&g zJRIuou73!(rfIpq*JNi^I#Q#4za;kD$3zskbHqMkm}loYadKnoj~>F{~s7k1~AV%>;SFP~A<7WJaqjPk=#d$RvDyS3RD{h_HbVk>*z^vtGsV>1V;aHm21UeKBUa{{V*A~S z{9-L)R-WB0Iq!e^ihwXNGvhT^W)MYeps(KwU1)Ev>+VY@kbWrvB{Nv5e!ZR|5Ee$16!k8^Z- zT{cI*H9KF=68~keC@15j(WlX1VhL84+bz5*%?5&E%t2N4&tH9!-LZsIeq-(>tr50a z!;Np)jEX-L~-;dyP#yi!JMw56)Cuv=af%gJj@o3f-Tk(KW>^6rNJT|moL+x5sd~LC3Fw*5szxrwNFF5gxIKx zE-U&HAqgbsp4xf{ibKgKtj5($4JOknjL;_}h6!QrIkZuxS%ml-MS9{#6$awtKZqRm zhjYLtS$-3zw^&OjDgFg7<&x9-QX`&XAGz*bHSunGGVf{a*bjQnL_Lkl#Y$pnaZ5GR z1UlG~o;rL&+r17A@otXRC{bgP&6k_0MuWfpG6_>S%R@kAh&9A05`S`ZxJaWb)iSl8 zThrK>xbtTZee^6Ba6 z5Ii$3;4BLp{0E$I;%8$dm;^LkpdN+i;%QH{XgR)X}Pdbzn7KlGhP#a|4yv`_%CB^eE$Q4 zQFuv!s*RYQzOZ= z=m6azSHQm0WA!=Ubk$`B0^2b7S3M3EYac*`K~Vh+){bx?Xs4}k^$pEnmFIe&S-*9Y zPCZG2(#R%%=w=|G#yzxN0CEa|MBg?J1d_)AkjEq0+c#Ffj#h;LuxT5dmvnw`fx4oe zch7e;8fa%XgrNgJnG_Yz9j86u+nzxgK+`k0xDMBqT9<))_l*pd;q-Q zMGNqlb@(TDwnjeVy|Z8(G61-!;(h%-$CRL@%-uln;Q)l7#6lG~+l}!>+Q2$UmA%iU z6Byo~b}kN8VFA;a=QY4cIgH)!7hMrNL%BMu3$4e0Fdh;O{5 z$N|rgmlr#pi;=)q5ZNifo?TyR-DUl%S+WsD!nGhDgZ;7LFW?3lI%BoMg{yy|*M8tE z*xGJx3`dzXTOlO1rGx4K`;*Fxw%O3Fo6=AYlZjsrfK6y}wsY$0~Lm(BT<8TQ6_n+S3 zf2r?t92Yv=O<EpieNT7M7fn-_(Vnm;AI7FZzufQtI-fm@oSFDvACcXRnA7*L_u-o7yCGeamm zkcd`eY?-Ji9$95iFa!+OKQZ7vV5}b|gu-g4l~*R@1Rv_`f?Oyl z@SlQvF5*KQTBhODdP=5Gi)!2J0T0oxm}Na=G^perH)d-n3`9kLHW1U zK@1m*CFYwICobM3beRRR=nr$0Gbb6w#OA(poT`%N7&%H9`TnrKZ7?9HubeGdpKnA{ znsM4D&huw3fiEr=qdAGqA+gQr%zWtA(BRTRv^}Lvu&`)?SWwGBhVD}dfWF(o-+!8s z%!ubD-8)yoH}D7L$+%Tq<(N(xZ!e(}x#nwI13#pKZG~1;d$-;A)cM7HaxKNu$3oMu zmQ&a<#xqWmeb5)1&WCp zy!aw5230QrmU_2~J}NA>f!A3+fGX$1N5gX81bn$?+(>ZOD#U5nZz(|`%#ZdoV&^BED4B=!-spsF-c6Fr>85nX82mYSe_isMURc7A0p)3h>e^l`OhVXvgSXFx3`Kqx9R1uES)g{@ zK`OVM3@k&3*3Q3dM{eu^6_iBS-rInE0>9Z024v3#d+7kGgNA)!19(bc=MA(}34sN9 zR~Un_MrPVlBBZInG zKf2zgQ<3AsNM)Fi_-B8|BGA(P0R2c1Q;*4*Cfj+dRNzc>HJ-PC&dz0*6Z42F?=w^| z*&%mpH6o=Dc=^RCQ}m~R^!lFEwj{6p>=})PjA+m!nO}s8N*GD^pD7*{6y)2~J`8sz0ckN{K>Pks}eEqkUDn7NaQ+uS*D)ZYuAojP0UVh4xjR zAcw~SCjY>EK6c^sV;^QsarI2dz`;DD$KpRRWiiJ5r>V)?|7#wQg10+Ad)aG7$SOZ0 zp-!$p;`xb!=D$3X?_Xwh&?PBMZL0YqV!Rwa?izW5gqsR$`RpiT%1pp`rg7AER%Dt= zmSp0{%3QSC9??2P(8c!R1n{@)Wp1x$!;1tR6T$vYDlcyK4`ArZwNBv~`Seh!3%HPg zpjey#GM-shu$?W{h6n{>gZIOPtnoS zyh?E{|Gh5+Z%4`4TBw6^&Fv>rSnkWyIElRFjw(~!qn$o-66BU0$OWPDH+@19%Ihab zbJ~pevRn}p;*G}lu!hr!4AWI6 zvLoSZ9ueB93-kSc@;&3NND_np?+F#M;qnCR<@7}OhbsWC@%-9DCNIJ_hWyO|pJ8-V z+m}oH49%A_#9-tbzyTBVE)cIpT~d~UvBOokKK?G{8mtL(5C$m^V4jy+WS6)8`QW{G z#C5hCSYQUP3}eFJ3;Qg}&~Qy<9Y;D73N(TASpwW6K=Ef}|9-AVWht4gjRr z@F@$OaMXto(BlEBDA`ovg&=rxzd2eeMNJpFQ8bSg612nb%<+^0c4PmMrbfH*XvF#D zIk<;l#T`@o?Ak1Nm3-J?@7xU9XYw9JI!2*}=ohW- zl!6Xe%Uyutji6Z?DtI@|Fg6J2y>MnGtP*oLIF>`0mWm+tLX0*zRxr4TWZB-tMtlGi_kLu zQL`U-dEmd=9v$)L=CJukOkx6XQK*_Qy@-3uOT?Lh->j_qupirDWV=P~M4=OUzfw5r z{Qy?EPGmop9zzPPtQ^viOItev*SCax+3V5D8|0Jxs=7?7(w#2%s~l1`wtw>+&(PZJ zc59MDffYAcK4*8f_*;KSz~QBsF_B<`GVyQiRzUTnK|7T89ZLCD(HYom$buB!?=VU1 zgmLU(%m0p~0A+A=Xu?ezQSQkdav@ES!KS<3=}A44Z#2v;4fJX_uCGn0U{jZ?f4&xa zY_`83dZSC5q{C3u*Z@W3P9CAh0pR%1e_nYLz6Z~XQq{5XF^^HTDJ@HDc# z51;n6f&L*+Ezyaf7I450c8K_E6Qx`~1n_+h1<9l#roo=9OUdBAh7sRugDigcYr+1r z87=qgj=WK0Fys<_#=>k+eP*K$UOU>;*I)V9SaP1F{}Iv3<+nwNoVb7Fxk1V^@q;aJ z68Cxx>&37jijzJc9qVIzJ-^qeUc>tvQzWFNgYC(c$rGy`?&KIsnm1R+?p7(NOKtis zPp?MY7z4+>ut~=wQ*2~JYZLbHSV!{O+~5~Ca;b}wj?S?NlA}P)SaZ#>_zg8* zR-EYRU0dxkJ5|J@P4hg)5ey>es-m;v&&Z`&KBRjY-JxIqz77R7R!XNuteMEkwvPqE zq=n@LssGf35>N{H`r8qwQ==iSN6Q)tZMSJP7h`PQ&;>LqEW$&t_K^{VG2+==`lBX- zqNI(d!@RwcKzv~$a%=Pw$iBUO1=XuZ8IQc66>`G+OL5UhQ1b~J(6kJ5l9NydTL5Br z7tdcP!z~KgF$exi=QijQXN!zukxYSk~VJB80w&6o$Be@W)1Q(0G-`zZmX!S|! zrY*9tKKNu$h^I$P&|Fl{Z>p8H7R9>qb<>a1uo$|z(5rpZ=H;5Gep0u%AhUZ?lheCT z2aocc@Dk4{0KAyylj8t`td{7Dq}`>tBQ%7gqhlaa{$h{U6B&E0)l)ke?%CyPGm{mm=J$pwt#ce%M7;4tPWeE%X{vpjH@vv>Kvji)`rhj=U zlfy8#8C#n6MgVX{&E7dNFt}Z}I^J)_Jt02bHB|s(2j~{&Yvop&xuTv_D*H?IIa7MH zRRqVXA>y#opL|&l6ff+j{RwoyTq-6E+N1qeVb_i)^Wb7N=I(lRw2C(Tfx74y$cwlE zd%@}eAsREkh}Fi$tn5VSM&|>fj6pH>qv%cg5Fhl3?0t1{SeX$J1MJ_y1s0IRB2-`( zS-6k6OGy72L`Sy!jVF>N&=MBC{fIUy$WB`NmsHibak!2kT`2gM%lQIlA{>Yaj7n^# zOv9KRSn9rRN9naRQue|cX;0h>BgjYi)V^s3Wzz)IS5awi*lA9JN}0ln%P}#=Z{*m3r=Gmvp9hgeHqD zliKIpng?FL-)rqhKMrKnvZ^JcpFW&EXM;x^wS&BZlZ(My32a!JEB!?FOOEeVcftW& z-{p}zCAl>)5=~%`4(osNm6iYY@3J{O6rjJ=m;!7~&34;KbhG5>fS@DK;Y9G*CVBAh zNiQCuzB!8SINZT=>#gau)@k_d_LD%2PG6hd8Vr)Z4=!JTN9TxH&1>a0J!k90kf79F zro~i(0luMXH?f61U?w&X-b-q}X7%OM$qQ@c6E}%-g@2d+QIXMtWEgL3i@&4j_Ldlr zH>9iF#BepO(d=EU4Ac5B%Df{v#7}NUL$g0w+vp9PyM=fv^35o9$ z-TWSBP5`$j(S*ik_xQu4ZLQD+VMQS0n2(?~$M~!9(hZt3dTxc2qKyvgJ|Xuk%F$t< z@8~sneeLnJrXmE_43%B>WCo!sBqwUv*gNKrkSY#=#{ssHZ7okijs(nOww+=olCWCm zfsEk0kW0Yy4Y1}PLI(86#{?s=9*F8Ms=K-<7)oUT&)vFF>es{d>S(1^4GU3DA5h_5 zI6o3tAD=u8z8u+C?8_xsxY)QKe;evZuoP9zcy$+Im?A*%_m73RyxOP8FLts_c&+*_1S~gd}HSfNGe-2)Y}lC6A3+Wp|c-TV+qrbmaq1FfSe!3Sos(RlY2k4pa+}(hYACFNdxyx zn5j=QP-k*?U|~6P-Js*U825O)mi8oa^6CRqs*UGZF8)^W{Vz5r5goquf~lh#STc10 zm{eR~I*EKAbbB_@DxK_5vW*Z69#$xMt|2hFR2`S83Eh+PDb2L|)!cKyxjP%Q_jbaD zNPDY!i$mZdxiS=lOb9LPZ z{8)c-zd2R)+m_lH*|BopPH{E29JnwSp#EBd>yre0eVMaX+cI+2O|c2W5VURucZVWS zS7Wzm=ICBwx)%&@t@J%30b&@NoP69q7H^SRG|Ba`cep!1gkhirjb;HjrNhS(dAMZf zRUmBaj1YCIi$6m`rT*t9aaw8agUAWsHJ7t)p-`rvqG41)#fVoYn+*{9qD7YY2J?pz zUvY`Q2Q4J_fWOwoV&#uG@va@AgpCGJI@!3B0}Tl_9qjz%R)JhIPfLGPB6YTYUL9}l zPHGz>Z!PY`!!H9p6d5HR)x*03bw-(RI)A>(mhHBLVWJHtjP|2Ts$1PCrSiPvt%Qz@6|K<+RpP_$kv4uHQE%0yF`KI#F{7J zG;F8H{0|TZADytTPxStDg$t0`>_iP_`khdQN<1D_szl>+hcj%)8DtZog&mkgk>H zDF`x&K<1+B4-{%56&@?=I=^4AS~!xwk@y6Fss3)$Fs+25d5y!{#XKszr=somLck$b z&!|OEr4UJ&{K5%|`WlQzsgT(oMssgEY)@jl=XNqElq4b*#rz87n_zg!j`>-g2B*c& z8J;_Ql{lG3uft+)XHbTtg=CB#T8ed8s9a>@tRbw6!TN;jO$|q;c#MZ4rhQB9z7LNa zDgPm#jT|Ov21CKGc++3kV&YM}4$7nM!ahi-##hqxfUZ#5a4G3vGcP1elIR-dNdT$$ z8UW4{4)(=`;*|OxJ*V^D-H_xMxBNK*mmJGgpGiR`&l@6mkv*Wt(@VIfZcRwW3Ij-{k>4DX6Zhvf<)p{@%*E_e$1K6xm_>fuX=#8}%g#Wd~{(K?T}!n&j7Aw`@Uye_CcO?Ex{yjp) z73WDx65r}9Q^R<)`12lW+=m@)Z|C-0j>9M#drZyHsP9u4k#aVT{Upqq4EdzY3Qb7p z82{Q#R5-R4#*tjAe!vrl#^-3rAcW^!eHBcjmza>kmh6mn1hcboGdIk;Mo2OX46}Ky zByW+NiMPj@C6zmKw4u!12MR*}+9N(%Q>hc-&Ft%GG|GXG*#?aUldO(EDLkv7#E{ce z9jSa&tK^j8`-5_U1;;(J#Z<{L+v8TKVE1*YA0qJZ-KR1ip{2CGP&x zkN3TjCq~3QU;ABS}=1<<=0!vq_bLvB3ddb@KA-PQW9#tKYruQT z1N*LHNjBy|gQW`12z|fH4mK^QN!CKFiD&7Mli=J7V9>1+p4;Eho|ta)!rcmmni5LU zwkX|=nN?g5=I*<#mEtL#c(AKT#|r##1jhy-MmdZ_=5|m73Deqk)pDr2!@ne?O1I;b zV2K%Nv6>FjcX6(6MHGwX6&jz#S;Ds%g`wd*hJLs;^NXC2Q=Q8y*4S9zi822sl*X-Z zW1+PK$65_3OSMl2UY7D!H7QtXS-zFbH&0HJZ2HTyA0xRE$M}-+VR+P1OjB=vVOPB~VD=F1b>vEX zWJ7v{hZTJw)~-rt^q6|0BZVu-4zrC{xn#mo^&X0@R`?$aHslXzt-(^C41$P=tgHsB ze#tjK1G?+!A3&Xv^!p_xp#9SWs-uQerayQ0Vjw{e2wBO$gIsYz3J0L5**=m9{spc> zCP$wd%IEfdCunn??LFbj68|qL@QVC@eyWt=KZe}@ZxMoE_VE8bgfQAVA25u+@9h<^ zVdAAuyaP@oHD-VeABmXw-$`}dU%iAt=wQ5Cgf!2yfjvG*)9P_PVq9eK+e5Mh=VR*J6f#GnBK{M8X9b6Wd-tcAVK56!vgT%FGjH0e4bfZ-2*K>`@jBS%mPTi;R9K6 zfE2Hyg1>hODgiNogabWaP8I={onaj7mAywH$+D?@9`9Uvs|O}WvBMrp$|`LOkd~7# z;tnGHiVF*+z1OAl*Gd&Jjh+eEjzm8RzfIefpdpaFoKt-QG{nml`_!HJL^3Xb(O&>! zPYQ^(xdF=5^Ta3BXQC$%YO)9e>y|H1&aV}%?twS>ak3=su3%{=$l%cDdF%qBasa{} z^CKt~vgFUeZ3$F+4@n~Sp)sSI4|j#@^BoZQu{9ryPrYyR-s|g;|6f3z0x>^AfXD4d zU#XMSTBF9rVXJm^iymdJk=P^dIF)%i@Hb_Rq8F^9)}e0Nuhq}9CNEp35s9KBtR)KbkrO@0;i)v((m&z5c3Q<05(|9~m@DI-!}B{_ZyONX z#z*-J(*2%JZBNDetWH7n8O8EL2;dXhFwpBXeLk7a0+*>?Nbm$ng6bI%&o>1Hf5AzW zt{_=0d<+_`=ryEPS%ywR)emAdTQ$godA5Zl zz{Sfuun~#-&<(o6{}5}{CHl1JV#IK}DcpDK_~105b&ziGoa7~TvCai}BYl^QOc+ca z0x8}PoihF7i~>Pxw!9UVmG*wngfW9`Luf+xK5fTb-veRn0e1@;)A2-1(D@GE-(RVE z^Hv5!PDS`!*QT<#Kvzxk;v-Lf+zMc@&kdRWj38zqt5gR1E(r>AJjoCfo3rlN8&5RV=SRXe+-DofFmXk*6_=Zv9I3 z9HjkU)T5_EDD81+MiOMgP`Wwumv!6;6!qDL(Hw~^t3-^IpPu*SK&o0zGArMEI&A)6h%%bMWtzP5xJ@s6R6Z%K%N@PAtw%Im*sqYUl;A8UIf7E+5bBdSVmovE?bAg;h{+Yln?1?Bt8$htxj%sg*q2QcBiCk7$DSR zci@B8>;3oWKDDK4 zBq}kvdFi3ff5@$S(ZXGO6(lTj#p@!A8b^sO>59RzsA!m`yGu=-bAZ|pq<6u3lhoQb zH?1uoMFW#+Zn2!`J0=m8#Pjb!zDYxiBqOfx(##w>yks;7aX8#oU^b;O(BhRDc@zj; z&A?=<7eq~&m0t6%$)*kk!s0`~C*~M?*BmE85j)=6)dIYmXCoi#h_%;0e&`hWzZD)1z)L~zWy9Y`>j=S zj19tg4;UKv?6b$^?N=oDUH2|A+07rR(_GC0Ri3{CLyW0|{1JvLaRO!~->ZVQ| zXe^4MAp7JcxI&YBEnDCWEgpUiTJLm--isNjrM=*~p$~$Q4-z|KdUDdXVO5snnBm0v z2}li<{U~j73e0TWk;>2KMe`fiAL$^ixxQPK5|PkRzS>mt*@bxrzfLxX zU2KVX{YJ-srt*+8nv%74}I1I1rr4WeTikelp5{~^fw z|E=DJXJaPPiiUc9Pr`smNnAJod`YK@J!fUTw1acs z*$D*ZRSTci)i)W8m$tWO;<$gw#vX}~6TVa%ujxt$tCI*fn%Pg026~TqV zWTCIgf^gZCjEpN6xy#+k>S{jFwAg*x|dSWALX-0;mm5R$K31nmS3NksYT zcV;UkQJ)D=Q#ILNfVtbe$z-8)s#@^Zysf%KGHP*Be5V^*LklM|)@9{rQgn^OD8Ux|K;Iysq)Hnu}Y}IpcBvgTZHHFy{<)dCF zzDu%u?_HA9yIaz5*~Wis)D1u5UL9#dV!^jvlj^3JRaGZ8lc3?c2a0Q~wACes$}ev% zgbo)&uJPWtIRHX0KWlQu1}J(#kkOD%45fl^hv7pz&tgbrMU^m&$iqYJGnhWBZfx}t zCt6adRPmvTk}-OB=q*_5W7xk`(S)=%T2&N&R)NJiGlN6^`c_=(JVOn`AReVwwcp*y z*jS}Oj>w3Huj-t+WQ3fRzvDU48Ef~ESI#=!lJqmr1}}za;naekg-}fe#(P+>F^JlHExdOB_xB#{HJOcKYz3$wylIyU!)ja*vUFif0Z}W z6-ix2k?2Nu450odub|E0l39a)8MA0g(J*DCCFD}jv5gE%5jYR-r&+)_Ar4_OkMwoP zb@ad+et!*0rFHnhTk-lVh|Ta-mpo<4oSmJkiUFgk>~ACv_^pnKQPkf*$FE zWP8wNK?Vr$n>kKn@kC(QNP4&@D9nbPmv>j?V7eJ#fN1z1lJmq}2(@7tH<&18ehQya zL&@d!*tNf2%ohXVH6M(R{^eD_tST$kAkzO+63GAeoW=cow>zbdhb!rS3H6^r#0|Kc z(fq~3e;|1i9>mPHhkb<1c>yB;chtGH&gkStRgFU0Fw| JNx>%ae*tY&tq=eJ diff --git a/docs/relational-databases/system-dynamic-management-views/sys-dm-db-tuning-recommendations-transact-sql.md b/docs/relational-databases/system-dynamic-management-views/sys-dm-db-tuning-recommendations-transact-sql.md index cee6ce6999c..7012b90d1b2 100644 --- a/docs/relational-databases/system-dynamic-management-views/sys-dm-db-tuning-recommendations-transact-sql.md +++ b/docs/relational-databases/system-dynamic-management-views/sys-dm-db-tuning-recommendations-transact-sql.md @@ -52,7 +52,7 @@ manager: "jhubbard" | **revert\_action\_initiated\_by** | **nvarchar(4000)** | `User` = User manually unforced recommended plan.
    `System` = System automatically reverted recommendation. | | **revert\_action\_initiated\_time** | **datetime2** | Date the recommendation was reverted. | | **score** | **int** | Estimated value/impact for this recommendation on the 0-100 scale (the larger the better) | -| **details** | **nvarchar(max)** | JSON document that contains more details about the recommendation. Following fields are available:

    `planForceDetails`
    - `queryId` - query\_id of the regressed query.
    - `regressedPlanId` - plan_id of the regressed plan.
    - `regressedPlanExecutionCount` - Number of execution of the query with regressed plan before the regression is detected.
    - `regressedPlanAbortedCount` - Number of detected errors during the execution of the regressed plan.
    - `regressedPlanCpuTimeAverage` - Average CPU time consumed bythe regressed query before the regression is detected.
    - `regressedPlanCpuTimeStddev` - Standard deviation of CPU time consumed by the regressed query before the regression is detected.
    - `forcedPlanId` - plan_id of the plan that should be forced.
    - `forcedPlanExecutionCount`- Number of execution of the query with the plan that should be forced before the regression is detected.
    - `forcedPlanAbortedCount` - Number of detected errors during the execution of the plan that should be forced.
    - `forcedPlanCpuTimeAverage` - Average CPU time consumed by the query executed with the plan that should be forced (calculated before the regression is detected).
    - `forcedPlanCpuTimeStddev` Standard deviation of CPU time consumed by the regressed query before the regression is detected.

    `implementationDetails`
    - `method` - The method that should be used to correct the regression. Value is always `TSql`.
    - `script` - [!INCLUDE[tsql_md](../../includes/tsql_md.md)] script that should be executed to force the recommended plan. | +| **details** | **nvarchar(max)** | JSON document that contains more details about the recommendation. Following fields are available:

    `planForceDetails`
    - `queryId` - query\_id of the regressed query.
    - `regressedPlanId` - plan_id of the regressed plan.
    - `regressedPlanExecutionCount` - Number of execution of the query with regressed plan before the regression is detected.
    - `regressedPlanAbortedCount` - Number of detected errors during the execution of the regressed plan.
    - `regressedPlanCpuTimeAverage` - Average CPU time consumed bythe regressed query before the regression is detected.
    - `regressedPlanCpuTimeStddev` - Standard deviation of CPU time consumed by the regressed query before the regression is detected.
    - `recommendedPlanId` - plan_id of the plan that should be forced.
    - `recommendedPlanExecutionCount`- Number of execution of the query with the plan that should be forced before the regression is detected.
    - `recommendedPlanAbortedCount` - Number of detected errors during the execution of the plan that should be forced.
    - `recommendedPlanCpuTimeAverage` - Average CPU time consumed by the query executed with the plan that should be forced (calculated before the regression is detected).
    - `recommendedPlanCpuTimeStddev` Standard deviation of CPU time consumed by the regressed query before the regression is detected.

    `implementationDetails`
    - `method` - The method that should be used to correct the regression. Value is always `TSql`.
    - `script` - [!INCLUDE[tsql_md](../../includes/tsql_md.md)] script that should be executed to force the recommended plan. | ## Remarks Information returned by `sys.dm_db_tuning_recommendations` is updated when database engine identifies potential query performance regression, and is not persisted. Recommendations are kept only until [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] is restarted. Database administrators should periodically make backup copies of the tuning recommendation if they want to keep it after server recycling. @@ -82,7 +82,7 @@ JSON document in `state` column contains the reason that describes why is the re | `PlanForcedByUser`| User manually forced the plan using [sp_query_store_force_plan (Transact-SQL)](../../relational-databases/system-stored-procedures/sp-query-store-force-plan-transact-sql.md) procedure. | | `PlanUnforcedByUser` | User manually unforced the plan using [sp_query_store_unforce_plan (Transact-SQL)](../../relational-databases/system-stored-procedures/sp-query-store-unforce-plan-transact-sql.md) procedure. | - Statistic in the details column do not show runtime plan statistics (for example, current CPU time). These information are taken at the time of regression detection and describe why [!INCLUDE[ssde_md](../../includes/ssde_md.md)] identified performance regression. Use `regressedPlanId` and `forcedPlanId` to query [Query Store catalog views](../../relational-databases/performance/how-query-store-collects-data.md) to find exact runtime plan statistics. + Statistic in the details column do not show runtime plan statistics (for example, current CPU time). These information are taken at the time of regression detection and describe why [!INCLUDE[ssde_md](../../includes/ssde_md.md)] identified performance regression. Use `regressedPlanId` and `recommendedPlanId` to query [Query Store catalog views](../../relational-databases/performance/how-query-store-collects-data.md) to find exact runtime plan statistics. ## Using tuning recommendations information To convert the recommendation returned by `sys.dm_db_tuning_recommendations` into an information that can be used to see the impact of recommendation and to get the T-SQL script that will fix the issue, you can use the following query: @@ -95,7 +95,7 @@ FROM sys.dm_db_tuning_recommendations CROSS APPLY OPENJSON(details, '$.planForceDetails') WITH ( query_id int '$.queryId', regressed_plan_id int '$.regressedPlanId', - last_good_plan_id int '$.forcedPlanId') as details + last_good_plan_id int '$.recommendedPlanId') as details WHERE JSON_VALUE(state, '$.currentValue') = 'Active' ``` From 54dff44541e574b0a0a851336e17b8fcc355aa69 Mon Sep 17 00:00:00 2001 From: Jovan Popovic Date: Mon, 17 Jul 2017 15:58:43 +0200 Subject: [PATCH 317/336] Acorlynx fixes --- .../automatic-tuning/automatic-tuning.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/relational-databases/automatic-tuning/automatic-tuning.md b/docs/relational-databases/automatic-tuning/automatic-tuning.md index bd812038614..be765a1acf9 100644 --- a/docs/relational-databases/automatic-tuning/automatic-tuning.md +++ b/docs/relational-databases/automatic-tuning/automatic-tuning.md @@ -31,7 +31,7 @@ Automatic tuning in [!INCLUDE[sssqlv14-md](../../includes/sssqlv14-md.md)] enabl [!INCLUDE[ssdenoversion_md](../../includes/ssdenoversion_md.md)] may use different SQL plans to execute the [!INCLUDE[tsql_md](../../includes/tsql_md.md)] queries. Query plans depend on the statistics, indexes, and other factors. The optimal plan that should be used to execute some [!INCLUDE[tsql_md](../../includes/tsql_md.md)] query might be changed -over time. In some cases, the new plan might not be better than the previous one, and this might cause a performance regression. +over time. In some cases, the new plan might not be better than the previous one, and the new plan might cause a performance regression. ![SQL plan choice regression](media/plan-choice-regression.png "SQL plan choice regression") @@ -70,7 +70,7 @@ The most important information shown in this view are: - Details about the issues such as id of the detected plan, id of the regressed plan, id of the plan that should be forced to fix the issue, [!INCLUDE[tsql_md](../../includes/tsql_md.md)] script that might be applied to fix the issue, etc. Details are stored in [JSON format](../../relational-databases/json/index.md). -Use the following query to obtain a script that will fix the issue: +Use the following query to obtain a script that fixes the issue: ``` SELECT reason, score, @@ -110,7 +110,7 @@ In addition to detection, the [!INCLUDE[ssde_md](../../includes/ssde_md.md)] can ![SQL plan choice correction](media/force-last-good-plan.png "SQL plan choice correction") When the [!INCLUDE[ssde_md](../../includes/ssde_md.md)] applies a recommendation, it automatically monitors the performance of the forced plan. The forced plan will be retained until -a recompile (e.g. on next statistics or schema change) if it is better than the regressed plan. If the forced plan is not better than the regressed plan, the new plan will be unforced +a recompile (for example, on next statistics or schema change) if it is better than the regressed plan. If the forced plan is not better than the regressed plan, the new plan will be unforced and the [!INCLUDE[ssde_md](../../includes/ssde_md.md)] will compile a new plan. The user can enable automatic tuning per database and specify that last good plan should be forced whenever some plan change regression is detected. Automatic tuning is enabled using From c0565d2676fab21502eabf062331269f67079aa8 Mon Sep 17 00:00:00 2001 From: Douglas Laudenschlager Date: Mon, 17 Jul 2017 10:13:50 -0700 Subject: [PATCH 318/336] Added notes for some supportability issues. --- docs/linux/sql-server-linux-migrate-ssis.md | 24 ++++++++++++--------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/docs/linux/sql-server-linux-migrate-ssis.md b/docs/linux/sql-server-linux-migrate-ssis.md index ae02b3d8b67..b65831fcb03 100644 --- a/docs/linux/sql-server-linux-migrate-ssis.md +++ b/docs/linux/sql-server-linux-migrate-ssis.md @@ -6,7 +6,7 @@ description: author: sanagama ms.author: sanagama manager: jhubbard -ms.date: 06/29/2017 +ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -45,6 +45,19 @@ To run an SSIS package on a Linux computer, do the following things: $ dtexec /F \ /DE ``` +## More about SSIS on Linux + +**Deploying packages**. You can only store packages in the file system on Linux in this release. The SSIS Catalog database and the legacy SSIS service are not available on Linux for package deployment and storage. + +**Scheduling packages**. You can't use SQL Agent on Linux to schedule package execution in this release. + +**Other limitations and known issues**. For other limitations and known issues with SSIS on Linux, see the [Release Notes](sql-server-linux-release-notes.md#ssis). + +For more info about SSIS on Linux, see the following blog posts: + +- [SSIS on Linux is available in SQL Server 2017 CTP2.1](https://blogs.msdn.microsoft.com/ssis/2017/05/17/ssis-helsinki-is-available-in-sql-server-vnext-ctp2-1/) +- [ODBC is supported in SSIS on Linux (SQL Server 2017 CTP 2.1 refresh)](https://blogs.msdn.microsoft.com/ssis/2017/06/16/odbc-is-supported-in-ssis-on-linux-ssis-helsinki-ctp2-1-refresh/) + ## More about SSIS Microsoft SQL Server Integration Services (SSIS) is a platform for building high-performance data integration solutions, including extraction, transformation, and loading (ETL) packages for data warehousing. For more info about SSIS, see [SQL Server Integration Services](/sql/integration-services/sql-server-integration-services.md). @@ -58,15 +71,6 @@ SSIS includes the following features: To get started with SSIS, download the latest version of [SQL Server Data Tools (SSDT)](../ssdt/download-sql-server-data-tools-ssdt.md). Then follow the tutorial [SSIS How to Create an ETL Package](https://msdn.microsoft.com/en-us/library/ms169917.aspx). -## More about SSIS on Linux - -For limitations and known issues with SSIS on Linux, see the [Release Notes](sql-server-linux-release-notes.md#ssis). - -For more info about SSIS on Linux, see the following blog posts: - -- [SSIS on Linux is available in SQL Server 2017 CTP2.1](https://blogs.msdn.microsoft.com/ssis/2017/05/17/ssis-helsinki-is-available-in-sql-server-vnext-ctp2-1/) -- [ODBC is supported in SSIS on Linux (SQL Server 2017 CTP 2.1 refresh)](https://blogs.msdn.microsoft.com/ssis/2017/06/16/odbc-is-supported-in-ssis-on-linux-ssis-helsinki-ctp2-1-refresh/) - ## See also - [Learn more about SQL Server Integration Services](https://msdn.microsoft.com/en-us/library/ms141026.aspx) - [SQL Server Integration Services (SSIS) Development and Management Tools](https://msdn.microsoft.com/en-us/library/ms140028.aspx) From a5a426c2cccb167ed1cdf90e74ca3891a2453ae3 Mon Sep 17 00:00:00 2001 From: Mike Ray Date: Mon, 17 Jul 2017 10:20:38 -0700 Subject: [PATCH 319/336] Adding links to legacy content. --- ...readable-secondary-replicas-always-on-availability-groups.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/database-engine/availability-groups/windows/active-secondaries-readable-secondary-replicas-always-on-availability-groups.md b/docs/database-engine/availability-groups/windows/active-secondaries-readable-secondary-replicas-always-on-availability-groups.md index b1f1663b0e5..93b58679c63 100644 --- a/docs/database-engine/availability-groups/windows/active-secondaries-readable-secondary-replicas-always-on-availability-groups.md +++ b/docs/database-engine/availability-groups/windows/active-secondaries-readable-secondary-replicas-always-on-availability-groups.md @@ -144,7 +144,7 @@ manager: "jhubbard" This means that there is some latency, usually only a matter of seconds, between the primary and secondary replicas. In unusual cases, however, for example if network issues reduce throughput, latency can become significant. Latency increases when I/O bottlenecks occur and when data movement is suspended. To monitor suspended data movement, you can use the [Always On Dashboard](../../../database-engine/availability-groups/windows/use-the-always-on-dashboard-sql-server-management-studio.md) or the [sys.dm_hadr_database_replica_states](../../../relational-databases/system-dynamic-management-views/sys-dm-hadr-database-replica-states-transact-sql.md) dynamic management view. #### Data Latency on databases with memory-optimized tables - In [!INCLUDE[ssSQL14](../../../includes/sssql14-md.md)] there were special considerations around data latency on active secondaries (see the [!INCLUDE[ssSQL14](../../../includes/sssql14-md.md)] version of this article). Starting [!INCLUDE[ssSQL15](../../../includes/sssql15-md.md)] there are no special considerations around data latency for memory-optimized tables. The expected data latency for memory-optimized tables is comparable to the latency for disk-based tables. + In [!INCLUDE[ssSQL14](../../../includes/sssql14-md.md)] there were special considerations around data latency on active secondaries - see [[!INCLUDE[ssSQL14](../../../includes/sssql14-md.md)] Active Secondaries: Readable Secondary Replicas](https://technet.microsoft.com/library/ff878253(v=sql.120).aspx). Starting [!INCLUDE[ssSQL15](../../../includes/sssql15-md.md)] there are no special considerations around data latency for memory-optimized tables. The expected data latency for memory-optimized tables is comparable to the latency for disk-based tables. ### Read-Only Workload Impact When you configure a secondary replica for read-only access, your read-only workloads on the secondary databases consume system resources, such as CPU and I/O (for disk-based tables) from redo threads, especially if the read-only workloads on disk-based tables are highly I/O-intensive. There is no IO impact when accessing memory-optimized tables because all the rows reside in memory. From 06410be094d20113b2b5c0d07af7e85a226bc24c Mon Sep 17 00:00:00 2001 From: Mihaela Blendea Date: Mon, 17 Jul 2017 10:28:23 -0700 Subject: [PATCH 320/336] Update release notes with 3 scenarios --- docs/linux/sql-server-linux-release-notes.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/linux/sql-server-linux-release-notes.md b/docs/linux/sql-server-linux-release-notes.md index 3b5b0c8f317..c1207b4cac4 100644 --- a/docs/linux/sql-server-linux-release-notes.md +++ b/docs/linux/sql-server-linux-release-notes.md @@ -138,6 +138,15 @@ The following sections describe known issues with this release of SQL Server 201 - Distributed transactions requiring the Microsoft Distributed Transaction Coordinator service are not supported on SQL Server running on Linux. SQL Server to SQL Server distributed transactions are supported. +#### Remote database files +- Hosting database files on a NFS server with version <4 is not supported in this release. This includes using NFS for shared disk failover clustering as well as databases on non-clustered instances. We are working on enabling other NFS server versions in the upcoming releases. + +#### Cross platform availability groups and distributed availability groups +- Due to a known issue, creating availability groups with replicas on instances hosted on both Windows and Linux is not working in this release. This includes distributed availability groups. The fix will be available in the upcoming release candidate build. + +#### Server Collation +- When using the MSSQL_COLLATION override, OR when doing a localized (non English) install, it is possible SQL Server will hit a deadlock when trying to set the server collation, which generates a dump. Setup does complete successfully, however the server collation will not have been set. The workaround is to simply run ./mssql-conf set-collation and enter the collation name desired when prompted (the collation name can be found in the errorlog at the line: “Attempting to change default collation to …”). + #### Localization - If your locale is not English (en_us) during setup, you must use UTF-8 encoding in your bash session/terminal. If you use ASCII encoding, you might see an error similar to the following: From d771cdffe277b88c740824c035bfd75720419750 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Mon, 17 Jul 2017 10:48:04 -0700 Subject: [PATCH 321/336] sp_add_trusted, added link to CLR Strict --- .../sys-sp-add-trusted-assembly-transact-sql.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md b/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md index e831ebc7ac1..b35cf1d97c8 100644 --- a/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md +++ b/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md @@ -46,7 +46,7 @@ This procedure adds an assembly to [sys.trusted_assemblies](../../relational-da ## Arguments [ @hash = ] '*value*' -The SHA2_512 hash value of the assembly to add to the list of trusted assemblies for the server. Trusted assemblies may load when CLR strict security is enabled, even if the assembly is unsigned or the database is not marked as trustworthy. +The SHA2_512 hash value of the assembly to add to the list of trusted assemblies for the server. Trusted assemblies may load when [CLR strict security](../database-engine/configure-windows/clr-strict-security.md) is enabled, even if the assembly is unsigned or the database is not marked as trustworthy. [ @description = ] '*description*' Optional user-defined description of the assembly. Microsoft recommends using the canonical name that encodes the simple name, version number, culture, public key, and architecture of the assembly to trust. This value uniquely identifies the assembly on the common language runtime (CLR) side and is the same as the clr_name value in sys.assemblies. From 1874141285d41d351dc3f764cc7db6fbfbef5886 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Mon, 17 Jul 2017 10:56:35 -0700 Subject: [PATCH 322/336] Fixed link --- .../sys-sp-add-trusted-assembly-transact-sql.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md b/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md index b35cf1d97c8..bb703b17eb8 100644 --- a/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md +++ b/docs/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql.md @@ -46,7 +46,7 @@ This procedure adds an assembly to [sys.trusted_assemblies](../../relational-da ## Arguments [ @hash = ] '*value*' -The SHA2_512 hash value of the assembly to add to the list of trusted assemblies for the server. Trusted assemblies may load when [CLR strict security](../database-engine/configure-windows/clr-strict-security.md) is enabled, even if the assembly is unsigned or the database is not marked as trustworthy. +The SHA2_512 hash value of the assembly to add to the list of trusted assemblies for the server. Trusted assemblies may load when [CLR strict security](../../database-engine/configure-windows/clr-strict-security.md) is enabled, even if the assembly is unsigned or the database is not marked as trustworthy. [ @description = ] '*description*' Optional user-defined description of the assembly. Microsoft recommends using the canonical name that encodes the simple name, version number, culture, public key, and architecture of the assembly to trust. This value uniquely identifies the assembly on the common language runtime (CLR) side and is the same as the clr_name value in sys.assemblies. From 2cd5a8152a354473520fda5593a940cb78f7bf84 Mon Sep 17 00:00:00 2001 From: Douglas Laudenschlager Date: Mon, 17 Jul 2017 12:23:54 -0700 Subject: [PATCH 323/336] Fixed the syntax of the Important note. --- docs/linux/sql-server-linux-setup-ssis.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-setup-ssis.md b/docs/linux/sql-server-linux-setup-ssis.md index 932a7b39adc..a3fecd2553d 100644 --- a/docs/linux/sql-server-linux-setup-ssis.md +++ b/docs/linux/sql-server-linux-setup-ssis.md @@ -6,7 +6,7 @@ description: This topic describes how to install SQL Server Integration Services author: leolimsft ms.author: lle manager: craigg -ms.date: 06/22/2017 +ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: integration-services @@ -28,7 +28,7 @@ ms.assetid: Follow the steps in this article to install SQL Server Integration Services (`mssql-server-is`) on Linux. For info about the features supported in this release of Integration Services for Linux, see the [Release Notes](sql-server-linux-release-notes.md). -> [IMPORTANT] +> [!IMPORTANT] > At this time, Integration Services on Linux is supported only on the Ubuntu platform. From 14b42640363fb11276cfe3c2e8a028a9a1dfb518 Mon Sep 17 00:00:00 2001 From: David Puglielli Date: Mon, 17 Jul 2017 12:36:01 -0700 Subject: [PATCH 324/336] TOC updated, links fixed --- docs/connect/php/TOC.md | 3 ++- docs/connect/php/azure-active-directory.md | 4 ++-- docs/connect/php/connection-resiliency.md | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/connect/php/TOC.md b/docs/connect/php/TOC.md index 37cb662e8fa..9be9c366e90 100644 --- a/docs/connect/php/TOC.md +++ b/docs/connect/php/TOC.md @@ -20,6 +20,7 @@ ## [Connecting to the Server](connecting-to-the-server.md) ### [How to: Connect Using Windows Authentication](how-to-connect-using-windows-authentication.md) ### [How to: Connect Using SQL Server Authentication](how-to-connect-using-sql-server-authentication.md) +### [How to: Connect Using Azure Active Directory Authentication](azure-active-directory.md) ### [How to: Connect on a Specified Port](how-to-connect-on-a-specified-port.md) ### [Connection Pooling](connection-pooling-microsoft-drivers-for-php-for-sql-server.md) ### [How to: Disable Multiple Active Resultsets (MARS)](how-to-disable-multiple-active-resultsets-mars.md) @@ -27,6 +28,7 @@ ### [PHP Driver for SQL Server Support for LocalDB](php-driver-for-sql-server-support-for-localdb.md) ### [PHP Driver for SQL Server Support for High Availability, Disaster Recovery](php-driver-for-sql-server-support-for-high-availability-disaster-recovery.md) ### [Connecting to Microsoft Azure SQL Database](connecting-to-microsoft-azure-sql-database.md) +### [Connection Resiliency](connection-resiliency.md) ## [Comparing Execution Functions](comparing-execution-functions.md) ## [Direct Statement Execution and Prepared Statement Execution in the PDO_SQLSRV Driver](direct-statement-execution-prepared-statement-execution-pdo-sqlsrv-driver.md) ## [Retrieving Data](retrieving-data.md) @@ -126,4 +128,3 @@ # [Code Samples](code-samples-for-php-sql-driver.md) ## [Example Application (PDO_SQLSRV Driver)](example-application-pdo-sqlsrv-driver.md) ## [Example Application (SQLSRV Driver)](example-application-sqlsrv-driver.md) - diff --git a/docs/connect/php/azure-active-directory.md b/docs/connect/php/azure-active-directory.md index 67d22329d66..bb2e7fdebed 100644 --- a/docs/connect/php/azure-active-directory.md +++ b/docs/connect/php/azure-active-directory.md @@ -9,7 +9,7 @@ author: "david-puglielli" ms.author: "v-dapugl" manager: "v-hakaka" --- -# How to: Connect Using Azure Active Directory Authentication +# Connect Using Azure Active Directory Authentication [!INCLUDE[Driver_PHP_Download](../../includes/driver_php_download.md)] [Azure Active Directory](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-whatis) (Azure AD) is a central user ID management technology that operates as an alternative to [SQL Server authentication](../../connect/php/how-to-connect-using-sql-server-authentication.md). Azure AD allows connections to Microsoft Azure SQL Database and SQL Data Warehouse with federated identities in Azure AD using a username and password, Windows Integrated Authentication, or an Azure AD access token; the PHP drivers for SQL Server offer partial support for these features. @@ -24,7 +24,7 @@ To use Azure AD, use the **Authentication** keyword. The values that **Authentic The **Authentication** keyword affects the connection security settings. If it is set in the connection string, then by default the **Encrypt** keyword is set to true, so the client will request encryption. Moreover, the server certificate will be validated irrespective of the encryption setting unless **TrustServerCertificate** is set to true. This is distinguished from the old, and less secure, login method, in which the server certificate is not validated unless encryption is specifically requested in the connection string. -Before using Azure AD with the PHP drivers for SQL Server on Windows, ensure that you have installed the [Microsoft Online Services Sign-In Assistant](https://www.microsoft.com/en-ca/download/details.aspx?id=41950) (not required for Linux and MacOS). +Before using Azure AD with the PHP drivers for SQL Server on Windows, ensure that you have installed the [Microsoft Online Services Sign-In Assistant](https://www.microsoft.com/download/details.aspx?id=41950) (not required for Linux and MacOS). #### Limitations diff --git a/docs/connect/php/connection-resiliency.md b/docs/connect/php/connection-resiliency.md index 142e2b8f8ad..e82eb7d59a9 100644 --- a/docs/connect/php/connection-resiliency.md +++ b/docs/connect/php/connection-resiliency.md @@ -9,10 +9,10 @@ author: "david-puglielli" ms.author: "v-dapugl" manager: "v-hakaka" --- -## Idle Connection Resiliency +# Idle Connection Resiliency [!INCLUDE[Driver_PHP_Download](../../includes/driver_php_download.md)] -[Connection resiliency](https://msdn.microsoft.com/en-us/library/dn632678.aspx) is the principle that a broken idle connection can be reestablished, within certain constraints. If a connection to Microsoft SQL Server fails, connection resiliency allows the client to automatically attempt to reestablish the connection. Connection resiliency is a property of the data source; only SQL Server 2014 and later and Azure SQL Database support connection resiliency. +[Connection resiliency](https://msdn.microsoft.com/library/dn632678.aspx) is the principle that a broken idle connection can be reestablished, within certain constraints. If a connection to Microsoft SQL Server fails, connection resiliency allows the client to automatically attempt to reestablish the connection. Connection resiliency is a property of the data source; only SQL Server 2014 and later and Azure SQL Database support connection resiliency. Connection resiliency is implemented with two connection keywords that can be added to connection strings: **ConnectRetryCount** and **ConnectRetryInterval**. @@ -38,7 +38,7 @@ Connection resiliency applies when the connection is idle. Failures that occur w ## Example -The following code connects to a database and executes a query. The connection is interrupted by killing the session and a new query is attempted using the broken connection. This example uses the [AdventureWorks](https://msdn.microsoft.com/en-us/library/ms124501%28v=sql.100%29.aspx) sample database. +The following code connects to a database and executes a query. The connection is interrupted by killing the session and a new query is attempted using the broken connection. This example uses the [AdventureWorks](https://msdn.microsoft.com/library/ms124501%28v=sql.100%29.aspx) sample database. In this example, we specify a buffered cursor before breaking the connection. If we do not specify a buffered cursor, the connection would not be reestablished because there would be an active server-side cursor and thus the connection would not be idle when broken. However, in that case we could call sqlsrv_free_stmt() before breaking the connection to vacate the cursor, and the connection would be successfully reestablished. From c4fa45bfb224b5fa398a033798e1ef2bb787702f Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Mon, 17 Jul 2017 12:41:41 -0700 Subject: [PATCH 325/336] Linux TOC, Added AD Auth Added Active Directory Authentication with SQL Server on Linux to TOC --- docs/linux/TOC.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/linux/TOC.md b/docs/linux/TOC.md index 460c397c8d3..f253756b480 100644 --- a/docs/linux/TOC.md +++ b/docs/linux/TOC.md @@ -67,6 +67,7 @@ ## [Security](sql-server-linux-security-overview.md) ### [Get started with security features](sql-server-linux-security-get-started.md) ### [Encrypting Connections](sql-server-linux-encrypted-connections.md) +### [Active Directory Authentication](sql-server-linux-active-directory-authentication.md) ## [Optimize Performance](sql-server-linux-performance-get-started.md) @@ -83,4 +84,4 @@ ## [Stack Overflow](http://stackoverflow.com/questions/tagged/sql-server) ## [MSDN Forums](https://social.msdn.microsoft.com/Forums/en-US/home?category=sqlserver) ## [Microsoft Connect](https://connect.microsoft.com/SQLServer/Feedback) -## [Reddit](https://connect.microsoft.com/SQLServer/Feedback) \ No newline at end of file +## [Reddit](https://connect.microsoft.com/SQLServer/Feedback) From 1b4fec1a8f6f938fed053d053c3654df183a6906 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Mon, 17 Jul 2017 12:46:04 -0700 Subject: [PATCH 326/336] linux-configure-mssql-conf, Kerb path Added the network.kerberoskeytabfile --- docs/linux/sql-server-linux-configure-mssql-conf.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/linux/sql-server-linux-configure-mssql-conf.md b/docs/linux/sql-server-linux-configure-mssql-conf.md index 386a19c4260..6117f03e961 100644 --- a/docs/linux/sql-server-linux-configure-mssql-conf.md +++ b/docs/linux/sql-server-linux-configure-mssql-conf.md @@ -213,6 +213,7 @@ Use mssql-conf to configure TLS for an instance of SQL Server running on Linux. |`network.tlskey` |The absolute path to the private key file that [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] uses for TLS. Example:  `/etc/ssl/private/mssql.key`  The certificate file must be accessible by the mssql account. Microsoft recommends restricting access to the file using `chown mssql:mssql ; chmod 400 `. | |`network.tlsprotocols` |A comma-separated list of which TLS protocols are allowed by SQL Server. [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] always attempts to negotiate the strongest allowed protocol. If a client does not support any allowed protocol, [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] rejects the connection attempt.  For compatibility, all supported protocols are allowed by default (1.2, 1.1, 1.0).  If your clients support TLS 1.2, Microsoft recommends allowing only TLS 1.2. |  |`network.tlsciphers` |Specifies which ciphers are allowed by [!INCLUDE[ssNoVersion](../../docs/includes/ssnoversion-md.md)] for TLS. This string must be formatted per [OpenSSL's cipher list format](https://www.openssl.org/docs/man1.0.2/apps/ciphers.html). In general, you should not need to change this option. 
    By default, the following ciphers are allowed: 
    `ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA` |   +| `network.kerberoskeytabfile` |Path to the Kerberos keytab file | | | | For an example of using the TLS settings, see [Encrypting Connections to SQL Server on Linux](sql-server-linux-encrypted-connections.md). From 1f5fbbabe52f1274d83fb33ffe5a8b60ccae94c3 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Mon, 17 Jul 2017 12:58:48 -0700 Subject: [PATCH 327/336] ecurity-stored-procedures, Added 2 clr procs --- ...security-stored-procedures-transact-sql.md | 85 ++++++++++--------- 1 file changed, 43 insertions(+), 42 deletions(-) diff --git a/docs/relational-databases/system-stored-procedures/security-stored-procedures-transact-sql.md b/docs/relational-databases/system-stored-procedures/security-stored-procedures-transact-sql.md index dccf8d309f1..5317681f32d 100644 --- a/docs/relational-databases/system-stored-procedures/security-stored-procedures-transact-sql.md +++ b/docs/relational-databases/system-stored-procedures/security-stored-procedures-transact-sql.md @@ -1,7 +1,7 @@ --- title: "Security Stored Procedures (Transact-SQL) | Microsoft Docs" ms.custom: "" -ms.date: "03/20/2017" +ms.date: "07/17/2017" ms.prod: "sql-non-specified" ms.reviewer: "" ms.suite: "" @@ -27,44 +27,45 @@ manager: "jhubbard" # Security Stored Procedures (Transact-SQL) [!INCLUDE[tsql-appliesto-ss2008-asdb-xxxx-xxx_md](../../includes/tsql-appliesto-ss2008-asdb-xxxx-xxx-md.md)] - [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] supports the following system stored procedures that are used to manage security. Some of these stored procedures are deprecated but continue to be available to support backward compatibility. The topics for deprecated procedures will list their replacement. - -||| -|-|-| -|[sp_addapprole](../../relational-databases/system-stored-procedures/sp-addapprole-transact-sql.md) (Deprecated)|[sp_addlinkedserver](../../relational-databases/system-stored-procedures/sp-addlinkedserver-transact-sql.md) | -|[sp_addlinkedsrvlogin](../../relational-databases/system-stored-procedures/sp-addlinkedsrvlogin-transact-sql.md)|[sp_addlogin](../../relational-databases/system-stored-procedures/sp-addlogin-transact-sql.md) (Deprecated) | -|[sp_addremotelogin](../../relational-databases/system-stored-procedures/sp-addremotelogin-transact-sql.md) (Deprecated)|[sp_addrole](../../relational-databases/system-stored-procedures/sp-addrole-transact-sql.md) (Deprecated) | -|[sp_addrolemember](../../relational-databases/system-stored-procedures/sp-addrolemember-transact-sql.md) (Deprecated)|[sp_addserver](../../relational-databases/system-stored-procedures/sp-addserver-transact-sql.md) (Deprecated) | -|[sp_addsrvrolemember](../../relational-databases/system-stored-procedures/sp-addsrvrolemember-transact-sql.md) (Deprecated)|[sp_adduser](../../relational-databases/system-stored-procedures/sp-adduser-transact-sql.md) (Deprecated) | -|[sp_approlepassword](../../relational-databases/system-stored-procedures/sp-approlepassword-transact-sql.md) (Deprecated)|[sp_audit_write](../../relational-databases/system-stored-procedures/sp-audit-write-transact-sql.md) | -|[sp_change_users_login](../../relational-databases/system-stored-procedures/sp-change-users-login-transact-sql.md)|[sp_changedbowner](../../relational-databases/system-stored-procedures/sp-changedbowner-transact-sql.md) | -|[sp_changeobjectowner](../../relational-databases/system-stored-procedures/sp-changeobjectowner-transact-sql.md) (Deprecated)|[sp_control_dbmasterkey_password](../../relational-databases/system-stored-procedures/sp-control-dbmasterkey-password-transact-sql.md) | -|[sp_dbfixedrolepermission](../../relational-databases/system-stored-procedures/sp-dbfixedrolepermission-transact-sql.md) (Deprecated)|[sp_defaultdb](../../relational-databases/system-stored-procedures/sp-defaultdb-transact-sql.md) (Deprecated) | -|[sp_defaultlanguage](../../relational-databases/system-stored-procedures/sp-defaultlanguage-transact-sql.md) (Deprecated)|[sp_denylogin](../../relational-databases/system-stored-procedures/sp-denylogin-transact-sql.md) (Deprecated) | -|[sp_describe_parameter_encryption](../../relational-databases/system-stored-procedures/sp-describe-parameter-encryption-transact-sql.md)|[sp_dropalias](../../relational-databases/system-stored-procedures/sp-dropalias-transact-sql.md) (Deprecated) | -|[sp_dropapprole](../../relational-databases/system-stored-procedures/sp-dropapprole-transact-sql.md) (Deprecated) |[sp_droplinkedsrvlogin](../../relational-databases/system-stored-procedures/sp-droplinkedsrvlogin-transact-sql.md) | -|[sp_droplogin](../../relational-databases/system-stored-procedures/sp-droplogin-transact-sql.md) (Deprecated) |[sp_dropremotelogin](../../relational-databases/system-stored-procedures/sp-dropremotelogin-transact-sql.md) (Deprecated) | -|[sp_droprole](../../relational-databases/system-stored-procedures/sp-droprole-transact-sql.md) (Deprecated) |[sp_droprolemember](../../relational-databases/system-stored-procedures/sp-droprolemember-transact-sql.md) (Deprecated) | -|[sp_dropserver](../../relational-databases/system-stored-procedures/sp-dropserver-transact-sql.md) |[sp_dropsrvrolemember](../../relational-databases/system-stored-procedures/sp-dropsrvrolemember-transact-sql.md) (Deprecated) | -|[sp_dropuser](../../relational-databases/system-stored-procedures/sp-dropuser-transact-sql.md) (Deprecated) |[sp_grantdbaccess](../../relational-databases/system-stored-procedures/sp-grantdbaccess-transact-sql.md) (Deprecated) | -|[sp_grantlogin](../../relational-databases/system-stored-procedures/sp-grantlogin-transact-sql.md) (Deprecated) |[sp_helpdbfixedrole](../../relational-databases/system-stored-procedures/sp-helpdbfixedrole-transact-sql.md) | -|[sp_helplinkedsrvlogin](../../relational-databases/system-stored-procedures/sp-helplinkedsrvlogin-transact-sql.md) |[sp_helplogins](../../relational-databases/system-stored-procedures/sp-helplogins-transact-sql.md) | -|[sp_helpntgroup](../../relational-databases/system-stored-procedures/sp-helpntgroup-transact-sql.md) |[sp_helpremotelogin](../../relational-databases/system-stored-procedures/sp-helpremotelogin-transact-sql.md) (Deprecated) | -|[sp_helprole](../../relational-databases/system-stored-procedures/sp-helprole-transact-sql.md) |[sp_helprolemember](../../relational-databases/system-stored-procedures/sp-helprolemember-transact-sql.md) | -|[sp_helprotect](../../relational-databases/system-stored-procedures/sp-helprotect-transact-sql.md) (Deprecated) |[sp_helpsrvrole](../../relational-databases/system-stored-procedures/sp-helpsrvrole-transact-sql.md) | -|[sp_helpsrvrolemember](../../relational-databases/system-stored-procedures/sp-helpsrvrolemember-transact-sql.md) |[sp_helpuser](../../relational-databases/system-stored-procedures/sp-helpuser-transact-sql.md) (Deprecated) | -|[sp_migrate_user_to_contained](../../relational-databases/system-stored-procedures/sp-migrate-user-to-contained-transact-sql.md)|[sp_MShasdbaccess](../../relational-databases/system-stored-procedures/sp-mshasdbaccess-transact-sql.md) | -|[sp_password](../../relational-databases/system-stored-procedures/sp-password-transact-sql.md) (Deprecated)|[sp_refresh_parameter_encryption](../../relational-databases/system-stored-procedures/sp-refresh-parameter-encryption-transact-sql.md) | -|[sp_remoteoption](../../relational-databases/system-stored-procedures/sp-remoteoption-transact-sql.md) (Deprecated)|[sp_revokedbaccess](../../relational-databases/system-stored-procedures/sp-revokedbaccess-transact-sql.md) (Deprecated) | -|[sp_revokelogin](../../relational-databases/system-stored-procedures/sp-revokelogin-transact-sql.md) (Deprecated)|[sp_setapprole](../../relational-databases/system-stored-procedures/sp-setapprole-transact-sql.md) | -|[sp_srvrolepermission](../../relational-databases/system-stored-procedures/sp-srvrolepermission-transact-sql.md) (Deprecated)|[sp_testlinkedserver](../../relational-databases/system-stored-procedures/sp-testlinkedserver-transact-sql.md) | -|[sp_unsetapprole](../../relational-databases/system-stored-procedures/sp-unsetapprole-transact-sql.md) |[sp_validatelogins](../../relational-databases/system-stored-procedures/sp-validatelogins-transact-sql.md) | -|[sp_xp_cmdshell_proxy_account](../../relational-databases/system-stored-procedures/sp-xp-cmdshell-proxy-account-transact-sql.md) | | - - - -## See Also - [System Stored Procedures (Transact-SQL)](../../relational-databases/system-stored-procedures/system-stored-procedures-transact-sql.md) - [Security Functions (Transact-SQL)](../../t-sql/functions/security-functions-transact-sql.md) - - \ No newline at end of file + [!INCLUDE[ssNoVersion](../../includes/ssnoversion-md.md)] supports the following system stored procedures that are used to manage security. Some of these stored procedures are deprecated but continue to be available to support backward compatibility. The topics for deprecated procedures will list their replacement. + +||| +|-|-| +[sys.sp_add_trusted_assembly]( sys-sp-add-trusted-assembly-transact-sql.md) |[sp_addapprole](../../relational-databases/system-stored-procedures/sp-addapprole-transact-sql.md) (Deprecated)| +|[sp_addlinkedserver](../../relational-databases/system-stored-procedures/sp-addlinkedserver-transact-sql.md)|[sp_addlinkedsrvlogin](../../relational-databases/system-stored-procedures/sp-addlinkedsrvlogin-transact-sql.md) +|[sp_addlogin](../../relational-databases/system-stored-procedures/sp-addlogin-transact-sql.md) (Deprecated) |[sp_addremotelogin](../../relational-databases/system-stored-procedures/sp-addremotelogin-transact-sql.md) (Deprecated) +|[sp_addrole](../../relational-databases/system-stored-procedures/sp-addrole-transact-sql.md) (Deprecated) |[sp_addrolemember](../../relational-databases/system-stored-procedures/sp-addrolemember-transact-sql.md) (Deprecated) +|[sp_addserver](../../relational-databases/system-stored-procedures/sp-addserver-transact-sql.md) (Deprecated) |[sp_addsrvrolemember](../../relational-databases/system-stored-procedures/sp-addsrvrolemember-transact-sql.md) (Deprecated) +|[sp_adduser](../../relational-databases/system-stored-procedures/sp-adduser-transact-sql.md) (Deprecated) |[sp_approlepassword](../../relational-databases/system-stored-procedures/sp-approlepassword-transact-sql.md) (Deprecated) +|[sp_audit_write](../../relational-databases/system-stored-procedures/sp-audit-write-transact-sql.md) |[sp_change_users_login](../../relational-databases/system-stored-procedures/sp-change-users-login-transact-sql.md) +|[sp_changedbowner](../../relational-databases/system-stored-procedures/sp-changedbowner-transact-sql.md) |[sp_changeobjectowner](../../relational-databases/system-stored-procedures/sp-changeobjectowner-transact-sql.md) (Deprecated) +|[sp_control_dbmasterkey_password](../../relational-databases/system-stored-procedures/sp-control-dbmasterkey-password-transact-sql.md) |[sp_dbfixedrolepermission](../../relational-databases/system-stored-procedures/sp-dbfixedrolepermission-transact-sql.md) (Deprecated) +|[sp_defaultdb](../../relational-databases/system-stored-procedures/sp-defaultdb-transact-sql.md) (Deprecated) |[sp_defaultlanguage](../../relational-databases/system-stored-procedures/sp-defaultlanguage-transact-sql.md) (Deprecated) +|[sp_denylogin](../../relational-databases/system-stored-procedures/sp-denylogin-transact-sql.md) (Deprecated) |[sp_describe_parameter_encryption](../../relational-databases/system-stored-procedures/sp-describe-parameter-encryption-transact-sql.md) +|[sp_dropalias](../../relational-databases/system-stored-procedures/sp-dropalias-transact-sql.md) (Deprecated) |[sys.sp_drop_trusted_assembly]( sys-sp-drop-trusted-assembly-transact-sql.md) | +|[sp_dropapprole](../../relational-databases/system-stored-procedures/sp-dropapprole-transact-sql.md) (Deprecated) |[sp_droplinkedsrvlogin](../../relational-databases/system-stored-procedures/sp-droplinkedsrvlogin-transact-sql.md) | +|[sp_droplogin](../../relational-databases/system-stored-procedures/sp-droplogin-transact-sql.md) (Deprecated) |[sp_dropremotelogin](../../relational-databases/system-stored-procedures/sp-dropremotelogin-transact-sql.md) (Deprecated) | +|[sp_droprole](../../relational-databases/system-stored-procedures/sp-droprole-transact-sql.md) (Deprecated) |[sp_droprolemember](../../relational-databases/system-stored-procedures/sp-droprolemember-transact-sql.md) (Deprecated) | +|[sp_dropserver](../../relational-databases/system-stored-procedures/sp-dropserver-transact-sql.md) |[sp_dropsrvrolemember](../../relational-databases/system-stored-procedures/sp-dropsrvrolemember-transact-sql.md) (Deprecated) | +|[sp_dropuser](../../relational-databases/system-stored-procedures/sp-dropuser-transact-sql.md) (Deprecated) |[sp_grantdbaccess](../../relational-databases/system-stored-procedures/sp-grantdbaccess-transact-sql.md) (Deprecated) | +|[sp_grantlogin](../../relational-databases/system-stored-procedures/sp-grantlogin-transact-sql.md) (Deprecated) |[sp_helpdbfixedrole](../../relational-databases/system-stored-procedures/sp-helpdbfixedrole-transact-sql.md) | +|[sp_helplinkedsrvlogin](../../relational-databases/system-stored-procedures/sp-helplinkedsrvlogin-transact-sql.md) |[sp_helplogins](../../relational-databases/system-stored-procedures/sp-helplogins-transact-sql.md) | +|[sp_helpntgroup](../../relational-databases/system-stored-procedures/sp-helpntgroup-transact-sql.md) |[sp_helpremotelogin](../../relational-databases/system-stored-procedures/sp-helpremotelogin-transact-sql.md) (Deprecated) | +|[sp_helprole](../../relational-databases/system-stored-procedures/sp-helprole-transact-sql.md) |[sp_helprolemember](../../relational-databases/system-stored-procedures/sp-helprolemember-transact-sql.md) | +|[sp_helprotect](../../relational-databases/system-stored-procedures/sp-helprotect-transact-sql.md) (Deprecated) |[sp_helpsrvrole](../../relational-databases/system-stored-procedures/sp-helpsrvrole-transact-sql.md) | +|[sp_helpsrvrolemember](../../relational-databases/system-stored-procedures/sp-helpsrvrolemember-transact-sql.md) |[sp_helpuser](../../relational-databases/system-stored-procedures/sp-helpuser-transact-sql.md) (Deprecated) | +|[sp_migrate_user_to_contained](../../relational-databases/system-stored-procedures/sp-migrate-user-to-contained-transact-sql.md)|[sp_MShasdbaccess](../../relational-databases/system-stored-procedures/sp-mshasdbaccess-transact-sql.md) | +|[sp_password](../../relational-databases/system-stored-procedures/sp-password-transact-sql.md) (Deprecated)|[sp_refresh_parameter_encryption](../../relational-databases/system-stored-procedures/sp-refresh-parameter-encryption-transact-sql.md) | +|[sp_remoteoption](../../relational-databases/system-stored-procedures/sp-remoteoption-transact-sql.md) (Deprecated)|[sp_revokedbaccess](../../relational-databases/system-stored-procedures/sp-revokedbaccess-transact-sql.md) (Deprecated) | +|[sp_revokelogin](../../relational-databases/system-stored-procedures/sp-revokelogin-transact-sql.md) (Deprecated)|[sp_setapprole](../../relational-databases/system-stored-procedures/sp-setapprole-transact-sql.md) | +|[sp_srvrolepermission](../../relational-databases/system-stored-procedures/sp-srvrolepermission-transact-sql.md) (Deprecated)|[sp_testlinkedserver](../../relational-databases/system-stored-procedures/sp-testlinkedserver-transact-sql.md) | +|[sp_unsetapprole](../../relational-databases/system-stored-procedures/sp-unsetapprole-transact-sql.md) |[sp_validatelogins](../../relational-databases/system-stored-procedures/sp-validatelogins-transact-sql.md) | +|[sp_xp_cmdshell_proxy_account](../../relational-databases/system-stored-procedures/sp-xp-cmdshell-proxy-account-transact-sql.md) | | + + + +## See Also + [System Stored Procedures (Transact-SQL)](../../relational-databases/system-stored-procedures/system-stored-procedures-transact-sql.md) + [Security Functions (Transact-SQL)](../../t-sql/functions/security-functions-transact-sql.md) + + From b5bb573a862575e92842a3698e9712129e2eb88e Mon Sep 17 00:00:00 2001 From: ulvii Date: Mon, 17 Jul 2017 13:00:11 -0700 Subject: [PATCH 328/336] Update TOC.md --- docs/connect/php/TOC.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/connect/php/TOC.md b/docs/connect/php/TOC.md index 37cb662e8fa..4d1931e24c7 100644 --- a/docs/connect/php/TOC.md +++ b/docs/connect/php/TOC.md @@ -12,6 +12,7 @@ ## [System Requirements](system-requirements-for-the-php-sql-driver.md) ## [Loading the driver](loading-the-php-sql-driver.md) ## [Configuring IIS](configuring-iis-for-php-sql-driver.md) +## [PHP Linux and Mac Drivers Installation Tutorial](installation-tutorial-linux-mac.md) ## [Release Notes](release-notes-for-the-php-sql-driver.md) ## [Support Resources](support-resources-for-the-php-sql-driver.md) ## [About Code Samples](about-code-examples-in-the-documentation.md) From 4dfe5035aa049b6651f85ccc760b3459a10cd9ab Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Mon, 17 Jul 2017 13:03:02 -0700 Subject: [PATCH 329/336] Proc TOC, Added to CLR procs --- docs/relational-databases/system-stored-procedures/TOC.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/relational-databases/system-stored-procedures/TOC.md b/docs/relational-databases/system-stored-procedures/TOC.md index 3688f212461..3eccc05d0db 100644 --- a/docs/relational-databases/system-stored-procedures/TOC.md +++ b/docs/relational-databases/system-stored-procedures/TOC.md @@ -356,6 +356,7 @@ ## [sp_query_store_reset_exec_stats](sp-query-store-reset-exec-stats-transact-sql.md) ## [sp_query_store_unforce_plan](sp-query-store-unforce-plan-transact-sql.md) # [Security](security-stored-procedures-transact-sql.md) +## [sp_add_trusted_assembly](sys-sp-add-trusted-assembly-transact-sql.md) ## [sp_addapprole](sp-addapprole-transact-sql.md) ## [sp_addlogin](sp-addlogin-transact-sql.md) ## [sp_addremotelogin](sp-addremotelogin-transact-sql.md) @@ -375,6 +376,7 @@ ## [sp_defaultlanguage](sp-defaultlanguage-transact-sql.md) ## [sp_denylogin](sp-denylogin-transact-sql.md) ## [sp_describe_parameter_encryption](sp-describe-parameter-encryption-transact-sql.md) +## [sp_drop_trusted_assembly](sys-sp-dropd-trusted-assembly-transact-sql.md) ## [sp_dropalias](sp-dropalias-transact-sql.md) ## [sp_dropapprole](sp-dropapprole-transact-sql.md) ## [sp_droplogin](sp-droplogin-transact-sql.md) From 040e7117716893cc1ae0c892b459d06ba6e18ab4 Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Mon, 17 Jul 2017 13:09:28 -0700 Subject: [PATCH 330/336] Typo in url --- docs/relational-databases/system-stored-procedures/TOC.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/relational-databases/system-stored-procedures/TOC.md b/docs/relational-databases/system-stored-procedures/TOC.md index 3eccc05d0db..d371e8c3db5 100644 --- a/docs/relational-databases/system-stored-procedures/TOC.md +++ b/docs/relational-databases/system-stored-procedures/TOC.md @@ -376,7 +376,7 @@ ## [sp_defaultlanguage](sp-defaultlanguage-transact-sql.md) ## [sp_denylogin](sp-denylogin-transact-sql.md) ## [sp_describe_parameter_encryption](sp-describe-parameter-encryption-transact-sql.md) -## [sp_drop_trusted_assembly](sys-sp-dropd-trusted-assembly-transact-sql.md) +## [sp_drop_trusted_assembly](sys-sp-drop-trusted-assembly-transact-sql.md) ## [sp_dropalias](sp-dropalias-transact-sql.md) ## [sp_dropapprole](sp-dropapprole-transact-sql.md) ## [sp_droplogin](sp-droplogin-transact-sql.md) From 26cedd8776610e4de231921f3e0c8e46b72bec90 Mon Sep 17 00:00:00 2001 From: Owen Duncan Date: Mon, 17 Jul 2017 13:36:59 -0700 Subject: [PATCH 331/336] Update what-s-new-in-sql-server-analysis-services-2017.md --- ...what-s-new-in-sql-server-analysis-services-2017.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/analysis-services/what-s-new-in-sql-server-analysis-services-2017.md b/docs/analysis-services/what-s-new-in-sql-server-analysis-services-2017.md index 6665fbcdba8..04526576009 100644 --- a/docs/analysis-services/what-s-new-in-sql-server-analysis-services-2017.md +++ b/docs/analysis-services/what-s-new-in-sql-server-analysis-services-2017.md @@ -1,7 +1,7 @@ --- title: "What's new in SQL Server 2017 Analysis Services | Microsoft Docs" ms.custom: "" -ms.date: "03/17/2017" +ms.date: "07/17/2017" ms.prod: "sql-server-2017" ms.reviewer: "" ms.suite: "" @@ -18,6 +18,15 @@ manager: "erikre" # What's new in SQL Server 2017 Analysis Services [!INCLUDE[tsql-appliesto-ssvNxt-xxxx-xxxx-xxx](../includes/tsql-appliesto-ssvnxt-xxxx-xxxx-xxx.md)] +## SQL Server 2017 Analysis Services RC1 +There are no new features in this release, however, this release includes additional improvements to [Dynamic Management Views](https://docs.microsoft.com/sql/analysis-services/instances/use-dynamic-management-views-dmvs-to-monitor-analysis-services) (DMV) for tabular models at the 1200 and 1400 compatibility levels. + +DISCOVER_CALC_DEPENDENCY +Now works with tabular 1200 and 1400 models. Tabular 1400 models show dependencies between M partitions, M expressions and structured data sources. To learn more, see the [Analysis Services blog](https://blogs.msdn.microsoft.com/analysisservices/). + +MDSCHEMA_MEASUREGROUP_DIMENSIONS +Improvements are included for this DMV, which is used by various client tools to show measure dimensionality. For example, the Explore feature in Excel Pivot Tables allows the user to cross-drill to dimensions related to the selected measures. This release corrects the cardinality columns, which were previously showing incorrect values. + ## SQL Server Analysis Services CTP 2.1 There are no new features in this release. Improvements in this release include bug fixes and performance, and enhancements to [Dynamic Management Views](https://docs.microsoft.com/sql/analysis-services/instances/use-dynamic-management-views-dmvs-to-monitor-analysis-services) (DMV). DMVs are queries in SQL Server Profiler that return information about local server operations and server health. For more details, see the [Analysis Services blog](https://blogs.msdn.microsoft.com/analysisservices/). From 652e459cd8bc5fcd21a05578f1708c67ed45d5c0 Mon Sep 17 00:00:00 2001 From: Jason Roth Date: Mon, 17 Jul 2017 16:44:35 -0400 Subject: [PATCH 332/336] Removing duplicate item from release notes --- docs/linux/sql-server-linux-release-notes.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-release-notes.md b/docs/linux/sql-server-linux-release-notes.md index c1207b4cac4..4c8b9876f47 100644 --- a/docs/linux/sql-server-linux-release-notes.md +++ b/docs/linux/sql-server-linux-release-notes.md @@ -139,12 +139,15 @@ The following sections describe known issues with this release of SQL Server 201 - Distributed transactions requiring the Microsoft Distributed Transaction Coordinator service are not supported on SQL Server running on Linux. SQL Server to SQL Server distributed transactions are supported. #### Remote database files + - Hosting database files on a NFS server with version <4 is not supported in this release. This includes using NFS for shared disk failover clustering as well as databases on non-clustered instances. We are working on enabling other NFS server versions in the upcoming releases. #### Cross platform availability groups and distributed availability groups + - Due to a known issue, creating availability groups with replicas on instances hosted on both Windows and Linux is not working in this release. This includes distributed availability groups. The fix will be available in the upcoming release candidate build. #### Server Collation + - When using the MSSQL_COLLATION override, OR when doing a localized (non English) install, it is possible SQL Server will hit a deadlock when trying to set the server collation, which generates a dump. Setup does complete successfully, however the server collation will not have been set. The workaround is to simply run ./mssql-conf set-collation and enter the collation name desired when prompted (the collation name can be found in the errorlog at the line: “Attempting to change default collation to …”). #### Localization @@ -161,8 +164,6 @@ The following sections describe known issues with this release of SQL Server 201 sudo MSSQL_LCID= /opt/mssql/bin/mssql-conf setup ``` -- When using the MSSQL_COLLATION override, OR when doing a localized (non English) install, it is possible SQL Server will hit a deadlock when trying to set the server collation, which generates a dump. Setup does complete successfully, however the server collation will not have been set. The workaround is to simply run ./mssql-conf set-collation and enter the collation name desired when prompted (the collation name can be found in the errorlog at the line: “Attempting to change default collation to …”). - #### Shared disk cluster instance upgrade In RC1 the cluster resource agent sets the virtual server name like it does in a Failover Cluster Instance on Windows. Prior to RC1 `@@servername` on a shared disk cluster returned the specific node name so after failover `@@servername` returned a different value. In RC1 the serverName of the shared disk cluster instance is updated with the resource name when the resource is added to the cluster. Because of this, the cluster will have to restart the SQL Server after the manual failover during the upgrade - as in the following steps: From f32472bd555e89ad65be38c508095491b4409f53 Mon Sep 17 00:00:00 2001 From: ulvii Date: Mon, 17 Jul 2017 14:01:05 -0700 Subject: [PATCH 333/336] Update installation-tutorial-linux-mac.md --- .../php/installation-tutorial-linux-mac.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/connect/php/installation-tutorial-linux-mac.md b/docs/connect/php/installation-tutorial-linux-mac.md index a4c6f94a5c9..1dfda22c1e8 100644 --- a/docs/connect/php/installation-tutorial-linux-mac.md +++ b/docs/connect/php/installation-tutorial-linux-mac.md @@ -10,9 +10,9 @@ ms.author: "v-ulibra" manager: "Hadis Fard" --- # PHP Linux and Mac Drivers Installation Tutorial -The following instructions assume a clean environment and show how to install PHP 7.x, Microsoft ODBC driver, apache, and Microsoft PHP drivers on Ubuntu 15.10, 16.04, RedHat 7, Debian 8, and Mac OS X. +The following instructions assume a clean environment and show how to install PHP 7.x, Microsoft ODBC driver, Apache, and Microsoft PHP drivers on Ubuntu 15.10, 16.04, RedHat 7, Debian 8, and Mac OS X. ## Installing the drivers on Ubuntu 15.10 for PHP 7.0 -Note that there is no PHP 7.1 package available for Ubuntu 15.10. +There is no PHP 7.1 package available for Ubuntu 15.10. ### Step 1. Install PHP ``` sudo su @@ -53,7 +53,7 @@ echo "extension=pdo_sqlsrv.so" >> /etc/php/7.0/apache2/php.ini ``` sudo service apache2 restart ``` -To test your installation, see **Testing Your Installation** at the end of this document. +To test your installation, see **Testing your installation** at the end of this document.   ## Installing the drivers on Ubuntu 16.04 for PHP 7.0 ### Step 1. Install PHP @@ -95,7 +95,7 @@ echo "extension=pdo_sqlsrv.so" >> /etc/php/7.0/apache2/php.ini ``` sudo service apache2 restart ``` -To test your installation, see **Testing Your Installation** at the end of this document. +To test your installation, see **Testing your installation** at the end of this document.   ## Installing the drivers on Ubuntu 16.04 for PHP 7.1 ### Step 1. Install PHP @@ -138,7 +138,7 @@ echo "extension=pdo_sqlsrv.so" >> /etc/php/7.1/apache2/php.ini ``` sudo service apache2 restart ``` -To test your installation, see **Testing Your Installation** at the end of this document. +To test your installation, see **Testing your installation** at the end of this document.   ## Installing the drivers on Red Hat 7 for PHP 7.0 and 7.1 ### Step 1. Install PHP @@ -178,7 +178,7 @@ yum install httpd echo "extension=sqlsrv.so" > /etc/php.d/sqlsrv.ini echo "extension=pdo_sqlsrv.so" > /etc/php.d/pdo_sqlsrv.ini ``` -Note: SELinux is installed by default and runs in Enforcing mode. To allow Apache to connect to databases through SELinux, run the following command: +SELinux is installed by default and runs in Enforcing mode. To allow Apache to connect to databases through SELinux, run the following command: ``` sudo setsebool -P httpd_can_network_connect_db 1 ``` @@ -186,7 +186,7 @@ sudo setsebool -P httpd_can_network_connect_db 1 ``` sudo apachectl restart ``` -To test your installation, see **Testing Your Installation** at the end of this document. +To test your installation, see **Testing your installation** at the end of this document.   ## Installing the drivers on Debian 8 for PHP 7.0 ### Step 1. Install PHP @@ -232,7 +232,7 @@ echo "extension=pdo_sqlsrv.so" >> /etc/php/7.0/apache2/php.ini ``` sudo service apache2 restart ``` -To test your installation, see **Testing Your Installation** at the end of this document. +To test your installation, see **Testing your installation** at the end of this document.   ## Installing the drivers on Debian 8 for PHP 7.1 ### Step 1. Install PHP @@ -277,7 +277,7 @@ echo "extension=pdo_sqlsrv.so" >> /etc/php/7.1/apache2/php.ini ``` sudo service apache2 restart ``` -To test your installation, see **Testing Your Installation** at the end of this document. +To test your installation, see **Testing your installation** at the end of this document.   ## Installing the drivers on MacOS El Capitan and Sierra ### Step 1. Install PHP @@ -314,7 +314,7 @@ sudo pecl install pdo_sqlsrv ``` sudo apachectl restart ``` -To test your installation, see **Testing Your Installation** at the end of this document. +To test your installation, see **Testing your installation** at the end of this document.   ## Testing Your Installation To test this sample script, create a file called testsql.php in /var/www/html/ (/usr/local/var/www/htdocs on MacOS) and copy the following script to it, replacing the server, database, username, and password as appropriate. From fa5dffa8ef2136dcd3ebef5b8bcf84d8c9b8ef21 Mon Sep 17 00:00:00 2001 From: ulvii Date: Mon, 17 Jul 2017 14:08:09 -0700 Subject: [PATCH 334/336] Update TOC.md --- docs/connect/php/TOC.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/connect/php/TOC.md b/docs/connect/php/TOC.md index 4d1931e24c7..afdb74fe74a 100644 --- a/docs/connect/php/TOC.md +++ b/docs/connect/php/TOC.md @@ -12,7 +12,7 @@ ## [System Requirements](system-requirements-for-the-php-sql-driver.md) ## [Loading the driver](loading-the-php-sql-driver.md) ## [Configuring IIS](configuring-iis-for-php-sql-driver.md) -## [PHP Linux and Mac Drivers Installation Tutorial](installation-tutorial-linux-mac.md) +## [PHP Linux and Mac drivers installation tutorial](installation-tutorial-linux-mac.md) ## [Release Notes](release-notes-for-the-php-sql-driver.md) ## [Support Resources](support-resources-for-the-php-sql-driver.md) ## [About Code Samples](about-code-examples-in-the-documentation.md) From bb53eb93a405ea306faf9912d8a8225fd59e29be Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Mon, 17 Jul 2017 15:04:30 -0700 Subject: [PATCH 335/336] Linux security, typo --- docs/linux/sql-server-linux-security-get-started.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-security-get-started.md b/docs/linux/sql-server-linux-security-get-started.md index 3fa0e1d2e6a..5ab6b0cb6ca 100644 --- a/docs/linux/sql-server-linux-security-get-started.md +++ b/docs/linux/sql-server-linux-security-get-started.md @@ -6,7 +6,7 @@ description: This topic describes typical security actions. author: BYHAM ms.author: rickbyh manager: jhubbard -ms.date: 03/17/2017 +ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -184,7 +184,7 @@ ALTER COLUMN EmailAddress ADD MASKED WITH (FUNCTION = 'email()'); ``` -Create a new user `TestUser` with `SEELCT` permission on the table, then execute a query as `TestUser` to view the masked data: +Create a new user `TestUser` with `SELECT` permission on the table, then execute a query as `TestUser` to view the masked data: ``` CREATE USER TestUser WITHOUT LOGIN; From 09a0b9bf9fe1b68c77cad6bcdaea3ddbc47f60bf Mon Sep 17 00:00:00 2001 From: Rick Byham Date: Mon, 17 Jul 2017 15:05:41 -0700 Subject: [PATCH 336/336] Linux sec limits, removed AD restiction --- docs/linux/sql-server-linux-security-overview.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/linux/sql-server-linux-security-overview.md b/docs/linux/sql-server-linux-security-overview.md index c5f765aae71..dee05a56490 100644 --- a/docs/linux/sql-server-linux-security-overview.md +++ b/docs/linux/sql-server-linux-security-overview.md @@ -6,7 +6,7 @@ description: This topic describes SQL Server on Linux restrictions. author: BYHAM ms.author: rickbyh manager: jhubbard -ms.date: 03/17/2017 +ms.date: 07/17/2017 ms.topic: article ms.prod: sql-linux ms.technology: database-engine @@ -28,7 +28,6 @@ ms.assetid: 64da74cc-14bf-4636-a55e-8cc1fce2aaff SQL Server on Linux currently has the following limitations: -* Only SQL Server authentication is currently available. * A standard password policy is provided. MUST_CHANGE is the only option you may configure. * Extensible Key Management is not supported. * Using keys stored in the Azure Key Vault is not supported.