SQLServer备份恢复的总结-同名恢复与异名恢复

发布时间 2023-12-12 08:17:30作者: 济南小老虎

SQLServer备份恢复的总结


前言

GUI 搞一把. 命令行太多了也没人看
自己还能省点心

备份

备份数据库建议一定要选择: 备份选项中的

压缩->压缩备份

历史经验一个7.6G的数据库能够压缩到 1.5G
压缩比还是已非常可观的. 

同名恢复

1. 可以使用sa登录
2. 创建一个database, 同名恢复建议恢复为同一个名字
3. 右键选中数据库进行全量数据库的恢复处理.
4. 全库恢复就可以. 
5. 在数据库级别的安全性创建一个用户, 简单起见可以与数据库同名
6. 注意架构的地方选择上恢复的数据库名字
7. 同时在数据库角色位置,选择db_owner, 这个地方需要注意, 一定要选择新增加的数据库,不要选择其他的, 可能会报错可以忽略. 
8. 执行SQL将,系统级别的安全性下的用户与数据库架构关联. 
use databasename
exec sp_change_users_login 'update_one' ,'databasename','username'

异名恢复

与同名恢复的动作基本上一样, 区别是在最后第八步之前需要重新处理一下表的属主

第一步, 在数据库实例级别的安全性->架构下面增加一个架构. 简单期间一般 架构, 数据库名 , 用户名保持一致

然后执行如下SQL进行架构属主的更改. 
注意需要修改 三个有注释变量的名字. 

USE newdatabase;  --新数据库
DECLARE
	@TABLE SYSNAME;
DECLARE
	@SCHEMA SYSNAME;
DECLARE
	@new_schema SYSNAME;
SELECT
	@SCHEMA = 'oldusrname' --原有属主
SELECT
	@new_schema = 'newusrname' --新属主
DECLARE
	csr CURSOR FOR SELECT
	o.name,
	u.name 
FROM
	sys.objects o
	INNER JOIN sys.schemas u ON o.schema_id = u.schema_id 
WHERE
	o.type IN ( 'u', 'p', 'v', 'tf', 'fn', 'if' ) 
	AND u.name = @SCHEMA OPEN csr;
FETCH NEXT 
FROM
	csr INTO @TABLE, @SCHEMA;
WHILE
		@@FETCH_STATUS = 0 BEGIN
			EXEC ( 'ALTER SCHEMA ' + @new_schema + ' TRANSFER [' + @SCHEMA + '].[' + @TABLE + ']' );
		FETCH NEXT 
		FROM
			csr INTO @TABLE, @SCHEMA;
	
END CLOSE csr DEALLOCATE csr;

最后再进行 
use databasename
exec sp_change_users_login 'update_one' ,'databasename','username'