This commit is contained in:
Anna Hoffman 2020-03-20 12:57:54 -07:00
Родитель e27110d504
Коммит f672db5b36
329 изменённых файлов: 28138 добавлений и 487 удалений

Просмотреть файл

@ -1,9 +1,9 @@
# Microsoft Open Source Code of Conduct
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
Resources:
- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)
- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns
# Microsoft Open Source Code of Conduct
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
Resources:
- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)
- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns

Просмотреть файл

@ -1,395 +1,395 @@
Attribution 4.0 International
=======================================================================
Creative Commons Corporation ("Creative Commons") is not a law firm and
does not provide legal services or legal advice. Distribution of
Creative Commons public licenses does not create a lawyer-client or
other relationship. Creative Commons makes its licenses and related
information available on an "as-is" basis. Creative Commons gives no
warranties regarding its licenses, any material licensed under their
terms and conditions, or any related information. Creative Commons
disclaims all liability for damages resulting from their use to the
fullest extent possible.
Using Creative Commons Public Licenses
Creative Commons public licenses provide a standard set of terms and
conditions that creators and other rights holders may use to share
original works of authorship and other material subject to copyright
and certain other rights specified in the public license below. The
following considerations are for informational purposes only, are not
exhaustive, and do not form part of our licenses.
Considerations for licensors: Our public licenses are
intended for use by those authorized to give the public
permission to use material in ways otherwise restricted by
copyright and certain other rights. Our licenses are
irrevocable. Licensors should read and understand the terms
and conditions of the license they choose before applying it.
Licensors should also secure all rights necessary before
applying our licenses so that the public can reuse the
material as expected. Licensors should clearly mark any
material not subject to the license. This includes other CC-
licensed material, or material used under an exception or
limitation to copyright. More considerations for licensors:
wiki.creativecommons.org/Considerations_for_licensors
Considerations for the public: By using one of our public
licenses, a licensor grants the public permission to use the
licensed material under specified terms and conditions. If
the licensor's permission is not necessary for any reason--for
example, because of any applicable exception or limitation to
copyright--then that use is not regulated by the license. Our
licenses grant only permissions under copyright and certain
other rights that a licensor has authority to grant. Use of
the licensed material may still be restricted for other
reasons, including because others have copyright or other
rights in the material. A licensor may make special requests,
such as asking that all changes be marked or described.
Although not required by our licenses, you are encouraged to
respect those requests where reasonable. More_considerations
for the public:
wiki.creativecommons.org/Considerations_for_licensees
=======================================================================
Creative Commons Attribution 4.0 International Public License
By exercising the Licensed Rights (defined below), You accept and agree
to be bound by the terms and conditions of this Creative Commons
Attribution 4.0 International Public License ("Public License"). To the
extent this Public License may be interpreted as a contract, You are
granted the Licensed Rights in consideration of Your acceptance of
these terms and conditions, and the Licensor grants You such rights in
consideration of benefits the Licensor receives from making the
Licensed Material available under these terms and conditions.
Section 1 -- Definitions.
a. Adapted Material means material subject to Copyright and Similar
Rights that is derived from or based upon the Licensed Material
and in which the Licensed Material is translated, altered,
arranged, transformed, or otherwise modified in a manner requiring
permission under the Copyright and Similar Rights held by the
Licensor. For purposes of this Public License, where the Licensed
Material is a musical work, performance, or sound recording,
Adapted Material is always produced where the Licensed Material is
synched in timed relation with a moving image.
b. Adapter's License means the license You apply to Your Copyright
and Similar Rights in Your contributions to Adapted Material in
accordance with the terms and conditions of this Public License.
c. Copyright and Similar Rights means copyright and/or similar rights
closely related to copyright including, without limitation,
performance, broadcast, sound recording, and Sui Generis Database
Rights, without regard to how the rights are labeled or
categorized. For purposes of this Public License, the rights
specified in Section 2(b)(1)-(2) are not Copyright and Similar
Rights.
d. Effective Technological Measures means those measures that, in the
absence of proper authority, may not be circumvented under laws
fulfilling obligations under Article 11 of the WIPO Copyright
Treaty adopted on December 20, 1996, and/or similar international
agreements.
e. Exceptions and Limitations means fair use, fair dealing, and/or
any other exception or limitation to Copyright and Similar Rights
that applies to Your use of the Licensed Material.
f. Licensed Material means the artistic or literary work, database,
or other material to which the Licensor applied this Public
License.
g. Licensed Rights means the rights granted to You subject to the
terms and conditions of this Public License, which are limited to
all Copyright and Similar Rights that apply to Your use of the
Licensed Material and that the Licensor has authority to license.
h. Licensor means the individual(s) or entity(ies) granting rights
under this Public License.
i. Share means to provide material to the public by any means or
process that requires permission under the Licensed Rights, such
as reproduction, public display, public performance, distribution,
dissemination, communication, or importation, and to make material
available to the public including in ways that members of the
public may access the material from a place and at a time
individually chosen by them.
j. Sui Generis Database Rights means rights other than copyright
resulting from Directive 96/9/EC of the European Parliament and of
the Council of 11 March 1996 on the legal protection of databases,
as amended and/or succeeded, as well as other essentially
equivalent rights anywhere in the world.
k. You means the individual or entity exercising the Licensed Rights
under this Public License. Your has a corresponding meaning.
Section 2 -- Scope.
a. License grant.
1. Subject to the terms and conditions of this Public License,
the Licensor hereby grants You a worldwide, royalty-free,
non-sublicensable, non-exclusive, irrevocable license to
exercise the Licensed Rights in the Licensed Material to:
a. reproduce and Share the Licensed Material, in whole or
in part; and
b. produce, reproduce, and Share Adapted Material.
2. Exceptions and Limitations. For the avoidance of doubt, where
Exceptions and Limitations apply to Your use, this Public
License does not apply, and You do not need to comply with
its terms and conditions.
3. Term. The term of this Public License is specified in Section
6(a).
4. Media and formats; technical modifications allowed. The
Licensor authorizes You to exercise the Licensed Rights in
all media and formats whether now known or hereafter created,
and to make technical modifications necessary to do so. The
Licensor waives and/or agrees not to assert any right or
authority to forbid You from making technical modifications
necessary to exercise the Licensed Rights, including
technical modifications necessary to circumvent Effective
Technological Measures. For purposes of this Public License,
simply making modifications authorized by this Section 2(a)
(4) never produces Adapted Material.
5. Downstream recipients.
a. Offer from the Licensor -- Licensed Material. Every
recipient of the Licensed Material automatically
receives an offer from the Licensor to exercise the
Licensed Rights under the terms and conditions of this
Public License.
b. No downstream restrictions. You may not offer or impose
any additional or different terms or conditions on, or
apply any Effective Technological Measures to, the
Licensed Material if doing so restricts exercise of the
Licensed Rights by any recipient of the Licensed
Material.
6. No endorsement. Nothing in this Public License constitutes or
may be construed as permission to assert or imply that You
are, or that Your use of the Licensed Material is, connected
with, or sponsored, endorsed, or granted official status by,
the Licensor or others designated to receive attribution as
provided in Section 3(a)(1)(A)(i).
b. Other rights.
1. Moral rights, such as the right of integrity, are not
licensed under this Public License, nor are publicity,
privacy, and/or other similar personality rights; however, to
the extent possible, the Licensor waives and/or agrees not to
assert any such rights held by the Licensor to the limited
extent necessary to allow You to exercise the Licensed
Rights, but not otherwise.
2. Patent and trademark rights are not licensed under this
Public License.
3. To the extent possible, the Licensor waives any right to
collect royalties from You for the exercise of the Licensed
Rights, whether directly or through a collecting society
under any voluntary or waivable statutory or compulsory
licensing scheme. In all other cases the Licensor expressly
reserves any right to collect such royalties.
Section 3 -- License Conditions.
Your exercise of the Licensed Rights is expressly made subject to the
following conditions.
a. Attribution.
1. If You Share the Licensed Material (including in modified
form), You must:
a. retain the following if it is supplied by the Licensor
with the Licensed Material:
i. identification of the creator(s) of the Licensed
Material and any others designated to receive
attribution, in any reasonable manner requested by
the Licensor (including by pseudonym if
designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of
warranties;
v. a URI or hyperlink to the Licensed Material to the
extent reasonably practicable;
b. indicate if You modified the Licensed Material and
retain an indication of any previous modifications; and
c. indicate the Licensed Material is licensed under this
Public License, and include the text of, or the URI or
hyperlink to, this Public License.
2. You may satisfy the conditions in Section 3(a)(1) in any
reasonable manner based on the medium, means, and context in
which You Share the Licensed Material. For example, it may be
reasonable to satisfy the conditions by providing a URI or
hyperlink to a resource that includes the required
information.
3. If requested by the Licensor, You must remove any of the
information required by Section 3(a)(1)(A) to the extent
reasonably practicable.
4. If You Share Adapted Material You produce, the Adapter's
License You apply must not prevent recipients of the Adapted
Material from complying with this Public License.
Section 4 -- Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that
apply to Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
to extract, reuse, reproduce, and Share all or a substantial
portion of the contents of the database;
b. if You include all or a substantial portion of the database
contents in a database in which You have Sui Generis Database
Rights, then the database in which You have Sui Generis Database
Rights (but not its individual contents) is Adapted Material; and
c. You must comply with the conditions in Section 3(a) if You Share
all or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not
replace Your obligations under this Public License where the Licensed
Rights include other Copyright and Similar Rights.
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
c. The disclaimer of warranties and limitation of liability provided
above shall be interpreted in a manner that, to the extent
possible, most closely approximates an absolute disclaimer and
waiver of all liability.
Section 6 -- Term and Termination.
a. This Public License applies for the term of the Copyright and
Similar Rights licensed here. However, if You fail to comply with
this Public License, then Your rights under this Public License
terminate automatically.
b. Where Your right to use the Licensed Material has terminated under
Section 6(a), it reinstates:
1. automatically as of the date the violation is cured, provided
it is cured within 30 days of Your discovery of the
violation; or
2. upon express reinstatement by the Licensor.
For the avoidance of doubt, this Section 6(b) does not affect any
right the Licensor may have to seek remedies for Your violations
of this Public License.
c. For the avoidance of doubt, the Licensor may also offer the
Licensed Material under separate terms or conditions or stop
distributing the Licensed Material at any time; however, doing so
will not terminate this Public License.
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
License.
Section 7 -- Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different
terms or conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the
Licensed Material not stated herein are separate from and
independent of the terms and conditions of this Public License.
Section 8 -- Interpretation.
a. For the avoidance of doubt, this Public License does not, and
shall not be interpreted to, reduce, limit, restrict, or impose
conditions on any use of the Licensed Material that could lawfully
be made without permission under this Public License.
b. To the extent possible, if any provision of this Public License is
deemed unenforceable, it shall be automatically reformed to the
minimum extent necessary to make it enforceable. If the provision
cannot be reformed, it shall be severed from this Public License
without affecting the enforceability of the remaining terms and
conditions.
c. No term or condition of this Public License will be waived and no
failure to comply consented to unless expressly agreed to by the
Licensor.
d. Nothing in this Public License constitutes or may be interpreted
as a limitation upon, or waiver of, any privileges and immunities
that apply to the Licensor or You, including from the legal
processes of any jurisdiction or authority.
=======================================================================
Creative Commons is not a party to its public
licenses. Notwithstanding, Creative Commons may elect to apply one of
its public licenses to material it publishes and in those instances
will be considered the “Licensor.” The text of the Creative Commons
public licenses is dedicated to the public domain under the CC0 Public
Domain Dedication. Except for the limited purpose of indicating that
material is shared under a Creative Commons public license or as
otherwise permitted by the Creative Commons policies published at
creativecommons.org/policies, Creative Commons does not authorize the
use of the trademark "Creative Commons" or any other trademark or logo
of Creative Commons without its prior written consent including,
without limitation, in connection with any unauthorized modifications
to any of its public licenses or any other arrangements,
understandings, or agreements concerning use of licensed material. For
the avoidance of doubt, this paragraph does not form part of the
public licenses.
Attribution 4.0 International
=======================================================================
Creative Commons Corporation ("Creative Commons") is not a law firm and
does not provide legal services or legal advice. Distribution of
Creative Commons public licenses does not create a lawyer-client or
other relationship. Creative Commons makes its licenses and related
information available on an "as-is" basis. Creative Commons gives no
warranties regarding its licenses, any material licensed under their
terms and conditions, or any related information. Creative Commons
disclaims all liability for damages resulting from their use to the
fullest extent possible.
Using Creative Commons Public Licenses
Creative Commons public licenses provide a standard set of terms and
conditions that creators and other rights holders may use to share
original works of authorship and other material subject to copyright
and certain other rights specified in the public license below. The
following considerations are for informational purposes only, are not
exhaustive, and do not form part of our licenses.
Considerations for licensors: Our public licenses are
intended for use by those authorized to give the public
permission to use material in ways otherwise restricted by
copyright and certain other rights. Our licenses are
irrevocable. Licensors should read and understand the terms
and conditions of the license they choose before applying it.
Licensors should also secure all rights necessary before
applying our licenses so that the public can reuse the
material as expected. Licensors should clearly mark any
material not subject to the license. This includes other CC-
licensed material, or material used under an exception or
limitation to copyright. More considerations for licensors:
wiki.creativecommons.org/Considerations_for_licensors
Considerations for the public: By using one of our public
licenses, a licensor grants the public permission to use the
licensed material under specified terms and conditions. If
the licensor's permission is not necessary for any reason--for
example, because of any applicable exception or limitation to
copyright--then that use is not regulated by the license. Our
licenses grant only permissions under copyright and certain
other rights that a licensor has authority to grant. Use of
the licensed material may still be restricted for other
reasons, including because others have copyright or other
rights in the material. A licensor may make special requests,
such as asking that all changes be marked or described.
Although not required by our licenses, you are encouraged to
respect those requests where reasonable. More_considerations
for the public:
wiki.creativecommons.org/Considerations_for_licensees
=======================================================================
Creative Commons Attribution 4.0 International Public License
By exercising the Licensed Rights (defined below), You accept and agree
to be bound by the terms and conditions of this Creative Commons
Attribution 4.0 International Public License ("Public License"). To the
extent this Public License may be interpreted as a contract, You are
granted the Licensed Rights in consideration of Your acceptance of
these terms and conditions, and the Licensor grants You such rights in
consideration of benefits the Licensor receives from making the
Licensed Material available under these terms and conditions.
Section 1 -- Definitions.
a. Adapted Material means material subject to Copyright and Similar
Rights that is derived from or based upon the Licensed Material
and in which the Licensed Material is translated, altered,
arranged, transformed, or otherwise modified in a manner requiring
permission under the Copyright and Similar Rights held by the
Licensor. For purposes of this Public License, where the Licensed
Material is a musical work, performance, or sound recording,
Adapted Material is always produced where the Licensed Material is
synched in timed relation with a moving image.
b. Adapter's License means the license You apply to Your Copyright
and Similar Rights in Your contributions to Adapted Material in
accordance with the terms and conditions of this Public License.
c. Copyright and Similar Rights means copyright and/or similar rights
closely related to copyright including, without limitation,
performance, broadcast, sound recording, and Sui Generis Database
Rights, without regard to how the rights are labeled or
categorized. For purposes of this Public License, the rights
specified in Section 2(b)(1)-(2) are not Copyright and Similar
Rights.
d. Effective Technological Measures means those measures that, in the
absence of proper authority, may not be circumvented under laws
fulfilling obligations under Article 11 of the WIPO Copyright
Treaty adopted on December 20, 1996, and/or similar international
agreements.
e. Exceptions and Limitations means fair use, fair dealing, and/or
any other exception or limitation to Copyright and Similar Rights
that applies to Your use of the Licensed Material.
f. Licensed Material means the artistic or literary work, database,
or other material to which the Licensor applied this Public
License.
g. Licensed Rights means the rights granted to You subject to the
terms and conditions of this Public License, which are limited to
all Copyright and Similar Rights that apply to Your use of the
Licensed Material and that the Licensor has authority to license.
h. Licensor means the individual(s) or entity(ies) granting rights
under this Public License.
i. Share means to provide material to the public by any means or
process that requires permission under the Licensed Rights, such
as reproduction, public display, public performance, distribution,
dissemination, communication, or importation, and to make material
available to the public including in ways that members of the
public may access the material from a place and at a time
individually chosen by them.
j. Sui Generis Database Rights means rights other than copyright
resulting from Directive 96/9/EC of the European Parliament and of
the Council of 11 March 1996 on the legal protection of databases,
as amended and/or succeeded, as well as other essentially
equivalent rights anywhere in the world.
k. You means the individual or entity exercising the Licensed Rights
under this Public License. Your has a corresponding meaning.
Section 2 -- Scope.
a. License grant.
1. Subject to the terms and conditions of this Public License,
the Licensor hereby grants You a worldwide, royalty-free,
non-sublicensable, non-exclusive, irrevocable license to
exercise the Licensed Rights in the Licensed Material to:
a. reproduce and Share the Licensed Material, in whole or
in part; and
b. produce, reproduce, and Share Adapted Material.
2. Exceptions and Limitations. For the avoidance of doubt, where
Exceptions and Limitations apply to Your use, this Public
License does not apply, and You do not need to comply with
its terms and conditions.
3. Term. The term of this Public License is specified in Section
6(a).
4. Media and formats; technical modifications allowed. The
Licensor authorizes You to exercise the Licensed Rights in
all media and formats whether now known or hereafter created,
and to make technical modifications necessary to do so. The
Licensor waives and/or agrees not to assert any right or
authority to forbid You from making technical modifications
necessary to exercise the Licensed Rights, including
technical modifications necessary to circumvent Effective
Technological Measures. For purposes of this Public License,
simply making modifications authorized by this Section 2(a)
(4) never produces Adapted Material.
5. Downstream recipients.
a. Offer from the Licensor -- Licensed Material. Every
recipient of the Licensed Material automatically
receives an offer from the Licensor to exercise the
Licensed Rights under the terms and conditions of this
Public License.
b. No downstream restrictions. You may not offer or impose
any additional or different terms or conditions on, or
apply any Effective Technological Measures to, the
Licensed Material if doing so restricts exercise of the
Licensed Rights by any recipient of the Licensed
Material.
6. No endorsement. Nothing in this Public License constitutes or
may be construed as permission to assert or imply that You
are, or that Your use of the Licensed Material is, connected
with, or sponsored, endorsed, or granted official status by,
the Licensor or others designated to receive attribution as
provided in Section 3(a)(1)(A)(i).
b. Other rights.
1. Moral rights, such as the right of integrity, are not
licensed under this Public License, nor are publicity,
privacy, and/or other similar personality rights; however, to
the extent possible, the Licensor waives and/or agrees not to
assert any such rights held by the Licensor to the limited
extent necessary to allow You to exercise the Licensed
Rights, but not otherwise.
2. Patent and trademark rights are not licensed under this
Public License.
3. To the extent possible, the Licensor waives any right to
collect royalties from You for the exercise of the Licensed
Rights, whether directly or through a collecting society
under any voluntary or waivable statutory or compulsory
licensing scheme. In all other cases the Licensor expressly
reserves any right to collect such royalties.
Section 3 -- License Conditions.
Your exercise of the Licensed Rights is expressly made subject to the
following conditions.
a. Attribution.
1. If You Share the Licensed Material (including in modified
form), You must:
a. retain the following if it is supplied by the Licensor
with the Licensed Material:
i. identification of the creator(s) of the Licensed
Material and any others designated to receive
attribution, in any reasonable manner requested by
the Licensor (including by pseudonym if
designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of
warranties;
v. a URI or hyperlink to the Licensed Material to the
extent reasonably practicable;
b. indicate if You modified the Licensed Material and
retain an indication of any previous modifications; and
c. indicate the Licensed Material is licensed under this
Public License, and include the text of, or the URI or
hyperlink to, this Public License.
2. You may satisfy the conditions in Section 3(a)(1) in any
reasonable manner based on the medium, means, and context in
which You Share the Licensed Material. For example, it may be
reasonable to satisfy the conditions by providing a URI or
hyperlink to a resource that includes the required
information.
3. If requested by the Licensor, You must remove any of the
information required by Section 3(a)(1)(A) to the extent
reasonably practicable.
4. If You Share Adapted Material You produce, the Adapter's
License You apply must not prevent recipients of the Adapted
Material from complying with this Public License.
Section 4 -- Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that
apply to Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
to extract, reuse, reproduce, and Share all or a substantial
portion of the contents of the database;
b. if You include all or a substantial portion of the database
contents in a database in which You have Sui Generis Database
Rights, then the database in which You have Sui Generis Database
Rights (but not its individual contents) is Adapted Material; and
c. You must comply with the conditions in Section 3(a) if You Share
all or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not
replace Your obligations under this Public License where the Licensed
Rights include other Copyright and Similar Rights.
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
c. The disclaimer of warranties and limitation of liability provided
above shall be interpreted in a manner that, to the extent
possible, most closely approximates an absolute disclaimer and
waiver of all liability.
Section 6 -- Term and Termination.
a. This Public License applies for the term of the Copyright and
Similar Rights licensed here. However, if You fail to comply with
this Public License, then Your rights under this Public License
terminate automatically.
b. Where Your right to use the Licensed Material has terminated under
Section 6(a), it reinstates:
1. automatically as of the date the violation is cured, provided
it is cured within 30 days of Your discovery of the
violation; or
2. upon express reinstatement by the Licensor.
For the avoidance of doubt, this Section 6(b) does not affect any
right the Licensor may have to seek remedies for Your violations
of this Public License.
c. For the avoidance of doubt, the Licensor may also offer the
Licensed Material under separate terms or conditions or stop
distributing the Licensed Material at any time; however, doing so
will not terminate this Public License.
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
License.
Section 7 -- Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different
terms or conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the
Licensed Material not stated herein are separate from and
independent of the terms and conditions of this Public License.
Section 8 -- Interpretation.
a. For the avoidance of doubt, this Public License does not, and
shall not be interpreted to, reduce, limit, restrict, or impose
conditions on any use of the Licensed Material that could lawfully
be made without permission under this Public License.
b. To the extent possible, if any provision of this Public License is
deemed unenforceable, it shall be automatically reformed to the
minimum extent necessary to make it enforceable. If the provision
cannot be reformed, it shall be severed from this Public License
without affecting the enforceability of the remaining terms and
conditions.
c. No term or condition of this Public License will be waived and no
failure to comply consented to unless expressly agreed to by the
Licensor.
d. Nothing in this Public License constitutes or may be interpreted
as a limitation upon, or waiver of, any privileges and immunities
that apply to the Licensor or You, including from the legal
processes of any jurisdiction or authority.
=======================================================================
Creative Commons is not a party to its public
licenses. Notwithstanding, Creative Commons may elect to apply one of
its public licenses to material it publishes and in those instances
will be considered the “Licensor.” The text of the Creative Commons
public licenses is dedicated to the public domain under the CC0 Public
Domain Dedication. Except for the limited purpose of indicating that
material is shared under a Creative Commons public license or as
otherwise permitted by the Creative Commons policies published at
creativecommons.org/policies, Creative Commons does not authorize the
use of the trademark "Creative Commons" or any other trademark or logo
of Creative Commons without its prior written consent including,
without limitation, in connection with any unauthorized modifications
to any of its public licenses or any other arrangements,
understandings, or agreements concerning use of licensed material. For
the avoidance of doubt, this paragraph does not form part of the
public licenses.
Creative Commons may be contacted at creativecommons.org.

Просмотреть файл

@ -1,21 +1,21 @@
MIT License
Copyright (c) Microsoft Corporation.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE
MIT License
Copyright (c) Microsoft Corporation.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE

31
LICENSES/README.md Normal file
Просмотреть файл

@ -0,0 +1,31 @@
# Contributing
This project welcomes contributions and suggestions. Most contributions require you to agree to a
Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.
When you submit a pull request, a CLA bot will automatically determine whether you need to provide
a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions
provided by the bot. You will only need to do this once across all repos using our CLA.
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
# Legal Notices
Microsoft and any contributors grant you a license to the Microsoft documentation and other content
in this repository under the [Creative Commons Attribution 4.0 International Public License](https://creativecommons.org/licenses/by/4.0/legalcode),
see the [LICENSE](LICENSE) file, and grant you a license to any code in the repository under the [MIT License](https://opensource.org/licenses/MIT), see the
[LICENSE-CODE](LICENSE-CODE) file.
Microsoft, Windows, Microsoft Azure and/or other Microsoft products and services referenced in the documentation
may be either trademarks or registered trademarks of Microsoft in the United States and/or other countries.
The licenses for this project do not grant you rights to use any Microsoft names, logos, or trademarks.
Microsoft's general trademark guidelines can be found at http://go.microsoft.com/fwlink/?LinkID=254653.
Privacy information can be found at https://privacy.microsoft.com/en-us/
Microsoft and any contributors reserve all other rights, whether under their respective copyrights, patents,
or trademarks, whether by implication, estoppel or otherwise.

Просмотреть файл

@ -1,41 +1,41 @@
<!-- BEGIN MICROSOFT SECURITY.MD V0.0.3 BLOCK -->
## Security
Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).
If you believe you have found a security vulnerability in any Microsoft-owned repository that meets Microsoft's [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)) of a security vulnerability, please report it to us as described below.
## Reporting Security Issues
**Please do not report security vulnerabilities through public GitHub issues.**
Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report).
If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/en-us/msrc/pgp-key-msrc).
You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc).
Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:
* Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
* Full paths of source file(s) related to the manifestation of the issue
* The location of the affected source code (tag/branch/commit or direct URL)
* Any special configuration required to reproduce the issue
* Step-by-step instructions to reproduce the issue
* Proof-of-concept or exploit code (if possible)
* Impact of the issue, including how an attacker might exploit the issue
This information will help us triage your report more quickly.
If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs.
## Preferred Languages
We prefer all communications to be in English.
## Policy
Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd).
<!-- END MICROSOFT SECURITY.MD BLOCK -->
<!-- BEGIN MICROSOFT SECURITY.MD V0.0.3 BLOCK -->
## Security
Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).
If you believe you have found a security vulnerability in any Microsoft-owned repository that meets Microsoft's [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)) of a security vulnerability, please report it to us as described below.
## Reporting Security Issues
**Please do not report security vulnerabilities through public GitHub issues.**
Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report).
If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/en-us/msrc/pgp-key-msrc).
You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc).
Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:
* Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
* Full paths of source file(s) related to the manifestation of the issue
* The location of the affected source code (tag/branch/commit or direct URL)
* Any special configuration required to reproduce the issue
* Step-by-step instructions to reproduce the issue
* Proof-of-concept or exploit code (if possible)
* Impact of the issue, including how an attacker might exploit the issue
This information will help us triage your report more quickly.
If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs.
## Preferred Languages
We prefer all communications to be in English.
## Policy
Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd).
<!-- END MICROSOFT SECURITY.MD BLOCK -->

