㈠ sqlserver怎么把服务器上的数据库备份到本地,不是局域网的服务器
No1:先在行程电脑上备份:
backup database 数据库名 to disk='文件路径'
然后把备件的文件复制到自己电脑上:
restore database 数据库名 from disk='文件路径'
No2:
备份远程SQLSERVER数据库到本地
1 知道远程MSSQL IP 用户名 密码
2 在本地MSSQL企业管器里新注册 远程数据库
3 选中所有远程数据库的用户表,右键 所有任务 生成SQL脚本 并在选项里选中 编写主键 外键 ......
4 在本地新建一数据库,在新建数据库中执行新生成的SQL脚本,注意脚本中的所属用户 一般全部替换为[dbo] 然后全部执行。
5 然后在新建数据库中点 右键 所有任务 导入数据,先填源数据库,也就是远程数据库,后填目的数据库,也就是新数据库 最后确定。这样就可以把远程的数据库备份到本地
No3:服务器上的SQLSERVER2000数据库导到本地
一,备份SQLSERVER2000,生成.bak文件,压缩成包,下载到本地,解压,还原数据库,
二,本sql客户端远程链接服务器,备份,或导出到本地数据库(这个看你网速了),同时要开放服务器1433端口,很不安全
三,分离数据库,考下_dat和log,,考下这两个文件,服务器上再附加,本地用这两个文件附加
㈡ 如何将数据库中的存储过程移动到另一数据库中
一种做法是:将原数据库备份,将备份恢复到新数据库中,将新数据库中的数据表格清空。这样存储过程就保留下来了
另一种是把原数据库中的存储过程导出,在新数据库中新建
㈢ sql server 怎么备份存储过程
转:
利用T-SQL语句,实现数据库的备份与还原的功能
体现了SQL Server中的四个知识点:
1. 获取SQL Server服务器上的默认目录
2. 备份SQL语句的使用
3. 恢复SQL语句的使用,同时考虑了强制恢复时关闭其他用户进程的处理
4. 作业创建SQL语句的使用
/*1.--得到数据库的文件目录
@dbname 指定要取得目录的数据库名
如果指定的数据不存在,返回安装SQL时设置的默认数据目录
如果指定NULL,则返回默认的SQL备份目录名
*/
/*--调用示例
select 数据库文件目录=dbo.f_getdbpath('tempdb')
,[默认SQL SERVER数据目录]=dbo.f_getdbpath('')
,[默认SQL SERVER备份目录]=dbo.f_getdbpath(null)
--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_getdbpath]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_getdbpath]
GO
create function f_getdbpath(@dbname sysname)
returns nvarchar(260)
as
begin
declare @re nvarchar(260)
if @dbname is null or db_id(@dbname) is null
select @re=rtrim(reverse(filename)) from master..sysdatabases where name='master'
else
select @re=rtrim(reverse(filename)) from master..sysdatabases where name=@dbname
if @dbname is null
set @re=reverse(substring(@re,charindex('\',@re)+5,260))+'BACKUP'
else
set @re=reverse(substring(@re,charindex('\',@re),260))
return(@re)
end
go
/*2.--备份数据库
*/
/*--调用示例
--备份当前数据库
exec p_backupdb @bkpath='c:\',@bkfname='db_\DATE\_db.bak'
--差异备份当前数据库
exec p_backupdb @bkpath='c:\',@bkfname='db_\DATE\_df.bak',@bktype='DF'
--备份当前数据库日志
exec p_backupdb @bkpath='c:\',@bkfname='db_\DATE\_log.bak',@bktype='LOG'
--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_backupdb]') and OBJECTPROPERTY(id, N'IsProcere') = 1)
drop procere [dbo].[p_backupdb]
GO
create proc p_backupdb
@dbname sysname='', --要备份的数据库名称,不指定则备份当前数据库
@bkpath nvarchar(260)='', --备份文件的存放目录,不指定则使用SQL默认的备份目录
@bkfname nvarchar(260)='', --备份文件名,文件名中可以用\DBNAME\代表数据库名,\DATE\代表日期,\TIME\代表时间
@bktype nvarchar(10)='DB', --备份类型:'DB'备份数据库,'DF' 差异备份,'LOG' 日志备份
@appendfile bit=1 --追加/覆盖备份文件
as
declare @sql varchar(8000)
if isnull(@dbname,'')='' set @dbname=db_name()
if isnull(@bkpath,'')='' set @bkpath=dbo.f_getdbpath(null)
if isnull(@bkfname,'')='' set @bkfname='\DBNAME\_\DATE\_\TIME\.BAK'
set @bkfname=replace(replace(replace(@bkfname,'\DBNAME\',@dbname)
,'\DATE\',convert(varchar,getdate(),112))
,'\TIME\',replace(convert(varchar,getdate(),108),':',''))
set @sql='backup '+case @bktype when 'LOG' then 'log ' else 'database ' end +@dbname
+' to disk='''+@bkpath+@bkfname
+''' with '+case @bktype when 'DF' then 'DIFFERENTIAL,' else '' end
+case @appendfile when 1 then 'NOINIT' else 'INIT' end
print @sql
exec(@sql)
go
/*3.--恢复数据库
*/
/*--调用示例
--完整恢复数据库
exec p_RestoreDb @bkfile='c:\db_20031015_db.bak',@dbname='db'
--差异备份恢复
exec p_RestoreDb @bkfile='c:\db_20031015_db.bak',@dbname='db',@retype='DBNOR'
exec p_backupdb @bkfile='c:\db_20031015_df.bak',@dbname='db',@retype='DF'
--日志备份恢复
exec p_RestoreDb @bkfile='c:\db_20031015_db.bak',@dbname='db',@retype='DBNOR'
exec p_backupdb @bkfile='c:\db_20031015_log.bak',@dbname='db',@retype='LOG'
--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_RestoreDb]') and OBJECTPROPERTY(id, N'IsProcere') = 1)
drop procere [dbo].[p_RestoreDb]
GO
create proc p_RestoreDb
@bkfile nvarchar(1000), --定义要恢复的备份文件名
@dbname sysname='', --定义恢复后的数据库名,默认为备份的文件名
@dbpath nvarchar(260)='', --恢复后的数据库存放目录,不指定则为SQL的默认数据目录
@retype nvarchar(10)='DB', --恢复类型:'DB'完事恢复数据库,'DBNOR' 为差异恢复,日志恢复进行完整恢复,'DF' 差异备份的恢复,'LOG' 日志恢复
@filenumber int=1, --恢复的文件号
@overexist bit=1, --是否覆盖已经存在的数据库,仅@retype为
@killuser bit=1 --是否关闭用户使用进程,仅@overexist=1时有效
as
declare @sql varchar(8000)
--得到恢复后的数据库名
if isnull(@dbname,'')=''
select @sql=reverse(@bkfile)
,@sql=case when charindex('.',@sql)=0 then @sql
else substring(@sql,charindex('.',@sql)+1,1000) end
,@sql=case when charindex('\',@sql)=0 then @sql
else left(@sql,charindex('\',@sql)-1) end
,@dbname=reverse(@sql)
--得到恢复后的数据库存放目录
if isnull(@dbpath,'')='' set @dbpath=dbo.f_getdbpath('')
--生成数据库恢复语句
set @sql='restore '+case @retype when 'LOG' then 'log ' else 'database ' end+@dbname
+' from disk='''+@bkfile+''''
+' with file='+cast(@filenumber as varchar)
+case when @overexist=1 and @retype in('DB','DBNOR') then ',replace' else '' end
+case @retype when 'DBNOR' then ',NORECOVERY' else ',RECOVERY' end
print @sql
--添加移动逻辑文件的处理
if @retype='DB' or @retype='DBNOR'
begin
--从备份文件中获取逻辑文件名
declare @lfn nvarchar(128),@tp char(1),@i int
--创建临时表,保存获取的信息
create table #tb(ln nvarchar(128),pn nvarchar(260),tp char(1),fgn nvarchar(128),sz numeric(20,0),Msz numeric(20,0))
--从备份文件中获取信息
insert into #tb exec('restore filelistonly from disk='''+@bkfile+'''')
declare #f cursor for select ln,tp from #tb
open #f
fetch next from #f into @lfn,@tp
set @i=0
while @@fetch_status=0
begin
select @sql=@sql+',move '''+@lfn+''' to '''+@dbpath+@dbname+cast(@i as varchar)
+case @tp when 'D' then '.mdf''' else '.ldf''' end
,@i=@i+1
fetch next from #f into @lfn,@tp
end
close #f
deallocate #f
end
--关闭用户进程处理
if @overexist=1 and @killuser=1
begin
declare @spid varchar(20)
declare #spid cursor for
select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
open #spid
fetch next from #spid into @spid
while @@fetch_status=0
begin
exec('kill '+@spid)
fetch next from #spid into @spid
end
close #spid
deallocate #spid
end
--恢复数据库
exec(@sql)
go
/*4.--创建作业
*/
/*--调用示例
--每月执行的作业
exec p_createjob @jobname='mm',@sql='select * from syscolumns',@freqtype='month'
--每周执行的作业
exec p_createjob @jobname='ww',@sql='select * from syscolumns',@freqtype='week'
--每日执行的作业
exec p_createjob @jobname='a',@sql='select * from syscolumns'
--每日执行的作业,每天隔4小时重复的作业
exec p_createjob @jobname='b',@sql='select * from syscolumns',@fsinterval=4
--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_createjob]') and OBJECTPROPERTY(id, N'IsProcere') = 1)
drop procere [dbo].[p_createjob]
GO
create proc p_createjob
@jobname varchar(100), --作业名称
@sql varchar(8000), --要执行的命令
@dbname sysname='', --默认为当前的数据库名
@freqtype varchar(6)='day', --时间周期,month 月,week 周,day 日
@fsinterval int=1, --相对于每日的重复次数
@time int=170000 --开始执行时间,对于重复执行的作业,将从0点到23:59分
as
if isnull(@dbname,'')='' set @dbname=db_name()
--创建作业
exec msdb..sp_add_job @job_name=@jobname
--创建作业步骤
exec msdb..sp_add_jobstep @job_name=@jobname,
@step_name = '数据处理',
@subsystem = 'TSQL',
@database_name=@dbname,
@command = @sql,
@retry_attempts = 5, --重试次数
@retry_interval = 5 --重试间隔
--创建调度
declare @ftype int,@fstype int,@ffactor int
select @ftype=case @freqtype when 'day' then 4
when 'week' then 8
when 'month' then 16 end
,@fstype=case @fsinterval when 1 then 0 else 8 end
if @fsinterval<>1 set @time=0
set @ffactor=case @freqtype when 'day' then 0 else 1 end
EXEC msdb..sp_add_jobschele @job_name=@jobname,
@name = '时间安排',
@freq_type=@ftype , --每天,8 每周,16 每月
@freq_interval=1, --重复执行次数
@freq_subday_type=@fstype, --是否重复执行
@freq_subday_interval=@fsinterval, --重复周期
@freq_recurrence_factor=@ffactor,
@active_start_time=@time --下午17:00:00分执行
go
/*--应用案例--备份方案:
完整备份(每个星期天一次)+差异备份(每天备份一次)+日志备份(每2小时备份一次)
调用上面的存储过程来实现
--*/
declare @sql varchar(8000)
--完整备份(每个星期天一次)
set @sql='exec p_backupdb @dbname=''要备份的数据库名'''
exec p_createjob @jobname='每周备份',@sql,@freqtype='week'
--差异备份(每天备份一次)
set @sql='exec p_backupdb @dbname=''要备份的数据库名'',@bktype='DF''
exec p_createjob @jobname='每天差异备份',@sql,@freqtype='day'
--日志备份(每2小时备份一次)
set @sql='exec p_backupdb @dbname=''要备份的数据库名'',@bktype='LOG''
exec p_createjob @jobname='每2小时日志备份',@sql,@freqtype='day',@fsinterval=2
/*--应用案例2
生产数据核心库:PRODUCE
备份方案如下:
1.设置三个作业,分别对PRODUCE库进行每日备份,每周备份,每月备份
2.新建三个新库,分别命名为:每日备份,每周备份,每月备份
3.建立三个作业,分别把三个备份库还原到以上的三个新库。
目的:当用户在proce库中有任何的数据丢失时,均可以从上面的三个备份库中导入相应的TABLE数据。
--*/
declare @sql varchar(8000)
--1.建立每月备份和生成月备份数据库的作业,每月每1天下午16:40分进行:
set @sql='
declare @path nvarchar(260),@fname nvarchar(100)
set @fname=''PRODUCE_''+convert(varchar(10),getdate(),112)+''_m.bak''
set @path=dbo.f_getdbpath(null)+@fname
--备份
exec p_backupdb @dbname=''PRODUCE'',@bkfname=@fname
--根据备份生成每月新库
exec p_RestoreDb @bkfile=@path,@dbname=''PRODUCE_月''
--为周数据库恢复准备基础数据库
exec p_RestoreDb @bkfile=@path,@dbname=''PRODUCE_周'',@retype=''DBNOR''
--为日数据库恢复准备基础数据库
exec p_RestoreDb @bkfile=@path,@dbname=''PRODUCE_日'',@retype=''DBNOR''
'
exec p_createjob @jobname='每月备份',@sql,@freqtype='month',@time=164000
--2.建立每周差异备份和生成周备份数据库的作业,每周日下午17:00分进行:
set @sql='
declare @path nvarchar(260),@fname nvarchar(100)
set @fname=''PRODUCE_''+convert(varchar(10),getdate(),112)+''_w.bak''
set @path=dbo.f_getdbpath(null)+@fname
--差异备份
exec p_backupdb @dbname=''PRODUCE'',@bkfname=@fname,@bktype=''DF''
--差异恢复周数据库
exec p_backupdb @bkfile=@path,@dbname=''PRODUCE_周'',@retype=''DF''
'
exec p_createjob @jobname='每周差异备份',@sql,@freqtype='week',@time=170000
--3.建立每日日志备份和生成日备份数据库的作业,每周日下午17:15分进行:
set @sql='
declare @path nvarchar(260),@fname nvarchar(100)
set @fname=''PRODUCE_''+convert(varchar(10),getdate(),112)+''_l.bak''
set @path=dbo.f_getdbpath(null)+@fname
--日志备份
exec p_backupdb @dbname=''PRODUCE'',@bkfname=@fname,@bktype=''LOG''
--日志恢复日数据库
exec p_backupdb @bkfile=@path,@dbname=''PRODUCE_日'',@retype=''LOG''
'
exec p_createjob @jobname='每周差异备份',@sql,@freqtype='day',@time=171500
㈣ mysql数据库不停库的情况下怎么备份并且做异地恢复
MySQL 支持的免费备份工具有:mysqlmp、mysqlhot1、mysqlmp 1.1 备份 mysqlmp 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。
现在来讲一下 mysqlmp 的一些主要参数:--compatible=name 它告诉 mysqlmp,导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。值可以为 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等,要使用几个值,用逗号将它们隔开。当然了,它并不保证能完全兼容,而是尽量兼容。--complete-insert,-c 导出的数据采用包含字段名的完整 INSERT 方式,也就是把所有的值都写在一行。这么做能提高插入效率,但是可能会受到 max_allowed_packet 参数的影响而导致插入失败。因此,需要谨慎使用该参数,至少我不推荐。--default-character-set=charset 指定导出数据时采用何种字符集,如果数据表不是采用默认的 latin1 字符集的话,那么导出时必须指定该选项,否则再次导入数据后将产生乱码问题。--disable-keys 告诉 mysqlmp 在 INSERT 语句的开头和结尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */; 和 /*!40000 ALTER TABLE table ENABLE KEYS */; 语句,这能大大提高插入语句的速度,因为它是在插入完所有数据后才重建索引的。该选项只适合 MyISAM 表。--extended-insert = true|false 默认情况下,mysqlmp 开启 --complete-insert 模式,因此不想用它的的话,就使用本选项,设定它的值为 false 即可。--hex-blob 使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 BINARY、VARBINARY、BLOB。--lock-all-tables,-x 在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 --single-transaction 和 --lock-tables 选项。--lock-tables 它和 --lock-all-tables 类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 选项。--no-create-info,-t 只导出数据,而不添加 CREATE TABLE 语句。--no-data,-d 不导出任何数据,只导出数据库表结构。--opt 这只是一个快捷选项,等同于同时添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 选项。本选项能让 mysqlmp 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用 --skip-opt 禁用。注意,如果运行 mysqlmp 没有指定 --quick 或 --opt 选项,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。--quick,-q 该选项在导出大表时很有用,它强制 mysqlmp 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。--routines,-R 导出存储过程以及自定义函数。--single-transaction 该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。
本选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。
要想导出大表的话,应结合使用 --quick 选项。--triggers 同时导出触发器。该选项默认启用,用 --skip-triggers 禁用它。其他参数详情请参考手册,我通常使用以下 SQL 来备份 MyISAM 表:/usr/local/mysql/bin/mysqlmp -uyejr -pyejr \--default-character-set=utf8 --opt --extended-insert=false \--triggers -R --hex-blob -x db_name > db_name.sql 使用以下 SQL 来备份 Innodb 表:/usr/local/mysql/bin/mysqlmp -uyejr -pyejr \--default-character-set=utf8 --opt --extended-insert=false \--triggers -R --hex-blob --single-transaction db_name > db_name.sql 另外,如果想要实现在线备份,还可以使用 --master-data 参数来实现,如下:/usr/local/mysql/bin/mysqlmp -uyejr -pyejr \--default-character-set=utf8 --opt --master-data=1 \--single-transaction --flush-logs db_name > db_name.sql 它只是在一开始的瞬间请求锁表,然后就刷新binlog了,而后在导出的文件中加入CHANGE MASTER 语句来指定当前备份的binlog位置,如果要把这个文件恢复到slave里去,就可以采用这种方法来做。1.2 还原 用 mysqlmp 备份出来的文件是一个可以直接倒入的 SQL 脚本,有两种方法可以将数据导入。直接用 mysql 客户端 例如:/usr/local/mysql/bin/mysql -uyejr -pyejr db_name < db_name.sql 用 SOURCE 语法 其实这不是标准的 SQL 语法,而是 mysql 客户端提供的功能,例如:SOURCE /tmp/db_name.sql; 这里需要指定文件的绝对路径,并且必须是 mysqld 运行用户(例如 nobody)有权限读取的文件。2、 mysqlhot 2.1 备份 mysqlhot 是一个 PERL 程序,最初由Tim Bunce编写。它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上。mysqlhot 只能用于备份 MyISAM,并且只能运行在 类Unix 和 NetWare 系统上。mysqlhot 支持一次性拷贝多个数据库,同时还支持正则表达。以下是几个例子:root#/usr/local/mysql/bin/mysqlhot -h=localhost -u=yejr -p=yejr \db_name /tmp (把数据库目录 db_name 拷贝到 /tmp 下)root#/usr/local/mysql/bin/mysqlhot -h=localhost -u=yejr -p=yejr \db_name_1 ... db_name_n /tmproot#/usr/local/mysql/bin/mysqlhot -h=localhost -u=yejr -p=yejr \db_name./regex/ /tmp 更详细的使用方法请查看手册,或者调用下面的命令来查看 mysqlhot 的帮助:perldoc /usr/local/mysql/bin/mysqlhot 注意,想要使用 mysqlhot,必须要有 SELECT、RELOAD(要执行 FLUSH TABLES) 权限,并且还必须要能够有读取 datadir/db_name 目录的权限。2.2 还原 mysqlhot 备份出来的是整个数据库目录,使用时可以直接拷贝到 mysqld 指定的 datadir (在这里是 /usr/local/mysql/data/)目录下即可,同时要注意权限的问题,如下例:root#cp -rf db_name /usr/local/mysql/data/root#chown -R nobody:nobody /usr/local/mysql/data/ (将 db_name 目录的属主改成 mysqld 运行用户)
㈤ sql2000数据库异地备份
SQL2000数据库的异地备份2008-06-10 14:48DECLARE @CurDate datetime
DECLARE @BkTime nvarchar(20)
DECLARE @DelTime nvarchar(8)
DECLARE @DBName varchar(30)
Declare @BkFolder nvarchar(100)
Declare @BkLogFile Varchar(200)
Declare @DelFile Varchar(200)
Declare @BkFile Varchar(200)
--设置需要备份的数据库
SET @DBName='database'
--设定存放备份文件的文件夹
SET @BkFolder='\\20.1.250.83\share'
--取得备份时间
SET @CurDate=getdate()
SET @BkTime=convert(nvarchar(8),@CurDate,112)+'.'+Convert(nvarchar(2),DatePart(hh,@CurDate)) + '.' +
Convert(nvarchar(2),DatePart(mi,@CurDate))+ '.' +
Convert(nvarchar(2),DatePart(ss,@CurDate))
--取得需要删除的备份文件的时间
SET @DelTime=convert(nvarchar(8),getdate()-3,112)
--生成删除备份文件语句
SET @DelFile ='Del "' + @BkFolder + '\' + @DBName +@DelTime +'*'
--生成数据库备份文件名
SET @BkFile=@BkFolder + '\'+@DBName + @BkTime + '.BAK'
--执行删除备份文件
Exec Master.dbo.Xp_CmdShell @DelFile
--备份数据库
BackUp Database @DBName To Disk=@BkFile
注意事项:
如果遇到通过网上邻居访问一切正常。在企业管理器里对数据库进行备份,备份文件名写入网络路径'\\20.1.250.83\share';系统却提示“无法验证该备份文件位置是否存在。是否要使用该备份文件位置?”点击确认后,系统提示“无法打开备份设备,设备出现错误或设备脱机....”时,因该注意:SQL Server并不以Windows登录帐户访问网络共享,而是以SQL Server服务的启动帐户来访问。这时应该进入“管理工具-->服务-->MSSQLSERVER-->登录”将启动服务的本地系统帐户修改为本机管理员,重新启动服务后,问题解决。
还应该注意:同样的“本地系统”帐户,在2000与2003里的权限却不尽相同,2000及以前的系统中的本地系统帐户只具备本地最高权限,而2003及以后的系统中,该账户在具备本机完全访问权限的同时,可以像其他域帐户一样访问网络资源。所以在2003中,却不用修改SQL服务的登录帐户就能顺利备份。
㈥ 运用哪几种方法可以解决存储过程的数据安全问题
在这个信息爆炸的年代,现代人每天不论于公于私, 都面临必须经手大量数字信息、 而在数据安全问题上会出现各种麻烦;另一方面, 随着数据量的增加,人们对存储认识程度也日益加深, 特别是企业对于存储过程中数据安全问题尤为关注。一个稳定、 安全、可靠的存储基础架构对企业来说是必不可少的。 企业的信息系统不可避免地受到来自外界的安全危胁, 包括自然灾害、网络、硬件、软件等方面,也包括人员的操作失误。 数据存储的任何失误都可能给企业带来巨大的经济损失。 随着数据价值不断提升,以及存储网络化不断发展, 数据遭受的安全威胁日益增多,若无存储安全防范措施, 一旦攻击者成功渗透到数据存储系统中, 其负面影响将是无法估计的。这要求企业在特定存储系统结构下, 从存储安全性综合考虑。 而企业在业务运作的过程中最常面临的存储安全问题, 主要是由自然灾害,网络、硬件,人员的操作失误这几方面引起的。 自然灾害导致数据存储安全 首先,这个不是一个人为的行为, 大量的数据存储在企业的服务器存储系统中, 业务在运营中由于停电或是数据传输过程中的线路突然短路导致的数 据的丢失情况,对于企业是一个不小的损失,在这种状态下, 由于自然灾害原因导致企业数据的丢失可以说对于一个企业的数据信 息是一个很大的安全威胁,系统的正常运行,数据库的合理优化, 操作人员的完善的操作程序都确保数据的稳定安全,而突发的停电、 火灾以及后备电源的不到位对于中小企业是时常面临的问题, 同时数据的存储安全成为面对该情况时必须要解决的问题, 也是企业及时需要应对的措施,保证数据的安全, 但如何面对该情况应对企业数据的存储安全呢? 网络硬件 其次, 企业数据的硬件环境方面的问题也会导致存储过程中数据安全, 众所周知信息化快速发展的今天,硬件的更新换代速度之快, 从而使得企业的传统的存储环境已经难以应对如今海量的数据需求, 企业也要升级换代才可以适应现在数据存储的环境要求。 硬件环境的老化导致传输速率的降低, 同时网络的优化也需要良好的硬件环境作为基础, 在传输数据的过程中如果数据量过于庞大, 而企业的硬件环境没有改善那么网络的延迟导致系统的崩溃, 从而丢失数据会造成巨大的经济损失,而对于这些方面, 就需要企业根据业务发展的需要有针对性地升级存储服务器的配置, 提高网络的良性环境,保证存储过程数据安全。 人员的操作失误 “金无足赤,人无完人” 是对于当今任何企业在数据管理人员方面的一句良言, 每个人在工作的过程中不可避免的犯错误或者在操作上失误, 特别是对于从事数据库管理工作的人员,数据量之大, 系统运行之繁琐,都会给工作中带来不必要的失误, 从而对于企业的数据上的安全和完整性存在危胁, 同时中小企业的数据管理人员还肩负存储系统的运维工作, 这就对其数据存储过程中的安全性提出了更高的要求, 面对着企业存储过程数据安全问题,应该如何的解决, 采取什么样的措施保证数据的安全是摆在每个企业面前的主要问题, 数据是企业运营的核心, 强大的数据的支持保障企业在市场中能够乘风破浪, 如何解决存储过程数据安全问题, 下面针对以上的问题给以简单的建议。 一般而言,解决存储过程中的数据安全问题, 企业有很多可以采用的方案: 异地备份可以避免发生自然灾害时的数据损失;采用RAID( 独立磁盘冗余阵列)可以减少磁盘部件的损坏;采用镜像技术 可以减少存储设备损坏;快照可以迅速恢复遭破坏的数据, 减少宕机损失。 而这些技术采用可以很好的应对企业面临的自然灾害,网络、硬件, 人员的操作失误这几方面引起的数据的安全问题。 异地备份 异地备份是保护数据的最安全的方式,无论发生什么情况自然灾害, 那怕是火灾、地震,当其他保护数据的手段都不起作用时, 异地容灾的优势就体现出来了,异地备份问题在于速度和成本, 这要求拥有足够带宽的网络连接和优秀的数据复制管理软件。 通常状态下主要三方面实现异地备份,一是基于磁盘阵列, 通过软件的复制模块,实现磁盘阵列之间的数据复制, 这种方式适用于在复制的两端具有相同的磁盘阵列。 二是基于主机方式,这种方式与磁盘阵列无关。 三是基于存储管理平台,它与主机和磁盘阵列均无关。 RAID RAID系统使用许多小容量磁盘驱动器来存储大量数据, 并且使可靠性和冗余度得到增强。对计算机来说, 这样一种阵列就如同由多个磁盘驱动器构成的一个逻辑单元。 所有的RAID系统共同的特点是“热交换”能力: 用户可以取出一个存在缺陷的驱动器,并插入一个新的予以更换。 对大多数类型的RAID来说,不必中断服务器或系统, 就可以自动重建某个出现故障的磁盘上的数据。 镜像 这个技术是针对如果故障发生在异地分公司,可以使用镜像技术, 进行不同卷的镜像或异地卷的远程镜像, 或采用双机容错技术自动接管单点故障机, 保证无单点故障和本地设备遇到不可恢复的硬件毁坏时, 仍可以启动异地与此相同环境和内容的镜像设备, 以保证服务不间断。当然,这样做必然会提升对设备的投资力度。 快照 在数据保护技术中,快照技术(snapshot) 是极为基础和热门的技术之一,应用在很多存储过程中, 比如数据复制和备份都在使用这种技术。 IBM的FlashCopy、IBM NAS的PSM软件以及VERITAS的FlashSnap软件 都是快照技术的代表。快照可以迅速恢复遭破坏的数据, 减少宕机损失, 可以针对与数据库管理人员在操作中的失误进行数据恢复。 综述: 对于企业在存储过程中的数据安全问题,还有很多解决的方案, 存储安全固然十分重要, 但是存储安全只是数据中心整个安全解决方案的一个组成部分。 安全是一个内涵很广泛的话题, 存储在业务流程中扮演的并非是主角,但确实是关键角色, 因为存储包含了公司绝大部分记录,如果没有存储, 很多业务流程将没法继续。因此, 对于面对存储过程数据安全问题每个企业应该注视起来, 投入更多的精力,数据是一个企业的核心竞争力, 安全强大的数据是企业腾飞的保证,存储技术的发展, 硬件环境的完善相信会给企业数据安全无疑提供强有力的支持。
㈦ 如何写存储过程把一个表的数据备份到另外一个表
可以通过以下sql实现
sql:insert into tablename1(filename3,filename4) as select filename1, filename2 from tablename2;
解释:从tablename2表中读取出filename1和filename2字段插入到tablename1表中的
filename3和filename4字段中。
备注:插入表的字段顺序和查询表的字段顺序必须保持一致。
㈧ 如何用mysql的存储过程来备份数据库
个人认为,既然有数据库,就要有DBA,DBA不但是一种职位,还是一种态度。备份数据库就应该是DBA的事情,而想使用存储过程来备份数据库是不现实的,作为某个时间点的镜像倒是还可以。
因为数据库崩溃了,如果数据丢失,存储过程再怎么做也没办法恢复。
另外,存储过程不是拿来做备份的,而是提供可靠和高效率计算的。
建议:使用批处理脚本,创建定时任务,调用 mysqlmp.exe 程序来做备份。