-- 恢复模式查看
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'
)