Sei sulla pagina 1di 4

DB REFRESHMENT (PROD TO DEV/TEST) BY PRAVEEN MADUPU (MB: +91-98661-30093)

DB REFRESHMENT (PROD TO DEV/TEST) BY PRAVEEN MADUPU (MB: +91-98661-30093)



Please find DATABASE REFRESHMENT FROM PROD TO DEVELOPMENT/TEST/STAGE OR PPE Procedure as
follows:

--TASK: DATABASE REFRESHMENT FROM PROD TO DEVELOPMENT/TEST/STAGE OR PPE

Example:

--@ PROD INSTANCE/SERVER : DELHI
--@ PROD DB: LithinDB_Prod

--@ PRODUCTION SQL LOGINS & SID's: PL1, PL2, PL3, PL4, PL5.
--@ PROD DB (LITHINDB) USERS LIST: PL1, PL2, PL3, PL4, PL5.
--@ PROD DB --> LithinDB_Prod --> DB User Roles
--@PL1 --> db_owner
--@PL2 --> db_owner
--@PL3 --> db_datawriter
--@PL4 --> db_owner
--@PL5 --> db_datawriter

/*******************************************************************************/
Example:

--@ DEVELOP INSTANCE/SERVER : CHENNAI
--@ DEVELOP DB: LithinDB_Dev

--@ Dev DB SQL LOGINS: DL1, DL2, DL3, DL4, DL5.
--@ Dev DB (LITHINDB) USERS LIST: DL1, DL2, DL3, DL4, DL5.
--@ Dev DB --> LithinDB_Dev --> DB User Roles
--@PL1 --> db_datawriter
--@PL2 --> db_datawriter
--@PL3 --> db_datawriter
--@PL4 --> db_datawriter
--@PL5 --> db_datawriter

/*******************************************************************************/

--DB Refrehment: TAKING PROD DB BACKUPS & RESTORING IT IN TEST/DEV/PPE(STAGE) INSTANCE AS PER
THE REQUEST.

--PART-1:

--1. @ PRODUCTION INSTANCE: TAKE COPY_ONLY BACKUP OF REQUIRED PROD DATABASE (EG: LithinDB_Prod)

--2. @ DEVELOPMENT/TEST: TAKE A BACKUP OF REQUIRED DEV/TEST DATABASE. (EG: LithinDB_Dev)

--3. @ DEV/TEST/STAGE OR PPE : TAKE SCRIPT BACKUP OF REQUIRED DB USERS. (EG: LithinDB_Dev)
-- (EG: TAKE LithinDB_Dev DB USERS SCRIPT)

--(i) using object explorer
--(ii)using copy database wizard.







DB REFRESHMENT (PROD TO DEV/TEST) BY PRAVEEN MADUPU (MB: +91-98661-30093)

DB REFRESHMENT (PROD TO DEV/TEST) BY PRAVEEN MADUPU (MB: +91-98661-30093)

--4. @ DEV/TEST/STAGE OR PPE: TAKE SCRIPT BACKUP OF DB USER ROLES OF LithinDB_Dev database.
--(EG: TAKE LithinDB_Dev DB USER ROLES SCRIPT)

--TSQL Script to Generate Database Role Permissions

use dbname
go
select
roles.name Role_Name,
members.name Member_Name,
'exec sp_addrolemember ['+
roles.name+
'], ['+
members.name+
']' Grant_Permission
from sys.database_principals members
inner join sys.database_role_members drm
on members.principal_id = drm.member_principal_id
inner join sys.database_principals roles
on drm.role_principal_id = roles.principal_id
where members.name <> 'dbo'

--Note: copy the output from the column 'Grant_Permission' and save it as 'DB User
Role Permissions' Script.

--5. @ DEV/TEST: TAKE SCRIPT BACKUP OF OBJECT LEVEL PERMISSIONS in Dev datbase. (EG:
LithinDB_Dev database)
--(OBJECT LEVEL PERMISSIONS SCRIPT)
--EG: SELECT, UPDATE, DELETE, DENY

--TSQL Script to Generate object level Permissions

