mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-14 01:25:37 -05:00
Dev/brih/feature/public preview sql db (#20644)
* sql db preview updates * update readme release notes
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
The Azure SQL Migration extension in Azure Data Studio brings together a simplified assessment, recommendation, and migration experience that delivers the following capabilities:
|
||||
- A responsive user interface that provides you with an end-to-end migration experience that starts with a migration readiness assessment, SKU recommendation (based on performance data), and finalizes with the actual migration to Azure SQL.
|
||||
- An enhanced assessment mechanism that can evaluate SQL Server instances, identifying databases that are ready for migration to the different Azure SQL targets.
|
||||
- A SKU recommendation engine that collects performance data from the source SQL Server instance on-premises, generating right-sized SKU recommendations based on your Azure SQL target: Azure SQL Managed Instance, SQL Server on Azure Virtual Machines, or Azure SQL Database.
|
||||
- A SKU recommendation engine that collects performance data from the source SQL Server instance on-premises, generating right-sized SKU recommendations based on your Azure SQL target.
|
||||
- A reliable Azure service powered by Azure Database Migration Service that orchestrates data movement activities to deliver a seamless migration experience.
|
||||
- The ability to run online (for migrations requiring minimal downtime) or offline (for migrations where downtime persists through the migration) migration modes to suit your business requirements.
|
||||
- The flexibility to create and configure a self-hosted integration runtime to provide your own compute for accessing the source SQL Server and backups in your on-premises environment.
|
||||
@@ -17,6 +17,7 @@ Open the Azure Data Studio marketplace, select and install the latest version of
|
||||
- An Azure account (**not required for assessment or SKU recommendation functionality**).
|
||||
- A source SQL Server database(s) running on-premises, or on SQL Server on Azure Virtual Machine or any virtual machine running in the cloud (private, public).
|
||||
- An Azure SQL Managed Instance, SQL Server on Azure Virtual Machine, or Azure SQL Database to migrate your database(s) to.
|
||||
> Azure SQL Database offline migrations are still in public preview.
|
||||
- Your database backup location details, either a network file share or an Azure Blob Storage container.
|
||||
|
||||
## Getting started
|
||||
@@ -31,15 +32,16 @@ It also generates right-sized SKU recommendations for your Azure target to meet
|
||||
The Azure SQL Migration extension supports database migrations to the following Azure SQL targets.
|
||||
- [Azure SQL Managed Instance](https://docs.microsoft.com/azure/azure-sql/managed-instance/sql-managed-instance-paas-overview)
|
||||
- [SQL Server on Azure Virtual Machines](https://docs.microsoft.com/azure/azure-sql/virtual-machines/windows/sql-server-on-azure-vm-iaas-what-is-overview)
|
||||
- [Azure SQL Database](https://docs.microsoft.com/en-us/azure/azure-sql/database/sql-database-paas-overview?view=azuresql)
|
||||
- [Azure SQL Database (Public preview)](https://docs.microsoft.com/azure/azure-sql/database/sql-database-paas-overview?view=azuresql)
|
||||
|
||||
|
||||
## Migration modes
|
||||
The following migration modes are supported for the corresponding Azure SQL targets.
|
||||
- Online - The source SQL Server database is available for read and write activity, while the database backups (full + log) are continuously restored on the Azure SQL target. Application downtime is limited to the duration of the cutover at the end of migration.
|
||||
- Azure SQL Database is not yet supported for online migrations.
|
||||
- Offline - The source SQL Server database cannot be used for write activity, while the database backup files are restored on the Azure SQL target. Application downtime persists from the start until the completion of the migration process.
|
||||
|
||||
> Online migrations to Azure SQL Database targets are not yet supported.
|
||||
- Offline - The source SQL Server database cannot be used for write activity, while the database backup files are restored on the Azure SQL target. Application downtime persists from the start until the completion of the migration process.
|
||||
> Azure SQL Database offline migrations are still in public preview.
|
||||
|
||||
## Need assistance or have questions/feedback
|
||||
You can submit ideas/suggestions for improvement and other feedback (including bugs) to the [Azure Community forum — Azure Database Migration Service](https://feedback.azure.com/d365community/forum/2dd7eb75-ef24-ec11-b6e6-000d3a4f0da0).
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "sql-migration",
|
||||
"displayName": "%displayName%",
|
||||
"description": "%description%",
|
||||
"version": "1.0.5",
|
||||
"version": "1.0.6",
|
||||
"publisher": "Microsoft",
|
||||
"preview": false,
|
||||
"license": "https://raw.githubusercontent.com/Microsoft/azuredatastudio/main/LICENSE.txt",
|
||||
|
||||
@@ -92,13 +92,13 @@ export const REFRESH_ASSESSMENT_BUTTON_LABEL = localize('sql.migration.refresh.a
|
||||
export const SKU_RECOMMENDATION_CHOOSE_A_TARGET = localize('sql.migration.wizard.sku.choose_a_target', "Choose your Azure SQL target");
|
||||
|
||||
export const SKU_RECOMMENDATION_MI_CARD_TEXT = localize('sql.migration.sku.mi.card.title', "Azure SQL Managed Instance");
|
||||
export const SKU_RECOMMENDATION_SQLDB_CARD_TEXT = localize('sql.migration.sku.sqldb.card.title', "Azure SQL Database");
|
||||
export const SKU_RECOMMENDATION_SQLDB_CARD_TEXT = localize('sql.migration.sku.sqldb.card.title', "Azure SQL Database (PREVIEW)");
|
||||
export const SKU_RECOMMENDATION_VM_CARD_TEXT = localize('sql.migration.sku.vm.card.title', "SQL Server on Azure Virtual Machine");
|
||||
export const SELECT_AZURE_MI = localize('sql.migration.select.azure.mi', "Select your target Azure subscription and your target Azure SQL Managed Instance.");
|
||||
export const SELECT_AZURE_VM = localize('sql.migration.select.azure.vm', "Select your target Azure Subscription and your target SQL Server on Azure Virtual Machine for your target.");
|
||||
export const SKU_RECOMMENDATION_VIEW_ASSESSMENT_MI = localize('sql.migration.sku.recommendation.view.assessment.mi', "To migrate to Azure SQL Managed Instance, view assessment results and select one or more databases.");
|
||||
export const SKU_RECOMMENDATION_VIEW_ASSESSMENT_VM = localize('sql.migration.sku.recommendation.view.assessment.vm', "To migrate to SQL Server on Azure Virtual Machine, view assessment results and select one or more databases.");
|
||||
export const SKU_RECOMMENDATION_VIEW_ASSESSMENT_SQLDB = localize('sql.migration.sku.recommendation.view.assessment.sqldb', "To migrate to Azure SQL Database, view assessment results and select one or more databases.");
|
||||
export const SKU_RECOMMENDATION_VIEW_ASSESSMENT_SQLDB = localize('sql.migration.sku.recommendation.view.assessment.sqldb', "To migrate to Azure SQL Database (PREVIEW), view assessment results and select one or more databases.");
|
||||
export const VIEW_SELECT_BUTTON_LABEL = localize('sql.migration.view.select.button.label', "View/Select");
|
||||
export function TOTAL_DATABASES_SELECTED(selectedDbCount: number, totalDbCount: number): string {
|
||||
return localize('total.databases.selected', "{0} of {1} databases selected", selectedDbCount, totalDbCount);
|
||||
@@ -408,7 +408,7 @@ export function ACCOUNT_CREDENTIALS_REFRESH(accountName: string): string {
|
||||
export const SELECT_SERVICE_PLACEHOLDER = localize('sql.migration.select.service.select.migration.target', "Select a target server.");
|
||||
|
||||
// database backup page
|
||||
export const DATABASE_BACKUP_PAGE_TITLE = localize('sql.migration.database.page.title', "Database backup");
|
||||
export const DATA_SOURCE_CONFIGURATION_PAGE_TITLE = localize('sql.migration.data.source.configuration.page.title', "Data source configuration");
|
||||
export const DATABASE_BACKUP_PAGE_DESCRIPTION = localize('sql.migration.database.page.description', "Select the location of the database backups to use during migration.");
|
||||
export const DATABASE_BACKUP_CHECKSUM_INFO_TEXT = localize('sql.migration.database.checksum.info.text', "Ensure that your backups were taken with the WITH CHECKSUM option.");
|
||||
export const DATABASE_BACKUP_NC_NETWORK_SHARE_RADIO_LABEL = localize('sql.migration.nc.network.share.radio.label', "My database backups are on a network share");
|
||||
|
||||
@@ -76,7 +76,7 @@ export class DatabaseBackupPage extends MigrationWizardPage {
|
||||
private _migrationTableSection!: azdata.FlexContainer;
|
||||
|
||||
constructor(wizard: azdata.window.Wizard, migrationStateModel: MigrationStateModel) {
|
||||
super(wizard, azdata.window.createWizardPage(constants.DATABASE_BACKUP_PAGE_TITLE), migrationStateModel);
|
||||
super(wizard, azdata.window.createWizardPage(constants.DATA_SOURCE_CONFIGURATION_PAGE_TITLE), migrationStateModel);
|
||||
}
|
||||
|
||||
protected async registerContent(view: azdata.ModelView): Promise<void> {
|
||||
@@ -1021,6 +1021,7 @@ export class DatabaseBackupPage extends MigrationWizardPage {
|
||||
return true;
|
||||
}
|
||||
|
||||
this.wizard.message = { text: '' };
|
||||
const errors: string[] = [];
|
||||
switch (this.migrationStateModel._databaseBackup.networkContainerType) {
|
||||
case NetworkContainerType.NETWORK_SHARE:
|
||||
@@ -1458,6 +1459,7 @@ export class DatabaseBackupPage extends MigrationWizardPage {
|
||||
|
||||
private async _loadTableData(): Promise<void> {
|
||||
this._refreshLoading.loading = true;
|
||||
this.wizard.message = { text: '' };
|
||||
const data: any[][] = [];
|
||||
|
||||
this.migrationStateModel._sourceTargetMapping.forEach((targetDatabaseInfo, sourceDatabaseName) => {
|
||||
|
||||
@@ -127,7 +127,7 @@ export class SummaryPage extends MigrationWizardPage {
|
||||
this._flexContainer.addItems([
|
||||
await createHeadingTextComponent(
|
||||
this._view,
|
||||
constants.DATABASE_BACKUP_PAGE_TITLE),
|
||||
constants.DATA_SOURCE_CONFIGURATION_PAGE_TITLE),
|
||||
await this.createNetworkContainerRows()]);
|
||||
}
|
||||
|
||||
|
||||
@@ -117,11 +117,6 @@ export class TargetSelectionPage extends MigrationWizardPage {
|
||||
await this.populateLocationDropdown();
|
||||
}
|
||||
|
||||
if (this.migrationStateModel._didUpdateDatabasesForMigration) {
|
||||
this._initializeSourceTargetDatabaseMap();
|
||||
this._updateConnectionButtonState();
|
||||
}
|
||||
|
||||
this.wizard.registerNavigationValidator((pageChangeInfo) => {
|
||||
this.wizard.message = { text: '' };
|
||||
if (pageChangeInfo.newPage < pageChangeInfo.lastPage) {
|
||||
@@ -402,11 +397,10 @@ export class TargetSelectionPage extends MigrationWizardPage {
|
||||
|
||||
this._disposables.push(
|
||||
this._targetUserNameInputBox.onTextChanged(
|
||||
(value: string) => this.migrationStateModel._targetUserName = value ?? ''));
|
||||
|
||||
this._disposables.push(
|
||||
this._targetUserNameInputBox.onValidityChanged(
|
||||
valid => this._updateConnectionButtonState()));
|
||||
async (value: string) => {
|
||||
this.migrationStateModel._targetUserName = value ?? '';
|
||||
await this._resetTargetMapping();
|
||||
}));
|
||||
|
||||
// target password
|
||||
const targetPasswordLabel = this._view.modelBuilder.text()
|
||||
@@ -426,11 +420,10 @@ export class TargetSelectionPage extends MigrationWizardPage {
|
||||
}).component();
|
||||
this._disposables.push(
|
||||
this._targetPasswordInputBox.onTextChanged(
|
||||
(value: string) => { this.migrationStateModel._targetPassword = value ?? ''; }));
|
||||
|
||||
this._disposables.push(
|
||||
this._targetPasswordInputBox.onValidityChanged(
|
||||
valid => this._updateConnectionButtonState()));
|
||||
async (value: string) => {
|
||||
this.migrationStateModel._targetPassword = value ?? '';
|
||||
await this._resetTargetMapping();
|
||||
}));
|
||||
|
||||
// test connection button
|
||||
this._testConectionButton = this._view.modelBuilder.button()
|
||||
@@ -540,6 +533,13 @@ export class TargetSelectionPage extends MigrationWizardPage {
|
||||
.component();
|
||||
}
|
||||
|
||||
private async _resetTargetMapping(): Promise<void> {
|
||||
this._initializeSourceTargetDatabaseMap();
|
||||
this._updateConnectionButtonState();
|
||||
await this._azureResourceTable.setDataValues([]);
|
||||
await utils.updateControlDisplay(this._connectionResultsInfoBox, false);
|
||||
}
|
||||
|
||||
private async _showConnectionResults(
|
||||
databases: TargetDatabaseInfo[],
|
||||
errorMessage?: string): Promise<void> {
|
||||
@@ -671,10 +671,8 @@ export class TargetSelectionPage extends MigrationWizardPage {
|
||||
|
||||
this.migrationStateModel._sqlMigrationServices = undefined!;
|
||||
if (isSqlDbTarget) {
|
||||
await this._azureResourceTable.setDataValues([]);
|
||||
await this._resetTargetMapping();
|
||||
this._targetPasswordInputBox.value = '';
|
||||
this._initializeSourceTargetDatabaseMap();
|
||||
this._updateConnectionButtonState();
|
||||
}
|
||||
}));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user