首先你當然是已經把備份檔已經放到了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
— 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