-- 恢复模式查看
SELECT name, recovery_model_desc  
   FROM sys.databases  
      WHERE name = 'model'; 
-- SIMPLE/FULL/BULK_LOGGED

如果数据库使用完整恢复模式或大容量日志恢复模式,
则必须足够频繁地备份事务日志,以保护数据和避免事务日志变满。 
这将截断日志,并且支持将数据库还原到特定时间点。

简单模式全备时会自动截断日志 -?-

BACKUP LOG DBNAME TO WITH NORECOVERY;
“结尾日志备份” 捕获尚未备份的任何日志记录(“结尾日志” ),以防丢失所做的工作并确保日志链完好无损。 
在将 SQL Server 数据库恢复到其最近一个时间点之前,必须先备份数据库的事务日志。 
结尾日志备份将是数据库还原计划中相关的最后一个备份。

-- 数据库完整备份:
 BACKUP DATABASE [GPOSDB]
 TO DISK='D:\FULLBACKUP.bak'
 WITH INIT
 go

-- 日志备份:
 BACKUP LOG [GPOSDB] TO  DISK = N'D:\LOGBACKUP.bak' 
 WITH  NO_TRUNCATE , NOFORMAT,  NAME = N'事务日志备份', 
 SKIP,  NORECOVERY ,  STATS = 10, CHECKSUM;

-- NORECOVERY: 备份活动日志(尾日志备份),使数据库进入还原状态
-- TRUNCATE: 截断过程只是做标记,以便重新使用旧日志记录使用过的空间
-- 日志备份完毕后,如果日志文件空间不够,则可以移去事务日志中不活动的部分
日志不活动:已备份,活动:未备份

-- 备份查看:
SELECT
 -- TOP 1
 MAX(backup_set_id)
 FROM  msdb..backupset
 WHERE database_name = N'MSDB'
 order by [backup_set_id] DESC ;

-- COPY ONLY
BACKUP DATABASE Sales TO DISK = 'E:\BAK\Sales_Copy.bak'
WITH COPY_ONLY;
仅复制备份是SQL Server独立于常规备份序列SQL Server的备份 通常,进行备份会更改数据库并影响其后备份的还原方式

-- MASTER 数据库恢复
启动实例到单用户模式
sqlcmd  -S<ComputerName>\<InstanceName
RESTORE DATABASE master FROM <backup_device> WITH REPLACE

-- 孤立用户问题
https://docs.microsoft.com/zh-cn/sql/sql-server/failover-clusters/troubleshoot-orphaned-users-sql-server?view=sql-server-ver15

查看:
sys.server_principals
sys.sql_logins
sys.sql_logins
sys.database_principals

创建:
CREATE LOGIN <login_name>   
WITH PASSWORD = '<use_a_strong_password_here>',  
SID = <SID>;
或关联:
ALTER USER <user_name> WITH Login = <login_name>; 

-- 密码修改:
ALTER LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>'; 

-- 将 SQL Server 数据库还原到某个时点(完整恢复模式)
http://blog.itpub.net/69950231/viewspace-2672372/

下面的示例将数据库还原到它在 12:00 AM  April 15, 2020 的状态,并显示涉及多个日志备份的还原操作。 
要还原的完整数据库备份 AdventureWorksBackups是设备上的第三个备份集 (FILE = 3)
第一个日志备份是第四个备份集 (FILE = 4)
第二个日志备份是第五个备份集 (FILE = 5)

RESTORE DATABASE AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=3, NORECOVERY;  

RESTORE LOG AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=4, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';  

RESTORE LOG AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=5, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';  
RESTORE DATABASE AdventureWorks WITH RECOVERY;   
GO

-- 将数据库还原到故障点(完整恢复模式)
http://blog.itpub.net/69950231/viewspace-2672720/

/* Example of restoring a to the point of failure */  
-- Step 1: Create a tail-log backup by using WITH NORECOVERY.

BACKUP LOG AdventureWorks2012  
   TO DISK = 'C:\AdventureWorks2012_Log.tail.bck'  
   WITH NORECOVERY;  
GO  
-- Step 2: Restore the full database backup.  
RESTORE DATABASE AdventureWorks2012  
   FROM DISK = 'C:\AdventureWorks2012_Data.bck'  
   WITH NORECOVERY;  
GO  
-- Step 3: Restore the first transaction log backup.  
RESTORE LOG AdventureWorks2012  
   FROM DISK = 'C:\AdventureWorks2012_Log.bck'  
   WITH NORECOVERY;  
GO  
-- Step 4: Restore the tail-log backup.  
RESTORE LOG AdventureWorks2012  
   FROM  DISK = 'C:\AdventureWorks2012_Log.tail.bck'  
   WITH NORECOVERY;  
GO  
-- Step 5: Recover the database.  
RESTORE DATABASE AdventureWorks2012  
   WITH RECOVERY;  
GO

-- SQLSERVER完整数据库还原(完整恢复模式)
http://blog.itpub.net/69950231/viewspace-2672222/

-- SQLSERVER完整数据库还原(简单恢复模式)
http://blog.itpub.net/69950231/viewspace-2672029/

-- sqlserver标记为正在还原的处理方法
restore database xxx with recovery

```sql SQLSERVER 数据迁移方式: 注意版本、权限和兼容性设置 分离--->附加 脱机--->附加 备份--->还原 导出--->导入 生成脚本后再执行 通过链接服务器导入

BCP:支持从高版本导入数据到低版本! bcp -w 使用Unicode nchar类型 EXEC sp_configure 'xp_cmdshell', 0 RECONFIGURE WITH OVERRIDE; GO

EXEC [master]..xp_cmdshell 'BCP TestDB_2008.dbo.T1 out E:\T1_02.txt -c -T' GO EXEC [master]..xp_cmdshell 'BCP "SELECT * FROM TestDB_2005.dbo.T1" queryout E:\T1_03.txt -c -T' GO

导入:(可以先删除索引再重建) BCP TestDB_2008.dbo.T1 in E:\T1_02.txt -c -T BULK INSERT dbo.T1 FROM 'E:\T1.txt' WITH ( FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n'
)