Просмотреть файл

@ -0,0 +1,384 @@
![](https://github.com/microsoft/sqlworkshops/blob/master/graphics/microsoftlogo.png?raw=true)
# Lab: Database Discovery and Assessment for Migrating to Azure
#### <i>A Microsoft Lab from the SQL Server team</i>
<p style="border-bottom: 1px solid lightgrey;"></p>
<img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/textbubble.png?raw=true"> <h2>Migrating Databases to the Microsoft Azure Platform </h2>
In this hands-on lab, you will implement a proof-of-concept (PoC) for migrating an on-premises SQL Server 2008 R2 database into Azure SQL Database Managed Instance (SQL MI) or Azure SQL Database. You will start your process by performing assessments to reveal any feature parity and compatibility issues between the on-premises SQL Server 2008 R2 database and the managed database offerings in Azure.
At the end of this lab, you will be better able to implement a cloud migration solution for business-critical applications and databases.
> **Note**:
> These labs were modified from an existing day-long, hands-on-labs workshop to fit into this workshop. If you'd like to access the extended version of these labs refer to [MCW: Migrating SQL databases to Azure](https://github.com/microsoft/MCW-Migrating-SQL-databases-to-Azure).
In this Lab, you'll learn how to assess your on-premises estate (via Tailspin Toys) with tools like [Azure Migrate](https://docs.microsoft.com/en-us/azure/migrate/migrate-services-overview) and [Data Migration Assistant](https://docs.microsoft.com/en-us/sql/dma/dma-overview?view=sql-server-2017). The activities in this Lab include:
&ensp;&ensp;&ensp;[Activity 1](#Activity-1): **Prepare:** Set up Azure Migrate
&ensp;&ensp;&ensp;[Activity 2](#Activity-2): **Prepare**: Restore TailspinToys on the SQLServer2008 VM
&ensp;&ensp;&ensp;[Activity 3](#Activity-3): **Assess:** Perform assessment for migration to Azure SQL Database
&ensp;&ensp;&ensp;[Activity 4](#Activity-4): **Assess:** Perform assessment for migration to Azure SQL Database Managed Instance
(<a href="https://github.com/microsoft/sqlworkshops/blob/master/SQLGroundToCloud/sqlgroundtocloud/00-Pre-Requisites.md" target="_blank">Make sure you check out the <b>Prerequisites</b> for this lab before you start</a>. You'll need all of the items loaded there before you can proceed. You can try this lab on your own or led by an instructor.)
<p style="border-bottom: 1px solid lightgrey;"></p>
### Lab Scenario: Tailspin Toys Gaming
[Tailspin Toys](http://tailspintoys.azurewebsites.net/?slug=model) is the developer of several products, including popular online video games, and has requested your help in determining where and how they should land their data in Azure. This is a decision that all businesses moving to the cloud have to make, and the result will depend on their unique business requirements. Microsoft has recently introduced Azure SQL, which brings all the SQL Server products in Azure under one suite. If you're already familiar with [Azure SQL Database](https://azure.microsoft.com/en-us/services/sql-database/), this slight shift means that Azure SQL also includes [Azure SQL VMs](https://azure.microsoft.com/en-us/services/virtual-machines/sql-server/), which Microsoft is continuously investing in and enhancing the benefits associated with it.
<p style="border-bottom: 1px solid lightgrey;"></p>
## Solution architecture
Below is a diagram of the solution architecture you will build in this lab. Please study this carefully, so you understand the whole of the solution as you are working on the various components.
![This solution diagram includes a virtual network containing SQL MI in a isolated subnet, along with a JumpBox VM and Database Migration Service in a management subnet. The MI Subnet displays both the primary managed instance, along with a read-only replica, which is accessed by reports from the web app. The web app connects to SQL MI via a subnet gateway and point-to-site VPN. The web app is published to App Services using Visual Studio 2019. An online data migration is conducted from the on-premises SQL Server to SQL MI using the Azure Database Migration Service, which reads backup files from an SMB network share.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/preferred-solution-architecture.png?raw=true "Preferred Solution diagram")
Throughout the solution, you will use [Azure Migrate](https://docs.microsoft.com/en-us/azure/migrate/migrate-services-overview) as the central hub to track the discovery, assessment, and migration of Tailspin Toys. The solution begins with using the [Microsoft Data Migration Assistant](https://docs.microsoft.com/en-us/sql/dma/dma-overview?view=sql-server-2017) to perform assessments of feature parity and compatibility of the on-premises SQL Server 2008 R2 database against both Azure SQL Database (Azure SQL DB) and Azure SQL Database Managed Instance (SQL MI), with the goal of migrating the `TailspinToys` database into an Azure PaaS offering with minimal or no changes. After completing the assessments and reviewing the findings, the SQL Server 2008 R2 database is migrated into SQL MI using the Azure Database Migration Service's online data migration option. This allows the database to be migrated with little to no downtime, by using a backup and transaction logs stored in an SMB network share.
They'll also leverage their existing licenses to get [Azure Hybrid Benefits](https://azure.microsoft.com/en-us/pricing/hybrid-benefit/), and they'll prepay for [reserved capacity](https://azure.microsoft.com/en-us/blog/announcing-general-availability-of-azure-sql-database-reserved-capacity/
). This will help them save money from the start.
The web app is deployed to an Azure App Service Web App using Visual Studio 2019. Once the database has been migrated and cutover, the `TailspinToysWeb` application is configured to talk to the SQL MI VNet through a virtual network gateway using [point-to-site VPN](https://docs.microsoft.com/en-us/azure/vpn-gateway/point-to-site-about), and its connection strings are updated to point to the new SQL MI database.
>**Note**: Due to time constraints, the lab will deal with switching the app running on a Jumpbox VM locally from leveraging data in SQL Server 2008 to SQL MI (but not the deployment to Azure or integrating the App Service with the Virtual Network). In the [extended version of these labs](https://github.com/microsoft/MCW-Migrating-SQL-databases-to-Azure/blob/master/Hands-on%20lab/HOL%20step-by-step%20-%20Migrating%20SQL%20databases%20to%20Azure.md#exercise-3-update-the-web-application-to-use-the-new-sql-mi-database), or if you have time at the end of the lab, you can do that.
Once in SQL MI, several features of Azure SQL Database are examined. [Advanced Data Security (ADS)](https://docs.microsoft.com/en-us/azure/sql-database/sql-database-advanced-data-security?view=sql-server-2017) is enabled and [Data Discovery and Classification](https://docs.microsoft.com/en-us/azure/sql-database/sql-database-data-discovery-and-classification?view=sql-server-2017) is used to better understand the data and potential compliance issues with data in the database. The ADS [Vulnerability Assessment](https://docs.microsoft.com/en-us/azure/sql-database/sql-vulnerability-assessment?view=sql-server-2017) is used to identify potential security vulnerabilities and issues in the database, and those finding are used to mitigate one finding by enabling [Transparent Data Encryption](https://docs.microsoft.com/en-us/azure/sql-database/transparent-data-encryption-azure-sql?view=sql-server-2017) in the database. [Dynamic Data Masking (DDM)](https://docs.microsoft.com/en-us/sql/relational-databases/security/dynamic-data-masking?view=sql-server-2017) is used to prevent sensitive data from appearing when querying the database. Finally, [Read Scale-out](https://docs.microsoft.com/en-us/azure/sql-database/sql-database-read-scale-out) is used to point reports on the Tailspin Toys web app to a read-only secondary, allowing reporting, particularly for the Leaderboard statistics page, to occur without impacting the performance of the primary database.
> **Note:**
> If you are attending this lab as part of a day-long workshop and were provided an environment, all of the activities below should be skipped. You can review or try them out at a later time.
<h2><p><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/point1.png?raw=true"><a name="Activity-1">Activity 1: Set up Azure Migrate</h2></p></a>
> **Note:**
> If you are attending this lab as part of a day-long workshop, you should skip this activity, it was demoed earlier. If you have time at the end of the day, feel free to return to it.
In this activity, you'll set up Azure Migrate, and explore some of the new integrations between Microsoft's Data Migration Assistant (DMA) and Azure Database Migration Services (DMS).
<h3><p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/checkmark.png?raw=true">Steps</h3></p>
1. Log in to the Azure portal (with the account you're using for this workshop), and search for **Azure Migrate**:
![Search for Azure Migrate.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/azure-migrate-search.png?raw=true "Search in Azure portal")
2. As you can see, Azure Migrate can be used to migrate more than just databases. For now, select **Assess and migrate databases**:
![Azure Migrate home.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/azure-migrate-home.png?raw=true "Azure Migrate")
3. Select **Add tool(s)** under the *Assessment tools* section.
![Azure Migrate home.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/azure-migrate-add-tool.png?raw=true "Azure Migrate")
4. In *Migrate project* area select the subscription and resource group you're using for the workshops. Then, supply a Migration project name of **MigrateTailspinToys** and region. Then select **Next**.
![Azure Migrate project.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/azure-migrate-add-project.png?raw=true "Azure Migrate")
> **Note**:
> for region, select the one closest to you. The geography specified for the project is only used to store the metadata gathered from on-premises VMs. You can select any target region for the actual migration.
5. For assessment tools, select **Azure Migrate: Database Assessment**, then select **Next**.
6. For migration tools, select **Azure Migrate: Database Migration**, and then select **Next**.
7. Finally, select **Add tool(s)**. Azure Migrate is now set up for you to use. In the next activity, you'll use some of the tools you added to assess and migrate Tailspin Toys to Azure.
<p><h2><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/point1.png?raw=true"><a name="Activity-2">Activity 2: Restore TailspinToys on the SQLServer2008 VM</h2></p></a>
> **Note:**
> If you are attending this lab as part of a day-long workshop, you should skip this activity, it was demoed earlier. If you have time at the end of the day, feel free to return to it.
<!--TODO: Can we make it so this part is done on each VM for each user ahead of the labs?-->
Before you begin the assessments, you need to restore a copy of the `TailspinToys` database in your SQL Server 2008 R2 instance. In this task, you will create an RDP connection to the SqlServer2008 VM and then restore the `TailspinToys` database onto the SQL Server 2008 R2 instance using a backup provided by Tailspin Toys.
<h3><p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/checkmark.png?raw=true">Steps</h3></p>
1. In the [Azure portal](https://portal.azure.com), navigate to your **SqlServer2008** VM by selecting **Resource groups** from the left-hand navigation menu, selecting the **hands-on-lab-SUFFIX** resource group, and selecting the **SqlServer2008** VM from the list of resources. On the SqlServer2008 Virtual Machine's *Overview* blade, select **Connect** on the top menu.
> **Note:**
> If you were provided with an environment for these labs, the "SUFFIX" part of the **hands-on-lab-SUFFIX** will be used in several portions of the lab. You should note this value from the credentials provided. Any time "SUFFIX" is referenced, use this number. **Do not use other "SUFFIX" values or you will disrupt another attendees' environment.**
![The SqlServer2008 VM blade is displayed, with the **Connect** button highlighted in the top menu.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/connect-sqlserver2008.png?raw=true "Connect to SqlServer2008 VM")
2. On the *Connect to virtual machine* blade, select **Download RDP File**, then open the downloaded RDP file.
3. Select **Connect** on the *Remote Desktop Connection* dialog.
![In the Remote Desktop Connection Dialog Box, the Connect button is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/remote-desktop-connection-sql-2008.png?raw=true "Remote Desktop Connection dialog")
4. Enter the following credentials when prompted, and then select **OK**:
- *Username*: **sqlmiuser**
> Note: Password should be consistent among all labs, ask your instructor for the password in an in-person Lab.
![The credentials specified above are entered into the Enter your credentials dialog.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/rdc-credentials-sql-2008.png?raw=true "Enter your credentials")
5. Select **Yes** to connect, if prompted that the identity of the remote computer cannot be verified.
![In the Remote Desktop Connection dialog box, a warning states that the identity of the remote computer cannot be verified, and asks if you want to continue anyway. At the bottom, the Yes button is circled.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/remote-desktop-connection-identity-verification-sqlserver2008.png?raw=true "Remote Desktop Connection dialog")
6. Once logged into the SqlServer2008 VM, download a [backup of the TailspinToys database](https://raw.githubusercontent.com/microsoft/Migrating-SQL-databases-to-Azure/master/Hands-on%20lab/lab-files/Database/TailspinToys.bak), and save it to the `C:\` drive of the VM.
7. Next, open *Microsoft SQL Server Management Studio 17* by entering **sql server** into the search bar in the Windows Start menu.
![SQL Server is entered into the Windows Start menu search box, and Microsoft SQL Server Management Studio 17 is highlighted in the search results.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/start-menu-ssms-17.png?raw=true "Windows start menu search")
8. In the SSMS *Connect to Server* dialog, enter **SQLSERVER2008** into the *Server name* box, ensure **Windows Authentication** is selected, and then select **Connect**.
![The SQL Server Connect to Search dialog is displayed, with SQLSERVER2008 entered into the Server name and Windows Authentication selected.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/sql-server-connect-to-server.png?raw=true "Connect to Server")
9. Once connected, right-click *Databases* under *SQLSERVER2008* in the *Object Explorer*, and then select **Restore Database** from the context menu.
![In the SSMS Object Explorer, the context menu for Databases is displayed and Restore Database is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-databases-restore.png?raw=true "SSMS Object Explorer")
10. You will now restore the `TailspinToys` database using the downloaded `TailspinToys.bak` file. On the *General* page of the *Restore Database* dialog, select **Device** under *Source*, and then select the **Browse (...)** button to the right of the *Device* box.
![Under Source in the Restore Database dialog, Device is selected and highlighted, and the Browse button is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-restore-database-source.png?raw=true "Restore Database source")
11. In the *Select backup devices* dialog that appears, select **Add**.
![In the Select backup devices dialog, the Add button is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-restore-database-select-devices.png?raw=true "Select backup devices")
12. In the *Locate Backup File* dialog, browse to the location you saved the downloaded `TailspinToys.bak` file, **select that file**, and then select **OK**.
![In the Location Backup File dialog, the TailspinToys.bak file is selected and highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-restore-database-locate-backup-file.png?raw=true "Locate Backup File")
13. Select **OK** on the *Select backup devices* dialog. This will return you to the *Restore Database* dialog. The dialog will now contain the information required to restore the `TailspinToys` database.
![The completed Restore Database dialog is displayed, with the TailSpinToys database specified as the target.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-restore-database.png?raw=true "Restore Database")
14. Select **OK** to start the restore.
15. Select **OK** in the dialog when the database restore is complete.
![A dialog is displayed with a message that the database TailspinToys was restored successfully.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-restore-database-success.png?raw=true "Restored successfully")
16. Next, you will execute a script in SSMS, which will reset the `sa` password, enable mixed mode authentication, enable Service broker, create the `WorkshopUser` account, and change the database recovery model to FULL.
To create the script, open a new query window in SSMS by selecting **New Query** in the *SSMS toolbar*.
![The New Query button is highlighted in the SSMS toolbar.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-new-query.png?raw=true "SSMS Toolbar")
17. Copy and paste the SQL script below into the new query window (replacing `<YourPasswordHere>` with the same password as the SQL Server 2008 VM):
```sql
USE master;
GO
-- SET the sa password
ALTER LOGIN [sa] WITH PASSWORD=N'<YourPasswordHere>';
GO
-- Enable Service Broker on the database
ALTER DATABASE TailspinToys SET ENABLE_BROKER WITH ROLLBACK immediate;
GO
-- Enable Mixed Mode Authentication
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', REG_DWORD, 2;
GO
-- Create a login and user named WorkshopUser
CREATE LOGIN WorkshopUser WITH PASSWORD = N'<YourPasswordHere>';
GO
EXEC sp_addsrvrolemember
@loginame = N'WorkshopUser',
@rolename = N'sysadmin';
GO
USE TailspinToys;
GO
IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'WorkshopUser')
BEGIN
CREATE USER [WorkshopUser] FOR LOGIN [WorkshopUser]
EXEC sp_addrolemember N'db_datareader', N'WorkshopUser'
END;
GO
-- Update the recovery model of the database to FULL
ALTER DATABASE TailspinToys SET RECOVERY FULL;
GO
```
18. To run the script, select **Execute** from the *SSMS toolbar*.
![The Execute button is highlighted in the SSMS toolbar.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-execute.png?raw=true "SSMS Toolbar")
19. For Mixed Mode Authentication and the new `sa` password to take effect, you must restart the *SQL Server (MSSQLSERVER) Service* on the SqlServer2008 VM. To do this, you can use SSMS. Right-click the *SQLSERVER2008* instance in the *SSMS Object Explorer*, and then select **Restart** from the context menu.
![In the *SSMS Object Explorer*, the context menu for the *SQLSERVER2008* instance is displayed, and Restart is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-object-explorer-restart-sqlserver2008.png?raw=true "Object Explorer")
20. When prompted about restarting the *MSSQLSERVER* service, select **Yes**. The service will take a few seconds to restart.
![The Yes button is highlighted on the dialog asking if you are sure you want to restart the MSSQLSERVER service.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-restart-service.png?raw=true "Restart MSSQLSERVER service")
<h2><p><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/point1.png?raw=true"><a name="Activity-3">Activity 3: Perform assessment for migration to Azure SQL Database</h2></p></a>
> **Note:**
> If you are attending this lab as part of a day-long workshop and were provided an environment to use, you should skip this activity, it was demoed earlier. If you have time at the end of the day, feel free to return to it.
In this task, you will use the *Microsoft Data Migration Assistant* (DMA) to perform an assessment of the `TailspinToys` database against Azure SQL Database (Azure SQL DB). The assessment will provide a report about any feature parity and compatibility issues between the on-premises database and the Azure SQL DB service.
> **Note:**
> Tailspin Toys Gaming has already tentatively decided that they want to move to Managed Instance. However, this is a good exercise if they didn't know that Service Broker wasn't supported by Azure SQL DB and wanted to move to Azure SQL DB.
<h3><p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/checkmark.png?raw=true">Steps</h3></p>
1. On the SqlServer2008 VM, launch DMA from the *Windows Start menu* by typing **data migration** into the *search bar*, and then selecting **Microsoft Data Migration Assistant** in the search results.
![In the Windows Start menu, "data migration" is entered into the search bar, and Microsoft Data Migration Assistant is highlighted in the Windows start menu search results.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/windows-start-menu-dma.png?raw=true "Data Migration Assistant")
2. In the *DMA dialog*, select **+** from the left-hand menu to create a new project.
![The new project icon is highlighted in DMA.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dma-new.png?raw=true "New DMA project")
3. In the *New project* pane, set the following:
- *Project type*: Select **Assessment**
- *Project name*: Enter **ToAzureSqlDb**
- *Assessment type*: Select **Database Engine**
- *Source server type*: Select **SQL Server**
- *Target server type*: Select **Azure SQL Database**
![New project settings for doing an assessment of a migration from SQL Server to Azure SQL Database.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dma-new-project-to-azure-sql-db.png?raw=true "New project settings")
> **Note:**
> There's also an option to select "Migration" within DMA. You could use this option if you have restrictions around pushing versus pulling the data to Azure. Using DMA to migrate would be pushing data from the SQL Server 2008 VM into Azure. In this lab, we'll instead pull data from the SQL Server 2008 VM. You can learn more about migrating to Azure using DMA [here](https://docs.microsoft.com/en-us/sql/dma/dma-migrateonpremsqltosqldb?view=sql-server-2017).
4. Select **Create**
5. On the *Options* screen, ensure **Check database compatibility** and **Check feature parity** are both checked, and then select **Next**:
![Check database compatibility and check feature parity are checked on the Options screen.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dma-options.png?raw=true "DMA options")
6. On the *Sources* screen, enter the following into the *Connect to a server* dialog that appears on the right-hand side:
- *Server name*: Enter **SQLSERVER2008**
- *Authentication type*: Select **SQL Server Authentication**
- *Username*: Enter **WorkshopUser**
- *Password*: Enter your password
- *Encrypt connection*: Check this box
- *Trust server certificate*: Check this box
> **Note:**
> Password should be consistent among all labs, ask your instructor if you don't know what your password is.
![In the Connect to a server dialog, the values specified above are entered into the appropriate fields.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dma-connect-to-a-server.png?raw=true "Connect to a server")
7. Select **Connect**
8. On the *Add sources* dialog that appears next, check the box for **TailspinToys** and select **Add**:
![The TailspinToys box is checked on the Add sources dialog](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dma-add-sources.png?raw=true "Add sources")
9. Select **Start Assessment**:
![Start assessment](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dma-start-assessment-to-azure-sql-db.png?raw=true "Start assessment")
10. Review the assessment of ability to migrate to Azure SQL DB.
![For a target platform of Azure SQL DB, feature parity shows two features which are not supported in Azure SQL DB. The Service broker feature is selected on the left and on the right Service Broker feature is not supported in Azure SQL Database is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dma-service-broker.png?raw=true "Database feature parity")
> The DMA assessment for a migrating the `TailspinToys` database to a target platform of Azure SQL DB shows two features in use which are not supported. These features, cross-database references and Service Broker, will prevent TailspinToys from being able to migrate to the Azure SQL DB PaaS offering without first making changes to their database.
11. In the bottom right (see above), select **Upload to Azure Migrate**. You'll be prompted to sign in (use the credentials you're using for this workshop). Then, select the subscription and **Azure Migrate Project** created earlier. This process will upload the summarized report to the Azure Migrate service. If you have multiple servers and/or databases, you'll be provided with a consolidated view of all the databases you scan and upload in the Azure Migrate portal. Select **Upload**:
![Start assessment](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dma-upload-azure-migrate.png?raw=true "Start assessment")
12. When it completes, you'll see the following message:
![Start assessment](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dma-assessment-uploaded.png?raw=true "Start assessment")
<h2><p><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/point1.png?raw=true"><a name="Activity-4">Activity 4: Perform assessment for migration to Azure SQL Database Managed Instance</h2></p></a>
> **Note**:
> If you are attending this lab as part of a day-long workshop, you should skip this activity, it was demoed earlier. If you have time at the end of the day, feel free to return to it.
With one PaaS offering ruled out due to feature parity, you will now perform a second assessment. In this task, you will use DMA to perform an assessment of the `TailspinToys` database against Azure SQL Database Managed Instance (SQL MI). The assessment will provide a report about any feature parity and compatibility issues between the on-premises database and the SQL MI service.
<h3><p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/checkmark.png?raw=true">Steps</h3></p>
1. To get started, select **+** on the left-hand menu in DMA to create another new project:.
![The new project icon is highlighted in DMA.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dma-new.png?raw=true "New DMA project")
2. In the *New project* pane, set the following:
- *Project type*: Select **Assessment**
- *Project name*: Enter **ToSqlMi**
- *Assessment type*: Select **Database Engine**
- *Source server type*: Select **SQL Server**
- *Target server type*: Select **Azure SQL Database Managed Instance**
![New project settings for doing an assessment of a migration from SQL Server to Azure SQL Database Managed Instance.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dma-new-project-to-sql-mi.png?raw=true "New project settings")
3. Select **Create**
4. On the *Options* screen, ensure **Check database compatibility** and **Check feature parity** are both checked, and then select **Next**:
![Check database compatibility and check feature parity are checked on the Options screen.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dma-options.png?raw=true "DMA options")
5. On the *Sources* screen, enter the following into the *Connect to a server* dialog that appears on the right-hand side:
- *Server name*: Enter **SQLSERVER2008**
- *Authentication type*: Select **SQL Server Authentication**
- *Username*: Enter **WorkshopUser**
- *Password*: Enter your password
- *Encrypt connection*: Check this box
- *Trust server certificate*: Check this box
> Note: Password should be consistent among all labs, ask your instructor if you don't know what your password is.
![In the Connect to a server dialog, the values specified above are entered into the appropriate fields.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dma-connect-to-a-server.png?raw=true "Connect to a server")
6. Select **Connect**
7. On the *Add sources* dialog that appears next, check the box for *TailspinToys* and select **Add**:
![The TailspinToys box is checked on the Add sources dialog.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dma-add-sources.png?raw=true "Add sources")
8. Select **Start Assessment**:
![Start assessment](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dma-start-assessment-to-sql-mi.png?raw=true "Start assessment")
9. Review the assessment of ability to migrate to Azure SQL Database Managed Instance, then upload to Azure Migrate, as in the previous activity:
![For a target platform of Azure SQL Database Managed Instance, feature parity with PowerShell job step is listed.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dma-to-sql-mi.png?raw=true "Database feature parity")
>**Note**:
>The assessment report for migrating the `TailspinToys` database to a target platform of SQL MI shows feature parity only with a PowerShell job step. In SQL MI, SQL Server Agent is always running, and T-SQL and SSIS job steps are supported. However, PowerShell job steps are not yet supported. This serves as a warning, but it will not impact the migration of the `TailspinToys` database to SQL MI. Since SQL Server Agent Jobs are not supported in Azure SQL Database at all and TailspinToys doesn't leverage SQL Server Agent jobs, this is not mentioned in the assessment to move to Azure SQL Database. You can [review the full configuration of Azure SQL MI here](https://docs.microsoft.com/en-us/azure/sql-database/sql-database-managed-instance-transact-sql-information#configuration).
10. The database, including the cross-database references and Service broker features, can be migrated as is, providing the opportunity for TailspinToys to have a fully managed PaaS database running in Azure. Previously, their options for migrating a database using features, such as Service Broker, incompatible with Azure SQL Database, were to deploy the database to a virtual machine running in Azure (IaaS) or modify their database and applications to not use the unsupported features. The introduction of Azure SQL MI, however, provides the ability to migrate databases into a managed Azure SQL database service with near 100% compatibility, including the features that prevented them from using Azure SQL Database.
> **Note:**
> For more information, check out the [feature comparison list](https://docs.microsoft.com/en-us/azure/sql-database/sql-database-features) for SQL Server vs. Azure SQL Database vs. Azure SQL MI, and the [known T-SQL differences between Azure SQL MI and SQL Server](https://docs.microsoft.com/en-us/azure/sql-database/sql-database-managed-instance-transact-sql-information).
11. Open the Azure portal, and navigate back to Azure Migrate. Select **Databases**. You should now see the results from the DMA scans. This will bring all of the databases and servers you scan and upload using DMA together, and provide a consolidated view.
![Azure Migrate consolidated view](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/azure-migrate-databases.png?raw=true "Azure Migrate")
12. You can click into **Assessed databases > TailspinToys** to see additional details and recommendations:
![Azure Migrate Tailspin Toys details](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/azure-migrate-tailspin.png?raw=true "Azure Migrate")
> **Note**:
> If you are attending this lab as part of a day-long workshop, you have finished the activities for Module 4. [Return to it here](https://github.com/microsoft/sqlworkshops/blob/master/SQLGroundToCloud/sqlgroundtocloud/04-SQLServerOnTheMicrosoftAzurePlatform.md#activity-4-perform-assessment-for-migration-to-azure-sql-database-managed-instance), review, and refer to instructor guidance.
<p style="border-bottom: 1px solid lightgrey;"></p>
<p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/owl.png?raw=true"><h2>For Further Study</h2></p>
<ul>
<li><a href="https://datamigration.microsoft.com/
" target="_blank">Azure Database Migration Guide</a> contains lots of resources that will help in guiding and supporting database migrations to Azure.</li>
<li><a href="https://docs.microsoft.com/en-us/azure/migrate/migrate-services-overview
" target="_blank">Azure Migrate Documentation</a> contains more information, guidance, and pointers on how to migrate your entire on-premises estate to Azure.</li>
<li><a href="https://docs.microsoft.com/en-us/sql/dma/dma-overview?view=sql-server-2017
" target="_blank">Data Migration Assistant Documentation</a> contains more information and best practices around the DMA tool explored in this module.</li>
<li><a href="https://azure.microsoft.com/mediahandler/files/resourcefiles/choosing-your-database-migration-path-to-azure/Choosing_your_database_migration_path_to_Azure.pdf
" target="_blank">Choosing your database migration path to Azure</a> is a white paper created by Microsoft for deeper understanding of how to modernize and migrate on-premises SQL Server to Azure.</li>
</ul>
<p><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/geopin.png?raw=true"><b >Next Steps</b></p>
You can use this assessment to determine to move the database to Azure SQL Managed Instance. If you would like to complete a lab on that topic, navigate to <a href="https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/Lab-MigratingToAzureSQLManagedInstance.md" target="_blank"><i> Lab - Migrating to Azure SQL Managed Instance</i></a>.

Просмотреть файл

@ -0,0 +1,939 @@
![](https://github.com/microsoft/sqlworkshops/blob/master/graphics/microsoftlogo.png?raw=true)
# Lab: Migrating to Azure SQL Managed Instance
#### <i>A Microsoft Lab from the SQL Server team</i>
<p style="border-bottom: 1px solid lightgrey;"></p>
<img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/textbubble.png?raw=true"> <h2> Migrate to Azure SQL Managed Instance</h2>
In this lab you'll migrate a database from SQL Server 2008 to [Azure SQL Database Managed Instance](https://docs.microsoft.com/en-us/azure/sql-database/sql-database-managed-instance).
(<a href="https://github.com/microsoft/sqlworkshops/blob/master/SQLGroundToCloud/sqlgroundtocloud/00-Pre-Requisites.md" target="_blank">Make sure you check out the <b>Prerequisites</b> page before you start</a>. You'll need all of the items loaded there before you can proceed with the workshop.)
In this lab you will use the [Azure Database Migration Service](https://azure.microsoft.com/services/database-migration/) (DMS) to migrate the `TailspinToys` database from an on-premises SQL 2008 R2 database to SQL MI. At the end of the Lab, you'll also explore some of the security and performance features available.
The activities in this lab include:
[Lab Exercise 1](#LabExercise-1): Migrate the database to SQL Managed instance
&ensp;&ensp;&ensp;[Activity 1](#Activity-1): Create a SMB network share on the SQLServer2008VM
&ensp;&ensp;&ensp;[Activity 2](#Activity-2): Change MSSQLSERVER service to run under sqlmiuser account
&ensp;&ensp;&ensp;[Activity 3](#Activity-3): Create a backup of TailspinToys database
&ensp;&ensp;&ensp;[Activity 4](#Activity-4): Retrieve SQL MI, SQL Server 2008 VM, and service principal connection information
&ensp;&ensp;&ensp;[Activity 5](#Activity-5): Create a service principal
&ensp;&ensp;&ensp;[Activity 6](#Activity-6): Create and run an online data migration project
&ensp;&ensp;&ensp;[Activity 7](#Activity-7): Perform migration cutover
&ensp;&ensp;&ensp;[Activity 8](#Activity-8): Verify database and transaction log migration
&ensp;&ensp;&ensp;[Activity 9](#Activity-9): Update the application
[Lab Exercise 2](#LabExercise-2): Improve database security with Advanced Data Security
&ensp;&ensp;&ensp;[Activity 1](#Activity-2-1): Enable Advanced Data Security
&ensp;&ensp;&ensp;[Activity 2](#Activity-2-2): Configure SQL Data Discover and Classification
&ensp;&ensp;&ensp;[Activity 3](#Activity-2-3): Review Advanced Data Security Vulnerability Assessment
[Lab Exercise 3](#LabExercise-3): Use online secondary for read-only queries
&ensp;&ensp;&ensp;[Activity 1](#Activity-3-1): View Leaderboard report in Tailspin Toys web application
&ensp;&ensp;&ensp;[Activity 2](#Activity-3-2): Update read only connection string
&ensp;&ensp;&ensp;[Activity 3](#Activity-3-3): Reload leaderboard report in the Tailspin Toys web application
[Lab Exercise 4](#LabExercise-4): After the Migration
<p style="border-bottom: 1px solid lightgrey;"></p>
<h2><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/pencil2.png?raw=true"><a name="LabExercise-1">Lab Exercise 1: Migrate the database to SQL Managed instance </h2></a>
In this section, you will use the [Azure Database Migration Service](https://azure.microsoft.com/services/database-migration/) (DMS) to migrate the `TailspinToys` database from the on-premises SQL 2008 R2 database to SQL MI. Tailspin Toys mentioned the importance of their gamer information web application in driving revenue, so for this migration you will target the [Business Critical service tier](https://docs.microsoft.com/azure/sql-database/sql-database-managed-instance#managed-instance-service-tiers).
> The Business Critical service tier is designed for business applications with the highest performance and high-availability (HA) requirements. To learn more, read the [Managed Instance service tiers documentation](https://docs.microsoft.com/azure/sql-database/sql-database-managed-instance#managed-instance-service-tiers).
<p><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/point1.png?raw=true"><b><a name="Activity-1">Activity 1: Create an SMB network share on the SQLServer2008VM</b></p></a>
In this task, you will create a new [SMB network share](https://docs.microsoft.com/en-us/windows/win32/fileio/microsoft-smb-protocol-authentication) on the SqlServer2008 VM. This will be the folder used by DMS for retrieving backups of the `TailspinToys` database during the database migration process. By creating the share, you're making it possible for services like DMS to access items in the share if you authenticate to it. You can read more about [the SMB protocol here](https://docs.microsoft.com/en-us/windows/win32/fileio/microsoft-smb-protocol-and-cifs-protocol-overview).
<p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/checkmark.png?raw=true"><b>Steps</b></p>
1. In the [Azure portal](https://portal.azure.com), navigate to your *SqlServer2008* VM by selecting **Resource groups** from the *left-hand navigation menu*, selecting the **hands-on-lab-SUFFIX** resource group, and selecting the **SqlServer2008** VM from the list of resources. On the SqlServer2008 Virtual Machine's *Overview* blade, select **Connect** on the top menu:
> **Note:**
> If you were provided with an environment for these labs, the "SUFFIX" part of the **hands-on-lab-SUFFIX** will be used in several portions of the lab. You should note this value from the credentials provided. Any time "SUFFIX" is referenced, use this number. **Do not use other "SUFFIX" values or you will disrupt another attendees' environment.**
![The SqlServer2008 VM blade is displayed, with the Connect button highlighted in the top menu.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/connect-sqlserver2008.png?raw=true "Connect to SqlServer2008 VM")
2. On the Connect to virtual machine blade, select **Download RDP File**, then open the downloaded RDP file.
3. Select **Connect** on the Remote Desktop Connection dialog:
![In the Remote Desktop Connection Dialog Box, the Connect button is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/remote-desktop-connection-sql-2008.png?raw=true "Remote Desktop Connection dialog")
4. Enter the following credentials when prompted, and then select **OK**:
- *Username*: **sqlmiuser**
> **Note:**
> Password should be consistent among all labs. Your instructor will provide the password for in-class Labs.
![The credentials specified above are entered into the Enter your credentials dialog.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/rdc-credentials-sql-2008.png?raw=true "Enter your credentials")
5. Select **Yes** to connect, if prompted that the identity of the remote computer cannot be verified:
![In the Remote Desktop Connection dialog box, a warning states that the identity of the remote computer cannot be verified, and asks if you want to continue anyway. At the bottom, the Yes button is circled.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/remote-desktop-connection-identity-verification-sqlserver2008.png?raw=true "Remote Desktop Connection dialog")
6. On the SqlServer2008 VM, open *Windows Explorer* by selecting its icon on the Windows Task bar:
![The Windows Explorer icon is highlighted in the Windows Task Bar.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/windows-task-bar.png?raw=true "Windows Task Bar")
7. In the *Windows Explorer* window, expand **Computer** in the tree view, select **Windows (C:)**, and then select **New folder** in the top menu:
![In Windows Explorer, Windows (C:) is selected under Computer in the left-hand tree view, and New folder is highlighted in the top menu.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/windows-explorer-new-folder.png?raw=true "Windows Explorer")
8. Name the new folder **dms-backups**, then right-click the folder and select **Share with** and **Specific people** in the context menu:
![In Windows Explorer, the context menu for the dms-backups folder is displayed, with Share with and Specific people highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/windows-explorer-folder-share-with.png?raw=true "Windows Explorer")
9. In the *File Sharing* dialog, ensure the **sqlmiuser** is listed with a **Read/Write** permission level, and then select **Share**:
![In the File Sharing dialog, the sqlmiuser is highlighted and assigned a permission level of Read/Write.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/file-sharing.png?raw=true "File Sharing")
10. In the **Network discovery and file sharing** dialog, select the default value of **No, make the network that I am connected to a private network**:
![In the Network discovery and file sharing dialog, No, make the network that I am connected to a private network is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/network-discovery-and-file-sharing.png?raw=true "Network discovery and file sharing")
11. Back on the File Sharing dialog, note the path of the shared folder, `\\SQLSERVER2008\dms-backups`, and select **Done** to complete the sharing process.
![The Done button is highlighted on the File Sharing dialog.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/file-sharing-done.png?raw=true "File Sharing")
<p><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/point1.png?raw=true"><b><a name="Activity-2">Activity 2: Change the MSSQLSERVER service to run under sqlmiuser account</b></p></a>
In this task, you will use the SQL Server Configuration Manager to update the service account used by the *SQL Server (MSSQLSERVER)* service to the `sqlmiuser` account. This is done to ensure the SQL Server service has the appropriate permissions to write backups to the shared folder.
<p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/checkmark.png?raw=true"><b>Steps</b></p>
1. On your SqlServer2008 VM, select the **Start menu**, enter **sql configuration** into the search bar, and then select **SQL Server Configuration Managed** from the search results:
![In the Windows Start menu, "sql configuration" is entered into the search box, and SQL Server Configuration Manager is highlighted in the search results.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/windows-start-sql-configuration-manager.png?raw=true "Windows search")
> **Note**:
> Be sure to choose **SQL Server Configuration Manager**, and not **SQL Server 2017 Configuration Manager**, which will not work for the installed SQL Server 2008 R2 database.
2. In the *SQL Server Configuration Manager* dialog, select **SQL Server Services** from the tree view on the left, then right-click **SQL Server (MSSQLSERVER)** in the list of services and select **Properties** from the context menu:
![SQL Server Services is selected and highlighted in the tree view of SQL Server Configuration Manager. In the Services pane, SQL Server (MSSQLSERVER) is selected and highlighted. Properties is highlighted in the context menu.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/sql-server-configuration-manager-services.png?raw=true "SQL Server Configuration Manager")
3. In the *SQL Server (MSSQLSERVER) Properties* dialog, select **This account** under *Log on as*, and enter the following:
- *Account name*: **sqlmiuser**
> **Note:**
> Password should be consistent among all labs, ask your instructor if you don't know what your password is.
![In the SQL Server (MSSQLSERVER) Properties dialog, This account is selected under Log on as and the sqlmiuser account name and password are entered.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/sql-server-service-properties.png?raw=true "SQL Server (MSSQLSERVER) Properties")
4. Select **OK**
5. Select **Yes** in the *Confirm Account Change dialog*:
![The Yes button is highlighted in the Confirm Account Change dialog.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/confirm-account-change.png?raw=true "Confirm Account Change")
6. You will now see the *Log On As* value for the *SQL Server (MSSQLSERVER)* service changed to `./sqlmiuser`:
![In the list of SQL Server Services, the SQL Server (MSSQLSERVER) service is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/sql-server-service.png?raw=true "SQL Server Services")
<p><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/point1.png?raw=true"><b><a name="Activity-3">Activity 3: Create a backup of TailspinToys database</b></p></a>
To perform online data migrations, DMS looks for backups and logs in the SMB shared backup folder on the source database server. In this task, you will create a backup of the `TailspinToys` database using SSMS, and write it to the SMB network share you created in the previous task. The backup file needs to include a checksum, so you will add that during the backup steps.
<p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/checkmark.png?raw=true"><b>Steps</b></p>
1. On the SqlServer2008 VM, open *Microsoft SQL Server Management Studio 17* by entering **sql server** into the search bar in the Windows Start menu:
![SQL Server is entered into the Windows Start menu search box, and Microsoft SQL Server Management Studio 17 is highlighted in the search results.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/start-menu-ssms-17.png?raw=true "Windows start menu search")
2. In the SSMS *Connect to Server* dialog, enter **SQLSERVER2008** into the *Server name* box, ensure **Windows Authentication** is selected, and then select **Connect**:
![The SQL Server Connect to Search dialog is displayed, with SQLSERVER2008 entered into the Server name and Windows Authentication selected.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/sql-server-connect-to-server.png?raw=true "Connect to Server")
3. Once connected, expand **Databases** under *SQLSERVER2008* in the *Object Explorer*, and then right-click the **TailspinToys** database. In the context menu, select **Tasks** and then **Back Up**:
![In the SSMS Object Explorer, the context menu for the TailspinToys database is displayed, with Tasks and Back Up... highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-backup.png?raw=true "SSMS Backup")
4. In the *Back Up Database* dialog, you will see `C:\TailspinToys.bak` listed in the *Destinations* box. This is no longer needed, so select it, and then select **Remove**:
![In the General tab of the Back Up Database dialog, C:\TailspinToys.bak is selected and the Remove button is highlighted under destinations.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-back-up-database-general-remove.png?raw=true)
5. Next, select **Add** to add the SMB network share as a backup destination:
![In the General tab of the Back Up Database dialog, the Add button is highlighted under destinations.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-back-up-database-general.png?raw=true "Back Up Database")
6. In the *Select Backup Destination* dialog, select the **Browse (...)** button:
![The Browse button is highlighted in the Select Backup Destination dialog.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-select-backup-destination.png?raw=true "Select Backup Destination")
7. In the *Locate Database Files* dialog, select the `C:\dms-backups` folder, enter **TailspinToys.bak** into the *File name* field, and then select **OK**:
![In the Select the file pane, the C:\dms-backups folder is selected and highlighted and TailspinToys.bak is entered into the File name field.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-locate-database-files.png?raw=true "Location Database Files")
8. Select **OK** to close the Select Backup Destination dialog
9. In the *Back Up Database* dialog, select the **Media Options** in the *Select a page* pane, and then set the following:
- Select **Back up to the existing media set** and then select **Overwrite all existing backup sets**
- Under *Reliability*, check the box for **Perform checksum before writing to media**. This is required by DMS when using the backup to restore the database to SQL MI:
![In the Back Up Database dialog, the Media Options page is selected, and Overwrite all existing backup sets and Perform checksum before writing to media are selected and highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-back-up-database-media-options.png?raw=true "Back Up Database")
10. Select **OK** to perform the backup
11. You will receive a message when the backup is complete. Select **OK**:
![Dialog displayed a message that the database backup was completed successfully.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-backup-complete.png?raw=true "Backup complete")
<p><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/point1.png?raw=true"><b><a name="Activity-4">Activity 4: Retrieve SQL MI, SQL Server 2008 VM, and service principal connection information</b></p></a>
> **Note**:
> If you're doing this lab as part of a workshop and were provided an environment to use, this step has already been completed. You can review, but **there is nothing you need to do**. Please refer to instructor guidance.
In this task, you will use the Azure Cloud shell to retrieve the information necessary to connect to your SQL MI and SqlServer2008 VM from DMS.
<p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/checkmark.png?raw=true"><b>Steps</b></p>
1. In the [Azure portal](https://portal.azure.com), select the **Azure Cloud Shell** icon from the top menu:
![The Azure Cloud Shell icon is highlighted in the Azure portal's top menu.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/cloud-shell-icon.png?raw=true "Azure Cloud Shell")
2. In the *Cloud Shell* window that opens at the bottom of your browser window, select **PowerShell**:
![In the Welcome to Azure Cloud Shell window, PowerShell is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/cloud-shell-select-powershell.png?raw=true "Azure Cloud Shell")
3. If prompted that you have no storage mounted, select the subscription you are using for this hands-on lab and select **Create storage**:
![In the You have no storage mounted dialog, a subscription has been selected, and the Create Storage button is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/cloud-shell-create-storage.png?raw=true "Azure Cloud Shell")
> **Note**:
> If creation fails, you may need to select **Advanced settings** and specify the subscription, region and resource group for the new storage account.
4. After a moment, you will receive a message that you have successfully requested a Cloud Shell, and be presented with a PS Azure prompt:
![In the Azure Cloud Shell dialog, a message is displayed that requesting a Cloud Shell succeeded, and the PS Azure prompt is displayed.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/cloud-shell-ps-azure-prompt.png?raw=true "Azure Cloud Shell")
5. At the prompt, you will retrieve information about SQL MI in the hands-on-lab-SUFFIX resource group by entering the following PowerShell command, **replacing SUFFIX** with your unique identifier or specfic "SUFFIX" assigned to you for the labs:
```powershell
az sql mi list --resource-group hands-on-lab-SUFFIX
```
6. Within the output of the above command, locate and copy the value of the `fullyQualifiedDomainName` property. Paste the value into a text editor, such as *Notepad.exe*, for later reference:
![The output from the az sql mi list command is displayed in the Cloud Shell, and the fullyQualifiedDomainName property and value are highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/cloud-shell-az-sql-mi-list-output.png?raw=true "Azure Cloud Shell")
7. Next, you will enter a second command to retrieve the public IP address of the SqlSerer2008 VM, which you will use to connect to the database on that server. Enter the following PowerShell command, **replacing SUFFIX** with your unique identifier or specfic "SUFFIX" assigned to you for the labs:
```powershell
az vm list-ip-addresses -g hands-on-lab-SUFFIX -n SqlServer2008
```
8. Within the output of the command above, locate and copy the value of the `ipAddress` property within the `publicIpAddresses` object. Paste the value into a text editor, such as *Notepad.exe*, for later reference:
![The output from the az vm list-ip-addresses command is displayed in the Cloud Shell, and the publicIpAddress for the SqlServer2008 VM is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/cloud-shell-az-vm-list-ip-addresses.png?raw=true "Azure Cloud Shell")
9. (Leave the Azure Cloud Shell open for the next set of tasks)
<p><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/point1.png?raw=true"><b><a name="Activity-5">Activity 5: Create a service principal</b></p></a>
> **Note**:
> If you're doing this lab as part of a workshop and were provided an environment to use, this step has already been completed. You can review, but **there is nothing you need to do**. Please refer to instructor guidance.
In this task, you will use the Azure Cloud Shell to create an Azure Active Directory (Azure AD) application and service principal (SP) that will provide DMS access to Azure SQL MI. You will grant the SP permissions to the hands-on-lab-SUFFIX resource group.
> **Note**:
> You must have rights within your Azure AD tenant to create applications and assign roles to complete this task. If you are blocked by this, but still want to do a migration with Azure Database Migration Services, you can perform an offline migration. In Activity 6, select offline instead of online migration in Step 3, and instead of Step 7, you can refer to [this section of a migrating to Azure SQL Database Managed Instance offline tutorial](https://docs.microsoft.com/en-us/azure/dms/tutorial-sql-server-to-managed-instance#specify-target-details).
<p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/checkmark.png?raw=true"><b>Steps</b></p>
> **Note**:
> If you're doing this lab as part of a workshop and were provided an environment to use, this step has already been completed. You can review, but **there is nothing you need to do**. Please refer to instructor guidance.
1. Next, you will issue a command to create a service principal named **tailspin-toys** and assign it contributor permissions to your *hands-on-lab-SUFFIX* resource group.
2. First, you need to retrieve your subscription ID. Enter the following at the Cloud Shell prompt:
```powershell
az account list --output table
```
3. In the *output* table, locate the subscription you are using for this hands-on lab, and copy the *SubscriptionId* value into a text editor for use later.
4. Next, enter the following command at the Cloud Shell prompt, replacing `{SubscriptionID}` with the value you copied above and `{ResourceGroupName}` with the name of your *hands-on-lab-SUFFIX* resource group, and then press `Enter` to run the command:
```powershell
az ad sp create-for-rbac -n "tailspin-toys" --role owner --scopes subscriptions/{SubscriptionID}/resourceGroups/{ResourceGroupName}
```
![The az ad sp create-for-rbac command is entered into the Cloud Shell, and the output of the command is displayed.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/azure-cli-create-sp.png?raw=true "Azure CLI")
5. Copy the output from the command into a text editor, as you will need the `appId` and `password` in the next task. The output should be similar to:
```json
{
"appId": "aeab3b83-9080-426c-94a3-4828db8532e9",
"displayName": "tailspin-toys",
"name": "http://tailspin-toys",
"password": "76ff5bae-8d25-469a-a74b-4a33ad868585",
"tenant": "d280491c-b27a-XXXX-XXXX-XXXXXXXXXXXX"
}
```
6. To verify the role assignment, select **Access control (IAM)** from the left-hand menu of the *hands-on-lab-SUFFIX* resource group blade, and then select the **Role assignments** tab and locate *tailspin-toys* under the *OWNER* role.
![The Role assignments tab is displayed, with tailspin-toys highlighted under OWNER in the list.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/rg-hands-on-lab-role-assignments.png?raw=true "Role assignments")
7. Next, you will issue another command to grant the *CONTRIBUTOR* role at the subscription level to the newly created service principal. At the *Cloud Shell* prompt, run the following command:
```powershell
az role assignment create --assignee http://tailspin-toys --role contributor
```
<p><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/point1.png?raw=true"><b><a name="Activity-6">Activity 6: Create and run an online data migration project </b></p></a>
In this task, you will create a new online data migration project in DMS for the `TailspinToys` database.
<p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/checkmark.png?raw=true"><b>Steps</b></p>
1. In the [Azure portal](https://portal.azure.com), navigate to the *Azure Database Migration Service* by selecting **Resource groups** from the left-hand navigation menu, selecting the **hands-on-lab-SUFFIX** resource group, and then selecting the **tailspin-dms** Azure Database Migration Service in the list of resources:
![The tailspin-dms Azure Database Migration Service is highlighted in the list of resources in the hands-on-lab-SUFFIX resource group.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/resource-group-dms-resource.png?raw=true "Resources")
> **Note:**
> If you were provided with an environment for these labs, the "SUFFIX" part of the **hands-on-lab-SUFFIX** will be used in several portions of the lab. You should note this value from the credentials provided. Any time "SUFFIX" is referenced, use this number. **Do not use other "SUFFIX" values or you will disrupt another attendees' environment.**
2. On the *Azure Database Migration Service* blade, select **+New Migration Project**:
> **Note**:
> If you were provided an environment for this lab, your Database Migration Service may be paused due to inactivity. You can select **Start Service** to start it, if you get the message "The service is currently unavailable for migration."
![On the Azure Database Migration Service blade, +New Migration Project is highlighted in the toolbar.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dms-add-new-migration-project.png?raw=true "Azure Database Migration Service New Project")
3. On the New migration project blade, enter the following:
- *Project name*: Enter **OnPremToSqlMi**
- *Source server type*: Select **SQL Server**
- *Target server type*: Select **Azure SQL Database Managed Instance**
- *Choose type of activity*: Select **Online data migration** and select **Save**
![The New migration project blade is displayed, with the values specified above entered into the appropriate fields.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dms-new-migration-project-blade.png?raw=true "New migration project")
4. Select **Create and run activity**
5. On the Migration Wizard **Select source** blade, enter the following:
- *Source SQL Server instance name*: Enter the Public IP address of your SqlServer2008 VM that you copied into a text editor in the previous task. For example, **13.66.228.107**
> **Note**:
> If you're doing this lab as part of a workshop and were provided an environment to use, please refer to instructor guidance to obtain your SQL Server VM's Public IP address.
- *User Name*: Enter **WorkshopUser**
- *Password*: Enter your password
- *Connection properties*: Check both **Encrypt connection** and **Trust server certificate**
> **Note**:
> The Password should be consistent among all labs. Your instructor will provide the password if you are taking this Lab in person.
![The Migration Wizard Select source blade is displayed, with the values specified above entered into the appropriate fields.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dms-migration-wizard-select-source.png?raw=true "Migration Wizard Select source")
6. Select **Save**
7. On the *Migration Wizard* | *Select target* blade, enter the following:
- *Application ID*: Enter the `appId` value from the output of the `az ad sp create-for-rbac' command you executed in the last task
- *Key*: Enter the `password` value from the output of the `az ad sp create-for-rbac' command you executed in the last task
> **Note**:
> If you're doing this lab as part of a workshop and were provided an environment to use, please refer to instructor guidance to obtain the Application ID and Application secret key.
<!-- TODO Add guidance on how to do this -->
- *Subscription*: Select the subscription you are using for this hand-on lab
- *Target Azure SQL Managed Instance*: Select the **mi-SUFFIX** instance
> **Note**:
> If you're doing this lab as part of a workshop and were provided an environment to use, the "SUFFIX" should be the same as the "SUFFIX" for your Resource Group. **Do not use other "SUFFIX" values or you will disrupt another attendees' environment.**
- *SQL Username*: Enter **sqlmiuser**
- *Password*: Enter your password
![The Migration Wizard Select target blade is displayed, with the values specified above entered into the appropriate fields.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dms-migration-wizard-select-target.png?raw=true "Migration Wizard Select target")
8. Select **Save**
9. On the Migration Wizard *Select databases* blade, select **TailspinToys**:
![The Migration Wizard Select databases blade is displayed, with the TailspinToys database selected.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dms-migration-wizard-select-databases.png?raw=true "Migration Wizard Select databases")
10. Select **Save**
11. On the *Migration Wizard* | *Configure migration settings* blade, enter the following configuration:
- *Network share location*: Enter **\\\SQLSERVER2008\dms-backups**. This is the path of the SMB network share you created during the before the hands-on lab exercises
> **Note**:
> If you're doing this lab as part of a workshop and were provided an environment to use, if *SQLSERVER2008* errors, use the **SQL VM Private IP Address** which was provided to you (e.g. *\\\10.0.0.5\dms-backups*)
- *Windows User Azure Database Migration Service impersonates to upload files to Azure Storage*: Enter **SQLSERVER2008\sqlmiuser**
- *Password*: Enter your password
- *Subscription containing storage account*: Select the subscription you are using for this hands-on lab
- *Storage account*: Select the **sqlmistoreUNIQUEID** storage account from the drop-down
![The Migration Wizard Configure migration settings blade is displayed, with the values specified above entered into the appropriate fields.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dms-migration-wizard-configure-migration-settings.png?raw=true "Migration Wizard Configure migration settings")
12. Select **Save** on the *Configure migration setting* blade
13. On the Migration Wizard *Summary* blade, enter the following:
- *Activity name*: Enter **TailspinToysMigration**
![The Migration Wizard summary blade is displayed, Sql2008ToSqlDatabase is entered into the name field, and Validate my database(s) is selected in the Choose validation option blade, with all three validation options selected.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dms-migration-wizard-migration-summary.png?raw=true "Migration Wizard Summary")
14. Select **Run migration**
15. Monitor the migration on the status screen that appears. Select the refresh icon in the toolbar to retrieve the latest status:
![On the Migration job blade, the Refresh button is highlighted, and a status of Full backup uploading is displayed and highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dms-migration-wizard-status-running.png?raw=true "Migration status")
16. Continue selecting **Refresh** every 5-10 seconds, until you see the status change to **Log files uploading** or **Log Shipping in progress** (when the log files are done uploading, it changes to **Log Shipping in progress**, but you don't need to wait for that to happen). When either status appears, move on to the next task:
![In the migration monitoring window, a status of Log files uploading is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dms-migration-wizard-status-log-files-uploading.png?raw=true "Migration status")
<p><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/point1.png?raw=true"><b><a name="Activity-7">Activity 7: Perform migration cutover</b></p></a>
Since you performed the migration as an "online data migration," the migration wizard will continue to monitor the SMB network share for newly added log files. This allows for any updates that happen on the source database to be captured until you cut over to the SQL MI database. In this task, you will add a record to one of the database tables, backup the logs, and complete the migration of the `TailspinToys` database by cutting over to the SQL MI database.
<p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/checkmark.png?raw=true"><b>Steps</b></p>
1. In the migration status window in the Azure portal and select **TailspinToys** under *database name* to view further details about the database migration:
![The TailspinToys database name is highlighted in the migration status window.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dms-migration-wizard-database-name.png?raw=true "Migration status")
2. On the *TailspinToys* screen you will see a status of *Restored* for the `TailspinToys.bak` file:
![On the TailspinToys blade, a status of Restored is highlighted next to the TailspinToys.bak file in the list of active backup files.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dms-migration-wizard-database-restored.png?raw=true "Migration Wizard")
3. To demonstrate log shipping and how transactions made on the source database during the migration process will be added to the target SQL MI database, you will add a record to one of the database tables.
4. Return to *SSMS* on your SqlServer2008 VM and select **New Query** from the toolbar:
![The New Query button is highlighted in the SSMS toolbar.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-new-query.png?raw=true "SSMS Toolbar")
5. Paste the following SQL script, which inserts a record into the `Game` table, into the new query window:
```sql
USE TailspinToys;
GO
INSERT [dbo].[Game] (Title, Description, Rating, IsOnlineMultiplayer)
VALUES ('Space Adventure', 'Explore the universe with are newest online multiplayer gaming experience. Build your own rocket ships, and take off for the stars in an infinite open world adventure.', 'T', 1)
```
6. Execute the query by selecting **Execute** in the SSMS toolbar:
![The Execute button is highlighted in the SSMS toolbar.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-execute.png?raw=true "SSMS Toolbar")
7. With the new record added to the `Games` table, you will now backup the transaction logs, which will be shipped to DMS. Select **New Query** again in the toolbar, and paste the following script into the new query window:
```sql
USE master;
GO
BACKUP LOG TailspinToys
TO DISK = 'c:\dms-backups\TailspinToysLog.trn'
WITH CHECKSUM
GO
```
8. Execute the query by selecting **Execute** in the SSMS toolbar:
9. Return to the migration status page in the Azure portal. On the TailspinToys screen, select **Refresh** you should see the **TailspinToysLog.trn** file appear, with a status of **Uploaded**:
![On the TailspinToys blade, the Refresh button is highlighted. A status of Uploaded is highlighted next to the TailspinToysLog.trn file in the list of active backup files.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dms-migration-wizard-transaction-log-uploaded.png?raw=true "Migration Wizard")
>**Note**: If you don't see it the transaction logs entry, continue selecting Refresh every few seconds until it appears.
10. Once the transaction logs are uploaded, they need to be restored to the database. Select **Refresh** every 10-15 seconds until you see the status change to *Restored*, which can take a minute or two:
![A status of Restored is highlighted next to the TailspinToysLog.trn file in the list of active backup files.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dms-migration-wizard-transaction-log-restored.png?raw=true "Migration Wizard")
11. After verifying the transaction log status of *Restored*, select **Start Cutover**:
![The Start Cutover button is displayed.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dms-migration-wizard-start-cutover.png?raw=true "DMS Migration Wizard")
12. On the *Complete cutover* dialog, verify *pending log backups* is `0`, check **Confirm**, and select **Apply**:
![In the Complete cutover dialog, a value of 0 is highlighted next to Pending log backups and the Confirm checkbox is checked.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dms-migration-wizard-complete-cutover-apply.png?raw=true "Migration Wizard")
13. You will be given a progress bar below the *Apply* button in the *Complete cutover* dialog. When the migration is complete, you will see the status as *Completed*:
![A status of Completed is displayed in the Complete cutover dialog.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dms-migration-wizard-complete-cutover-completed.png?raw=true "Migration Wizard")
> **Note**:
> This will take between 10-30 minutes, so it might be a good time to take a break, or to review what you've done so far. Sometimes the progress bar is delayed, select **Refresh** from the panel to the left (don't worry, it won't close your cutover) to update manually, every ~5 minutes.
14. Close the *Complete cutover* dialog by selecting the **X** in the upper right corner of the dialog, and do the same thing for the *TailspinToys* blade. This will return you to the *TailspinToysMigration* blade. Select **Refresh**, and you should see a status of *Completed* from the *TailspinToys* database.
![On the Migration job blade, the status of Completed is highlighted](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/dms-migration-wizard-status-complete.png?raw=true "Migration with Completed status")
15. You have now successfully migrated the `TailspinToys` database to Azure SQL Managed Instance.
<p><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/point1.png?raw=true"><b><a name="Activity-8">Activity 8: Verify database and transaction log migration</b></p></a>
In this task, you will connect to the SQL MI database using SSMS, and quickly verify the migration.
<p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/checkmark.png?raw=true"><b>Steps</b></p>
1. Return to *SSMS* on your SqlServer2008 VM, and then select **Connect** and **Database Engine** from the *Object Explorer* menu:
![In the SSMS Object Explorer, Connect is highlighted in the menu and Database Engine is highlighted in the Connect context menu.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-object-explorer-connect.png?raw=true "SSMS Connect")
2. In the *Connect to Server* dialog, enter the following:
- *Server name*: Enter the fully qualified domain name of your SQL managed instance, which you copied from the Azure Cloud Shell in a previous task
> **Note:**
> If you were provided an environment for this lab, the fully qualified domain name (also referenced as "MiFQDN" or "FQDN") has been provided to you in your environment details.
- *Authentication*: Select **SQL Server Authentication**
- *Login*: Enter **sqlmiuser**
- *Password*: Enter your password
- Check the **Remember password** box
![The SQL managed instance details specified above are entered into the Connect to Server dialog.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-connect-to-server-sql-mi.png?raw=true "Connect to Server")
3. Select **Connect**
4. You will see you SQL MI connection appear below the SQLSERVER2008 connection. Expand *Databases* in the SQL MI connection and select the `TailspinToys` database:
![In the SSMS Object Explorer, the SQL MI connection is expanded and the TailspinToys database is highlighted and selected.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-sql-mi-tailspintoys-database.png?raw=true "SSMS Object Explorer")
5. With the `TailspinToys` database selected, select **New Query** on the SSMS toolbar to open a new query window.
6. In the new query window, enter the following SQL script:
```sql
SELECT * FROM Game
```
7. Select **Execute** on the SSMS toolbar to run the query. You will see the records contained in the `Game` table displayed, including the new `Space Adventure` you added after initiating the migration process:
![In the new query window, the query above has been entered, and in the results pane, the new Space Adventure game is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-query-game-table.png?raw=true "SSMS Query")
8. You are now done using the SqlServer2008 VM. Close any open windows and log off of the VM. You will use the "JumpBox" VM for the remaining tasks of this hands-on-lab.
<p><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/point1.png?raw=true"><b><a name="Activity-9">Activity 9: Update the application</b></p></a>
With the `TailspinToys` database now running on SQL MI in Azure, the next step is to make the required modifications to the TailspinToys gamer information web application.
>**Note**: SQL Managed Instance has a private IP address in its own VNet, so to connect an application you need to configure access to the VNet where Managed Instance is deployed. To learn more, read [Connect your application to Azure SQL Database Managed Instance](https://docs.microsoft.com/azure/sql-database/sql-database-managed-instance-connect-app).
>**Note**: Due to time constraints, the lab will deal with switching the app running on a Jumpbox VM locally from leveraging data in SQL Server 2008 to SQL MI (but not the deployment to Azure or integrating the App Service with the Virtual Network). In the [extended version of these labs](https://github.com/microsoft/MCW-Migrating-SQL-databases-to-Azure/blob/master/Hands-on%20lab/HOL%20step-by-step%20-%20Migrating%20SQL%20databases%20to%20Azure.md#exercise-3-update-the-web-application-to-use-the-new-sql-mi-database), or if you have time at the end of the lab, you can do that.
In this activity, you will create an RDP connection to the JumpBox VM, and then using Visual Studio on the JumpBox, run the `TailspinToysWeb` application on the VM.
<p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/checkmark.png?raw=true"><b>Steps</b></p>
> **Note**:
> If you were provided an environment for this lab, you may already be in the JumpBox VM. If you are, you can **skip to step 9**.
1. In the [Azure portal](https://portal.azure.com), select **Resource groups** in the *Azure navigation pane*, and select the **hands-on-lab-SUFFIX** resource group from the list:
![Resource groups is selected in the Azure navigation pane and the "hands-on-lab-SUFFIX" resource group is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/resource-groups.png?raw=true "Resource groups list")
2. In the list of resources for your resource group, select the JumpBox VM:
![The list of resources in the hands-on-lab-SUFFIX resource group are displayed, and JumpBox is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/resource-group-resources-jumpbox.png?raw=true "JumpBox in resource group list")
3. On your JumpBox VM blade, select **Connect** from the top menu:
![The JumpBox VM blade is displayed, with the Connect button highlighted in the top menu.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/connect-jumpbox.png?raw=true "Connect to JumpBox VM")
4. On the *Connect to virtual machine* blade, select **Download RDP File**, then open the downloaded RDP file:
![The Connect to virtual machine blade is displayed, and the Download RDP File button is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/connect-to-virtual-machine.png?raw=true "Connect to virtual machine")
5. Select **Connect** on the *Remote Desktop Connection* dialog:
![In the Remote Desktop Connection Dialog Box, the Connect button is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/remote-desktop-connection.png?raw=true "Remote Desktop Connection dialog")
6. Enter the following credentials when prompted, and then select **OK**:
- *Username*: **sqlmiuser**
![The credentials specified above are entered into the Enter your credentials dialog.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/rdc-credentials.png?raw=true "Enter your credentials")
7. Select **Yes** to connect, if prompted that the identity of the remote computer cannot be verified:
![In the Remote Desktop Connection dialog box, a warning states that the identity of the remote computer cannot be verified, and asks if you want to continue anyway. At the bottom, the Yes button is circled.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/remote-desktop-connection-identity-verification-jumpbox.png?raw=true "Remote Desktop Connection dialog")
8. Once logged in, the repository containing all of these files can be cloned to `C:/users/`[username]`/sqlworkshops/SQLGroundtoCloud` by opening the command prompt and running the following command:
```cmd
git clone https://github.com/microsoft/sqlworkshops.git
```
> **Note**:
> If you're doing this lab as part of a workshop and were provided an environment to use, or you have already cloned the repository earlier in the workshop, you do not need to clone the workshop again.
9. Open the `C:/users/`[username]`/sqlworkshops/SQLGroundtoCloud` folder. In the `lab-files` folder, double-click `TailspinToysWeb.sln` to open the solution in Visual Studio:
![The folder at the path specified above is displayed, and TailspinToys.sln is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/windows-explorer-tailspintoysweb.png?raw=true "Windows Explorer")
10. If prompted about how you want to open the file, select **Visual Studio 2019** and then select **OK**:
![In the Visual Studio version selector, Visual Studio 2019 is selected and highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/visual-studio-version-selector.png?raw=true "Visual Studio")
11. Select **Sign in** and enter your Azure account credentials when prompted:
> **Note**:
> If you're doing this lab as part of a workshop and were provided an environment to use, please use the Azure account credentials provided to you. If you are not prompted, you can skip to the next step for now.
![On the Visual Studio welcome screen, the Sign in button is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/visual-studio-sign-in.png?raw=true)
12. At the security warning prompt, uncheck Ask me for every project in this solution, and then select **OK**:
![A Visual Studio security warning is displayed, and the Ask me for every project in this solution checkbox is unchecked and highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/visual-studio-security-warning.png?raw=true "Visual Studio")
13. Open `appsettings.json` and enter your SQL 2008 VM information and password in the Connection strings section:
```c
"ConnectionStrings": {
"TailspinToysContext": "Server=tcp:<your-sql-2008-vm-public-ip>,1433;Database=TailspinToys;User ID=WorkshopUser;Password=<your-password>;Trusted_Connection=False;Encrypt=True;TrustServerCertificate=True;",
"TailspinToysReadOnlyContext": "Server=tcp:<your-sql-2008-vm-public-ip>,1433;Database=TailspinToys;User ID=WorkshopUser;Password=<your-password>;Trusted_Connection=False;Encrypt=True;TrustServerCertificate=True;"
}
```
> **Note**:
> Use the same login "WorkshopUser" and password from previous activities.
14. Save the file:
![Save the Visual Studio web application after adding the keys](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/vs-save-file.png?raw=true "Visual Studio")
15. Run the application (IIS Express button):
![Run the Visual Studio web application locally](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/vs-run-app.png?raw=true "Visual Studio")
16. You should now see the app running locally and view the site and it's data which is accessing the on-prem data (Select `Leaderboard`):
![View the homepage of the Tailspin Toys application running locally](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/web-app-home.png?raw=true "Tailspin Toys")
![View the leaderboard of the Tailspin Toys application running locally](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/web-app-leaderboard.png?raw=true "Tailspin Toys")
17. Stop the application by closing the browser.
18. Now, in order to have the app run with the data in SQL MI, update `appsettings.json` by replacing `Server=tcp:<your-sql-2008-vm-public-ip>,1433;` with the fully qualified domain name for your MI (something like `Server=mi-SUFFIX.fdsor39943234j3oj4.database.windows.net;`). Then, replace `WorkshopUser` with `sqlmiuser`, as that's how you log into your SQL MI.
> **Note**:
> If your passwords for `WorkshopUser` and `sqlmiuser` are different, don't forget to update to the correct password as well.
19. Save the file:
![Save the Visual Studio web application after adding the keys](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/vs-save-file.png?raw=true "Visual Studio")
20. Run the application (IIS Express button):
![Run the Visual Studio web application locally](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/vs-run-app.png?raw=true "Visual Studio")
21. You should see the same results as before, but this time, the data is coming from your SQL MI in Azure:
![View the homepage of the Tailspin Toys application running locally](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/web-app-home.png?raw=true "Tailspin Toys")
![View the leaderboard of the Tailspin Toys application running locally](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/web-app-leaderboard.png?raw=true "Tailspin Toys")
> **Note**: If you want to complete an extension of this lab where you deploy the web app to Azure and integrate the App Service within the virtual network using point-to-site and VNet integration, see exercises 3 and 4 in the non-abbreviated lab [here](https://github.com/microsoft/MCW-Migrating-SQL-databases-to-Azure/blob/master/Hands-on%20lab/HOL%20step-by-step%20-%20Migrating%20SQL%20databases%20to%20Azure.md).
<br>
<p style="border-bottom: 1px solid lightgrey;"></p>
<h2><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/pencil2.png?raw=true"><a name="LabExercise-2">Lab Exercise 2: Improve database security with Advanced Data Security</h2></a>
[Advanced Data Security](https://docs.microsoft.com/en-us/azure/sql-database/sql-database-advanced-data-security) is a unified package for advanced SQL security capabilities. It includes functionality for discovering and classifying sensitive data, surfacing and mitigating potential database vulnerabilities, and detecting anomalous activities that could indicate a threat to your database. It provides a single go-to location for enabling and managing these capabilities.
In this exercise, you'll enable Advanced Data Security, configure Data Discovery and Classification, and review the Vulnerability Assessment. At the end, you'll also receive a pointer to a Dynamic Data Masking lab extension.
<p><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/point1.png?raw=true"><b><a name="Activity-2-1">Activity 1: Enable Advanced Data Security</b></p></a>
In this task, you will enable Advanced Data Security (ADS) for all databases on the Managed Instance.
<p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/checkmark.png?raw=true"><b>Steps</b></p>
1. In the [Azure portal](https://portal.azure.com), select **Resource groups** from the left-hand menu, select the **hands-on-lab-SUFFIX** resource group, and then select the **TailspinToys** Managed database resource from the list:
![The TailspinToys Managed Database is highlighted in the resources list.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/resources-sql-mi-database.png?raw=true "Resources")
2. On the *TailspinToys Managed database* blade, select **Advanced Data Security** from the left-hand menu, under Security, and then select **Enable Advanced Data Security on the managed instance**:
![In the Advanced Data Security blade of the Managed database, the Enable Advanced Data Security on the managed instance button is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/managed-database-ads.png?raw=true "Advanced Data Security")
3. Within a few minutes, ADS will be enabled for all databases on the Managed Instance. You will see the three tiles on the *Advanced Data Security* blade become enabled when it has been enabled:
![The enabled tiles on the Advance Data Security blade are displayed.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ads-panels.png?raw=true "Advanced Data Security")
<p><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/point1.png?raw=true"><b><a name="Activity-2-2">Activity 2: Configure SQL Data Discovery and Classification</b></p></a>
In this task, you will look at the [SQL Data Discovery and Classification](https://docs.microsoft.com/sql/relational-databases/security/sql-data-discovery-and-classification?view=sql-server-2017) feature of Advanced Data Security. Data Discovery and Classification introduces a new tool for discovering, classifying, labeling & reporting the sensitive data in your databases. It introduces a set of advanced services, forming a new SQL Information Protection paradigm aimed at protecting the data in your database, not just the database. Discovering and classifying your most sensitive data (business, financial, healthcare, etc.) can play a pivotal role in your organizational information protection stature.
> **Note**: This functionality is currently available *in Preview* for SQL MI through the Azure portal.
<p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/checkmark.png?raw=true"><b>Steps</b></p>
1. On the *Advanced Data Security* blade, select the **Data Discovery & Classification** tile:
![The Data Discovery & Classification tile is displayed.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ads-data-discovery-and-classification-pane.png?raw=true "Advanced Data Security")
2. In the *Data Discovery & Classification* blade, select the **info link** with the message *We have found 40 columns with classification recommendations*:
![The recommendations link on the Data Discovery & Classification blade is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ads-data-discovery-and-classification-recommendations-link.png?raw=true "Data Discovery & Classification")
3. Look over the list of recommendations to get a better understanding of the types of data and classifications are assigned, based on the built-in classification settings. In the list of *classification recommendations*, select the recommendation for the **Sales - CreditCard - CardNumber** field:
![The CreditCard number recommendation is highlighted in the recommendations list.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ads-data-discovery-and-classification-recommendations-credit-card.png?raw=true "Data Discovery & Classification")
4. Due to the risk of exposing credit card information, Tailspin Toys would like a way to classify it as *highly confidential*, not just *Confidential*, as the recommendation suggests. To correct this, select **+ Add classification** at the top of the *Data Discovery and Classification* blade:
![The +Add classification button is highlighted in the toolbar.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ads-data-discovery-and-classification-add-classification-button.png?raw=true "Data Discovery & Classification")
5. Expand the **Sensitivity label** field, and review the various built-in labels you can choose from. You can also add your own labels, should you desire:
![The list of built-in Sensitivity labels is displayed.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ads-data-discovery-and-classification-sensitivity-labels.png?raw=true "Data Discovery & Classification")
6. In the *Add classification* dialog, enter the following:
- *Schema name*: Select **Sales**
- *Table name*: Select **CreditCard**
- *Column name*: Select **CardNumber (nvarchar)**
- *Information type*: Select **Credit Card**
- *Sensitivity level*: Select **Highly Confidential**
![The values specified above are entered into the Add classification dialog.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ads-data-discovery-and-classification-add-classification.png?raw=true "Add classification")
7. Select **Add classification**
8. You will see the *Sales - CreditCard - CardNumber* field disappear from the recommendations list, and the number of recommendations drop by 1
9. Other recommendations you can review are the *HumanResources - Employee* fields for *NationalIDNumber* and *BirthDate*. Note that these have been flagged by the recommendation service as *Confidential - GDPR*. As Tailspin Toys maintains data about gamers from around the world, including Europe, having a tool which helps them discover data which may be relevant to GDPR compliance will be very helpful:
![GDPR information is highlighted in the list of recommendations](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ads-data-discovery-and-classification-recommendations-gdpr.png?raw=true "Data Discovery & Classification")
10. Check the **Select all** check box at the top of the list to select all the remaining recommended classifications, and then select **Accept selected recommendations**:
![All the recommended classifications are checked and the Accept selected recommendations button is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ads-data-discovery-and-classification-accept-recommendations.png?raw=true "Data Discovery & Classification")
11. Select **Save** on the toolbar of the Data Classification window. It may take several minutes for the save to complete:
![Save the updates to the classified columns list.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ads-data-discovery-and-classification-save.png?raw=true "Save")
>**Note**: This feature is still in preview. If you receive an error when saving, try returning to the Advanced Data Security blade, and selecting the Data Discovery & Classification tile again to see the results.
12. When the save completes, select the **Overview** tab on the *Data Discovery and Classification* blade to view a report with a full summary of the database classification state:
![The View Report button is highlighted on the toolbar.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ads-data-discovery-and-classification-overview-report.png?raw=true "View report")
<p><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/point1.png?raw=true"><b><a name="Activity-2-3">Activity 3: Review Advanced Data Security Vulnerability Assessment</b></p></a>
In this task, you will review an assessment report generated by ADS for the `TailspinToys` database and take action to remediate one of the findings in the `TailspinToys` database. The [SQL Vulnerability Assessment service](https://docs.microsoft.com/azure/sql-database/sql-vulnerability-assessment) is a service that provides visibility into your security state, and includes actionable steps to resolve security issues, and enhance your database security.
<p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/checkmark.png?raw=true"><b>Steps</b></p>
1. Return to the **Advanced Data Security** blade for the `TailspinToys` Managed database and then select the **Vulnerability Assessment** tile:
![The Vulnerability tile is displayed.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ads-vulnerability-assessment-tile.png?raw=true "Advanced Data Security")
2. On the *Vulnerability Assessment* blade, select **Scan** on the toolbar:
![Vulnerability assessment scan button.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/vulnerability-assessment-scan.png?raw=true "Scan")
3. When the scan completes, you will see a dashboard, displaying the number of failing checks, passing checks, and a breakdown of the risk summary by severity level:
![The Vulnerability Assessment dashboard is displayed.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/sql-mi-vulnerability-assessment-dashboard.png?raw=true "Vulnerability Assessment dashboard")
>**Note**: Scans are run on a schedule, so if you see a message that no vulnerabilities are found your database may not have been scanned yet. You will need to run a scan manually. To do this, select the **Scan** button on the toolbar, and follow any prompts to start a scan. This will take a minute or so to complete.
4. In the scan results, take a few minutes to browse both the *Failed* and *Passed* checks, and review the types of checks that are performed. In the *Failed* list, locate the security check for *Transparent data encryption*. This check has an ID of *VA1219*:
![The VA1219 finding for Transparent data encryption is highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/sql-mi-vulnerability-assessment-failed-va1219.png?raw=true "Vulnerability assessment")
5. Select the **VA1219** finding to view the detailed description:
![The details of the VA1219 - Transparent data encryption should be enabled finding are displayed with the description, impact, and remediation fields highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/sql-mi-vulnerability-assessment-failed-va1219-details.png?raw=true "Vulnerability Assessment")
The details for each finding provide more insight into the reason. Note the fields describing the finding, the impact of the recommended settings, and details on remediation for the finding.
6. You will now act on the recommendation remediation steps for the finding, and enable [Transparent Data Encryption](https://docs.microsoft.com/azure/sql-database/transparent-data-encryption-azure-sql) for the `TailspinToys` database. To accomplish this, you will switch over to using SSMS on your JumpBox VM for the next few steps.
>**Note**:
> Transparent data encryption (TDE) needs to be manually enabled for Azure SQL Managed Instance. TDE helps protect Azure SQL Database, Azure SQL Managed Instance, and Azure Data Warehouse against the threat of malicious activity. It performs real-time encryption and decryption of the database, associated backups, and transaction log files at rest without requiring changes to the application.
7. On your JumpBox VM, open Microsoft SQL Server Management Studio 18 from the Start menu, and enter the following information in the *Connect to Server* dialog.
- *Server name*: Enter the fully qualified domain name of your SQL managed instance, which you copied from the Azure Cloud Shell in a previous task
- *Authentication*: Select **SQL Server Authentication**
- *Login*: Enter **sqlmiuser**
- *Password*: Enter your password
- Check the **Remember password** box
![The SQL managed instance details specified above are entered into the Connect to Server dialog.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-18-connect-to-server.png?raw=true "Connect to Server")
8. In SSMS, select **New Query** from the toolbar, paste the following SQL script into the new query window:
```sql
ALTER DATABASE [TailspinToys] SET ENCRYPTION ON
```
![A new query window is displayed, with the script above pasted into it.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-sql-mi-enable-tde.png?raw=true "New query")
> You turn transparent data encryption on and off on the database level. To enable transparent data encryption on a database in Azure SQL Managed Instance use must use T-SQL.
9. Select **Execute** from the SSMS toolbar. After a few seconds, you will see a message that the "Commands completed successfully":
![The Execute button is highlighted on the SSMS toolbar, and the Commands completed successfully message is highlighted in the output window.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-sql-mi-enable-tde-success.png?raw=true "Execute")
10. You can verify the encryption state and view information the associated encryption keys by using the [sys.dm_database_encryption_keys view](https://docs.microsoft.com/sql/relational-databases/system-dynamic-management-views/sys-dm-database-encryption-keys-transact-sql). Select **New Query** on the SSMS toolbar again, and paste the following query into the new query window:
```sql
SELECT * FROM sys.dm_database_encryption_keys
```
![The query above is pasted into a new query window in SSMS.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-sql-mi-database-encryption-keys.png?raw=true "New query")
11. Select **Execute** from the SSMS toolbar. You will see two records in the Results window, which provide information about the encryption state and keys used for encryption:
![The Execute button on the SSMS toolbar is highlighted, and in the Results pane the two records about the encryption state and keys for the TailspinToys database are highlighted.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/ssms-sql-mi-database-encryption-keys-results.png?raw=true "Results")
By default, service-managed transparent data encryption is used. A transparent data encryption certificate is automatically generated for the server that contains the database.
12. Return to the *Azure portal* and the *Advanced Data Security - Vulnerability Assessment* blade of the `TailspinToys` managed database. On the toolbar, select **Scan** to start a new assessment of the database:
![Vulnerability assessment scan button.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/vulnerability-assessment-scan.png?raw=true "Scan")
13. When the scan completes, select the **Failed** tab, enter **VA1219** into the search filter box, and observe that the previous failure is no longer in the Failed list:
![The Failed tab is highlighted and VA1219 is entered into the search filter. The list displays no results.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/sql-mi-vulnerability-assessment-failed-filter-va1219.png?raw=true "Failed")
14. Now, select the **Passed** tab, and observe the **VA1219** check is listed with a status of *PASS*:
![The Passed tab is highlighted and VA1219 is entered into the search filter. VA1219 with a status of PASS is highlighted in the results.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/sql-mi-vulnerability-assessment-passed-va1219.png?raw=true "Passed")
Using the SQL Vulnerability Assessment, it is simple to identify and remediate potential database vulnerabilities, allowing you to proactively improve your database security.
> **Note**: If you want to complete an extension of this lab where you also explore the capabilities of [Dynamic Data Masking](https://docs.microsoft.com/en-us/sql/relational-databases/security/dynamic-data-masking?view=sql-server-2017), see exercise 6 and 4 in the non-abbreviated lab [here](https://github.com/microsoft/MCW-Migrating-SQL-databases-to-Azure/blob/master/Hands-on%20lab/HOL%20step-by-step%20-%20Migrating%20SQL%20databases%20to%20Azure.md).
<br>
<p style="border-bottom: 1px solid lightgrey;"></p>
<h2><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/pencil2.png?raw=true"><a name="LabExercise-3">Lab Exercise 3: Use an online secondary for read-only queries </h2></a>
In this exercise, you will look at how you can use the automatically created online secondary for reporting, without feeling the impacts of a heavy transactional load on the primary database. Each database in the SQL MI Business Critical tier is automatically provisioned with several AlwaysON replicas to support the availability SLA. Using [**Read Scale-Out**](https://docs.microsoft.com/azure/sql-database/sql-database-read-scale-out) allows you to load balance Azure SQL Database read-only workloads using the capacity of one read-only replica.
<br>
<p><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/point1.png?raw=true"><b><a name="Activity-3-1">Activity 1: View Leaderboard report in Tailspin Toys web application</b></p></a>
In this task, you will open a web report using the web application you deployed to your App Service.
<p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/checkmark.png?raw=true"><b>Steps</b></p>
1. Return to your JumpBox VM, and run the web application:
![Run the Visual Studio web application locally](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/vs-run-app.png?raw=true "Visual Studio")
4. In the *TailspinToys web app*, select **Leaderboard** from the menu:
![READ_WRITE is highlighted on the Leaderboard page.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/tailspin-toys-leaderboard-read-write.png?raw=true "TailspinToys Web App")
> Note the `READ_WRITE` string on the page. This is the output from reading the `Updateability` property associated with the `ApplicationIntent` option on the target database. This can be retrieved using the SQL query `SELECT DATABASEPROPERTYEX(DB_NAME(), "Updateability")`.
<p><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/point1.png?raw=true"><b><a name="Activity-3-2">Activity 2: Update read only connection string</b></p></a>
In this task, you will enable Read Scale-Out for the `TailspinToys` database, using the `ApplicationIntent` option in the connection string. This option dictates whether the connection is routed to the write replica or to a read-only replica. Specifically, if the `ApplicationIntent` value is `ReadWrite` (the default value), the connection will be directed to the databases read-write replica. If the `ApplicationIntent` value is `ReadOnly`, the connection is routed to a read-only replica.
<p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/checkmark.png?raw=true"><b>Steps</b></p>
1. Stop the application by closing the browser
2. In order to have the app connect to the read-only replica, open `appsettings.json`. In the `TailspinToysReadOnlyContext` line, paste the following parameter to end the line:
```sql
ApplicationIntent=ReadOnly;
```
4. The `TailspinToysReadOnlyContext` connection string should now look something like the following:
```sql
Server=mi-SUFFIX.15b8611394c.database.windows.net;Database=TailspinToys;User ID=sqlmiuser;Password=<your-password>;Trusted_Connection=False;Encrypt=True;TrustServerCertificate=True;ApplicationIntent=ReadOnly;
```
<p><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/point1.png?raw=true"><b><a name="Activity-3-3">Activity 3: Reload leaderboard report in the Tailspin Toys web application</b></p></a>
In this task, you will refresh the Leaderboard report in the Tailspin Toys web app, and observe the results.
<p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/checkmark.png?raw=true"><b>Steps</b></p>
3. Save the `appsettings.json` file in Visual Studio:
![Save the Visual Studio web application after adding the keys](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/vs-save-file.png?raw=true "Visual Studio")
4. Run the application (IIS Express button):
![Run the Visual Studio web application locally](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/vs-run-app.png?raw=true "Visual Studio")
5. Return to the TailspinToys gamer information website you opened previously, on the **Leaderboard** page. The page should now look similar to the following:
![READ_ONLY is highlighted on the Reports page.](https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/graphics/tailspin-toys-leaderboard-read-only.png?raw=true "TailspinToys Web App")
> Notice the `updateability` option is now displaying as `READ_ONLY`. With a simple addition to your database connection string, you are able to send read-only queries to the online secondary of your SQL MI Business critical database, allowing you to load-balance read-only workloads using the capacity of one read-only replica. The SQL MI Business Critical cluster has built-in Read Scale-Out capability that provides free-of charge built-in read-only node that can be used to run read-only queries that should not affect performance of your primary workload.
> **Note**:
> If you are attending this lab as part of a day-long workshop, this may still read as READ-WRITE, if the lab was configured using [Instance Pools](https://docs.microsoft.com/en-us/azure/sql-database/sql-database-instance-pools), since Instance Pools currently only support General Purpose (not Business Critical which is needed here). You have finished the activities for Module 5. [Return to it here](https://github.com/microsoft/sqlworkshops/blob/master/SQLGroundToCloud/sqlgroundtocloud/05-MigratingToAzureSQL.md#54-after-the-migration), review, and refer to instructor guidance.
<br>
<p style="border-bottom: 1px solid lightgrey;"></p>
<h2><img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/pencil2.png?raw=true"><a name="LabExercise-4">Lab Exercise 4: After the Migration</a></h2>
In this Lab, you used the [Azure Database Migration Service](https://azure.microsoft.com/services/database-migration/) (DMS) to migrate the `TailspinToys` database from the on-premises SQL 2008 R2 database to SQL MI. You then updated the web application to use the SQL MI created, and enabled [advanced security features](https://docs.microsoft.com/en-us/azure/sql-database/sql-database-advanced-data-security). Finally, you set up your application to leverage the [online secondary replica](https://docs.microsoft.com/en-us/azure/sql-database/sql-database-read-scale-out) to handle heavy read workloads.
Now that Tailspin Toys has completed a migration for their gaming database. They'll want to leverage the [post-migration validation and optimization guide](https://docs.microsoft.com/en-us/sql/relational-databases/post-migration-validation-and-optimization-guide?view=sql-server-2017) to ensure data completeness and uncover and resolve performance issues.
If and when Tailspin Toys chooses to scale their migration to other instances and databases, they can leverage the same process you've seen in Labs 4 and 5, but should also refer to the guidance Microsoft provides on [scaling a migration to Azure](https://docs.microsoft.com/en-us/azure/architecture/cloud-adoption/migrate/azure-best-practices/contoso-migration-scale).
<br>
<p style="border-bottom: 1px solid lightgrey;"></p>
<p><img style="margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/owl.png?raw=true"><b>For Further Study</b></p>
<ul>
<li><a href="https://www.microsoft.com/handsonlabs" target="_blank">Microsoft Hands On Labs</a> offers free self-paced lab environments as well as a request form for instructor led lab environments. As of last update, there are about eight labs available around Azure SQL (assessment, migration, app innovation, row level security, managed instance, and more).</li>
<li><a href="https://www.microsoft.com/handsondemos" target="_blank">Microsoft Hands On Demos</a> is similar to Hands On Labs, but offers easy to set up demos that are free for certain internals and partners. As of last update, there are about seven demos available around Azure SQL.</li>
<li><a href="https://datamigration.microsoft.com/
" target="_blank">Azure Database Migration Guide</a> contains lots of resources that will help in guiding and supporting database migrations to Azure.</li>
<li><a href="https://docs.microsoft.com/en-us/azure/architecture/cloud-adoption/migrate/azure-best-practices/contoso-migration-overview
" target="_blank">The Azure Architecture Documentation</a> contains many migration patterns as well as full code samples, scenarios, and guidance about how to migrate on-prem estates. There are useful, detailed scenarios about rehosting to SQL MI and SQL VMs, as well as guidance of how to scale a migration, after you've done a PoC.</li>
<li><a href="https://github.com/microsoft/MCW-Migrating-SQL-databases-to-Azure
" target="_blank">MCW: Migrating SQL Databases to Azure</a> contains extended labs from what you've seen in these exercises. There is an opportunity to see how the networking was configured, and deeper dives around the network and setup. </li>
<li><a href="https://docs.microsoft.com/en-us/azure/architecture/cloud-adoption/migrate/azure-best-practices/contoso-migration-infrastructure
" target="_blank">How to Deploy an Azure Infrastructure</a> and <a href="(https://docs.microsoft.com/en-us/azure/architecture/cloud-adoption/migrate/azure-best-practices/migrate-best-practices-networking
" target="_blank">Best Practices for setting up networking</a> are also two very useful resources when moving to Azure.</li>
<li><a href="https://docs.microsoft.com/en-us/azure/architecture/cloud-adoption/migrate/azure-best-practices/migrate-best-practices-costs
" target="_blank">Best practices for costing and sizing workloads migrated to Azure</a></li>
<li><a href="https://docs.microsoft.com/en-us/azure/architecture/cloud-adoption/migrate/azure-best-practices/migrate-best-practices-security-management
" target="_blank">Best practices for securing and managing workloads migrated to Azure</a></li>
</ul>

109
README.md
Просмотреть файл

@ -1,31 +1,96 @@
![](https://github.com/microsoft/sqlworkshops/blob/master/graphics/microsoftlogo.png?raw=true)
# Contributing
# Labs: Microsoft Azure SQL Labs
This project welcomes contributions and suggestions. Most contributions require you to agree to a
Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.
#### <i>A Microsoft Lab from the SQL Server team</i>
When you submit a pull request, a CLA bot will automatically determine whether you need to provide
a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions
provided by the bot. You will only need to do this once across all repos using our CLA.
<p style="border-bottom: 1px solid lightgrey;"></p>
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
<img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/textbubble.png?raw=true"> <h2>About these Labs</h2>
# Legal Notices
Welcome to a set of Microsoft solutions labs on using the Microsoft Azure SQL Platform. Using these labs, you'll gain a deep understanding on options for the latest SQL Server engine in Microsoft Azure and how you can use it to solve real-world challenges.
Microsoft and any contributors grant you a license to the Microsoft documentation and other content
in this repository under the [Creative Commons Attribution 4.0 International Public License](https://creativecommons.org/licenses/by/4.0/legalcode),
see the [LICENSE](LICENSE) file, and grant you a license to any code in the repository under the [MIT License](https://opensource.org/licenses/MIT), see the
[LICENSE-CODE](LICENSE-CODE) file.
This README.MD file explains how the labs are laid out, what you will learn, and the technologies you will use to get hands-on experience.
Microsoft, Windows, Microsoft Azure and/or other Microsoft products and services referenced in the documentation
may be either trademarks or registered trademarks of Microsoft in the United States and/or other countries.
The licenses for this project do not grant you rights to use any Microsoft names, logos, or trademarks.
Microsoft's general trademark guidelines can be found at http://go.microsoft.com/fwlink/?LinkID=254653.
(You can view all of the [source files for this and other labs and workshops on this GitHub site. Open this link in a new tab to find out more.](https://github.com/microsoft/sqlworkshops))
<p style="border-bottom: 1px solid lightgrey;"></p>
<img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/listcheck.png?raw=true"> <h2><a name="technologies">Technologies and Topics covered in the Labs</a></h2>
The information covered in these labs include the following technologies and topics - although you are not limited to these, they form the basis of the labs. At the end of the workshop you will learn how to extrapolate these components into other solutions. You will cover these at an overview level, with references to much deeper training provided.
<table style="tr:nth-child(even) {background-color: #f2f2f2;}; text-align: left; display: table; border-collapse: collapse; border-spacing: 2px; border-color: gray;">
<tr><th style="background-color: #1b20a1; color: white;">Technology/Concept</th> <th style="background-color: #1b20a1; color: white;">Description</th></tr>
<tr><td style="vertical-align: top">Azure SQL Database </i></td><td style="vertical-align: top">Covers the tools, processes and procedures for Azure SQL Database (Managed Instance, Singleton, and Elastic Pools)</td></tr>
<tr><td style="vertical-align: top">Migrating SQL Server installations to Microsoft Azure </i></td><td style="vertical-align: top">Explains the tools and processes to migrate on-premises SQL Server installations to the Microsoft Azure platform </td></tr>
<tr><td style="vertical-align: top">Technology Selection Options </i></td><td style="vertical-align: top">Teaches a set of criteria, tools and processes you can use to determine the best architecture for a given customer scenario on the Microsoft Azure platform </td></tr>
</table>
<p style="border-bottom: 1px solid lightgrey;"></p>
<img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/owl.png?raw=true"> <h2><a name="prereqs">Before Completing the Labs</a></h2>
You'll need a local system that you are able to install software on. The workshop demonstrations use Microsoft Windows as an operating system and all examples use Windows for the workshop. Optionally, you can use a Microsoft Azure Virtual Machine (VM) to install the software on and work with the solution.
You must also have a Microsoft Azure account with the ability to create assets.
These labs expect that you understand data structures and working with SQL Server and computer networks. Knowledge of SQL Server, Azure Data and AI services, is recommended. Solution templates are implemented using Azure services, development tools, and SDKs. You should have experience working with the Microsoft Azure Platform.
If you are new to these, here are a few references you can complete prior to class:
- [Microsoft SQL Server](https://docs.microsoft.com/en-us/sql/relational-databases/database-engine-tutorials?view=sql-server-ver15)
- [Microsoft Azure](https://docs.microsoft.com/en-us/learn/paths/azure-fundamentals/)
In addition, some of these labs are part of a bigger module on Azure SQL. If you're interested in the supplementary context, you can optionally review the [documents](https://github.com/microsoft/sqlworkshops/blob/master/SQLGroundToCloud/sqlgroundtocloud/04-SQLServerOnTheMicrosoftAzurePlatform.md) and [slides](https://github.com/microsoft/sqlworkshops/tree/master/SQLGroundToCloud/slides) available.
<a href="https://github.com/microsoft/sqlworkshops/blob/master/SQLGroundToCloud/lab-files/Module4and5Prerequisites.md" target="_blank">A full prerequisites document is located here</a>. These instructions should be completed before the labs start, since you will not have time to cover these in class if you are taking them in person. <i>Remember to turn off any Virtual Machines from the Azure Portal and delete resources when the labs are finished when not taking the class so that you do incur charges (shutting down the machine in the VM itself is not sufficient)</i>.
<p style="border-bottom: 1px solid lightgrey;"></p>
<img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/bulletlist.png?raw=true"> <h3>Intended Audience</h3>
<p>The following roles will find this workshop useful. Others may also attend, as described in the Secondary Audience section.</p>
<table style="tr:nth-child(even) {background-color: #f2f2f2;}; text-align: left; display: table; border-collapse: collapse; border-spacing: 5px; border-color: gray;">
<tr><td style="background-color: Cornsilk; color: black; padding: 5px 5px;"><b>Primary Audience:</b></td><td style="background-color: Cornsilk; color: black; padding: 5px 5px;">Solution Architects and Data Professionals tasked with implementing modern Data Systems, Big Data, Machine Learning and AI solutions</td></tr>
<tr><td><b>Secondary Audience:</b></td><td> Security Architects, Developers, and Data Scientists</td></tr>
<tr><td style="background-color: Cornsilk; color: black; padding: 5px 5px;"><b>Level:</b> </td><td style="background-color: Cornsilk; color: black; padding: 5px 5px0;"> 300</td></tr>
<tr><td><b>Type:</b></td><td>In-Person</td></tr>
<tr><td style="background-color: Cornsilk; color: black; padding: 5px 5px;"><b>Length:</b> </td><td style="background-color: Cornsilk; color: black; padding: 5px 5px;">2 hours for all labs</td></tr>
</table>
<p style="border-bottom: 1px solid lightgrey;"></p>
<img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/bulletlist.png?raw=true"> <h3>Setup</h3>
<a href="https://github.com/microsoft/sqlworkshops/blob/master/SQLGroundToCloud/sqlgroundtocloud/00-Pre-Requisites.md" target="_blank">A full prerequisites document is located here</a>. These instructions should be completed before you start the Labs, since you will not have time to cover these in class if you are taking them in-person. <i>Remember to turn off any Virtual Machines from the Azure Portal when not taking the class so that you do incur charges (shutting down the machine in the VM itself is not sufficient)</i>.
<p style="border-bottom: 1px solid lightgrey;"></p>
<img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/bookpencil.png?raw=true"> <h3>Lab Details</h3>
This is a modular set of labs, and in each section, you'll learn concepts, technologies and processes to help you complete the solution. The times shown below are for an instructor-led lab, although you may also take the modules in a self-paced fashion.
<table style="tr:nth-child(even) {background-color: #f2f2f2;}; text-align: left; display: table; border-collapse: collapse; border-spacing: 5px; border-color: gray;">
<tr><td style="background-color: AliceBlue; color: black;"><b>Module</b></td>
<td style="background-color: AliceBlue; color: black;"><b>Time</b></td>
<td style="background-color: AliceBlue; color: black;"><b>Topics</b></td></tr>
<tr><td style="vertical-align: top;"><a href="https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/Lab-DatabaseDiscoveryAndAssessmentForMigratingToAzure.md" target="_blank"> Lab: Database Discovery and Assessment for Migrating to the Microsoft Azure SQL Platform </a></td><td>30 minutes</td><td style="vertical-align: top;"> In this hands-on lab, you will set up your environment with SQL Server 2008 R2 and Azure SQL, and perform assessments to reveal any feature parity and compatibility issues between the on-premises SQL Server 2008 R2 database and the managed database offerings in Azure. At the end of this lab, you will be better able to implement a cloud migration solution for business-critical applications and databases.</td></tr>
<tr><td style="vertical-align: top;background-color: AliceBlue; color: black;"><a href="https://github.com/microsoft/sqlworkshops/blob/master/AzureSQLLabs/Lab-MigratingToAzureSQLManagedInstance.md" target="_blank">Lab: Migrating to Microsoft Azure SQL Managed Instance </a> </td><td style="vertical-align: top;background-color: AliceBlue; color: black;">1.5 hours</td><td style="vertical-align: top;background-color: AliceBlue; color: black;"> In this hands-on lab, you will use the <a href="https://azure.microsoft.com/services/database-migration/" target="_blank">Azure Database Migration Service</a> (DMS) to migrate the <i>TailspinToys</i> database from an on-premises SQL 2008 R2 database to SQL MI. At the end of the lab, you'll also explore some of the security and performance features available.
</td></tr>
</table>
<p style="border-bottom: 1px solid lightgrey;"></p>
<img style="float: left; margin: 0px 15px 15px 0px;" src="https://github.com/microsoft/sqlworkshops/blob/master/graphics/pinmap.png?raw=true"> <h2>Related Workshops</h2>
- [Other SQL Workshops by Microsoft](https://aka.ms/sqlworkshops)
Privacy information can be found at https://privacy.microsoft.com/en-us/
Microsoft and any contributors reserve all other rights, whether under their respective copyrights, patents,
or trademarks, whether by implication, estoppel or otherwise.

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 76 KiB

Двоичные данные
graphics/add-subnet-management.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 37 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 61 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 4.9 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 25 KiB

Двоичные данные
graphics/ads-data-discovery-and-classification-overview-report.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 105 KiB

Двоичные данные
graphics/ads-data-discovery-and-classification-pane.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 26 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 48 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 22 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 17 KiB

Двоичные данные
graphics/ads-data-discovery-and-classification-save.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 4.8 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 12 KiB

Двоичные данные
graphics/ads-panels.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 67 KiB

Двоичные данные
graphics/ads-vulnerability-assessment-tile.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 30 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 36 KiB

Двоичные данные
graphics/app-service-configuration-connection-strings.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 36 KiB

Двоичные данные
graphics/app-service-configuration-edit-conn-string-value.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 11 KiB

Двоичные данные
graphics/app-service-configuration-edit-conn-string.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 30 KiB

Двоичные данные
graphics/app-service-configuration-menu.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 10 KiB

Двоичные данные
graphics/app-service-configuration-save.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 2.3 KiB

Двоичные данные
graphics/app-service-networking.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 44 KiB

Двоичные данные
graphics/app-service-overview-menu-item.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 7.5 KiB

Двоичные данные
graphics/app-service-url.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 21 KiB

Двоичные данные
graphics/app-service-vnet-configuration-add-vnet.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 8.3 KiB

Двоичные данные
graphics/app-service-vnet-configuration.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 15 KiB

Двоичные данные
graphics/app-service-vnet-details.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 59 KiB

Двоичные данные
graphics/azure-cli-create-sp.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 55 KiB

Двоичные данные
graphics/azure-connectivity-arch.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 66 KiB

Двоичные данные
graphics/azure-connectivity-db.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 76 KiB

Двоичные данные
graphics/azure-custom-deployment.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 94 KiB

Двоичные данные
graphics/azure-migrate-add-project.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 139 KiB

Двоичные данные
graphics/azure-migrate-add-tool.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 50 KiB

Двоичные данные
graphics/azure-migrate-databases.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 71 KiB

Двоичные данные
graphics/azure-migrate-home.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 175 KiB

Двоичные данные
graphics/azure-migrate-search.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 65 KiB

Двоичные данные
graphics/azure-migrate-tailspin.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 16 KiB

Двоичные данные
graphics/azure-portal-all-services-subscriptions.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 51 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 72 KiB

Двоичные данные
graphics/azuresql-overview.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 119 KiB

Двоичные данные
graphics/blob-service-sas-url-copy.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 32 KiB

Двоичные данные
graphics/cloud-shell-az-sql-mi-list-output.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 131 KiB

Двоичные данные
graphics/cloud-shell-az-vm-list-ip-addresses.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 72 KiB

Двоичные данные
graphics/cloud-shell-create-storage.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 29 KiB

Двоичные данные
graphics/cloud-shell-icon.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 2.7 KiB

Двоичные данные
graphics/cloud-shell-ps-azure-prompt.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 41 KiB

Двоичные данные
graphics/cloud-shell-select-powershell.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 23 KiB

Двоичные данные
graphics/confirm-account-change.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 19 KiB

Двоичные данные
graphics/connect-jumpbox.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 6.5 KiB

Двоичные данные
graphics/connect-sqlserver2008.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 26 KiB

Двоичные данные
graphics/connect-to-virtual-machine.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 20 KiB

Двоичные данные
graphics/create-migration-service.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 97 KiB

Двоичные данные
graphics/create-resource-azure-database-migration-service.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 43 KiB

Двоичные данные
graphics/create-resource-group.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 100 KiB

Двоичные данные
graphics/create-resource-sql-mi.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 50 KiB

Двоичные данные
graphics/create-resource-sql-server-2008-r2.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 25 KiB

Двоичные данные
graphics/create-resource-virtual-network-gateway.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 47 KiB

Двоичные данные
graphics/create-resource-visual-studio-on-windows-server-2016.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 111 KiB

Двоичные данные
graphics/create-resource-vnet.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 46 KiB

Двоичные данные
graphics/create-resource-web-app.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 47 KiB

Двоичные данные
graphics/create-sql-mi-nsg.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 22 KiB

Двоичные данные
graphics/create-virtual-network.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 51 KiB

Двоичные данные
graphics/create-web-app-basics-tab.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 106 KiB

Двоичные данные
graphics/create-web-app-review-and-create-tab.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 51 KiB

Двоичные данные
graphics/create-web-app.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 13 KiB

Двоичные данные
graphics/data-migration-assistant-setup-finish.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 36 KiB

Двоичные данные
graphics/data-migration-process.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 102 KiB

Двоичные данные
graphics/ddm-select-gamer-results-masked.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 53 KiB

Двоичные данные
graphics/ddm-select-gamer-results.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 59 KiB

Двоичные данные
graphics/dma-add-sources.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 24 KiB

Двоичные данные
graphics/dma-assessment-uploaded.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 9.6 KiB

Двоичные данные
graphics/dma-connect-to-a-server.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 76 KiB

Двоичные данные
graphics/dma-download.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 20 KiB

Двоичные данные
graphics/dma-feature-parity-service-broker-not-supported.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 218 KiB

Двоичные данные
graphics/dma-feature-parity-sql-mi.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 211 KiB

Двоичные данные
graphics/dma-new-project-to-azure-sql-db.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 38 KiB

Двоичные данные
graphics/dma-new-project-to-sql-mi.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 40 KiB

Двоичные данные
graphics/dma-new.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 11 KiB

Двоичные данные
graphics/dma-options.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 54 KiB

Двоичные данные
graphics/dma-service-broker.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 84 KiB

Двоичные данные
graphics/dma-start-assessment-to-azure-sql-db.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 73 KiB

Двоичные данные
graphics/dma-start-assessment-to-sql-mi.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 71 KiB

Двоичные данные
graphics/dma-to-sql-mi.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 70 KiB

Двоичные данные
graphics/dma-upload-azure-migrate.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 18 KiB

Двоичные данные
graphics/dms-add-new-activity.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 31 KiB

Двоичные данные
graphics/dms-add-new-migration-project.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 46 KiB

Двоичные данные
graphics/dms-migration-project-successfully-created.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 8.1 KiB

Двоичные данные
graphics/dms-migration-wizard-complete-cutover-apply.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 61 KiB

Двоичные данные
graphics/dms-migration-wizard-complete-cutover-completed.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 62 KiB

Двоичные данные
graphics/dms-migration-wizard-configure-migration-settings.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 121 KiB

Двоичные данные
graphics/dms-migration-wizard-database-name.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 63 KiB

Двоичные данные
graphics/dms-migration-wizard-database-restored.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 57 KiB

Двоичные данные
graphics/dms-migration-wizard-migration-source-detail.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 48 KiB

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше