使用SQLSERVER的扩展存储过程实现远程备份与恢复
更新时间:2016年11月25日 16:42 点击:1786
最近我在为公司的框架程序(以数据应用为导向的应用体系)做数据管理模块,这个模块的需求比较简单:备份、恢复和清理日志。我公司的软件基本上以C/S为基本架构,所以数据管理模块中两个主要的功能'备份与恢复’都可能会在Client端操作,备份与恢复’的文件也都有可能存储在client端,因而这个数据管理模块就必须能够实现在远程备份与恢复数据库。
文章的前提阐述完了,就该说说如何具体实现吧。其实都很简单,我想写个远程备份的测试实例
给大家看,就能够很清楚的描述吧!
实例说明:
环境:win2k sqlserver 2K 查询分析器
SQLSERVER服务实例名称:mainserver
需要备份的数据库名称: msdb
本地机器名称(Client端):david
本地用户:zf 密码:123
本地域名:domain
本地提供备份需求的文件夹:e: est
第一步: 建立共享文件夹
在程序代码中调用(或者CMD窗口) net share test=e: est
或者用NetShareAdd这个API
简要说明:
net share : 是WINDOWS内部的网络命令。
作用:建立本地的共享资源,显示当前计算机的共享资源信息。
语法:参见 net share /?
第二步: 建立共享信用关系
master..xp_cmdshell 'net use david est 123 /user:domainzf'
简要说明:
1:xp_cmdshell :是SQLSERVER的扩展存储过程。
作用,以操作系统命令行解释器的方式执行给定的命令字符串,
并以文本行方式返回任何输出。
语法:参见SQLSERVER联机帮助
2:net use : 是WINDOWS内部的网络命令。
作用,将计算机与共享资源连接或断开,或者显示关于计算机
连接的信息。该命令还控制持久网络连接。
语法:参见 net use /?
第三步:备份数据库
backup database msdb to disk='david estmsdb.bak'
这个不需要说明吧,语法参见SQLSERVER联机帮助
第四步: 删除共享文件夹
这里其实并不需要其它的什么函数来支持,只需要使用MYSQL提供的一些SQL语句就可以了。
这里为了简单起见,以MYSQL的系统表USER为例,取出SELECT_PRIV这一列的所有可能值。
方法:SHOW COLUMNS FROM table_name LIKE enum_column_name
小写的部分需要根据你的情况改变。
程序:
<?php
//By SonyMusic(sonymusic@163.com)
//HomePage(phpcode.yeah.net)
$connect_hostname="localhost";
$dbname="mysql";
$connect_username = "root";
$connect_pass ="";
$connect_id = mysql_connect($connect_hostname, $connect_username, $connect_pass);
mysql_select_db($dbname);
$query="show columns from user like 'select_priv'";
$result=mysql_db_query($dbname,$query);
$enum=mysql_result($result,0,"type");
echo $enum."<br>";
$enum_arr=explode("(",$enum);
$enum=$enum_arr[1];
$enum_arr=explode(")",$enum);
$enum=$enum_arr[0];
$enum_arr=explode(",",$enum);
for($i=0;$i<count($enum_arr);$i++){
echo $enum_arr[$i]."<br>";
}
?>
字段类型
1.INT[(M)]
正常大小整数类型
2.DOUBLE[(M,D)] [ZEROFILL]
正常大小(双精密)浮点数字类型
3.DATE
日期类型。支持的范围是'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式来显示DATE值,但是允许你使用字符串或数字把值赋给DATE列
4.CHAR(M)
定长字符串类型,当存储时,总是是用空格填满右边到指定的长度
5.BLOB TEXT
BLOB或TEXT类型,最大长度为65535(2^16-1)个字符。
6.VARCHAR
变长字符串类型。
1: 显示数据库
SHOW DATABAS,
2:当前选择的数据库,
mysql> SELECT DATABASE();
------------
| DATABASE() |
------------
| test ;
------------
| DATABASE() |
------------
| test |
------------
当前数据库包含的表信息:
mysql> SHOW TABLES;
---------------------
| Tables in test
mysql> SHOW TABLES;
---------------------
| Tables in test |
---------------------
| mytable1 |
| mytable2 |
---------------------
获取表结构
mysql> desc mytable1;
--------- ------------- ------ ----- --------- -------
| Field mysql> desc mytable1;
--------- ------------- ------ ----- --------- -------
| Field | Type | Null | Key | Default | Extra |
--------- ------------- ------ ----- --------- -------
| s1 | varchar(20) | YES |NULL | |
--------------------- ------ ----- --------- -------
5.导入数据库表
(1)创建.sql文件
(2)先产生一个库如auction.c:mysqlbin>mysqladmin -u root -p creat auction,会提示输入密码,然后成功创建。
(2)导入auction.sql文件
一、搜索通配符字符的说明
可以搜索通配符字符。有两种方法可指定平常用作通配符的字符:
使用 ESCAPE 关键字定义转义符。在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。例如,要搜索在任意位置包含字符串 5% 的字符串,请使用:
WHERE ColumnA LIKE '%5/%%' ESCAPE '/'
在上述 LIKE 子句中,前导和结尾百分号 (%) 解释为通配符,而斜杠 (/) 之后的百分号解释为字符 %。
在方括号 ([ ]) 中只包含通配符本身。要搜索破折号 (-) 而不是用它指定搜索范围,请将破折号指定为方括号内的第一个字符:
WHERE ColumnA LIKE '9[-]5'
下表显示了括在方括号内的通配符的用法。
从Oracle10g开始,Oracle极大的增强了OEM工具,并通过服务器端进行EM工具全面展现。
在10g中,客户端可以不必安装任何Oracle客户端工具,仅凭浏览器就可以调用强大的EM工具。
在Server端,可以通过如下命令启动EM工具控制台:
emctl start dbconsole
以下是启动过程:
[oracle@danaly ~]$ emctl start dbconsole
TZ set to PRC
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.
http://danaly.hurrray.com.cn:1158/em/console/aboutApplication
Starting Oracle Enterprise Manager 10g Database Control .......................... started.
------------------------------------------------------------------
Logs are generated in directory /opt/oracle/product/10.2.0/danaly.hurrray.com.cn_danaly/sysman/log
启动之后我们就可以通过在浏览器端输入以下url访问:
http://danaly.hurrray.com.cn:1158/em/
同样停止OEM可以输入如下命令:
emctl stop dbconsole
以下是停止过程:
[oracle@danaly ~]$ emctl stop dbconsole
TZ set to PRC
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.
http://danaly.hurrray.com.cn:1158/em/console/aboutApplication
Stopping Oracle Enterprise Manager 10g Database Control ...... Stopped.
也可以直接键入emctl查看emctl支持的选项:
[oracle@danaly ~]$ emctl
TZ set to PRC
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.
Invalid arguments
Unknown command option
Usage::
Oracle Enterprise Manager 10g Database Control commands:
emctl start| stop| status| setpasswd dbconsole
文章的前提阐述完了,就该说说如何具体实现吧。其实都很简单,我想写个远程备份的测试实例
给大家看,就能够很清楚的描述吧!
实例说明:
环境:win2k sqlserver 2K 查询分析器
SQLSERVER服务实例名称:mainserver
需要备份的数据库名称: msdb
本地机器名称(Client端):david
本地用户:zf 密码:123
本地域名:domain
本地提供备份需求的文件夹:e: est
第一步: 建立共享文件夹
在程序代码中调用(或者CMD窗口) net share test=e: est
或者用NetShareAdd这个API
简要说明:
net share : 是WINDOWS内部的网络命令。
作用:建立本地的共享资源,显示当前计算机的共享资源信息。
语法:参见 net share /?
第二步: 建立共享信用关系
master..xp_cmdshell 'net use david est 123 /user:domainzf'
简要说明:
1:xp_cmdshell :是SQLSERVER的扩展存储过程。
作用,以操作系统命令行解释器的方式执行给定的命令字符串,
并以文本行方式返回任何输出。
语法:参见SQLSERVER联机帮助
2:net use : 是WINDOWS内部的网络命令。
作用,将计算机与共享资源连接或断开,或者显示关于计算机
连接的信息。该命令还控制持久网络连接。
语法:参见 net use /?
第三步:备份数据库
backup database msdb to disk='david estmsdb.bak'
这个不需要说明吧,语法参见SQLSERVER联机帮助
第四步: 删除共享文件夹
这里其实并不需要其它的什么函数来支持,只需要使用MYSQL提供的一些SQL语句就可以了。
这里为了简单起见,以MYSQL的系统表USER为例,取出SELECT_PRIV这一列的所有可能值。
方法:SHOW COLUMNS FROM table_name LIKE enum_column_name
小写的部分需要根据你的情况改变。
程序:
<?php
//By SonyMusic(sonymusic@163.com)
//HomePage(phpcode.yeah.net)
$connect_hostname="localhost";
$dbname="mysql";
$connect_username = "root";
$connect_pass ="";
$connect_id = mysql_connect($connect_hostname, $connect_username, $connect_pass);
mysql_select_db($dbname);
$query="show columns from user like 'select_priv'";
$result=mysql_db_query($dbname,$query);
$enum=mysql_result($result,0,"type");
echo $enum."<br>";
$enum_arr=explode("(",$enum);
$enum=$enum_arr[1];
$enum_arr=explode(")",$enum);
$enum=$enum_arr[0];
$enum_arr=explode(",",$enum);
for($i=0;$i<count($enum_arr);$i++){
echo $enum_arr[$i]."<br>";
}
?>
字段类型
1.INT[(M)]
正常大小整数类型
2.DOUBLE[(M,D)] [ZEROFILL]
正常大小(双精密)浮点数字类型
3.DATE
日期类型。支持的范围是'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式来显示DATE值,但是允许你使用字符串或数字把值赋给DATE列
4.CHAR(M)
定长字符串类型,当存储时,总是是用空格填满右边到指定的长度
5.BLOB TEXT
BLOB或TEXT类型,最大长度为65535(2^16-1)个字符。
6.VARCHAR
变长字符串类型。
1: 显示数据库
SHOW DATABAS,
2:当前选择的数据库,
mysql> SELECT DATABASE();
------------
| DATABASE() |
------------
| test ;
------------
| DATABASE() |
------------
| test |
------------
当前数据库包含的表信息:
mysql> SHOW TABLES;
---------------------
| Tables in test
mysql> SHOW TABLES;
---------------------
| Tables in test |
---------------------
| mytable1 |
| mytable2 |
---------------------
获取表结构
mysql> desc mytable1;
--------- ------------- ------ ----- --------- -------
| Field mysql> desc mytable1;
--------- ------------- ------ ----- --------- -------
| Field | Type | Null | Key | Default | Extra |
--------- ------------- ------ ----- --------- -------
| s1 | varchar(20) | YES |NULL | |
--------------------- ------ ----- --------- -------
5.导入数据库表
(1)创建.sql文件
(2)先产生一个库如auction.c:mysqlbin>mysqladmin -u root -p creat auction,会提示输入密码,然后成功创建。
(2)导入auction.sql文件
一、搜索通配符字符的说明
可以搜索通配符字符。有两种方法可指定平常用作通配符的字符:
使用 ESCAPE 关键字定义转义符。在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。例如,要搜索在任意位置包含字符串 5% 的字符串,请使用:
WHERE ColumnA LIKE '%5/%%' ESCAPE '/'
在上述 LIKE 子句中,前导和结尾百分号 (%) 解释为通配符,而斜杠 (/) 之后的百分号解释为字符 %。
在方括号 ([ ]) 中只包含通配符本身。要搜索破折号 (-) 而不是用它指定搜索范围,请将破折号指定为方括号内的第一个字符:
WHERE ColumnA LIKE '9[-]5'
下表显示了括在方括号内的通配符的用法。
从Oracle10g开始,Oracle极大的增强了OEM工具,并通过服务器端进行EM工具全面展现。
在10g中,客户端可以不必安装任何Oracle客户端工具,仅凭浏览器就可以调用强大的EM工具。
在Server端,可以通过如下命令启动EM工具控制台:
emctl start dbconsole
以下是启动过程:
[oracle@danaly ~]$ emctl start dbconsole
TZ set to PRC
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.
http://danaly.hurrray.com.cn:1158/em/console/aboutApplication
Starting Oracle Enterprise Manager 10g Database Control .......................... started.
------------------------------------------------------------------
Logs are generated in directory /opt/oracle/product/10.2.0/danaly.hurrray.com.cn_danaly/sysman/log
启动之后我们就可以通过在浏览器端输入以下url访问:
http://danaly.hurrray.com.cn:1158/em/
同样停止OEM可以输入如下命令:
emctl stop dbconsole
以下是停止过程:
[oracle@danaly ~]$ emctl stop dbconsole
TZ set to PRC
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.
http://danaly.hurrray.com.cn:1158/em/console/aboutApplication
Stopping Oracle Enterprise Manager 10g Database Control ...... Stopped.
也可以直接键入emctl查看emctl支持的选项:
[oracle@danaly ~]$ emctl
TZ set to PRC
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.
Invalid arguments
Unknown command option
Usage::
Oracle Enterprise Manager 10g Database Control commands:
emctl start| stop| status| setpasswd dbconsole
上一篇: SQL中HAVING从句的用法
下一篇: 精通数据库系列之入门-基础篇1
相关文章
- Create Procedure AtoC @ChangeMoney Money as Set Nocount ON Declare @String1 char(20) Declare @String2 char(30) ...2016-11-25
- 存储过程在数据库的应用中我们用到的非常的多了,下面我们来看一篇关于PHP操作MSSQL存储过程修改用户密码的例子,具体的如下所示。 mssql2008 存储过程 下面可以直接...2016-11-25
- 深入解析Linux下MySQL数据库的备份与还原...2013-09-11
- 具体详情请看下文小编给大家带来的知识点。同编写程序类似,存储过程中也有对应的条件判断,功能类似于if、switch。在MySql里面对应的是IF和CASE1、IF判断IF判断的格式是这样的:IF expression THEN commands [ELSEIF ex...2015-10-21
SQL Server中row_number函数的常见用法示例详解
这篇文章主要给大家介绍了关于SQL Server中row_number函数的常见用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08- 这篇文章主要介绍了C#查询SqlServer数据库并返回单个值的方法,涉及C#操作SQLServer数据库查询的相关技巧,需要的朋友可以参考下...2020-06-25
- MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:/Program Files/MySQL/MySQL Server 4.1/bin (或者直接将windows的环境变量path中添加该目录) ...2013-09-26
- 本文章来给大家详细介绍在php中如何来调用执行mysql存储过程然后返回由存储过程返回的值了,有需要了解的同学可进入参考。 。调用存储过程的方法。 a。如果存储过...2016-11-25
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 'WIN-8IVSNAQS8T7\Administrator' 的信息,错误代码 0x534。 [SQLSTATE 42000] (ConnIsLoginSysAdmin)...2021-07-15- 一、备份的目的做灾难恢复:对损坏的数据进行恢复和还原需求改变:因需求改变而需要把数据还原到改变以前测试:测试新功能是否可用二、备份需要考虑的问题可以容忍丢失多长时间的数据;恢复数据要在多长时间内完; 恢复的时候...2013-10-04
- 这篇文章主要给大家介绍了关于SQL SERVER迁移之更换磁盘文件夹的完整步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08
- 这篇文章主要介绍了CentOS8安装SQLServer2019的步骤,本文通过命令实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
- 这篇文章主要介绍了C#调用存储过程的方法,结合实例形式详细分析了各种常用的存储过程调用方法,包括带返回值、参数输入输出等,需要的朋友可以参考下...2020-06-25
- 本文将基于三大范式原则,结合具体的实例做简要分析,对SqlServer 数据库 三大 范式相关知识感兴趣的朋友一起看看吧...2020-07-11
- 复制代码 代码如下:call PROCEDURE_split('分享,代码,片段',',');select * from splittable;复制代码 代码如下:drop PROCEDURE if exists procedure_split;CREATE PROCEDURE `procedure_split`( inputstring varc...2014-05-31
- 备份:表结构和数据完全分开,默认有一个文件会记录所有表的结构,然后表中数据的备份 如果超过分卷的大小则会分成多个文件,不然则一个文件,参考了别人的代码,不过写的嘛,差强 人意,以后慢慢改吧。。。代码如下:复制代码 代码如...2014-05-31
MySQL数据库遭到攻击篡改(使用备份和binlog进行数据恢复)
这篇文章主要介绍了MySQL数据库遭到攻击篡改(使用备份和binlog进行数据恢复),需要的朋友可以参考下...2016-04-26- 这篇文章主要给大家介绍了关于sql server日志处理不当造成的隐患的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用sql server具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-07-11
- 本文给大家简单介绍下c实现linux下的数据库备份的方法和具体的源码,十分的实用,有需要的小伙伴可以参考下。...2020-04-25
- 这篇文章主要介绍了sqlserver添加sa用户和密码的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-07