SELECT CASE WHEN perm.state <> 'W' THEN perm.state_desc ELSE 'GRANT' END
+ SPACE(1) + perm.permission_name + SPACE(1) + 'ON ' +
QUOTENAME(USER_NAME(obj.schema_id)) + '.' + QUOTENAME(obj.name)
+ CASE WHEN cl.column_id IS NULL THEN SPACE(0) ELSE '(' +
QUOTENAME(cl.name) + ')' END
+ SPACE(1) + 'TO' + SPACE(1) + QUOTENAME(USER_NAME(usr.principal_id))
COLLATE database_default
+ CASE WHEN perm.state <> 'W' THEN SPACE(0) ELSE SPACE(1) + 'WITH GRANT
OPTION' END AS '--Object Level Permissions'
FROM sys.database_permissions AS perm
INNER JOIN
sys.objects AS obj
ON perm.major_id = obj.[object_id]
INNER JOIN
sys.database_principals AS usr
ON perm.grantee_principal_id = usr.principal_id
LEFT JOIN
sys.columns AS cl
ON cl.column_id = perm.minor_id AND cl.[object_id] = perm.major_id
ORDER BY perm.permission_name ASC, perm.state_desc ASC

--Note: Copy the output from the column 'Object Level Permissions' and save it as 'DB Object
Level Permissions' Script.



DB REFRESHMENT (PROD TO DEV/TEST) BY PRAVEEN MADUPU (MB: +91-98661-30093)

DB REFRESHMENT (PROD TO DEV/TEST) BY PRAVEEN MADUPU (MB: +91-98661-30093)

--PART-2:

--1. Check for the Orphan Users in the restored db (eg: LithinDB_Dev ) using the below script.

--exec sp_change_users_login 'report'

--2. If any orphan users found, then drop them from the restored db (as these users belongs to
prod db).
--(EG: drop db users in LithinDB_Dev database)
--Pl1, pl2,pl3,pl4,pl5 -- drop this db users in dev database (eg: LithinDB_Dev) as these are
from prod db which are orphan db users.

--3. Now re-create the dev db(eg: LithinDB_Dev) users using the db users backup script taken in
PART-1 (STEP-3).

--4. now fix the orphan users using the following script:

--TSQL Script to fix the orphan users manually one by one as follows:
--exec sp_change_users_login 'auto_fix','DL1'
--exec sp_change_users_login 'auto_fix','DL2'
--exec sp_change_users_login 'auto_fix','DL3'
--exec sp_change_users_login 'auto_fix','DL4'
--exec sp_change_users_login 'auto_fix','DL5'

or

--TSQL Script used to fix orphan users automatically

use LithinDB_Dev -- give your dev/test/stage db name here
go
DECLARE @username varchar(25)
DECLARE fixusers CURSOR
FOR
SELECT UserName = name FROM sysusers
WHERE issqluser = 1 and (sid is not null and sid <> 0x0)
and suser_sname(sid) is null
ORDER BY name
OPEN fixusers
FETCH NEXT FROM fixusers
INTO @username
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC sp_change_users_login 'update_one', @username, @username
FETCH NEXT FROM fixusers
INTO @username
END
CLOSE fixusers
DEALLOCATE fixusers

--5. Again check for any Orphan Users in the restored db (eg: LithinDB_Dev ) using the below
script.

--exec sp_change_users_login 'report'
-- if any orphan user still exists, then check whether the corresponding login (windows/SQL)
exists under SQL Server Security folder.
-- if the login does not exist, then drop the orphan user(which is prod db user) from the
current restored database.

DB REFRESHMENT (PROD TO DEV/TEST) BY PRAVEEN MADUPU (MB: +91-98661-30093)

DB REFRESHMENT (PROD TO DEV/TEST) BY PRAVEEN MADUPU (MB: +91-98661-30093)

--6. Now re-create the dev/test/ db user roles using the SCRIPT BACKUP OF DB USER ROLES taken
using PART-1 (STEP-4).

--7. Now re-create the dev/test db object level permission using the Script Backup of Object
level permissions from PART-1 (STEP-5).

Potrebbero piacerti anche