f 地端資料庫透過native backup restore 的方式移轉到AWS SQL RDS ~ 迪貝之家

地端資料庫透過native backup restore 的方式移轉到AWS SQL RDS

首先你當然是已經把備份檔已經放到了S3 bucket權限也已經設好
— restore 資料庫
exec msdb.dbo.rds_restore_database
@restore_db_name=’test1′ ,
@s3_arn_to_restore_from=’arn:aws:s3:::steven-sqlbackup/urdb_compress.bak’;
GO

Restore 的過程中, 切入test1 ,會丟下列訊息
Msg 927, Level 14, State 2, Server EC2AMAZ-99VV0NB, Line 1
Database ‘test1’ cannot be opened. It is in the middle of a restore.

查看資料庫restore 的狀態

exec msdb.dbo.rds_task_status @db_name=’test1′
go

資料庫回復之後當然要建立使用者,但是就算建出來之後在AWS SQL RDS 的環境下你沒有權限執行 sp_change_users_login 去重新連結instance login 及 database user我想到的解決方式就是,砍掉database user , 再重建database user(不然就得在地端改為contained db)但因為database user 應該也會是schema owner因此要先把schema owner 轉到其他的database user 在原本on-premise 的資料庫裡頭 ECDO_SA這個database user 是b2c 及 b2e 兩個schema的擁有者所以要進行b2c 及 b2e 兩個schema 所有權的移轉

USE test1
GO

ALTER AUTHORIZATION ON SCHEMA::b2c TO steven
GO
ALTER AUTHORIZATION ON SCHEMA::b2e TO steven
GO
drop user ECDO_SA
go

建立 ECDO_SA 登入帳號
use master
go
CREATE LOGIN [ECDO_SA] WITH PASSWORD= ‘123456’, DEFAULT_DATABASE=[test1], DEFAULT_LANGUAGE=[繁體中文], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO

建立ECDO_SA 資料庫使用者,這樣ECDO_SA登入instance後,才能存取test1 資料庫
use test1
go
CREATE USER ECDO_SA FOR LOGIN ECDO_SA
go

再把b2c 及 b2e 兩個schema 的擁有者給回 ECDO_SA
ALTER AUTHORIZATION ON SCHEMA::b2c TO ECDO_SA
GO
ALTER AUTHORIZATION ON SCHEMA::b2e TO ECDO_SA
GO

設定ECDO_SA 資料庫使用者預設使用的schemea, 這樣存取表格資料,就不用帶full qualified name
ALTER USER ECDO_SA WITH DEFAULT_SCHEMA = b2e;
GO

透過ECDO_SA 帳號登入AWS MSSQL RDS
sqlcmd -S stevenatpic.crrfnaqae3yd.us-east-1.rds.amazonaws.com -U ECDO_SA -P 123456 -l 2

測試查詢資料
select * form e_oll
GO