批处理(bat)实现SQLServer数据库备份与还原
SQLServer常见问题处理(数据库的备份与还原操作)
数据库备份与还原操作一、备份数据库操作(1) 打开企业管理器,按下图依次打开,然后右击要备份的数据库,按下图选中备份数据库(图1-1 示)。
图1-1(2) 点击删除,然后点击“添加”按钮 (图1-2示)。
图1-2(3) 系统弹出“选择备份目的”窗口,在“文件名(F):”栏中输入或选择备份路径(图1-3示)。
图1-3(4) 系统弹出“备份设置位置”对话框,选择备份路径并键入备份文件名(如:选择D:\DataBase\,文件名为:fjjr_jwgl1db061113。
图1-4示),并点击“确定”。
图1-4(5) 系统回到“SQL Server 备份”窗口,单击“确定”后,系统自动备份数据库,直到系统完成即可完成数据库备份操作。
图1-5二、还原数据库操作(1) 打开企业管理器,按下图依次打开,然后右击要备份的数据库,按下图选中“还原数据库(R)”(图2-1示)。
图2-1(2) 系统弹出“还原数据库”窗口,选择“从设备(M)”单选框(图2-2示)图2-2 (3) 单击“选择设备(E)...”按钮(图2-3示)。
图2-3(4) 系统弹出“选择还原设备”窗口,在此窗口中单击“添加(A)...”按钮(图2-4示)。
图2-4(5) 系统弹出“选择还原目的”窗口,在“文件名(F):”文本框中输入还原目的文件或单击“...”按钮(图2-5示)。
图2-5(6) 单击“...”后,系统弹出“备份设备位置”对话框,选择正确的备份数据库文件 (图2-6示)。
图2-6(7) 依次确定到“还原数据库”窗口,单击“选项”选项卡(图2-7示)图2-7(8) 确认“移至物理文件名”所在具体位置,并选中“在现有数据库上强制还原(F)”复选框,单击“确定”按钮,系统自动还数据数据库,等待直至数据还原完毕(图2-8示)图2-8。
SQLServer数据库的备份与还原以及在项目中是怎样去实现的
SQLServer数据库的备份与还原以及在项目中是怎样去实现的2012-03-13 11:39:21--备份的设备有2种(临时设备与永久设备) 注意:默认下的备份类型是完整备份--第一种:backup database Company to disk='d:\backup\1.bak'--临时设备/*假如这里不指定明确路径的话(如:backup database company to disk='backup\1.bak'),那么备份的数据库将会自动备份到系统指定的目录下:C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup*/--第二种:/*第一步首先建立永久备份设备(系统自带的存储过程)在master 数据库中就会找到如图1:*/--执行语句如:exec sp_addumpdevice 'disk','disk_company','D:\2.bak'--永久设备--执行结果就会出现如图2:--多了一个备份设备:disk_company--第二步:backup database company to disk_company with noinit --默认表示追加(不覆盖) --好了备份完成!--现在我来还原数据库(我用的是第一种方法备份的,因此我要第一种方法来还原) ,--原先的数据如图3:--通过我手动删除几个表后的数据库如图4:--执行语句:restore database Company from disk='d:\backup\1.bak' --注意备份到哪里去就要从还原哪里来--执行后会出现什么呢?请看错误消息:/*消息 3159,级别 16,状态 1,第 1 行尚未备份数据库 "company" 的日志尾部。
SQLServer——SQLServer备份与恢复
SQLServer——SQLServer备份与恢复1、动手备份2、动手还原3、T-SQL语句备份及还原BACKUP DATABASERESTORE FILELISTONLY FROM DISK代码示例-- 打开设置当前数据库use mastergo-- 默认创建数据库create database SQLDBgo-- 打开设置当前数据库use SQLDBgoSQLDB-- 在当前数据库创建表create table sqltable(empid char(20) not null primary key,empname char(8) not null,empbd datetime not null default getdate())go-- 将数据信息插入到表中insert into sqltable(empid,empname) values('101','张三') insert into sqltable(empid,empname) values('102','李四') insert into sqltable(empid,empname) values('103','王五') insert into sqltable(empid,empname) values('104','赵三') insert into sqltable(empid,empname) values('105','周北') go-- 查询输出表中所有的记录select *from sqltablego-- 将数据库备份到磁盘设备use SQLDBgobackup database SQLDBto disk='d:\SQLDB.bak'with format,medianame='SQLDB',name='full backup of SQLDB'go-- 还原数据库文件use mastergorestore database SQLDBss from disk='d:\SQLDB.bak' go。
SQLServer2019数据库备份与还原脚本(批量备份)
SQLServer2019数据库备份与还原脚本(批量备份)前⾔最近公司服务器到期,需要进⾏数据迁移,⽽数据库属于多⽽繁琐,通过图形化界⾯⼀个⼀个备份所需时间成本很⼤,所以想着写⼀个sql脚本来执⾏。
开始数据库单个备份数据库批量备份数据库还原数据库还原报错问题记录总结1.数据库单个备份图形化界⾯备份这⾥就不展⽰了,可以⾃⾏百度,下⾯直接贴代码USE MASTERIF EXISTS ( SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[BackupDataProc]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )DROP PROCEDURE BackupDataProcgocreate proc BackupDataProc@FullName Varchar(200)--⼊参(数据库名)asbeginDeclare @FileFlag varchar(50)Set @FileFlag='C:\myfile\database\'+@FullName+'.bak'--备份到哪个路径(C:\myfile\database\)根据⾃⼰需求来定BackUp DataBase @FullName To Disk=@FileFlag with init--核⼼代码endexec BackupDataProc xxx执⾏成功后便会⽣成⼀个.bak⽂件到指定⽂件夹中,如图2.数据库批量备份(时间有点长,请等待)USE MASTERif exists(SELECT * FROM sys.types WHERE name = 'AllDatabasesNameType')drop type AllDatabasesNameTypegocreate type AllDatabasesNameType as table--⾃定义表类型⽤于存储数据库名称(rowNum int ,name nvarchar(60),filename nvarchar(300))goIF EXISTS ( SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[BachBackupDataProc]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )DROP PROCEDURE BachBackupDataProcgocreate proc BachBackupDataProc@filePath nvarchar(300)--⼊参,备份时的⽬标路径asbeginDeclare @AllDatabasesName as AllDatabasesNameType --⽤于存储系统中的数据库名Declare @i int --循环变量insert into @AllDatabasesName(name,filename,rowNum) select name,filename,ROW_NUMBER() over(order by name) as rowNum from sysdatabases where name not in('master','tempdb','model','msdb') --赋值set @i =1--循环备份数据库while @i <= (select COUNT(*) from @AllDatabasesName)beginDeclare @FileFlag varchar(500)Declare @FullName varchar(50)Select @FullName =name from @AllDatabasesName where rowNum = @iSet @FileFlag=@filePath+@FullName+'.bak'BackUp DataBase @FullName To Disk=@FileFlag with initset @i = @i + 1endendexec BachBackupDataProc 'C:\myfile\database\'执⾏结果效果如下图:3.数据库还原IF EXISTS ( SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[ReductionProc]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )DROP PROCEDURE ReductionProcgocreate proc ReductionProc@Name nvarchar(200)--⼊参数据库名称asbeginDeclare @DiskName nvarchar(500)Declare @FileLogName nvarchar(100)Declare @FileFlagData nvarchar(500)Declare @FileFlagLog nvarchar(500)Set @FileLogName = @Name + '_log'Set @DiskName = 'C:\myfile\database\'+@Name+'.bak' ---(源)备份⽂件路径Set @FileFlagData='C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\'+@Name+'.mdf'---(⽬标)指定数据⽂件路径Set @FileFlagLog='C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\'+@FileLogName+'.ldf'---⽬标)指定⽇志⽂件路径RESTORE DATABASE @Name --为待还原库名FROM DISK = @DiskName ---备份⽂件名WITH MOVE @Name TO @FileFlagData, ---指定数据⽂件路径MOVE @FileLogName TO @FileFlagLog, ---指定⽇志⽂件路径STATS = 10, REPLACEendgoexec ReductionProc xxx执⾏后便能还原库(我是拿这三个库做测试,截的图可能没什么变化,你们可以尝试下)4.数据库还原报错问题记录当然还原的过程可能会遇到⼀些问题,⽐如:1.版本不⼀样2.SQL Sql 逻辑⽂件'XXXXX ' 不是数据库'YYY'的⼀部分。
SQLSERVER大数据库备份与还原
一、SQL数据库的备份:1、依次打开开始菜单→程序→Microsoft SQL Server 2008 →SQL Server Management Stud io →数据库:Dsideal_school_db既是我们需要备份的学籍数据库图(1)2、选择要备份的数据库“Dsideal_school_db”,点击鼠标右键→任务→备份,如图(2):图(2)3、在打开的“备份数据库—Dsideal_school_db”对话框中,先点击删除,然后点击“添加”,如图(3):图(3)4、在弹出的“选择备份目标”对话框中,如图(4)图(4)5、选择好备份的路径(如D盘的-学籍-数据库备份文件夹中),文件类型选择“所有文件”,“文件名”那个位置填写上您要备份的数据库的名字(最好在您备份的数据库的名字后面加上日期,以方便以后查找),之后连续点击“确定”按钮即可完成数据库的备份操作,如图(5):图(5二、SQL数据库的还原:1、选择您要还原的数据库“Dsideal_school_db”,点击鼠标右键→任务→还原→数据库,如图(6):图(6)2、在出现的“还原数据库—school_web_db”对话框中选择“源设备”,然后点击后面的“…”按钮,如图(7):图(7)3、在出现的“指定备份”对话框中,点击“添加”按钮,如图(8):图(8)4、找到数据库备份的路径,选择您所要还原的数据库“Dsideal_school_db”(注意:文件类型选择所有文件),然后连续“两次”点击“确定”按钮,如图(9):图(9)5、在出现的“还原数据库—Dsideal_school_db”对话框中,勾选上“选择用户还原的备份集”下的数据库前的复选框,如图(10)图(10)6、然后选择“选项”,勾选上“覆盖现有数据库”,如图(11):图(11)三、还原数据库问题解决方案在还原数据库“Dsideal_school_db”时,有时会遇见上图中的问题“因为数据库正在使用,所以无法获得对数据库的独占访问权”,此时我们可以按照以下步骤解决此问题1、右键数据库“Dsideal_school_db”,然后选择“属性”,如下图2、在出现的“数据库属性—Dsideal_school_db ”对话框中,选择“选项”,在“其他选项”下的“状态”中找到“限制访问”。
Bat脚本备份sqlserver表结构、存储过程、函数、指定表数据
Bat脚本备份sqlserver表结构、存储过程、函数、指定表数据Bat脚本备份sqlserver 表结构、存储过程、指定表数据:@echo offcd /d %~dp0::备份表结构、存储过程和部分配置表的数据set LogFile=report.logset servername="192.168.43.9"set DBname="TEST"set User="sa"set Password="123456*"echo Deployed Time: %date% %time% >> %LogFile%echo Server Name: %servername% >> %LogFile%echo DB Name: %DBname% >> %LogFile%set zip7=C:\Program Files\7-Zip\7z.exe::需要压缩的⽂件set Files=back\%date:~0,4%%date:~5,2%%date:~8,2%_*.sql::压缩后的⽂件名set curdate=%date:~0,4%-%date:~5,2%-%date:~8,2%echo -------------------------------备份表结构开始------------------------------------------------>> %LogFile%Sqlcmd -S %servername% -d %DBname% -U %User% -P %Password% -i table.sql -y 0 -u -X -o back\%date:~0,4%%date:~5,2%%date:~8,2%_table.sqlecho -------------------------------备份表结构结束------------------------------------------------>> %LogFile%echo -------------------------------备份表存储开始------------------------------------------------>> %LogFile%Sqlcmd -S %servername% -d %DBname% -U %User% -P %Password% -i usp.sql -y 0 -u -X -o back\%date:~0,4%%date:~5,2%%date:~8,2%_usp.sqlecho -------------------------------备份表存储结束------------------------------------------------>> %LogFile%echo -------------------------------备份HD_ZBMX_HZ数据开始------------------------------------------------>> %LogFile%Sqlcmd -S %servername% -d %DBname% -U %User% -P %Password% -i HD_ZBMX_HZ.sql -y 0 -u -X -o back\%date:~0,4%%date:~5,2%%date:~8,2%_HD_ZBMX_HZ_data.sql echo -------------------------------备份HD_ZBMX_HZ数据结束------------------------------------------------>> %LogFile%::echo "%Files%"::压缩"%zip7%" a -tzip "back\%curdate%.zip" "%Files%"::删除DEL /Q "%Files%"::删除超过30天的备份--start--FORFILES /P back\ /M *.zip -d -30 /c "cmd /c del @path"::pauseexit配置⽂件table.sqlset nocount ondeclare@tablenames varchar(max),@tablename varchar(max)beginselect @tablenames =''/*定义游标*/declare table_sql cursor forSELECT name FROM sysobjects where xtype='U' order by nameopen table_sqlfetch next from table_sql into @tablenamewhile @@FETCH_STATUS=0beginset @tablenames = @tablenames+@tablename+','--print '---1-->'+@tablenames-- EXEC sp_gettext 'Address_Base'fetch next from table_sql into @tablenameendclose table_sqldeallocate table_sqlEXEC sp_gettext @tablenamesend配置⽂件:usp.sqlset nocount ondeclare@tablenames varchar(max),@tablename varchar(max)beginselect @tablenames =''/*定义游标*/declare table_sql cursor forSELECT name FROM sysobjects where xtype='P' order by nameopen table_sqlfetch next from table_sql into @tablenamewhile @@FETCH_STATUS=0beginset @tablenames = @tablenames+@tablename+','--print '---1-->'+@tablenames-- EXEC sp_gettext 'Address_Base'fetch next from table_sql into @tablenameendclose table_sqldeallocate table_sqlEXEC sp_gettext @tablenamesend配置⽂件:HD_ZBMX_HZ.sqlset nocount ondeclare@tablenames varchar(max),@tablename varchar(max)beginexec UspOutputData 'HD_ZBMX_HZ'end对应库⾥需要部署的存储和函数:sp_gettextif exists (select1from sysobjects where id =object_id('sp_gettext') and type ='P')drop proc sp_gettextgocreate procedure[sp_gettext]@name VARCHAR(max) =NULL, @identity BIT=1, @index TINYINT=2-- 0不创建索引 1不创建表 2创建索引, @new BIT=0as/*[版本号]1.0.0.0.0[创建时间]2019.09.10[作者][版权][描述][功能说明]获取建表语句,存储语句[参数说明][返回值][结果集、排序][调⽤的usp]sp_gettext 'DIM_KSXX,DIM_YYXX'sp_gettext 'usp_dim_ksxx'[调⽤实例][修改记录]*/SET ARITHABORT ON;SET CONCAT_NULL_YIELDS_NULL ON;SET QUOTED_IDENTIFIER ON;SET ANSI_NULLS ON;SET ANSI_PADDING ON;SET ANSI_WARNINGS ON;SET NUMERIC_ROUNDABORT OFF;DECLARE@crlf CHAR(2);SET@crlf=CHAR(13) +CHAR(10);DECLARE@objid INT;DECLARE@results TABLE (definition NVARCHAR(max))DECLARE@objects TABLE (id VARCHAR(100), type CHAR(2));WITH db1(dbname)AS (SELECT VALUE AS dbnameFROM Split(@name,',')),db2 AS (SELECT--CASE WHEN CHARINDEX('.', dbname) = 0 AND CHARINDEX('[', dbname) = 0 THEN '[cn9c080].' + QUOTENAME(dbname)-- ELSE dbname-- END AS dbnameCASE WHEN o.[object_id]IS NULL AND tt.[name]IS NULL THEN'%'ELSE LTRIM(ISNULL(o.[object_id],tt.[type_table_object_id])) END AS object_id,CASE[db1].[dbname]WHEN'tables'THEN'U'WHEN'procs'THEN'P'elseo.[type]END typeFROM db1left JOIN sys.[objects] o ON (PARSENAME(db1.[dbname],1) = o.[name]OR OBJECT_ID('[cn9c080].'+QUOTENAME(dbname)) = o.[object_id])LEFT JOIN sys.table_types tt ON db1.dbname=)INSERT INTO@objectsSELECT*FROM db2 ;WITH ColumnDefsAS (SELECT TableObj = c.[object_id], ColSeq = c.column_id,ColumnDef =QUOTENAME() +''+CASE WHEN c.is_computed =1THEN'as '+COALESCE(k.[definition], '') +CASEWHEN k.is_persisted =1THEN' PERSISTED'+CASEWHEN k.is_nullable =0THEN' NOT NULL'ELSE''ENDELSE''ENDELSE DataType +CASE WHEN DataType IN ('decimal','numeric')THEN'('+CAST(c.precision AS VARCHAR(10)) +CASEWHEN c.scale <>0THEN','+CAST(c.scale AS VARCHAR(10))ELSE''END+')'WHEN DataType IN ('char','varchar','nchar','nvarchar','binary','varbinary')THEN'('+CASEWHEN c.max_length =-1THEN'max'ELSE CASEWHEN DataType IN ('nchar','nvarchar')THEN CAST(c.max_length /2AS VARCHAR(10))ELSE CAST(c.max_length AS VARCHAR(10))ENDEND+')'WHEN DataType ='float'AND c.precision<>53THEN'('+CAST(c.precision AS VARCHAR(10)) +')'WHEN DataType IN ('time','datetime2','datetimeoffset') AND c.scale <>7THEN'('+CAST(c.scale AS VARCHAR(10)) +')'ELSE''ENDEND+CASE WHEN c.is_identity =1AND@identity=1THEN' IDENTITY('+CAST(IDENT_SEED(QUOTENAME(OBJECT_SCHEMA_NAME(c.[object_id])) +'.'+QUOTENAME(OBJECT_NAME(c.[object_id]))) AS VARCHAR(30)) +ELSE''END+CASE WHEN c.is_rowguidcol =1THEN' ROWGUIDCOL'ELSE''END+CASE WHEN c.xml_collection_id >0THEN' (CONTENT '+QUOTENAME(SCHEMA_NAME(x.schema_id)) +'.'+QUOTENAME() +')'ELSE''END+CASE WHEN c.is_computed =0AND UserDefinedFlag =0THEN CASEWHEN c.collation_name <>CAST(DATABASEPROPERTYEX(DB_NAME(),'collation') AS NVARCHAR(128))THEN' COLLATE '+ c.collation_nameELSE''ENDELSE''END+CASEWHEN c.is_computed =0THEN CASEWHEN c.is_nullable =0THEN' NOT'ELSE''END+' NULL'ELSE''END+CASEWHEN c.default_object_id >0AND ISNULL(@new,0) =0THEN' CONSTRAINT '+QUOTENAME() +' DEFAULT '+COALESCE(d.[definition],'')WHEN c.default_object_id >0AND ISNULL(@new,0) =1THEN' DEFAULT '+COALESCE(d.[definition],'')ELSE''ENDFROM sys.columns cCROSS APPLY (SELECT DataType = TYPE_NAME(er_type_id), UserDefinedFlag =CASE WHEN c.system_type_id = er_type_id THEN0ELSE1END) F1LEFT JOIN sys.default_constraints d ON c.default_object_id = d.[object_id]LEFT JOIN puted_columns k ON c.[object_id]= k.[object_id]AND c.column_id = k.column_idLEFT JOIN sys.xml_schema_collections x ON c.xml_collection_id = x.xml_collection_id),IndexDefsAS (SELECT TableObj = i.[object_id], IxName =QUOTENAME(+CASE WHEN@new=1THEN'_'+LEFT(NEWID(),4) ELSE''end), IxPKFlag = i.is_primary_key, IxType =CASE WHEN i.is_primary_key =1THEN'PRIMARY KEY 'WHEN i.is_unique =1THEN'UNIQUE 'ELSE''END+LOWER(type_desc),IxDef ='('+ IxColList +')'+COALESCE(' INCLUDE ('+ IxInclList +')', ''),IxOpts = IxOptListFROM sys.indexes iLEFT JOIN sys.stats s ON i.index_id = s.stats_id AND i.[object_id]= s.[object_id]CROSS APPLY (SELECT STUFF((SELECT CASE WHEN i.is_padded =1THEN', PAD_INDEX=ON'ELSE''END+CASE WHEN i.fill_factor <>0THEN', FILLFACTOR='+CAST(i.fill_factor AS VARCHAR(10))ELSE''END+CASE WHEN i.ignore_dup_key =1THEN', IGNORE_DUP_KEY=ON'ELSE''END+CASE WHEN s.no_recompute =1THEN', STATISTICS_RECOMPUTE=ON'ELSE''END+CASE WHEN i.allow_row_locks =0THEN', ALLOW_ROW_LOCKS=OFF'ELSE''END+CASE WHEN i.allow_page_locks =0THEN', ALLOW_PAGE_LOCKS=OFF'ELSE''END), 1, 2, '')) F_IxOpts (IxOptList)CROSS APPLY (SELECT STUFF((SELECT','+QUOTENAME() +CASE WHEN ic.is_descending_key =1AND i.type <>3THEN' DESC'WHEN ic.is_descending_key =0AND i.type <>3THEN' ASC'ELSE''ENDFROM sys.index_columns icJOIN sys.columns c ON ic.[object_id]= c.[object_id]AND ic.column_id = c.column_idWHERE ic.[object_id]= i.[object_id]AND ic.index_id = i.index_id AND ic.is_included_column =0ORDER BY ic.key_ordinalFOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 1, '')) F_IxCols (IxColList)CROSS APPLY (SELECT STUFF((SELECT','+QUOTENAME()FROM sys.index_columns icJOIN sys.columns c ON ic.[object_id]= c.[object_id]AND ic.column_id = c.column_idWHERE ic.[object_id]= i.[object_id]AND ic.index_id = i.index_id AND ic.is_included_column =1ORDER BY ic.key_ordinalFOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 1, '')) F_IxIncl (IxInclList)WHERE i.type_desc <>'HEAP'),FKDefsAS (SELECT TableObj = f.parent_object_id, FKName =QUOTENAME(),FKRef =QUOTENAME(OBJECT_SCHEMA_NAME(f.referenced_object_id)) +'.'+QUOTENAME(OBJECT_NAME(f.referenced_object_id)),FKColList = ParentColList, FKRefList = RefColList,FKDelOpt =CASE f.delete_referential_actionWHEN1THEN'CASCADE'WHEN2THEN'SET NULL'WHEN3THEN'SET DEFAULT'END, FKUpdOpt =CASE f.update_referential_actionWHEN1THEN'CASCADE'WHEN2THEN'SET NULL'WHEN3THEN'SET DEFAULT'END, FKNoRepl = f.is_not_for_replicationFROM sys.foreign_keys fCROSS APPLY (SELECT STUFF((SELECT','+QUOTENAME()FROM sys.foreign_key_columns kJOIN sys.columns c ON k.parent_object_id = c.[object_id]AND k.parent_column_id = c.column_idWHERE k.constraint_object_id = f.[object_id]ORDER BY constraint_column_idFOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 1, '')) F_Parent (ParentColList)CROSS APPLY (SELECT STUFF((SELECT','+QUOTENAME()FROM sys.foreign_key_columns kJOIN sys.columns c ON k.referenced_object_id = c.[object_id]AND k.referenced_column_id = c.column_idWHERE k.constraint_object_id = f.[object_id]ORDER BY constraint_column_idFOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 1, '')) F_Ref (RefColList))INSERT INTO@results ([definition])SELECT--TableName,[definition]+CHAR(10)+'GO'+CHAR(10) AS definitionFROM sys.tables tINNER JOIN@objects o ON(t.[object_id]LIKE o.[id]AND o.[type]='U')CROSS APPLY (SELECT TableName =QUOTENAME(OBJECT_SCHEMA_NAME(t.[object_id])) +'.'+QUOTENAME(OBJECT_NAME(t.[object_id]))) F_NameCROSS APPLY (SELECT STUFF((SELECT@crlf+' ,'+ ColumnDefFROM ColumnDefsWHERE TableObj = t.[object_id]ORDER BY ColSeqFOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 5, '')) F_Cols (ColumnList)CROSS APPLY (SELECT STUFF((SELECT@crlf+' ,CONSTRAINT '+QUOTENAME(name) +' CHECK '+CASEWHEN is_not_for_replication =1THEN'NOT FOR REPLICATION 'ELSE''END+COALESCE([definition],'')FROM sys.check_constraintsWHERE parent_object_id = t.[object_id]FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 2, '')) F_Const (ChkConstList)CROSS APPLY (SELECT STUFF((SELECT@crlf+' ,CONSTRAINT '+ IxName +''+ IxType +''+ IxDef +COALESCE(' WITH ('+ IxOpts +')','')FROM IndexDefsWHERE TableObj = t.[object_id]AND IxPKFlag =1FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 2, '')) F_IxConst (IxConstList)CROSS APPLY (SELECT STUFF((SELECT@crlf+' ,CONSTRAINT '+ FKName +' FOREIGN KEY '+'('+ FKColList +')'+' REFERENCES '+ FKRef +' ('+ FKRefList +')'+CASEWHEN FKDelOpt IS NOT NULLTHEN' ON DELETE '+ FKDelOptELSE''END+CASEWHEN FKUpdOpt IS NOT NULLTHEN' ON UPDATE '+ FKUpdOptELSE''END+CASEWHEN FKNoRepl =1THEN' NOT FOR REPLICATION'ELSE''ENDFROM FKDefsWHERE TableObj = t.[object_id]FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 2, '')) F_Keys (FKConstList)CROSS APPLY (SELECT STUFF((SELECT@crlf+'CREATE '+ IxType +' INDEX '+ IxName +' ON '+ TableName +''+ IxDef +COALESCE(' WITH ('+ IxOpts +')','')FROM IndexDefsWHERE TableObj = t.[object_id]AND IxPKFlag =0FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 2, '')) F_Indexes (IndexList)CROSS APPLY (SELECT[definition]=( SELECT CASE WHEN@index<>1THEN'CREATE TABLE '+ TableName +@crlf+'('+@crlf+''+ ColumnList +COALESCE(@crlf+ ChkConstList,'') +COALESCE(@crlf+ IxConstList,'') +COALESCE(@crlf+ FKConstList,'') +@crlf+')'+@crlfELSE''END+CASE WHEN@index<>0THEN COALESCE(@crlf+ IndexList, '')ELSE''ENDFOR XML PATH(''), TYPE).value('.', 'nvarchar(max)')) F_LinkWHERE t.[is_ms_shipped]=0AND[definition]<>'';-- 视图/过程/函数/触发器INSERT INTO@results ([definition])SELECT--QUOTENAME(object_schema_name(m.object_id))+'.'+ QUOTENAME(object_name(m.object_id)) AS [name],o.type,m.definition+CHAR(10)+'GO'+CHAR(10) AS definitionFROM sys.sql_modules mINNER JOIN sys.objects o ON m.object_id= o.object_idINNER JOIN@objects a ON(m.[object_id]LIKE a.[id]AND a.[type]<>'U');-- 字段说明insert into@results ([definition])select'EXEC sys.sp_addextendedproperty @name=N''MS_Description'', @value=N'''+cast(ep.[value]as varchar(100))+''', @level0type=N''SCHEMA'',@level0name=N'''+schema_name(schema_id)+''', @level1type=N''TABLE'',@level1name=N'''+t.[name]+''', @level2type=N''COLUMN'',@level2name=N'''+c.[name]+''''+CHAR(10)+'GO'+CHAR(10)FROM sys.tables AS tINNER JOIN sys.columns AS c ON t.object_id= c.object_idLEFT JOIN sys.extended_properties AS ep ON ep.major_id = c.object_id AND ep.minor_id = c.column_idINNER JOIN@objects o ON(t.[object_id]LIKE o.[id]AND o.[type]='U')WHERE ep.class =1SELECT*FROM@results;goSplitif exists (select*from sys.objects where object_id=OBJECT_ID(N'[dbo].[Split]') and type in (N'FN', N'IF', N'TF', N'FS', N'FT'))drop function[dbo].[Split]goCREATE FUNCTION[dbo].[Split](@Text VARCHAR(max),@Sign NVARCHAR(4000))RETURNS@tempTable TABLE(id INT IDENTITY(1,1)PRIMARY KEY,[VALUE]NVARCHAR(4000))ASBEGIN-- select [dbo].[Split]('1,2',',')DECLARE@StartIndex INT--开始查找的位置DECLARE@FindIndex INT--找到的位置DECLARE@Content VARCHAR(4000)--找到的值--初始化⼀些变量SET@StartIndex=1--T-SQL中字符串的查找位置是从1开始的SET@FindIndex=0--开始循环查找字符串逗号WHILE(@StartIndex<=LEN(@Text))BEGIN--查找字符串函数CHARINDEX第⼀个参数是要找的字符串--第⼆个参数是在哪⾥查找这个字符串--第三个参数是开始查找的位置--返回值是找到字符串的位置SELECT@FindIndex=CHARINDEX(@Sign,@Text,@StartIndex)--判断有没找到没找到返回0IF(@FindIndex=0OR@FindIndex IS NULL)BEGIN--如果没有找到者表⽰找完了SET@FindIndex=LEN(@Text)+1END--截取字符串函数SUBSTRING第⼀个参数是要截取的字符串--第⼆个参数是开始的位置--第三个参数是截取的长度--@FindIndex-@StartIndex表⽰找的的位置-开始找的位置=要截取的长度--LTRIM和RTRIM是去除字符串左边和右边的空格函数SET@Content=LTRIM(RTRIM(SUBSTRING(@Text,@StartIndex,@FindIndex-@StartIndex)))--初始化下次查找的位置SET@StartIndex=@FindIndex+1--把找的的值插⼊到要返回的Table类型中INSERT INTO@tempTable([VALUE])VALUES(@Content)ENDRETURNENDgoUspOutputDataif exists (select1from sysobjects where id =object_id('UspOutputData') and type ='P')drop proc UspOutputDatagoCREATE PROCEDURE pOutputData@tablename sysnameASdeclare@column varchar(1000)declare@columndata varchar(1000)declare@sql varchar(4000)declare@xtype tinyintdeclare@name sysnamedeclare@objectId intdeclare@objectname sysnamedeclare@ident intset nocount onif@tablename='HD_ZBMX_HZ'-- HD_ZBMX_HZ 特殊处理beginset nocount onselect'insert HD_ZBMX_HZ(zb_id,zb_name,sql_start,sql_middle,sql_end,sql_text,tqsql_text,jlzt,memo,dependindex,orderno,sql_text_first,proc_name,zbzt,ysfs,kslx,fact_table,fact_dlz,condition,kxwdz,gspz,hqsql_text,dlzgs,dylx) values( returnendset@objectId=object_id(@tablename)if@objectId is null-- 判断对象是否存在beginprint'The object not exists'returnendset@objectname=rtrim(object_name(@objectId))if@objectname is null or charindex(@objectname,@tablename)=0--此判断不严密beginprint'object not in current database'returnendif OBJECTPROPERTY(@objectId,'IsTable') <>1-- 判断对象是否是tablebeginprint'The object is not table'returnendselect@ident=status&0x80from syscolumns where id =@objectId and status&0x80=0x80if@ident is not nullprint'SET IDENTITY_INSERT '+@tablename+' ON'declare syscolumns_cursor cursorfor select ,c.xtype from syscolumns c where c.id=@objectId order by c.colidopen syscolumns_cursorset@column=''set@columndata=''fetch next from syscolumns_cursor into@name,@xtypewhile@@fetch_status<>-1beginif@@fetch_status<>-2beginif@xtype not in(189,34,35,99,98) --timestamp不需处理,image,text,ntext,sql_variant 暂时不处理beginset@column=@column+case when len(@column)=0then''else','end+@nameset@columndata=@columndata+case when len(@columndata)=0then''else','','','end+case when@xtype in(167,175) then'''''''''+'+@name+'+'''''''''--varchar,charwhen@xtype in(231,239) then'''N''''''+'+@name+'+'''''''''--nvarchar,ncharwhen@xtype=61then'''''''''+convert(char(23),'+@name+',121)+'''''''''--datetimewhen@xtype=58then'''''''''+convert(char(16),'+@name+',120)+'''''''''--smalldatetimewhen@xtype=36then'''''''''+convert(char(36),'+@name+')+'''''''''--uniqueidentifierelse@name endendendfetch next from syscolumns_cursor into@name,@xtypeendclose syscolumns_cursordeallocate syscolumns_cursorset@sql='set nocount on select ''insert '+@tablename+'('+@column+') values(''as ''v1'','+@columndata+','')'' from '+@tablename --print '--'+@sql--print @columndata--print @columnexec(@sql)if@ident is not nullprint'SET IDENTITY_INSERT '+@tablename+' OFF'GO。
Sqlserver数据库备份与还原
Sqlserver数据库备份与还原⼀、数据库存储概述1、数据⽂件类型· Primary data files:每个数据库都有⼀个单独的主要数据⽂件,默认以.mdf扩展名。
主要数据⽂件不仅包含数据信息,还包含与该数据库结构相关的信息。
创建数据库时,数据库结构相关信息不仅存在于master数据库中,同时还包含在primary data file上.· Secondary data files⼀个数据库可以有⼀个或者多个⼆级数据⽂件,默认以.ndf为扩展名。
⼀般来说⼆级数据⽂件并不是必须的,因为⼆级数据⽂件不包含⽂件位置等信息。
· Transaction logs: 数据库必须⾄少有⼀个事务⽇志⽂件,默认以.ldf为扩展名。
⽇志是整个数据库的命脉,事务⽇志不可读的话,将⽆法对数据库进⾏任何操作。
当你在数据库上进⾏数据操作时,数据并不是直接写⼊数据⽂件,⽽是先将相关操作信息写⼊事务⽇志⽂件。
当⼀个事务结束时,该事务被标记为已提交,但这也并不意味着数据从⽇志⽂件写⼊了数据⽂件中。
⼀个标记为已提交的事务仅仅意味着所有与该事务相关的元素已经成功完成。
The buffer cache may be updated, but not necessarily the data file.检查点(checkpoint)会周期性的发⽣。
检查点发⽣时,是确认所有已提交的事务,不管是在buffer cache或者事务⽇志中,都被写⼊相关的数据⽂件中。
检查点(checkpoint)可以通过以下⽅式来触发:1、显⽰调⽤checkpoint命令;2、Recover Interval 实例设置的周期达到(⽤来标识多久发⽣⼀次checkpoint)3、做了数据库备份(在简单模式下);4、数据库⽂件结构被改变(在简单模式下);5、数据库引擎被结束。
⼀般来说,写数据的过程是由系统⾃动完成的,如下图所⽰,但数据并不是直接写⼊.mdf或者.ndf ⽂件中,⽽是先将有关变化写⼊事务⽇志中,这也是数据库中的write-ahead机制。
sqlserver数据库的备份与还原——完整备份与还原
sqlserver数据库的备份与还原——完整备份与还原sqlserver提供四种数据库备份⽅式
完整备份:备份整个数据库的所有内容包括书屋和⽇志
差异备份:只备份上次完整备份后更⾼的数据部分
事务⽇志备份:只备份事务⽇志⾥的内容
⽂件或⽂件组备份:只备份⽂件或⽂件组中的某些⽂件
在数据库完整备份期间,sqlserver做⼀下⼯作:
备份数据以及数据库中的所有表的结构和相应的⽂件结构
备份在备份期间发⽣的所有活动
备份在事务⽇志中未确认的事务
备份过程:
右击要备份的数据库--->任务--->备份
可以选择备份类型以及备份⽂件的存放位置。
还原过程;
在还原数据库的时候需要将原数据库删除,然后单击数据库--->还原数据库
将源选择为设备,然后选择备份⽂件的存储位置,添加进去,然后填写上⽬标⽂件名,点击确定即可。
SQLServer数据库的备份和恢复方法
SQLServer数据库的备份和恢复方法作为一名数据库管理员,数据库的备份和恢复是非常重要的工作之一。
数据库是企业中最重要的信息资产之一,如果因为故障或其他原因导致数据丢失,会给企业带来不可估量的损失。
为了避免这种情况的发生,我们需要定期备份数据库,并且掌握好相应的恢复方法。
一、备份方法1、全备份全备份,即备份整个数据库,包括数据文件、事务日志和所有的元数据信息。
全备份是最完整的一种备份方式,备份出来的文件可以还原整个数据库。
全备份的方法和语法如下:BACKUP DATABASE database_name TO backup_device [WITH options];其中,backup_device指备份的目录和文件名,options包括NOFORMAT、NOINIT、NAME、SKIP、REWIND和FORMAT 等选项,可以根据需要进行配置。
例如:BACKUP DATABASE AdventureWorks2016 TO DISK ='C:\AdventureWorks2016.bak' WITH NOFORMAT, NOINIT, NAME = N'AdventureWorks2016-Full Database Backup', SKIP, REWIND, NOUNLOAD, STATS = 10这条命令会将AdventureWorks2016数据库备份到C盘下的AdventureWorks2016.bak文件中,同时还指定了一些选项,比如不要在备份设备上格式化或初始化任何内容,备份名称为AdventureWorks2016-Full Database Backup等。
2、差异备份差异备份,即备份自上次全备份以来发生过更改的数据。
差异备份的好处是备份时间较短,备份文件也较小,但同时也需要保证有完整的全备份文件存在。
差异备份的方法和语法如下:BACKUP DATABASE database_name TO backup_device [WITH DIFFERENTIAL];其中,WITH DIFFERENTIAL表示进行差异备份。
SqlServer数据库备份与还原的实现步骤
SqlServer数据库备份与还原的实现步骤⽬录问题描述SqlServer数据库备份步骤SqlServer数据库还原步骤其它问题描述 最近需要给程序新增功能,⽤于将旧格式的数据转换为新格式,同时删除旧格式的数据(新旧格式的数据库表有部分重叠,同⼀份数据⽆法同时存在新旧格式的数据),由于测试环境中的测试数据不多,功能调试⼏次之后就没有旧格式的数据做测试了,因此想到在功能调试前先将测试数据库备份,然后功能调试之后再将测试数据库还原,这样就可以重复的进⾏功能调试。
数据库备份过程⽐较顺利,但是还原过程中出现错误,⽆论是还原数据库还是还原数据库⽂件都报错: 还原数据库时报下⾯错误: 还原数据库⽂件时报下⾯错误: 通过百度资料,最终解决了还原数据库出错的问题,现将数据库备份和还原的步骤列在下⾯,以备后⽤。
SqlServer数据库备份步骤 1)⾸先在本地磁盘上建⼀个备份⽂件夹,如果不想单独建个⽂件夹的话,使⽤SqlServer默认的备份⽂件夹也可以。
本例中在本地K盘建⽴⼀个数据库备份⽂件夹。
2)打开SqlServer客户端,在需要备份的数据库上点右键,选择任务->备份,弹出备份数据库窗⼝。
3)在备份数据库窗⼝下⽅删除默认的备份⽂件,然后点击添加按钮,选择步骤1中建⽴的⽂件夹作为备份⽂件夹,接着给⼀个备份⽂件的名称。
点击确定按钮返回备份数据库窗⼝。
在备份⽂件了。
SqlServer数据库还原步骤 1)如果数据库是多个客户端在连接,在还原之前,⾸先要把数据库的连接⽅式设置为单⼀连接。
打开SqlServer客户端,在需要还原的数据库上点右键,选择属性,弹出数据库属性窗⼝。
2)在数据库属性窗⼝右侧的其它选项中,在状态分组中将限制访问属性的值从MULTI_USER变成SINGLE_USER,然后点击确定按钮返回。
3)在需要还原的数据库上点右键,选择任务->还原->⽂件和⽂件组,弹出还原⽂件和⽂件组窗⼝。
SQLServer数据库备份和恢复
SQLServer数据库备份和恢复作为一位数据库管理员,备份和恢复数据库是日常工作中必不可少的任务。
在SQLServer中,备份和恢复数据库是非常简单而且快速的,但是在备份和恢复过程中需要注意一些要点,本文将对此进行介绍和分析。
一、备份数据库在备份数据库之前,需要了解备份的种类和使用场景。
常见的备份种类有完整备份、差异备份和日志备份。
完整备份是将数据库的所有数据和日志都备份下来,差异备份是在完整备份的基础上备份自上次完整备份之后发生的所有变化,而日志备份是备份从最后一次备份到本次备份之间发生的所有交易记录。
是否进行完整备份,差异备份还是日志备份,取决于数据需要恢复到哪一个时间点以及备份的频率和容量。
完整备份备份的数据和所有交易记录,可以恢复到任意一个时间点;差异备份备份的数据是上次备份之后的所有变化,可以恢复到差异备份之后的任意一个时间点;而日志备份只备份从上次备份到本次备份之间的交易记录,只能在连续的日志备份中进行数据的恢复。
在进行备份之前,需要关闭数据库以保证备份的一致性。
可以使用以下SQL语句进行完整备份:BACKUP DATABASE database_nameTO DISK = 'backup_path\backup_file_name.bak'WITH FORMAT, INIT其中,database_name 是要备份的数据库名称,backup_path 是备份文件的存储路径,backup_file_name 是备份文件的名称。
WITH FORMAT参数表示每次备份都会覆盖之前的备份文件并且重新初始化备份集,INIT参数表示让备份文件从头开始,不保存之前的任何备份数据。
需要进行差异备份时,可以使用以下SQL语句:BACKUP DATABASE database_nameTO DISK = 'backup_path\backup_file_name.diff'WITH DIFFERENTIAL其中,DIFFERENTIAL参数表示进行差异备份。
SQLServer数据库备份和还原
SQLServer数据库备份和还原⼀、SQL命令备份BACKUP DATABASE TestDb TO DISK='d:\TestDb.bak'还原RESTORE DATABASE TestDb FROM DISK='d:\TestDb.bak'⼆、使⽤管理⼯具三、使⽤sqlcmd备份sqlcmd -S . -E -Q "BACKUP DATABASE AbpFirst TO DISK='d:\AbpFirst.bak'"还原sqlcmd -S . -E -Q "RESTORE DATABASE AbpFirst FROM DISK='d:\AbpFirst.bak'"四、常见问题1.还原失败原因:Sql server还原失败,提⽰:数据库正在使⽤,⽆法获得对数据库的独占访问权解决⽅案1.如果你使⽤管理⼯具还原数据库并且在Microsoft SQL Server Management Studio 2016或以上版本的话,可以在还原的时候勾选"关闭到⽬标数据库的现有链接"解决⽅案2:如果你的SqlServer Management Studio的版本⽐较低,可以设置数据库为单⽤户模式,执⾏完还原操作后,恢复为多⽤户模式设置⽅式:选中要还原的数据库-->属性-->选项-->限制访问该值从MULTI_USER修改为SINGLE_USER,此时该数据库就会显⽰为单⽤户模式这是GUI的模式,语句的办法⽐较简单---设置数据库为单⽤户模式USE MASTERGOALTER DATABASE eol_tcgroup SET SINGLE_USER WITH ROLLBACK IMMEDIATE;GO---设置数据库为多⽤户模式USE MASTERGOALTER DATABASE eol_tcgroup SET MULTI_USER WITH ROLLBACK IMMEDIATE;GO解决⽅案3:完全使⽤T-Sql的⽅式,执⾏备份数据库操作use mastergo---声明变量declare@dbName nvarchar(max)='Mvc_HNHZ';declare@dbFullName nvarchar(max)='E:\NewWork\Web\backup\test1.bak';--1.1修改为单⽤模式exec(N'ALTER DATABASE '+@dbName+' SET SINGLE_USER WITH ROLLBACK IMMEDIATE');--1.2结束链接进程DECLARE@kid varchar(max)SET@kid=''SELECT@kid=@kid+'KILL '+CAST(spid as Varchar(10)) FROM master..sysprocesses WHERE dbid=DB_ID(@dbName) ;EXEC(@kid) ;--2.执⾏还原语句restore database@dbName from disk=@dbFullNamewith replace--覆盖现有的数据库--3.重置数据库为多⽤户模式exec(N'ALTER DATABASE '+@dbName+' SET MULTI_USER WITH ROLLBACK IMMEDIATE');2.强制断开数据库已有连接USE masterGOALTER DATABASE[DBName]SET SINGLE_USER WITH ROLLBACK IMMEDIATEGO--查看是否还有⽤户连接SELECT*FROM sys.[sysprocesses]WHERE DB_NAME([dbid])='DBName'GOALTER DATABASE[DBName]SET MULTI_USERGO其他相关⽂章:。
SQLServer数据库备份还原和数据恢复
SQLServer数据库备份还原和数据恢复认识数据库备份和事务⽇志备份数据库备份与⽇志备份是数据库维护的⽇常⼯作,备份的⽬的是在于当数据库出现故障或者遭到破坏时可以根据备份的数据库及事务⽇志⽂件还原到最近的时间点将损失降到最低点。
数据库备份数据库备份可以⼿动备份和语句备份⼀.⼿动备份数据库1.⿏标右键选择你要进⾏备份的数据库-任务-备份可以在常规选项页⾯你可以选择备份类型是进⾏完整数据库备份还是差异数据库备份2.点击添加选项,选择数据库⽂件的存放路径注意⽂件名记得加后缀.bak,便于恢复时的查找3.你还可以在选项页⾯是追加到现有的备份集,还是覆盖所有的现有备份集,还可以选择备份验证完整性(建议选择),还可以选择是否压缩备份等。
⼆.语句备份数据库use mastergoBACKUP DATABASE[test]TO DISK= N'D:\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\test.bak'WITH NOFORMAT, NOINIT, NAME = N'test-完整数据库备份', SKIP, NOREWIND, NOUNLOAD, STATS GO数据库⽇志备份⾸先需要注意,数据库⽇志的备份是基于数据库完整备份,也就是说你备份数据库⽇志之前你⾸先要先对数据库进⾏⼀次完整的备份,因为之间会涉及到坚持到检查点lsn,这也是本⽂接下来要讲的重点。
⼀.⼿动备份数据库⽇志1.右键数据库-任务-备份-选择备份类型(事务⽇志)2.点添加,添加⽇志⽂件备份存储路径3.同数据库完整备份⼀样,你也可以选择覆盖现有备份集或者追加到现有备份集,这⾥现在覆盖现有备份集、验证完整性,然后确认备份⼆.语句备份数据库事务⽇志BACKUP LOG[test]TO DISK= N'D:\test.trn'WITH NOFORMAT, INIT, NAME = N'test-事务⽇志备份', SKIP, NOREWIND, NOUNLOAD, STATS =10GO数据库还原右键数据库-还原数据库-添加需要进⾏还原的数据库⽂件路径在还原源选项中你可以选择‘源数据库’,‘源设备’。
SqlServer数据库的备份和恢复操作图解
SqlServer数据库的备份和恢复操作图解备份数据库1、打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server -->SQL Server组-->双击打开你的服务器-->双击打开数据库目录(如图1-1)。
图1-12、选择你的数据库名称(如数据库MyData)--> 然后点上面菜单中的工具--> 选择备份数据库(如图1-2)。
图1-23、备份选项选择完全备份,目的中的备份到如果原来有路径和名称则选中名称点删除,然后点添加,如果原来没有路径和名称则直接选择添加,接着指定路径和文件名,指定后点确定返回备份窗口,接着点确定进行备份(如图1-3)。
图1-3还原(恢复)数据库1、打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组--> 双击打开你的服务器-->鼠标右键点击‘数据库’-->新建数据库(数据库名称可自行取)(如图1-4)。
图1-42、点击新建好的数据库名称(如数据库mydb)-->然后点上面菜单中的工具-->选择恢复数据库(如图1-5)。
图1-53、在弹出来的窗口中的还原选项中选择从设备-->点选择设备-->点添加-->然后选择你的备份文件名-->添加后点确定返回,这时候设备栏应该出现您刚才选择的数据库备份文件名,备份号默认为1(如果您对同一个文件做过多次备份,可以点击备份号旁边的查看内容,在复选框中选择最新的一次备份后点确定)-->然后点击上方常规旁边的选项按钮(如图1-6)。
图1-64、在出现的窗口中选择在现有数据库上强制还原,以及在恢复完成状态中选择使数据库可以继续运行但无法还原其它事务日志的选项(如图1-7)。
在窗口的中间部位的将数据库文件还原为这里要按照你SQL的安装进行设置(也可以指定自己的目录),逻辑文件名不需要改动,移至物理文件名要根据你所恢复的机器情况做改动,如您的SQL数据库装在D:\Program Files\Microsoft SQL Server\MSSQL\Data,那么就按照您恢复机器的目录进行相关改动改动,并且最后的文件名最好改成您当前的数据库名(如原来是bbs_data.mdf,现在的数据库是mydb,就改成mydb_data.mdf),日志和数据文件都要按照这样的方式做相关的改动(日志的文件名是*_log.ldf结尾的),这里的恢复目录您可以自由设置,前提是该目录必须存在(如您可以指定c:\sqldata\bbs_data.mdf或者d:\sqldata\bbs_log.ldf),否则恢复将报错图1-75、修改完成后,点击下面的确定进行恢复,这时会出现一个进度条,提示恢复的进度,恢复完成后系统会自动提示成功,如中间提示报错,请记录下相关的错误内容并询问对SQL操作比较熟悉的人员,一般的错误无非是目录错误或者文件名重复或者文件名错误或者空间不够或者数据库正在使用中的错误,数据库正在使用的错误您可以尝试关闭所有关于SQL窗口然后重新打开进行恢复操作,如果还提示正在使用的错误可以将SQL服务停止然后重起看看,至于上述其它的错误一般都能按照错误内容做相应改动后即可恢复(如图1-8)。
sqlserver数据库的备份与恢复sql实现
sqlserver数据库的备份与恢复sql实现qlerver数据库的备份与恢复ql实现利用T-SQL语句,实现数据库的备份与还原的功能体现了SQLServer中的四个知识点:1.获取SQLServer服务器上的默认目录2.备份SQL语句的使用3.恢复SQL语句的使用,同时考虑了强制恢复时关闭其他用户进程的处理4.作业创建SQL语句的使用/某1.--得到数据库的文件目录如果指定的数据不存在,返回安装SQL时设置的默认数据目录如果指定NULL,则返回默认的SQL备份目录名某//某--调用示例elect数据库文件目录=dbo.f_getdbpath('tempdb'),[默认SQLSERVER数据目录]=dbo.f_getdbpath(''),[默认SQLSERVER备份目录]=dbo.f_getdbpath(null)--某/fromdbo.yobjectwhereid=object_id(N'[dbo].[f_getdbpath]')and某typein(N'FN',N'IF',N'TF'))dropfunction[dbo].[f_getdbpath]GOreturnnvarchar(260)aqlerver数据库的备份与恢复ql实现begineleendgo/某2.--备份数据库某//某--调用示例--备份当前数据库--差异备份当前数据库--备份当前数据库日志--某/fromdbo.yobjectwhereid=object_id(N'[dbo].[p_backupdb]')andOBJECT PROPERTY(id,N'IProcedure')=1)qlerver数据库的备份与恢复ql实现dropprocedure[dbo].[p_backupdb]GOcreateprocp_backupdba,'/TIME/',replace(convert(varchar,getdate(),108),':',''))go/某3.--恢复数据库某/qlerver数据库的备份与恢复ql实现/某--调用示例--完整恢复数据库--差异备份恢复e某ecp_RetoreDb--日志备份恢复e某ecp_RetoreDbife某it(elect某fromdbo.yobjectwhereid=object_id(N'[dbo].[p_RetoreDb]')andOBJECT PROPERTY(id,N'IProcedure')=1)dropprocedure[dbo].[p_RetoreDb]GOcreateprocp_RetoreDbaqlerver数据库的备份与恢复ql实现--得到恢复后的数据库名--得到恢复后的数据库存放目录--生成数据库恢复语句--添加移动逻辑文件的处理begin--从备份文件中获取逻辑文件名--创建临时表,保存获取的信息createtable#tb(lnnvarchar(128),pnnvarchar(260),tpchar(1),fgn nvarchar(128),znumeric(20,0),Mznumeric(20,0))--从备份文件中获取信息declare#fcurorforelectln,tpfrom#tbqlerver数据库的备份与恢复ql实现beginendcloe#fdeallocate#fend--关闭用户进程处理begindeclare#pidcurorforelectpid=cat(pidavarchar(20))frommater..yproceewhere open#pidbeginendcloe#piddeallocate#pidend--恢复数据库goqlerver数据库的备份与恢复ql实现/某4.--创建作业某//某--调用示例--每月执行的作业--每周执行的作业--每日执行的作业--每日执行的作业,每天隔4小时重复的作业--某/ife某it(elect某fromdbo.yobjectwhereid=object_id(N'[dbo].[p_createjob]')andOBJEC TPROPERTY(id,N'IProcedure')=1)dropprocedure[dbo].[p_createjob]GOcreateprocp_createjobqlerver数据库的备份与恢复ql实现--创建作业--创建作业步骤--创建调度when'week'then8when'month'then16endgo/某--应用案例--备份方案:qlerver数据库的备份与恢复ql实现完整备份(每个星期天一次)+差异备份(每天备份一次)+日志备份(每2小时备份一次)调用上面的存储过程来实现--某/--完整备份(每个星期天一次)--差异备份(每天备份一次)--日志备份(每2小时备份一次)/某--应用案例2生产数据核心库:PRODUCE备份方案如下:1.设置三个作业,分别对PRODUCE库进行每日备份,每周备份,每月备份2.新建三个新库,分别命名为:每日备份,每周备份,每月备份3.建立三个作业,分别把三个备份库还原到以上的三个新库。
sqlserver 备份还原流程
SQL Server备份和还原的流程如下:
备份:
1. 打开SQL Server,依次展开sqlserver根目录,并打开数据库。
2. 选择要备份的数据库名,鼠标右键任务->选择备份。
3. 点击添加,选择存放数据库备份文件的地址。
4. 在弹出对话框中,点击图示按钮,选择存放数据库备份文件的地址,文件名后缀名为.bak 点击确定。
5. 点击选项,根据自己的需求进行备份设置,设置完成,点击确定,开始备份。
还原:
1. 选择要还原的数据库名,鼠标右键任务->选择还原->选择数据库。
2. 在弹出对话框中,选择源设备,点击后面的按钮,弹出指定备份对话框,点击添加按钮,选择.bak源文件,找到后,点击确定。
3. 选择选项,进行还原设置,勾选“覆盖现有数据”前面的小方框;点击“还原为”后面的按钮,要还原该数据库的数据文件和日志文件。
4. 选定好要还原的数据文件和日志文件之后,点击“确定”按钮,完成数据库还原。
SQLServer数据库的备份与还原以及在项目中是怎样去实现的
SQL Server数据库的备份与还原以及在项目中是怎样去实现的2012-03-13 11:39:21标签:--备份的设备有2种(临时设备和永久设备) 注意:默认下的备份类型是完整备份? --第一种:backup database Company to disk='d:\backup\1.bak'--临时设备/*如果这里不指定明确路径的话(如:backup database company todisk='backup\1.bak'),那么备份的数据库将会自动备份到系统指定的目录下:C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup*/--第二种:/*第一步首先建立永久备份设备(系统自带的存储过程)在master 数据库中就会找到如图1:?*/--执行语句如:exec sp_addumpdevice 'disk','disk_company','D:\2.bak'--永久设备--执行结果就会出现如图2:--多了一个备份设备:disk_company--第二步:backup database company to disk_company with noinit --默认表示追加(不覆盖)--好了备份完成!?--现在我来还原数据库(我用的是第一种方法备份的,所以我要第一种方法来还原) ,--原来的数据如图3:--经过我手动删除几个表后的数据库如图4:--执行语句:restore database Company from disk='d:\backup\1.bak' --注意备份到哪里去就要从还原哪里来--执行后会出现什么呢?请看错误消息:/*消息 3159,级别 16,状态 1,第 1 行尚未备份数据库 "company" 的日志尾部。
SQLServer数据库的备份和还原详解
SQLServer数据库的备份和还原详解1. 基本概念:mdf文件:SqlServer数据库的主数据文件ldf文件:SqlServer数据库的日志文件SQL Server管理的每个数据库都对应一个mdf文件和一个ldf文件。
当SQL Server服务处于开启时,这些文件是无法删除的。
用SQL Server 企业管理器,单击某个数据库,选择右键菜单中的“属性",从弹出对话框的“数据文件”和“事务日志”标签页中可以查看这个数据库对应的mdf文件路径和ldf文件路径。
2. 用SQL Server 企业管理器备份和还原数据库:例如,备份数据库到可移动存储介质,然后还原到另一台机器上,步骤如下:备份:单击要备份的数据库,从右键菜单选择“所有任务->备份数据库”。
选择“完全备份”,删除“备份到”列表框中的现有内容,然后“添加”;弹出“选择备份目的”对话框,“文件名”就是你要得到的备份文件的存放路径。
选好后确定,这时“备份到”列表框中出现你选择的目的文件路径。
因为没有重名文件,“追加”或“重写”选项的效果是一样的,不用管。
选中它,确定,等待备份完成。
完成后在你指定的路径下将看到你备份的文件,注意该文件默认没有后缀名。
备份文件还有很大的压缩空间,一般一个40多M的备份文件用winRAR压缩后只有4M左右,作为邮箱附件也没有问题。
还原:将备份文件放到一个便于管理的文件夹下,例如你的数据库叫“test”,可以建立一个叫“e:\db_bak\test\”的文件夹。
从SQL Server 企业管理器单击“数据库”,选择“新建数据库...”,起名“test”,确定。
看到该数据库出现在数据库列表中,里面只有一些系统tables。
注意新建数据库默认的mdf文件和ldf文件都会被放在SQL Server安装目录下的子目录“MSSQL\data\”中,文件名与数据库名称相同。
单击该数据库,从右键列表中选择“所有任务->还原数据库”。
批处理(bat)实现SQLServer数据库备份与还原
批处理(bat)实现SQLServer数据库备份与还原-- SQLServer2000数据库系统清理用户数据库日志和备份用户数据库数据脚本declare @dumpfile varchar(50)declare @msg varchar(70)select @dumpfile ='d:\backup\north'+datename(dw,getdate())+'.bak'select @msg=convert(char(26),getdate(),9)+'-----正在清理日志......'print @msgbackup tran northwind with truncate_onlyif(@@ERROR<> 0 )beginselect @msg=convert(char(26),getdate(),9)+'-----清理日志失败或出现异常......' print @msgendelsebeginselect @msg=convert(char(26),getdate(),9)+'-----清理日志完毕......'print @msgendselect @msg=convert(char(26),getdate(),9)+'-----开始备份northwind数据库.....' print @msgbackup database northwind to disk=@dumpfileif(@@ERROR<> 0 )beginselect @msg=convert(char(26),getdate(),9)+'-----备份数据失败或出现异常'print @msgendelsebeginselect @msg=convert(char(26),getdate(),9)+'-----数据库备份完毕'print @msgend@net start "mssqlserver"@isql -Usa -Psa -i d:\backup\sqlserverbackup.sql -o d:\backup\sqlserverbackup.out @echo ……正在备份中……@pause--2.数据库还原脚本sqlserverrestore.sql1declare @dumpfile varchar(50)declare @msg varchar(70)select @dumpfile ='d:\backup\north'+datename(dw,getdate())+'.bak'select @msg=convert(char(26),getdate(),9)print @msgrestore database northwind from disk=@dumpfileif(@@ERROR<> 0 )beginselect @msg=convert(char(26),getdate(),9)+'-----还原数据失败或出现异常'print @msgendelsebeginselect @msg=convert(char(26),getdate(),9)+'-----数据库还原完毕'print @msgend--将下面的脚本保存为: 备份数据库.bat@net start "mssqlserver"@isql -Usa -Padmin -i d:\backup\sqlserverbackup.sql -o d:\backup\sqlserverbackup.out @echo ……正在备份中……@pause--将下面的脚本保存为:还原数据库.bat@echo ******开始还原数据库*****@net start "mssqlserver"@isql -Usa -Psa -i d:\backup\sqlserverrestore.sql -o d:\backup\sqlserverrestore.out@pause- 本材料由愚公从网上获取资源并通过实践整理而得-2。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
批处理(bat)实现SQLServer数据库备份与还原
-- SQLServer2000数据库系统清理用户数据库日志和备份用户数据库数据脚本
declare @dumpfile varchar(50)
declare @msg varchar(70)
select @dumpfile ='d:\backup\north'+datename(dw,getdate())+'.bak'
select @msg=convert(char(26),getdate(),9)+'-----正在清理日志......'
print @msg
backup tran northwind with truncate_only
if(@@ERROR<> 0 )
begin
select @msg=convert(char(26),getdate(),9)+'-----清理日志失败或出现异常......' print @msg
end
else
begin
select @msg=convert(char(26),getdate(),9)+'-----清理日志完毕......'
print @msg
end
select @msg=convert(char(26),getdate(),9)+'-----开始备份northwind数据库.....' print @msg
backup database northwind to disk=@dumpfile
if(@@ERROR<> 0 )
begin
select @msg=convert(char(26),getdate(),9)+'-----备份数据失败或出现异常'
print @msg
end
else
begin
select @msg=convert(char(26),getdate(),9)+'-----数据库备份完毕'
print @msg
end
@net start "mssqlserver"
@isql -Usa -Psa -i d:\backup\sqlserverbackup.sql -o d:\backup\sqlserverbackup.out @echo ……正在备份中……
@pause
--2.数据库还原脚本sqlserverrestore.sql
1
declare @dumpfile varchar(50)
declare @msg varchar(70)
select @dumpfile ='d:\backup\north'+datename(dw,getdate())+'.bak'
select @msg=convert(char(26),getdate(),9)
print @msg
restore database northwind from disk=@dumpfile
if(@@ERROR<> 0 )
begin
select @msg=convert(char(26),getdate(),9)+'-----还原数据失败或出现异常'
print @msg
end
else
begin
select @msg=convert(char(26),getdate(),9)+'-----数据库还原完毕'
print @msg
end
--将下面的脚本保存为: 备份数据库.bat
@net start "mssqlserver"
@isql -Usa -Padmin -i d:\backup\sqlserverbackup.sql -o d:\backup\sqlserverbackup.out @echo ……正在备份中……
@pause
--将下面的脚本保存为:还原数据库.bat
@echo ******开始还原数据库*****
@net start "mssqlserver"
@isql -Usa -Psa -i d:\backup\sqlserverrestore.sql -o d:\backup\sqlserverrestore.out
@pause
- 本材料由愚公从网上获取资源并通过实践整理而得-
2。