当前位置:首页 » 工具五金 » 数据库ctm调度工具怎么使用
扩展阅读
应该增加什么类型的资源 2025-05-11 04:38:27
并发性用什么测试工具 2025-05-11 04:38:18

数据库ctm调度工具怎么使用

发布时间: 2023-03-24 23:49:38

① ORA-08103

没有一个异常是无缘故的,就像恐怖片里的故事,我们观众一路看下来都觉得疑点重重,好几处证据,好些角色的行为都很诡异,但是我们就是查不到原因,找不到答案。等到疑点之间开始有联系,从已知联系去关联至其他需要处理的难题上才把难题解决。问题解决完后,之前的所有疑点才个个地解开,真相大白。。。。

就如昨天遇到的报错一样,CTM生产环境报了下面的错误:

The Ocl function execute Direct returned status-1. Error code: 8103,Error message

ORA-08103: obiect no longer exists(...)

背景是共有4个作业ABCD。C作业报了ORA-08103的错,而这个报错情况是,C在SELECT的时候,同时有DDL操作(通常是 TRUNCATE),SELECT和 TRUNCATE并行操作,从而导致“obiect no longer exists”的报错。查了作业控件里SQL放置,并没有与其他正常作业有异常。到堡垒机查询目标表,可以看到B、C两个作业的目标表一直在刷新,从上午到中午,理论上应的作业都是在调的,但是作业就停在上午八点了。另外A、D作业的颂改目标表和CTM调度状态一样都是在8点再也没有刷新。

这也是,8点这个时刻的C作业已经报错了,如果不处理C那不会生产一个新任务再循环调度。

突然想到昨晚在新ODS库部署名字相似的作业可能昨晚上线的作业和LTS在调我旧ODS库的作业。这里规划的是CTM配置的是日ODS库,LTS配置的是新ODS库。因此我打开新ODS库把这个任务我的所有作业都查了ー下发现,只有AD作业配置在新库的目标表有数据而BC对应的目标表均无数据。一下子突然搞清楚了,原来是昨晚试部署LTS调度(项目组开始使用LTS慢慢替换CTM调度工具),实施人员选错选了我的旧库的DS名(4个作业选了2个)用TS调度了我旧ODS的DS。I旧DS上配置的参数野亮判是旧库的,新DS配置的参数是新库的。新DS没被选到的,所以新库对应大目键乱标表均无数居,有被选到的才有数据,同时LTS选中的旧的DS就和CTM里一致了,同时调度就会报错,就在8点开始了同时调度(作业C)的操作就报错了。

任务中有一个作业报错,需要处理这个作业这个任务才会完成;在这个作业还没有处理的时,那其他作业即使正常调度也不会进入下一个新执行环节。因而作业ABD当时均无调度。

② 什么是ETL调度系统

对于做过 BI 开发的朋友,ETL 并不陌生,只要涉及到数据源的数据抽取、数据的计算和处理过程的开发,都是 ETL,ETL 就这三个阶段,Extraction 抽取,Transformation 转换,Loading 加载。


从不同数据源抽取数据 EXTRACTION ,按照一定的数据处理规则对数据进行加工和格式转换 TRASFORMATION,最后处理完成的输出到目标数据表中也有可能是文件等等,这个就是 LOADING。

再通俗一点讲,ETL 的过程就跟大家日常做菜一样,需要到菜市场的各个摊位买好菜,把菜买回来要摘一下,洗一洗,切一切最后下锅把菜炒好端到饭桌上。菜市场的各个摊位就是数据源,做好的菜就是最终的输出结果,中间的所有过程像摘菜、洗菜、切菜、做菜就是转换。
在开发者歼的时候,大部分时候会通过 ETL 工具去实现,比如常用的像 KETTLE、PENTAHO、IBM DATASTAGE、INFORNAICA、微软 SQL SERVER 里面的 SSIS 等等,在结合基本的 SQL 来实现整个 ETL 过程。


也有的是自己通过程序开发,然后控制一些数据处理脚本跑批,基本上就是程序加 SQL 实现。
哪种方式更好,也是需要看使用场景和开发人员对那种方式使用的更加得心应手。我看大部分软件程序开发人员出身的,碰到数据类项目会比较喜欢用程序控制跑批,这是程序思维的自然延续。纯 BI 开发人员大部分自然就选择成熟的 ETL 工具来开发,当然也有一上来就写程序脚本的,这类 BI 开发人员的师傅基本上是程序人员转过来的。


用程序的好处就是适配性强,可扩展性强,可以集成或拆解到到任何的程序处理过程中,有的时候使用程序开发效率更高。难就难在对维护人员有一定的技术要求,经验转移和可复制性不够。


用 ETL 工具的好处,第一是整个 ETL 的开发过程可视化了,特别是在数据处理流程的分层设计中可以很清晰的管理。第二是链接到不同数据源的时候,各种数据源、数据库的链接协议已经内置了,直接配置就可以,不需要再去写程序去实现。第三是各种转换控件基本上拖拉拽就可以使用,起到简化的代替一部分 SQL 的开发,不需要写代码去实现扮陪。第四是可以非常灵活的设计各种 ETL 调度规则,高度配置化,这个也不需要写代码实现。


所以在大多数通用的项目中,在项目上使用 ETL 标准组件开发会比较多一些。


ETL 从逻辑上一般可以分为两层,控制流和数据流,这也是很多 ETL 工具设计的理念,不同的 ETL 工具可能叫法不同。


控制流就是控制每一个数据流与数据流处理的先后流程,一个控制流可以包含多个数据流。比厅嫌蠢如在数据仓库开发过程中,第一层的处理是ODS层或者Staging 层的开发,第二层是DIMENSION维度层的开发,后面几层就是DW 事实层、DM数据集市层的开发。通过ETL的调度管理就可以让这几层串联起来形成一个完整的数据处理流程。


数据流就是具体的从源数据到目标数据表的数据转换过程,所以也有 ETL 工具把数据流叫做转换。在数据流的开发设计过程中主要就是三个环节,目标数据表的链接,这两个直接通过 ETL 控件配置就可以了。中间转换的环节,这个时候就可能有很多的选择了,调 SQL 语句、存储过程,或者还是使用 ETL 控件来实现。


有的项目上习惯使用 ETL 控件来实现数据流中的转换,也有的项目要求不使用标准的转换组件使用存储过程来调用。也有的是因为数据仓库本身这个数据库不支持存储过程就只能通过标准的SQL来实现。


我们通常讲的BI数据架构师其实指的就是ETL的架构设计,这是整个BI项目中非常核心的一层技术实现,数据处理、数据清洗和建模都是在ETL中去实现。一个好的ETL架构设计可以同时支撑上百个包就是控制流,每一个控制流下可能又有上百个数据流的处理过程。之前写过一篇技术文章,大家可以搜索下关键字 BIWORK ETL 应该在网上还能找到到这篇文章。这种框架设计不仅仅是ETL框架架构上的设计,还有很深的ETL项目管理和规范性控制器思想,包括后期的运维,基于BI的BI分析,ETL的性能调优都会在这些框架中得到体现。因为大的BI项目可能同时需要几十人来开发ETL,框架的顶层设计就很重要。

③ 如何使用Airflow调度数据科学工作流

步骤一:安装Airflow

docker pull airflow

1

docker pull airflow

步骤二:修改默认路径

这里如果不修改路径,默认的配置就是 ~/airflow

临时修改 AIRFLOW_HOME 环境变量, 这里的 /home/airflow 可以替换成你想要的文件夹目录

export AIRFLOW_HOME=/home/airflow

1

export AIRFLOW_HOME=/home/airflow

永久修改环境变量

echo "export AIRFLOW_HOME=/home/airflow" >> /etc/profile
source /etc/profile

1
2

echo "export AIRFLOW_HOME=/home/airflow" >> /etc/profile
source /etc/profile

系统默认的配置文件是从 airflow包的configuration.py文件中获祥戚取的,在设置了路径和airflow.cfg之后,配置培友将由airflow.cfg所替代。

步骤三:修改默认数据库

找到配置文件

vi /home/airflow/airflow.cfg

1

vi /home/airflow/airflow.cfg

修改sql配置

sql_alchemy_conn = mysql://root:FinanceR@localhost:3306/airflow

1

sql_alchemy_conn = mysql://root:FinanceR@localhost:3306/谨中陵airflow

注意到,之前使用的 mysql+driver://root:FinanceR@localhost:3306/airflow的方式是行不通的。

初始化服务器的数据库

airflow initdb

1

airflow initdb

airflow webserver

1

airflow webserver

就可以开启后台管理界面,默认访问localhost:8080即可。

步骤四:修改数据源配置

通过create按钮,添加相应的参数

步骤五:解决中文字符集显示问题

注意到 airflow 的所有.py文件都声明了 utf-8 字符集

# -*- coding: utf-8 -*-

1

# -*- coding: utf-8 -*-

如果需要显示中文,需要在extra选项中添加
{"charset":"utf8"}的配置

④ 调度工具(ETL+任务流)

kettle是一个ETL工具,ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程)。
kettle中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。
所以他的重心是用于数据
oozie是一个工作流,Oozie工作流是放置在控制依赖DAG(有向无环图桐顷 Direct Acyclic Graph)中的一组动作(例如,Hadoop的Map/Rece作业、Pig作业等),其中指定了动作执行的顺序。
oozie工作流中是有数据流动的,但是重心是在于工作流的定义。
二者虽然都有相关功能及数据的流动,但是其实用途是不一样的。

查看帮助

列举出所有linux上的数据库

列举出所有Window上的数据库

查看数据库下的所有表

(1)确定mysql服务启动正常

查询控制端口和查询进程来确定,一下两种办法可以确认mysql是否在启动状态

办法1:查询端口

MySQL监控的TCP的3306端口,如果显示3306,证明MySQL服务在运行中

办法二:查询进程

可以看见mysql的进程

没有指定数据导入到哪个目录,默认是/user/root/表名

原因:

如果表中有主键,m的值可以设置大于1的值;如果没有主键只能将m值设置成为1;或者要将m值大于1,需要使用--split-by指定一个字段

设置了-m 1 说明只有一个maptask执行数据导入,默认是4个maptask执行导入操作,但是必须指定一个列来作为划分依据

导入数据到指定目录

在导入表数据到HDFS使用Sqoop导入工具,我们可以指定目标目录。使用参数 --target-dir来指定导出目的地,使用参数—delete-target-dir来判断导出目录是否存在,如果存在就删掉

查询导入

提示:must contain '$CONDITIONS' in WHERE clause。

where id <=1 匹配条件

$CONDITIONS:传递作用。

如果 query 后使用的是双引号,则 $CONDITIONS前必须加转义符,防止 shell 识别为自己的变量。

--query时不能使用--table一起使用

需要指定--target-dir路径

导入到hdfs指定目录并指茄运定局纳陆要求

数据导出储存方式(数据存储文件格式---( textfil parquet)--as-textfileImports data as plain text (default)--as-parquetfile Imports data to Parquet Files)

导入表数据子集到HDFS

sqoop导入blob数据到hive

对于CLOB,如xml文本,sqoop可以迁移到Hive表,对应字段存储为字符类型。
对于BLOB,如jpg图片,sqoop无法直接迁移到Hive表,只能先迁移到HDFS路径,然后再使用Hive命令加载到Hive表。迁移到HDFS后BLOB字段存储为16进制形式。

2.1.3导入关系表到Hive

第一步:导入需要的jar包

将我们mysql表当中的数据直接导入到hive表中的话,我们需要将hive的一个叫做hive-exec-1.1.0-cdh5.14.0.jar的jar包拷贝到sqoop的lib目录下

第二步:开始导入

导入关系表到hive并自动创建hive表

们也可以通过命令来将我们的mysql的表直接导入到hive表当中去

通过这个命令,我们可以直接将我们mysql表当中的数据以及表结构一起倒入到hive当中去

--incremental 增量模式。

append id 是获取一个某一列的某个值。

lastmodified “2016-12-15 15:47:35” 获取某个时间后修改的所有数据

-append 附加模式

-merge-key id 合并模式

--check-column 用来指定一些列,可以去指定多个列;通常的是指定主键id

--last -value 从哪个值开始增量

==注意:增量导入的时候,一定不能加参数--delete-target-dir 否则会报错==

第一种增量导入方式(不常用)

1.Append方式

使用场景:有个订单表,里面每个订单有一个唯一标识的自增列id,在关系型数据库中以主键的形式存在。之前已经将id在0-1000之间的编号的订单导入到HDFS 中;如果在产生新的订单,此时我们只需指定incremental参数为append,--last-value参数为1000即可,表示只从id大于1000后开始导入。

(1)创建一个MySQL表

(2)创建一个hive表(表结构与mysql一致)

注意:

append 模式不支持写入到hive表中

2.lastModify方式

此方式要求原有表有time字段,它能指定一个时间戳,让sqoop把该时间戳之后的数据导入到HDFS;因为后续订单可能状体会变化,变化后time字段时间戳也会变化,此时sqoop依然会将相同状态更改后的订单导入HDFS,当然我们可以只当merge-key参数为order-id,表示将后续新的记录和原有记录合并。

# 将时间列大于等于阈值的数据增量导入HDFS

使用 lastmodified 方式导入数据,要指定增量数据是要 --append(追加)还是要 --merge-key(合并)last-value 指定的值是会包含于增量导入的数据中。

第二种增量导入方式(推荐)

==通过where条件选取数据更加精准==

2.1.5从RDBMS到HBase

会报错

原因:sqoop1.4.6 只支持 HBase1.0.1 之前的版本的自动创建 HBase 表的功能。

解决方案:手动创建 HBase 表

导出前,目标表必须存在与目标数据库中

默认操作是将文件中的数据使用insert语句插入到表中

数据是在HDFS当中的如下目录/sqoop/emp,数据内容如下

第一步:创建MySQL表

第二步:执行导出命令

通过export来实现数据的导出,将hdfs的数据导出到mysql当中去

全量导出

增量导出

更新导出

总结:

参数介绍
--update-key 后面也可以接多个关键字列名,可以使用逗号隔开,Sqoop将会匹配多个关键字后再执行更新操作。
--export-dir 参数配合--table或者--call参数使用,指定了HDFS上需要将数据导入到MySQL中的文件集目录。
--update-mode updateonly和allowinsert。 默认模式为updateonly,如果指定--update-mode模式为allowinsert,可以将目标数据库中原来不存在的数据也导入到数据库表中。即将存在的数据更新,不存在数据插入。
组合测试及说明
1、当指定update-key,且关系型数据库表存在主键时:
A、allowinsert模式时,为更新目标数据库表存的内容,并且原来不存在的数据也导入到数据库表;
B、updateonly模式时,为更新目标数据库表存的内容,并且原来不存在的数据也不导入到数据库表;
2、当指定update-key,且关系型数据库表不存在主键时:
A、allowinsert模式时,为全部数据追加导入到数据库表;
B、updateonly模式时,为更新目标数据库表存的内容,并且原来不存在的数据也不导入到数据库表;
3、当不指定update-key,且关系型数据库表存在主键时:
A、allowinsert模式时,报主键冲突,数据无变化;
B、updateonly模式时,报主键冲突,数据无变化;
4、当不指定update-key,且关系型数据库表不存在主键时:
A、allowinsert模式时,为全部数据追加导入到数据库表;
B、updateonly模式时,为全部数据追加导入到数据库表;

实际案例:

(1)mysql批量导入hive

使用shell脚本:

笔者目前用sqoop把mysql数据导入到Hive中,最后实现命令行导入,sqoop版本1.4.7,实现如下

最后需要把这个导入搞成job,每天定时去跑,实现数据的自动化增量导入,sqoop支持job的管理,可以把导入创建成job重复去跑,并且它会在metastore中记录增值,每次执行增量导入之前去查询

创建job命令如下

创建完job就可以去执行它了

sqoop job --exec users

可以把该指令设为Linux定时任务,或者用Azkaban定时去执行它

hive导出到MySQL时,date类型数据发生变化?

问题原因:时区设置问题,date -R查看服务器时间,show VARIABLES LIKE "%time_zone"查看Mysql时间,system并不表示中国的标准时间,要将时间设置为东八区

(1):对市面上最流行的两种调度器,给出以下详细对比,以供技术选型参考。总体来说,ooize相比azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果可以不在意某些功能的缺失,轻量级调度器azkaban是很不错的候选对象。

(2):功能:

两者均可以调度maprece,pig,java,脚本工作流任务;

两者均可以定时执行工作流任务;

(3):工作流定义:

Azkaban使用Properties文件定义工作流;

Oozie使用XML文件定义工作流;

(4):工作流传参:

Azkaban支持直接传参,例如${input};

Oozie支持参数和EL表达式,例如${fs:dirSize(myInputDir)};

(5):定时执行:

Azkaban的定时执行任务是基于时间的;

Oozie的定时执行任务基于时间和输入数据;

(6):资源管理

Azkaban有较严格的权限控制,如用户对工作流进行读/写/执行等操作;

Oozie暂无严格的权限控制;

(7):工作流执行:

Azkaban有两种运行模式,分别是solo server mode(executor server和web server部署在同一台节点)和multi server mode(executor server和web server可以部署在不同节点);

Oozie作为工作流服务器运行,支持多用户和多工作流;

(8):工作流管理:

Azkaban支持浏览器以及ajax方式操作工作流;

Oozie支持命令行、HTTP REST、Java API、浏览器操作工作流;

浏览器页面访问

http://node03:8081/

使用Oozie时通常整合hue,用户数据仓库调度

就是刚才选择的脚本

脚本里需要的参数,尽量设置为动态自动获取,如 ${date}

第一步的参数是所有文件和当天日期,后面的只需要日期,最后一步是导出所有结果,相应填入

添加文件和设置相应参数

运行后会有状态提示页面,可以看到任务进度

点击调度任务的页面情况

修改定时任务名和描述

添加需要定时调度的任务

sm-workflow的参数都是写死的,没有设置动态,这里的下拉列表就不会有可选项。

设置参数

将sm-workflow的日期修改为 ${do_date},保存

进入定时计划sm-dw中,会看到有参数 do_date

填入相应参数,前一天日期

Oozie常用系统常量

当然,也可以通过这样将参数传入workflow任务中,代码或者shell中需要的参数。

如,修改sm-workflow 中的 sqoop_import.sh,添加一个参数 ${num}。

编辑文件(需要登陆Hue的用户有对HDFS操作的权限),修改shell中的一个值为参数,保存。

在workflow中,编辑添加参数 ${num} ,或者num=${num} 保存。

进入schele中,可以看到添加的参数,编辑输入相应参数即可。

Bundle统一管理所有定时调度,阶段划分:Bundle > Schele > workflow

⑤ CTM:如何新建作业流

从前都是在同一个已经建好的作业流做JOB的CTM调度,现在新项目开发新主题需要新建作业流。不同的作业流代表不同的主题,在CTM的EXCEL调度文件中作业流的命名格式为:SEQ_***。

我的错误的作法是:最先是在应用程序CTM的Planning处找到SMART_FOLDER任务(TASK_开头)所在处,打开并选定该作业,CHECK_OUT,拖新建的Folder在SEQ_层并根据需求命好名,CHECK_IN。在调度文件EXCEL文本的SUB_FOLDER定义信息把新建作作业流以及依赖关系模仿其他已存在作业流填进去。新建作业流需要和SEQ_层并根据需求命好名,CHECK_IN。在调度文件EXCEL文本的SUB_FOLDER定义信息把新建作业流以及依赖关系咐庆弊模仿其他已存在作业流填进去。新建作业流需要和SEQ_GETDATE_与SEQ_UPDATE_建立依赖关系。把该EXCEL通过网页导进去后,在应用程序查看发现依赖关系并没有建立。查询了EXCEL填写规范也没有问题。这里犯的失误是导入的EXCEL文件关于作业流的并不能产生影响(只有JOB定义信息和作业变更两个SHEET对调度产生影响)这该怎么办?

正确的新建作业流方法是先把SEQ_在应用程序建好,在自主实施的情况下有两种方法可以把依赖拉上。方法一是直接在界面对需要依赖的电子流拖上去,双差改方形成对应箭头;方法二是先CHECK_OUT,在新建作业流的参衡族数的PREREQUISITES(预请求站点)放置前置依赖,勾选DELETE,在ACTION处放置后置依赖,VALIDATE,CHECK_IN。依赖即可建上。自动实施的情况是把整个TASK_转换成XML在平台上全量导入即可。后面的方法还没试过。

⑥ 如何实现同步两个服务器的数据库

同步两个SQLServer数据库x0dx0ax0dx0a如何同步两个sqlserver数据库的内容?程序代码可以有版本管理cvs进行闷亩同步管理,可是数据库同步就非常麻烦,只能自己改了一个后再去改另一个,如果忘记了更改另一个经常造成两个数据库的结构或内容上不一致.各位有什么好的方法吗?x0dx0ax0dx0a一、分发与复制x0dx0ax0dx0a用强制订阅实现数据库同步操作. 大量和批量的数据可以用数据库的同步机制处理:x0dx0a//x0dx0a说明:x0dx0a为方便操作,所有操作均在发布服务器(分发服务器)上操作,并使用推模式x0dx0a在客户机器使用强制订阅方式。x0dx0ax0dx0a二、测试通过x0dx0ax0dx0a1:环境x0dx0ax0dx0a服务器环境:x0dx0a机器名称: zehuadbx0dx0a操作系统:windows 2000 serverx0dx0a数据库版本:sql 2000 server 个人版x0dx0ax0dx0a客户端x0dx0a机器名称:zlpx0dx0a操作系统:windows 2000 serverx0dx0a数据库版本:sql 2000 server 个人版x0dx0ax0dx0a2:建用户帐号x0dx0ax0dx0a在服务器端建立域用户帐号x0dx0a我的电脑管理->本地用户和组->用户->建立x0dx0ausername:zlpx0dx0auserpwd:zlpx0dx0ax0dx0a3:重新启动服务器mssqlserverx0dx0ax0dx0a我的电脑->控制面版->管理工具->服务->mssqlserver 服务x0dx0a(更改为:域用户帐号,我们新建的zlp用户 .\zlp,密码:zlp)x0dx0ax0dx0a4:安装分发服务器x0dx0ax0dx0aa:配置分发服务器x0dx0a工具->复制->配置发布、订阅服务器和分发->下一步->下一步(所有的均采用默认配置)x0dx0ax0dx0ab:配置发布服务器x0dx0a工具->复制->创建和管理发布->选择要发布的数据库(sz)->下一步->快照发布->下一步->选择要发布的内容->下一步->下一步->下一步->完成x0dx0ax0dx0ac:强制配置订阅服务器(推模式,拉模式与此雷同)x0dx0a工具->复制->配置发布、订阅服务器和分发->订阅服务器->新建->sql server数据库->输入客户端服务器名称(zlp)->使用sql server 身份验证(sa,空密码)->确定->应用->确定x0dx0ax0dx0ad:初始化订阅x0dx0a复制监视器->发布服务器(zehuadb)->双击订阅->强制新建->下一步->选择启用的订阅服务器->zlp->下一步->下一步->下一步->下一步->完成x0dx0ax0dx0a5:测试配置是否成功x0dx0ax0dx0a复制监视器->发布衿?zehuadb)->双击sz:sz->点状态->点立即运行代理程序x0dx0ax0dx0a查看:x0dx0a复制监视器->发布服务器(zehuadb)->sz:sz->选择zlp:sz(类型强制)->鼠标右键->启动同步处理x0dx0ax0dx0a如果没有错误标志(红色叉),恭喜您配置成功x0dx0ax0dx0a6:测试数据x0dx0ax0dx0a在服务器执行:x0dx0ax0dx0a选毁罩吵择一个表,执行如下sql: insert into wq_newsgroup_s select '测试成功',5x0dx0ax0dx0a复制监视器->发布服务器(zehuadb)->sz:sz->快照->启动代理程序 ->zlp:sz(强制)->启动同步处理x0dx0ax0dx0a去查纤侍看同步的 wq_newsgroup_s 是否插入了一条新的记录x0dx0ax0dx0a测试完毕,通过。x0dx0a7:修改数据库的同步时间,一般选择夜晚执行数据库同步处理x0dx0a(具体操作略) :dx0dx0ax0dx0a/*x0dx0a注意说明:x0dx0a服务器一端不能以(local)进行数据的发布与分发,需要先删除注册,然后新建注册本地计算机名称x0dx0ax0dx0a卸载方式:工具->复制->禁止发布->是在"zehuadb"上静止发布,卸载所有的数据库同步配置服务器x0dx0ax0dx0a注意:发布服务器、分发服务器中的sqlserveragent服务必须启动x0dx0a采用推模式: "d:\microsoft sql server\mssql\repldata\unc" 目录文件可以不设置共享x0dx0a拉模式:则需要共享~!x0dx0a*/x0dx0a少量数据库同步可以采用触发器实现,同步单表即可。x0dx0ax0dx0a三、配置过程中可能出现的问题x0dx0ax0dx0a在sql server 2000里设置和使用数据库复制之前,应先检查相关的几台sql server服务器下面几点是否满足:x0dx0ax0dx0a1、mssqlserver和sqlserveragent服务是否是以域用户身份启动并运行的(.\administrator用户也是可以的)x0dx0ax0dx0a如果登录用的是本地系统帐户local,将不具备网络功能,会产生以下错误:x0dx0ax0dx0a进程未能连接到distributor '@server name'x0dx0ax0dx0a(如果您的服务器已经用了sql server全文检索服务, 请不要修改mssqlserver和sqlserveragent服务的local启动。x0dx0a会照成全文检索服务不能用。请换另外一台机器来做sql server 2000里复制中的分发服务器。)x0dx0ax0dx0a修改服务启动的登录用户,需要重新启动mssqlserver和sqlserveragent服务才能生效。x0dx0ax0dx0a2、检查相关的几台sql server服务器是否改过名称(需要srvid=0的本地机器上srvname和datasource一样)x0dx0ax0dx0a在查询分析器里执行:x0dx0ause masterx0dx0aselect srvid,srvname,datasource from sysserversx0dx0ax0dx0a如果没有srvid=0或者srvid=0(也就是本机器)但srvname和datasource不一样, 需要按如下方法修改:x0dx0ax0dx0ause masterx0dx0agox0dx0a-- 设置两个变量x0dx0adeclare @serverproperty_servername varchar(100),x0dx0a@servername varchar(100)x0dx0a-- 取得windows nt 服务器和与指定的 sql server 实例关联的实例信息x0dx0aselect @serverproperty_servername = convert(varchar(100), serverproperty('servername'))x0dx0a-- 返回运行 microsoft sql server 的本地服务器名称x0dx0aselect @servername = convert(varchar(100), @@servername)x0dx0a-- 显示获取的这两个参数x0dx0aselect @serverproperty_servername,@servernamex0dx0a--如果@serverproperty_servername和@servername不同(因为你改过计算机名字),再运行下面的x0dx0a--删除错误的服务器名x0dx0aexec sp_dropserver @server=@servernamex0dx0a--添加正确的服务器名x0dx0aexec sp_addserver @server=@serverproperty_servername, @local='local'x0dx0ax0dx0a修改这项参数,需要重新启动mssqlserver和sqlserveragent服务才能生效。x0dx0ax0dx0a这样一来就不会在创建复制的过程中出现18482、18483错误了。x0dx0ax0dx0a3、检查sql server企业管理器里面相关的几台sql server注册名是否和上面第二点里介绍的srvname一样x0dx0ax0dx0a不能用ip地址的注册名。x0dx0ax0dx0a(我们可以删掉ip地址的注册,新建以sql server管理员级别的用户注册的服务器名)x0dx0ax0dx0a这样一来就不会在创建复制的过程中出现14010、20084、18456、18482、18483错误了。x0dx0ax0dx0a4、检查相关的几台sql server服务器网络是否能够正常访问x0dx0ax0dx0a如果ping主机ip地址可以,但ping主机名不通的时候,需要在x0dx0ax0dx0awinnt\system32\drivers\etc\hosts (win2000)x0dx0awindows\system32\drivers\etc\hosts (win2003)x0dx0ax0dx0a文件里写入数据库服务器ip地址和主机名的对应关系。x0dx0ax0dx0a例如:x0dx0ax0dx0a127.0.0.1 localhostx0dx0a192.168.0.35 oracledb oracledbx0dx0a192.168.0.65 fengyu02 fengyu02x0dx0a202.84.10.193 bj_db bj_dbx0dx0a或者在sql server客户端网络实用工具里建立别名,例如:x0dx0a5、系统需要的扩展存储过程是否存在(如果不存在,需要恢复):x0dx0ax0dx0asp_addextendedproc 'xp_regenumvalues',@dllname ='xpstar.dll'x0dx0agox0dx0asp_addextendedproc 'xp_regdeletevalue',@dllname ='xpstar.dll'x0dx0agox0dx0asp_addextendedproc 'xp_regdeletekey',@dllname ='xpstar.dll'x0dx0agox0dx0asp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll' x0dx0ax0dx0a接下来就可以用sql server企业管理器里[复制]-> 右键选择 ->[配置发布、订阅服务器和分发]的图形界面来配置数据库复制了。x0dx0ax0dx0a下面是按顺序列出配置复制的步骤:x0dx0ax0dx0a1、建立发布和分发服务器x0dx0ax0dx0a[欢迎使用配置发布和分发向导]->[选择分发服务器]->[使"@servername"成为它自己的分发服务器,sql server将创建分发数据库和日志]x0dx0a->[制定快照文件夹]-> [自定义配置] -> [否,使用下列的默认配置] -> [完成]x0dx0ax0dx0a上述步骤完成后, 会在当前"@servername" sql server数据库里建立了一个distribion库和 一个distributor_admin管理员级别的用户(我们可以任意修改密码)。x0dx0ax0dx0a服务器上新增加了四个作业:x0dx0ax0dx0a[ 代理程序历史记录清除: distribution ]x0dx0a[ 分发清除: distribution ]x0dx0a[ 复制代理程序检查 ]x0dx0a[ 重新初始化存在数据验证失败的订阅 ]x0dx0ax0dx0asql server企业管理器里多了一个复制监视器, 当前的这台机器就可以发布、分发、订阅了。x0dx0ax0dx0a我们再次在sql server企业管理器里[复制]-> 右键选择 ->[配置发布、订阅服务器和分发]x0dx0ax0dx0a我们可以在 [发布服务器和分发服务器的属性] 窗口-> [发布服务器] -> [新增] -> [确定] -> [发布数据库] -> [事务]/[合并] -> [确定] -> [订阅服务器] -> [新增] -> [确定]x0dx0ax0dx0a把网络上的其它sql server服务器添加成为发布或者订阅服务器.x0dx0ax0dx0a新增一台发布服务器的选项:x0dx0ax0dx0a我这里新建立的jin001发布服务器是用管理员级别的数据库用户test连接的,x0dx0ax0dx0a到发布服务器的管理链接要输入密码的可选框, 默认的是选中的,x0dx0ax0dx0a在新建的jin001发布服务器上建立和分发服务器fengyu/fengyu的链接的时需要输入distributor_admin用户的密码。到发布服务器的管理链接要输入密码的可选框,也可以不选,也就是不需要密码来建立发布到分发服务器的链接(这当然欠缺安全,在测试环境下可以使用)。x0dx0ax0dx0a2、新建立的网络上另一台发布服务器(例如jin001)选择分发服务器x0dx0ax0dx0a[欢迎使用配置发布和分发向导]->[选择分发服务器]x0dx0ax0dx0a-> 使用下列服务器(选定的服务器必须已配置为分发服务器) -> [选定服务器](例如fengyu/fengyu)x0dx0ax0dx0a-> [下一步] -> [输入分发服务器(例如fengyu/fengyu)的distributor_admin用户的密码两次]x0dx0ax0dx0a-> [下一步] -> [自定义配置] -> [否,使用下列的默认配置]x0dx0ax0dx0a-> [下一步] -> [完成] -> [确定]x0dx0ax0dx0a建立一个数据库复制发布的过程:x0dx0ax0dx0a[复制] -> [发布内容] -> 右键选择 -> [新建发布]x0dx0ax0dx0a-> [下一步] -> [选择发布数据库] -> [选中一个待发布的数据库]x0dx0ax0dx0a-> [下一步] -> [选择发布类型] -> [事务发布]/[合并发布]x0dx0ax0dx0a-> [下一步] -> [指定订阅服务器的类型] -> [运行sql server 2000的服务器]x0dx0ax0dx0a-> [下一步] -> [指定项目] -> [在事务发布中只可以发布带主键的表] -> [选中一个有主键的待发布的表]x0dx0ax0dx0a->[在合并发布中会给表增加唯一性索引和 rowguidcol 属性的唯一标识符字段[rowguid],默认值是newid()]x0dx0ax0dx0a(添加新列将: 导致不带列列表的 insert 语句失败,增加表的大小,增加生成第一个快照所要求的时间)x0dx0ax0dx0a->[选中一个待发布的表]x0dx0ax0dx0a-> [下一步] -> [选择发布名称和描述] ->x0dx0ax0dx0a-> [下一步] -> [自定义发布的属性] -> [否,根据指定方式创建发布]x0dx0ax0dx0a-> [下一步] -> [完成] -> [关闭]x0dx0ax0dx0a发布属性里有很多有用的选项:设定订阅到期(例如24小时)x0dx0ax0dx0a设定发布表的项目属性:x0dx0ax0dx0a常规窗口可以指定发布目的表的名称,可以跟原来的表名称不一样。x0dx0ax0dx0a下图是命令和快照窗口的栏目x0dx0ax0dx0a( sql server 数据库复制技术实际上是用insert,update,delete操作在订阅服务器上重做发布服务器上的事务操作x0dx0ax0dx0a看文档资料需要把发布数据库设成完全恢复模式,事务才不会丢失x0dx0ax0dx0a但我自己在测试中发现发布数据库是简单恢复模式下,每10秒生成一些大事务,10分钟后再收缩数据库日志,x0dx0a这期间发布和订阅服务器上的作业都暂停,暂停恢复后并没有丢失任何事务更改 )x0dx0ax0dx0a发布表可以做数据筛选,例如只选择表里面的部分列:x0dx0ax0dx0a例如只选择表里某些符合条件的记录, 我们可以手工编写筛选的sql语句:x0dx0ax0dx0a发布表的订阅选项,并可以建立强制订阅:x0dx0ax0dx0a成功建立了发布以后,发布服务器上新增加了一个作业: [ 失效订阅清除 ]x0dx0ax0dx0a分发服务器上新增加了两个作业:x0dx0a[ jin001-dack-dack-5 ] 类型[ repl快照 ]x0dx0a[ jin001-dack-3 ] 类型[ repl日志读取器 ]x0dx0ax0dx0a上面蓝色字的名称会根据发布服务器名,发布名及第几次发布而使用不同的编号x0dx0ax0dx0arepl快照作业是sql server复制的前提条件,它会先把发布的表结构,数据,索引,约束等生成到发布服务器的os目录下文件x0dx0a(当有订阅的时候才会生成, 当订阅请求初始化或者按照某个时间表调度生成)x0dx0ax0dx0arepl日志读取器在事务复制的时候是一直处于运行状态。(在合并复制的时候可以根据调度的时间表来运行)x0dx0ax0dx0a建立一个数据库复制订阅的过程:x0dx0ax0dx0a[复制] -> [订阅] -> 右键选择 -> [新建请求订阅]x0dx0ax0dx0a-> [下一步] -> [查找发布] -> [查看已注册服务器所做的发布]x0dx0ax0dx0a-> [下一步] -> [选择发布] -> [选中已经建立发布服务器上的数据库发布名]x0dx0ax0dx0a-> [下一步] -> [指定同步代理程序登录] -> [当代理程序连接到代理服务器时:使用sql server身份验证]x0dx0a(输入发布服务器上distributor_admin用户名和密码)x0dx0ax0dx0a-> [下一步] -> [选择目的数据库] -> [选择在其中创建订阅的数据库名]/[也可以新建一个库名]x0dx0ax0dx0a-> [下一步] -> [允许匿名订阅] -> [是,生成匿名订阅]x0dx0ax0dx0a-> [下一步] -> [初始化订阅] -> [是,初始化架构和数据]x0dx0ax0dx0a-> [下一步] -> [快照传送] -> [使用该发布的默认快照文件夹中的快照文件]x0dx0a(订阅服务器要能访问发布服务器的repldata文件夹,如果有问题,可以手工设置网络共享及共享权限)x0dx0ax0dx0a-> [下一步] -> [快照传送] -> [使用该发布的默认快照文件夹中的快照文件]x0dx0ax0dx0a-> [下一步] -> [设置分发代理程序调度] -> [使用下列调度] -> [更改] -> [例如每五分钟调度一次]x0dx0ax0dx0a-> [下一步] -> [启动要求的服务] -> [该订阅要求在发布服务器上运行sqlserveragent服务]x0dx0ax0dx0a-> [下一步] -> [完成] -> [确定]x0dx0ax0dx0a成功建立了订阅后,订阅服务器上新增加了一个类别是[repl-分发]作业(合并复制的时候类别是[repl-合并])x0dx0ax0dx0a它会按照我们给的时间调度表运行数据库同步复制的作业。x0dx0ax0dx0a3、sql server复制配置好后, 可能出现异常情况的实验日志:x0dx0ax0dx0a1.发布服务器断网,sql server服务关闭,重启动,关机的时候,对已经设置好的复制没有多大影响x0dx0ax0dx0a中断期间,分发和订阅都接收到没有复制的事务信息x0dx0ax0dx0a2.分发服务器断网,sql server服务关闭,重启动,关机的时候,对已经设置好的复制有一些影响x0dx0ax0dx0a中断期间,发布服务器的事务排队堆积起来x0dx0a(如果设置了较长时间才删除过期订阅的选项, 繁忙发布数据库的事务日志可能会较快速膨胀),x0dx0ax0dx0a订阅服务器会因为访问不到发布服务器,反复重试x0dx0a我们可以设置重试次数和重试的时间间隔(最大的重试次数是9999, 如果每分钟重试一次,可以支持约6.9天不出错)x0dx0ax0dx0a分发服务器sql server服务启动,网络接通以后,发布服务器上的堆积作业将按时间顺序作用到订阅机器上:x0dx0ax0dx0a会需要一个比较长的时间(实际上是生成所有事务的insert,update,delete语句,在订阅服务器上去执行)x0dx0a我们在普通的pc机上实验的58个事务100228个命令执行花了7分28秒.x0dx0ax0dx0a3.订阅服务器断网,sql server服务关闭,重启动,关机的时候,对已经设置好的复制影响比较大,可能需要重新初试化x0dx0ax0dx0a我们实验环境(订阅服务器)从18:46分意外停机以, 第二天8:40分重启动后, 已经设好的复制在8:40分以后又开始正常运行了, 发布服务器上的堆积作业将按时间顺序作用到订阅机器上, 但复制管理器里出现快照的错误提示, 快照可能需要重新初试化,复制可能需要重新启动.(我们实验环境的机器并没有进行快照初试化,复制仍然是成功运行的)x0dx0ax0dx0a4、删除已经建好的发布和定阅可以直接用delete删除按钮x0dx0ax0dx0a我们最好总是按先删定阅,再删发布,最后禁用发布的顺序来操作。x0dx0ax0dx0a如果要彻底删去sql server上面的复制设置, 可以这样操作:x0dx0ax0dx0a[复制] -> 右键选择 [禁用发布] -> [欢迎使用禁用发布和分发向导]x0dx0ax0dx0a-> [下一步] -> [禁用发布] -> [要在"@servername

⑦ sqlserver历史记录迁移

sqlserver数据库迁移的几种方式

方法一:将Microsoft SQL ServerMSSQLDATA文件夹中的syntt_data.mdf和syntt_log.ldf文件复制到安装有数据库服务器的机器的文件夹中(可以是本机的Microsoft SQL ServerMSSQLDATA文件夹),然后进入企业管理器。

右键点击“数据库”,在浮动菜单中选择“所有任务”中的“附加数据库”。在随后的提示页面中选择刚才复制过来的.MDF文件,如果想指定数据库的所有者,在“指定数据库所有者”选择框中选择你认为合适的用户。

如果想修改数据库的名字,可在“附加为”框中输入新的数据库名字(对本数据库,不建议这么做,因为这样的话,整个程序中所有涉及数据库连接的代码都要随之修改,那将是不必要的劳动)。在进行完上述的工作之后,直接点击“确定”就可进行数据的SQL Server 数据转移转移。

方法二:(方哗帆法一)是针对数据库中没有本数据库的服务器,如果数据库中已经建有与该数据库名称相同的数据库,则直接按照备份数据库的恢复操作就可完成数据的SQL Server 数据转移转移。方法如下所述:这种方法首先要在本机上建立一个备份文件,具体操作介绍如下:1、 在企业管理器中打开服务器组以及指定的服务器。

然后右键点击需要备份的数据库在这里是syntt,在浮动菜单中选择“所有任务”菜单下的“备份数据库”,打开数据备份对话框。2、 选择“常规”选项卡,在名称对话框中中行输入本分 *** 名称,在“描述”文本框中输入备份集描述文本信息。

在“备份”组下选择备份操作类型,共有以下几种:数据库—完全:完整备份数据库。数据库—差异:增量备份数据库。

事务日志:事务日志备份。文件和文件组:数据库文件和文件组备份。

在“目的”组中指定备份设备或者备份文件名称,选择“添加”按钮添加备份设备或者文件;“删除”按钮用来删除备份设备和备份文件;选择“内容”按钮,则可查看已经存储在备份设备或文件中的备份信息。在“重写”组中有两种选项:追加到媒体:选择该选项,表示需要保存备份设备或文件中以前的备份数据。

重写现有媒体:要求本次被分数据覆盖以前的备份数据,从而节省存储空间。在“调度”组中,安排数据备份的时间。

用来指定数据库备份在将来的某个时间执行3、 “选项”选项卡,设置数据库备份操作选项。其中的内容主要有以下几项:完成后验证备份:要求在备份结束时对备份数据进行校验。

备份后弹出磁带:只对磁带备份设备有效,他要求在备份结束时自动卸带。删除事务日志中不活动的条目:要求在事务日志备份结束时删除事务日志中的已经完成的事务日志条目。

检查媒体集名称和备份集到期时间:要求在备份前检查介质集名称和原备份集中备份SQL Server 数卖芦哗据转移的有效期,以防止意外重写破坏原来的备份数据。备份集到期时间:设置备份集的有效期。

初始化并标识媒体:只对磁带设备有效。选择该选项后,SQL Server在备份时将Microsoft定义的磁带格式信息写入介质的开始部分。

此时,可以在“媒体集名称”和“媒体集描述”文本框中定义介质集名称和介质描述信息。4、 在进行完上述的操作之后,剩下的任务就是点击“确定”,使系统开始进行数据库的备份操作。

到目前为止,我们已经有了一个数据库的备份文件,剩下的任务就是怎么将这个文件还原至另外的数据库服务器中了。1、因为使用企业管理器进行数据库的恢复只能是在本机进行,所以在进行数据还原之前,必须将刚才所作的备份文件复制到本机,然后在本机选择“syntt”数据库,右键点击它,在显示出来的浮动菜单中选择“所有任务”下的“还原数据库”。

2、在还原数据库对话框中,在“常规”选项卡中的选择“从设备”的数据恢复方法,通过“选择设备”按钮选择刚才复制过来的文件。“常规”选项卡与“选项”选项卡中的具体内容如下所示:“常规”选项卡:数据库恢复方法:包括“数据库”、“文件组或文件”、“从设备”三种恢复方式。

“数据库”方式:选择该项时,从“显示数据库备份”列表中选择需要显示的指定数据库备份 *** ,从“要还原的第一个备份”列表框中选择首先使用哪一个备份集恢复数据库;“文件组或文件”:选择它时,数据库恢复部件列出指定数据库备份 *** 中备份的数据库文件或文件组,管理员可从这些备份文件中选择恢复那个数据库文件或文件组;“从设备”:选择它时,管理员选择恢复数据库或其日志所使用的备份设备,之后再从该备份设备中选择使用哪一次备份中的数据恢复数据库或其日志。3、点击“确定”,完成恢复操作。

非原创。

sql server中有行迁移现象吗

有的,和oracle一样,SQL中也有行迁移行迁移记包含forwarding_stub 和forwarded 两种类型。

这两类记录是因为数据页不能容纳更新后的记录而产生的,不是因为记录长度超过8060B引起的,所以这两类记录依然是行内记录,与行溢出记录是不同的。这两种记录总是成对出现的,当出现forwarding_stub时,在别的页面中一定有与之对应的一条forwarded记录。

forwarding记录也叫forwarding_stub记录,记录头标志为0x04,它是一条完整的数据记录。虽然结构看起来特殊,但还是符合一般记录的结构,记录中主要内容就是在行中用8字节保存了指向移出后的记录的位置指针。

forwarded 记录,有时直接叫做迁移记录。记录头部标志为0x32. 它也是一条完整记录,格式跟一般记录略有差异,大体结构还是相同的。

这里是存储了溢出前的那条记录的真实数据。 这两种记录的具体存储结构比较简单和直观,其逻辑结构会在下面的实例列举中结合具体数据记录来分析说明。

测试这种的方法太长了,不在这里具体列出,你可以到51CTO里面找一下,搜索SQL行迁移有具体的测试方法。

sql server中有行迁移现象吗

有的,和oracle一样,SQL中也有行迁移

行迁移记包含forwarding_stub 和forwarded 两种类型。这两类记录是因为数据页不能容纳更新后的记录而产生的,不是因为记录长度超过8060B引起的,所以这两类记录依然是行内记录,与行溢出记录是不同的。

这两种记录总是成对出现的,当出现forwarding_stub时,在别的页面中一定有与之对应的一条forwarded记录。

forwarding记录也叫forwarding_stub记录,记录头标志为0x04,它是一条完整的数据记录。虽然结构看起来特殊,但还是符合一般记录的结构,记录中主要内容就是在行中用8字节保存了指向移出后的记录的位置指针。

forwarded 记录,有时直接叫做迁移记录。记录头部标志为0x32. 它也是一条完整记录,格式跟一般记录略有差异,大体结构还是相同的。这里是存储了溢出前的那条记录的真实数据。

这两种记录的具体存储结构比较简单和直观,其逻辑结构会在下面的实例列举中结合具体数据记录来分析说明。

测试这种的方法太长了,不在这里具体列出,你可以到51CTO里面找一下,搜索SQL行迁移有具体的测试方法

SQL数据库如何自动备份和恢复

一、备份数据库

1、打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server

2、SQL Server组-->;双击打开你的服务器-->;双击打开数据库目录

3、选择你的数据库名称(如论坛数据库Forum)-->;然后点上面菜单中的工具-->;选择备份数据库

4、备份选项选择完全备份,目的中的备份到如果原来有路径和名称则选中名称点删除,然后点添加,如果原来没有路径和名称则直接选择添加,接着指定路径和文件名,指定后点确定返回备份窗口,接着点确定进行备份

二、还原数据库

1、打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server

2、SQL Server组-->;双击打开你的服务器-->;点图标栏的新建数据库图标,新建数据库的名字自行取

3、点击新建好的数据库名称-->;然后点上面菜单中的工具-->;选择恢复数据库

4、在弹出来的窗口中的还原选项中选择从设备-->;点选择设备-->;点添加-->;然后选择你的备份文件名-->;添加后点确定返回,这时候设备栏应该出现您刚才选择的数据库备份文件名,备份号默认为1(如果您对同一个文件做过多次备份,可以点击备份号旁边的查看内容,在复选框中选择最新的一次备份后点确定)-->;然后点击上方常规旁边的选项按钮

5、在出现的窗口中选择在现有数据库上强制还原,以及在恢复完成状态中选择使数据库可以继续运行但无法还原其它事务日志的选项。在窗口的中间部位的将数据库文件还原为这里要按照你SQL的安装进行设置(也可以指定自己的目录),逻辑文件名不需要改动,移至物理文件名要根据你所恢复的机器情况做改动,如您的SQL数据库装在D:Program FilesMicrosoft SQL ServerMSSQLData,那么就按照您恢复机器的目录进行相关改动改动,并且最后的文件名最好改成您当前的数据库名(如原来是zw0001.mdf,现在的数据库是zw0002,就改成zw0002.mdf),日志和数据文件都要按照这样的方式做相关的改动(日志的文件名是.ldf结尾的),这里的恢复目录您可以自由设置,前提是该目录必须存在(如您可以指定d:sqldatazw0002.mdf或者d:sqldatazw0002.ldf),否则恢复将报错

6、修改完成后,点击下面的确定进行恢复,这时会出现一个进度条,提示恢复的进度,恢复完成后系统会自动提示成功,如中间提示报错,请记录下相关的错误内容并询问对SQL操作比较熟悉的人员,一般的错误无非是目录错误或者文件名重复或者文件名错误或者空间不够或者数据库正在使用中的错误,数据库正在使用的错误您可以尝试关闭所有关于SQL窗口然后重新打开进行恢复操作,如果还提示正在使用的错误可以将SQL服务停止然后重起看看,至于上述其它的错误一般都能按照错误内容做相应改动后即可恢复

如何设置才能使sql每半小时备份一次

SQL Server数据库备份工具 2.2

数据库使用过程中历史表记录的增多数据库的增大导致以下问题的出现

1 数据库性能大幅下降

2 报表生成等要求数据库大数据量操作时导致数据库响应短暂停止甚至完全停止响应

3 数据库备份或同步等数据库维护时间加长

本程序为绿色软件无需安装, 正确配置参数后即可运行,通过使用备份计划(可配置)定时将数据库中历史表的历史记录转移到备份机器上,减小生产机运行数据库,转移报表生成等大幅占用数据库操作到备机以减小生产机压力

实现说明:

1 增加一台备份机器

2 备机上建立一个还原库用以还原当前数据库的备份和一个历史库用以保存历史数据

3 根据调度计划定时将当前生产机数据库备份到备机

4 还原备机还原库并将还原库中新增或更新数据导入备机历史库,目的为尽量少的占用当前数据库而使用备机资源

5 删除生产机数据库中已成功转移的历史数据

6 删除使用过的文件和清理数据库日志,减少磁盘占用

特点:

1 所有参数可配置

2 占用生产机数据库资源少, 仅备份操作(历史表数据转移后备份时间大大减短且大多数情况下仅进行差异备份)

3 操作速度快,且费时操作部分都基本在备机,不占用生产机资源

4 自动备份当前数据库日志和截断备份机器上数据库日志

5 自动删除使用过的文件,减少磁盘空间占用

6 整个操作过程提供详细错误日志以方便维护

7 与SQL SERVER自带的发布订阅功能不同,历史数据只在备机上保留一份(如需备份备机历史数据请自行解决或定制此需求),生产机数据库只保留有生产必须的数据量即可,可尽可能的减少当前生产机数据库的数据量减少资源占用,将历史数据转移到备机上

8 无需更改现有系统

9 和其他备份程序的区别:主要针对历史数据转移需求,数据库备份只是一个前提,转移历史数据减小生产机数据库压力才是此程序的实质

升级说明:

1 去除所有标识部分,供公共使用

2 延长一次运行时间限制到30天

附:

1 如果有意请联系public_release@sina

2 可提供源代码(vc)和实现其他定制需求

3 此共享发布程序每次运行限制为30天(可放开),请不要相信其他的所谓破解版,实为其他非善意软件的安装程序包,如果不想有一次运行30天的限制,使用额外的程序在29天时关闭程序后重新启动即可

如何查询SQL Server备份还原历史记录

SQL Server在msdb数据中维护了一系列表,用来存储执行所有备份和还原的细节信息。即使你正在使用第三方的备份应用程序,只要这个应用程序使用SQL Server的虚拟设备接口(Virtual Device Interface---VDI)来执行备份和还原执行,那么执行细节依然被存储在这一系列表中。

存储细节的表包括:

backupset

backupfile

backupfilegroup (SQL Server 2005 upwards)

backupmediaset

backupmediafamily

restorehistory

restorefile

restorefilegroup

logmarkhistory

suspect_pages (SQL Server 2005 upwards)

你可以在Books Online里面找到上面这些表的具体说明。

下面这个脚本可以帮你找出每个数据库近期的备份信息:

SELECT b.name, a.type, MAX(a.backup_finish_date) lastbackup

FROM msdb..backupset a

INNER JOIN master..sysdatabases b ON a.database_name COLLATE DATABASE_DEFAULT = b.name COLLATE DATABASE_DEFAULT

GROUP BY b.name, a.type

ORDER BY b.name, a.type

指定数据库最后20条事务日志备份信息:

SELECT TOP 20 b.physical_device_name, a.backup_start_date, a.first_lsn, a.user_name FROM msdb..backupset a

INNER JOIN msdb..backupmediafamily b ON a.media_set_id = b.media_set_id

WHERE a.type = 'L'

ORDER BY a.backup_finish_date DESC

指定时间段的事务日志备份信息:

SELECT b.physical_device_name, a.backup_set_id, b.family_sequence_number, a.position, a.backup_start_date, a.backup_finish_date

FROM msdb..backupset a

INNER JOIN msdb..backupmediafamily b ON a.media_set_id = b.media_set_id

WHERE a.database_name = 'AdventureWorks'

AND a.type = 'L'

AND a.backup_start_date > ཆ-Jan-2007'

AND a.backup_finish_date

⑧ 数据库分区过多调度跑批写入数据报错

数据库分区过多调度跑批写入数据报错的解决办法:
1、指竖第一步,建分区表时,对数据库唯岩大操作,修正groupby的错误。
2、查看分区。
3、删除分区,恢复原表。
4、建立分区,需要分区的主表如果存在id主键,那么分区时间字段也应设置为第二主键。
5、建立触发事件。数据库分区是一种物理数据库设计技术,枣衫DBA和数据库建模人员对其相当熟悉,其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。

⑨ 本地sql数据库怎么与远程sql数据库同步

MySQL

MySQL数据同步主要有三种方式:
1.利用MySQL自身的数据库同步功能
2.利用MySQL数据库的特性(数据库存在固顶目录,并且以文件形式存储),进行数据库目录同步以达到数据同步目的
3.利用专用的MySQL数据库同步软件

1.利用MySQL自身的数据库同步功能(下面参考自网上的文章,写的非常详细了)
MySQL从3.23.15版本以后提供数据库复制功能。利用该功能可以实现两个数据库同步,主从模式,互相备份模式的功能.

数据库同步复制功能的设置都在mysql的设置文件中体现。mysql的配置文件(一般是my.cnf),在unix环境下在/etc/mysql/my.cnf或者在mysql用户的home目录下的my.cnf。

windows环境中,如果c:根目录下有my.cnf文件则取该配置文件。当运行mysql的winmysqladmin.exe工具时候,该工具会把c:根目录下的my.cnf命名为mycnf.bak。并在winnt目录下创建my.ini。mysql服务器启动时候会读该配置文件。所以可以把my.cnf中的内容拷贝到my.ini文件中,用my.ini文件作为mysql服务器的配置文件。

设置方法:
设置范例环境:
操作系统:window2000professional
mysql:4.0.4-beta-max-nt-log
Aip:10.10.10.22
Bip:10.10.10.53
A:设置
1.增加一个用户最为同步的用户帐号:
GRANTFILEON*.*TObackup@'10.10.10.53'IDENTIFIEDBY‘1234’
2.增加一个数据库作为同步数据库:
createdatabasebackup
B:设置
1.增加一个用户最为同步的用户帐号:
GRANTFILEON*.*TObackup@'肆世10.10.10.22'IDENTIFIEDBY‘1234’裂庆肢
2.增加一个数据库作为同步数据库:
createdatabasebackup
主从模式:A->B
A为master
修改Amysql的my.ini文件。在mysqld配置项中加入下面配置:
server-id=1
log-bin
#设置需要记录log可以设置log-bin=c:mysqlbakmysqllog设置日志文件的目录,
#其中mysqllog是日志文件的名称,mysql将建立不同扩展名,文件名为mysqllog的几个日志文件。
binlog-do-db=backup#指定需要日志的数据库
重起数据库服务。
用showmasterstatus命令看日志情况。
B为slave
修改Bmysql的my.ini文件。在mysqld配置项中加入下面配置:
server-id=2
master-host=10.10.10.22
master-user=backup#同步用户帐号
master-password=1234
master-port=3306
master-connect-retry=60预设重试间隔60秒
replicate-do-db=backup告诉slave只做backup数据库的更新
重起数据库
用showslavestatus看同步配置情况。
注意:由于设置了slave的配置信息,mysql在数据库目录下生成master.info
所以如有要修改相关slave的配置要先删除该文件。否则修改的配置不能生效。
双机互备模式。
如果在A加入slave设置,在B加入master设置,则可以做B->A的同步。
在A的配置文件中mysqld配置项加入以下设置:
master-host=10.10.10.53
master-user=backup
master-password=1234
replicate-do-db=backup
master-connect-retry=10
在B的配置文件中mysqld配置项加入以下设置:
log-bin=c:mysqllogmysqllog
binlog-do-db=backup
注意:当有错误产生时*.err日志差渗文件。同步的线程退出,当纠正错误后要让同步机制进行工作,运行slavestart
重起AB机器,则可以实现双向的热备。
测试:
向B批量插入大数据量表AA(1872000)条
A数据库每秒钟可以更新2500条数据。

2.数据库目录同步,方法和文件同步一样,设置好需要同步的两个数据库目录就可以了!
缺点很明显,数据同步只能单向进行,可以作为备份方案

3.用专用的MySQL同步软件进行同步
这方面的软件有SQLBalance和MyReplicator,优点是方便直观,还有很多争强功能!
缺点和2一样,只能单项同步!
当然你也可以修改镜像网站的程序为提交数据到母数据库,读取则在当前镜像下的数据,不过,修改起来麻烦!普通用户修改也非常难!呵呵,大家了解一下就可以!给大家一个思路!有能力的朋友可以试试阿!

4.关于MySQL论坛的数据同步
由于数据来源的不可控制(不好表达),论坛数据是实时的,而且还要考虑来自镜像论坛的数据,如何实现镜像论坛与母论坛数据同步呢?
用1中介绍的MySQL自带的数据库同步功能互相备份模式就可以实现的!
不过,具体的应用我没有测试!稳定性不敢保证!
有能力的朋友推荐用下面这种思路来同步,相对来说减少点效率,但能减少发生的错误!
比如镜像论坛数据同步:
1.母论坛和镜像论坛的数据全写在母论坛数据库里,主从模式,读取只在本地读取,这个需要修改程序!

2.每次写数据,都同时提交到两个数据库中,安全,但是效率很差,也得修改程序!

MSSQL

MSSQL数据同步利用数据库复制技术实现数据同步更新(来自网络,也是非常完美的教程)
复制的概念
复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性。
SQL复制的基本元素包括
出版服务器、订阅服务器、分发服务器、出版物、文章
SQL复制的工作原理
SQLSERVER主要采用出版物、订阅的方式来处理复制。源数据所在的服务器是出版服务器,负责发表数据。出版服务器把要发表的数据的所有改变情况的拷贝复制到分发服务器,分发服务器包含有一个分发数据库,可接收数据的所有改变,并保存这些改变,再把这些改变分发给订阅服务器
SQLSERVER复制技术类型
SQLSERVER提供了三种复制技术,分别是:
1、快照复制(呆会我们就使用这个)
2、事务复制
3、合并复制
只要把上面这些概念弄清楚了那么对复制也就有了一定的理解。接下来我们就一步一步来实现复制的步骤。
第一先来配置出版服务器
(1)选中指定[服务器]节点
(2)从[工具]下拉菜单的[复制]子菜单中选择[发布、订阅服务器和分发]命令
(3)系统弹出一个对话框点[下一步]然后看着提示一直操作到完成。
(4)当完成了出版服务器的设置以后系统会为该服务器的树形结构中添加一个复制监视器。同时也生成一个分发数据库(distribution)
第二创建出版物
(1)选中指定的服务器
(2)从[工具]菜单的[复制]子菜单中选择[创建和管理发布]命令。此时系统会弹出一个对话框
(3)选择要创建出版物的数据库,然后单击[创建发布]
(4)在[创建发布向导]的提示对话框中单击[下一步]系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助)
(5)单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVER允许在不同的数据库如ORACLE或ACCESS之间进行数据复制。但是在这里我们选择运行"SQLSERVER2000"的数据库服务器
(6)单击[下一步]系统就弹出一个定义文章的对话框也就是选择要出版的表
(7)然后[下一步]直到操作完成。当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库。
第三设计订阅
(1)选中指定的订阅服务器
(2)从[工具]下拉菜单中选择[复制]子菜单的[请求订阅]
(3)按照单击[下一步]操作直到系统会提示检查SQLSERVER代理服务的运行状态,执行复制操作的前提条件是SQLSERVER代理服务必须已经启动。
(4)单击[完成]。完成订阅操作。
完成上面的步骤其实复制也就是成功了。但是如何来知道复制是否成功了呢?这里可以通过这种方法来快速看是否成功。展开出版服务器下面的复制——发布内容——右键发布内容——属性——击活——状态然后点立即运行代理程序接着点代理程序属性击活调度把调度设置为每一天发生,每一分钟,在0:00:00和23:59:59之间。接下来就是判断复制是否成功了打开C:/ProgramFiles/MicrosoftSQLServer/MSSQL/REPLDATA/unc/XIAOWANGZI_database_database下面看是不是有一些以时间做为文件名的文件夹差不多一分中就产生一个。要是你还不信的话就打开你的数据库看在订阅的服务器的指定订阅数据库下看是不是看到了你刚才所发布的表—
一个手工同步的方案
--定时同步服务器上的数据
--例子:
--测试环境,SQLServer2000,远程服务器名:xz,用户名为:sa,无密码,测试数据库:test
--服务器上的表(查询分析器连接到服务器上创建)
createtable[user](idintprimarykey,numbervarchar(4),namevarchar(10))
go
--以下在局域网(本机操作)
--本机的表,state说明:null表示新增记录,1表示修改过的记录,0表示无变化的记录
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[user]')andOBJECTPROPERTY(id,N'IsUserTable')=1)
droptable[user]
GO
createtable[user](idintidentity(1,1),numbervarchar(4),namevarchar(10),statebit)
go
--创建触发器,维护state字段的值
createtriggert_stateon[user]
afterupdate
as
update[user]setstate=1
from[user]ajoininsertedbona.id=b.id
wherea.stateisnotnull
go
--为了方便同步处理,创建链接服务器到要同步的服务器
--这里的远程服务器名为:xz,用户名为:sa,无密码
ifexists(select1frommaster..sysserverswheresrvname='srv_lnk')
execsp_dropserver'srv_lnk','droplogins'
go
execsp_addlinkedserver'srv_lnk','','SQLOLEDB','xz'
execsp_addlinkedsrvlogin'srv_lnk','false',null,'sa'
go
--创建同步处理的存储过程
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[p_synchro]')andOBJECTPROPERTY(id,N'IsProcere')=1)
dropprocere[dbo].[p_synchro]
GO
createprocp_synchro
as
--setXACT_ABORTon
--启动远程服务器的MSDTC服务
--execmaster..xp_cmdshell'isql/S"xz"/U"sa"/P""/q"execmaster..xp_cmdshell''netstartmsdtc'',no_output"',no_output
--启动本机的MSDTC服务
--execmaster..xp_cmdshell'netstartmsdtc',no_output
--进行分布事务处理,如果表用标识列做主键,用下面的方法
--BEGINDISTRIBUTEDTRANSACTION
--同步删除的数据
deletefromsrv_lnk.test.dbo.[user]
whereidnotin(selectidfrom[user])
--同步新增的数据
insertintosrv_lnk.test.dbo.[user]
selectid,number,namefrom[user]wherestateisnull
--同步修改的数据
updatesrv_lnk.test.dbo.[user]set
number=b.number,name=b.name
fromsrv_lnk.test.dbo.[user]a
join[user]bona.id=b.id
whereb.state=1
--同步后更新本机的标志
update[user]setstate=0whereisnull(state,1)=1
--COMMITTRAN
go
--创建作业,定时执行数据同步的存储过程
ifexists(SELECT1frommsdb..sysjobswherename='数据处理')
EXECUTEmsdb.dbo.sp_delete_job@job_name='数据处理'
execmsdb..sp_add_job@job_name='数据处理'
--创建作业步骤
declare@sqlvarchar(800),@dbnamevarchar(250)
select@sql='execp_synchro'--数据处理的命令
,@dbname=db_name()--执行数据处理的数据库名
execmsdb..sp_add_jobstep@job_name='数据处理',
@step_name='数据同步',
@subsystem='TSQL',
@database_name=@dbname,
@command=@sql,
@retry_attempts=5,--重试次数
@retry_interval=5--重试间隔
--创建调度
EXECmsdb..sp_add_jobschele@job_name='数据处理',
@name='时间安排',
@freq_type=4,--每天
@freq_interval=1,--每天执行一次
@active_start_time=00000--0点执行
go

⑩ 怎么才能建立数据库的自动备份机制.,越详细越好//谢谢

sql server数据库备份方案2008-08-05 13:15SQL Server 数据库备份方案
为了保证SQL Server 数据的安全,数据库管理员应定期备份数据库,在不同情况下应采用不同备份数据库备份策略,一方面维持数据的安全性,另一方面也可保持SQL Server 能顺畅运行。尽最大的努力减少由于数据的损坏对客户造成的损失。
概念
1) 备份工作规划
计算机软硬件的稳定性还未达到非常稳定的状态,计算机中的数据仍有损失或毁坏的情况发生。存在于计算机内的数据不安全,即使采用容错设备,也无法保证数据库 100%安全。 计算机硬件的费用可能很高,但计算机数据更珍贵,做好数据备份,可保证在各种意外发生情况时,仍能保持有数据库的完整性。 管理员必须花时间来备份数据库,但 SQL SERVER也提供不少自动化功能。
2)备份方式
数据库——完全
就是备份整个数据库的内容。若将整个数据库的内容都备份下来,需很多的存储空间来存放备份数据,但其好处是在还原数据库时,也只要将整个数据库从一份数据库备份还原到 SQL SERVER 中就可以了。它是其他备份的基础,在做其他备份之前,必须得做此种方式的备份。
数据库——差异 (Differential)
只备份从上一次执行“完全”数据库备份后有改动的数据,因此所需要的备份时间和备份空间都比“完全” 方式少,所以此方式最适合作为经常性的备份方式。
事务日志(Transaction Log)
只备份事务记录文件的内容,由于事务日志文件只会记录我们在前一次数据库备份或事务日志记录备份之后,对数据库所做的变动过程,也就是只记录某一段时间的数据库变动情况,因此在做事务记录备份之前,必须做一次“完全”的数据库备份
文件和文件组:
如果数据库的内容分散存储于多个文件或文件组,而且数据库已非常大,大到进行一次完整的数据库备份会有时间和存储空间上的问题。这时就可以使用此方式来备份数据库的部颂扮明分文件或文件组。由于每次只备份部分的文件或文件组,因此需做数次不同的备份才能完成整个数据库的备份。才用此方式备份也有个好处,就是当毁坏的数据只是数据库中的某个文件或文件组时,也只要还原坏的文件或文件组备份就可以了。
3)备份方案制订原则
规划数据库的备份策略,需要考虑备份的各项变量,必须同时考虑到还原作业的进行。在做备份时,可考虑以下几点。
(1) 有多少时间以及在那些时段可进行备份
(2) 数据库变动的频率如何
(3) 数据库大小
(4) 当数据库出问题时,用户愿意等待多久野告让数据库还原完毕
(5) 应采用何种备份方式,做怎样的搭配
(6) 要使用哪种存储介质

4)备份方案
(1)完全数据库备份配合事务日志备份
对于数据库数据比较大,但每天的变动的内容小,可考虑采用此方式。可定期做一次完整的数据库备份,例如:每周或每月做一次“完全”数据库备份。然后再以较段短的周期,如每天或每两天做一此事务日志备份。这样平时备份工作负担比较轻,发生以外时,可将数据还原到最近期的状态。
(2)完全数据库备份配合差异式备份
此方式是将前一种方式中的事务日志备份方式改成差异式备份。其优点是在做还原时,只需在做完最近一次数据库备份的还原后,再用前一天的差异备份来还原就可以了,不像使用事务记录备份时,需一天一天还原。缺点是在比较后的日子里,每次做差异备份所需的时间和空间会增加。
(3)三种备份方式的综合使用
由于事务记录备份和差异备份各有其优缺点,因此我们可以将两种方法结合起来使用。对于数据信息非常重要,每1、2小时备份一次,可能的损失只是1、2个小时的数据。
(4)当数据库过大,有不易备份的问题时,可以采用文件或文件组备份方式,可考虑将数据库分开存于不同的文件和文件组中,然后以文件和文件组的方式将整个数据库分数次备份。此外,如果数据库中只有部分表经常变动,另一部分很少变动,也可考虑将这两部分存于不同的文件和文件组中,然后用不同的备份频率来备份其内容。 采用此方式备份数据的缺点是:必缺燃须数次操作才能备份完数据。
(5)使用备用服务器
采用此方式是再准备一台服务器,先在原服务器上做完全的备份,再把此备份放到备份服务器上做还原,使两边的数据同步,以后可以定期对原数据库做事务日志备份,把事务日志放到备份服务器上还原。当原服务器出现问题既可使用备份服务器接上网络提供服务。

注意:系统数据库的备份与还原是很多用户在定义数据库备份方案中容易忽略的,系统数据库中虽然不保存业务数据,但它保存了很多SQL Server的设置,如果不备份系统数据库,那么在服务器发生故障导致系统损坏时,重新配置所有的SQL Server设置将是一个噩梦DEMO
方案一 数据库备份(常用方案)
在SQL Server备份窗口,可以通过调度设置,将当前进行的备份处理设置为定时自动处理的作用。具体的步骤如下:
1. 展开一个服务器组。
2. 展开一个服务器( SQL Server实例)。
3. 展开【数据库】,右单击要备份的数据库,在弹出的菜单中选择【所有任务】—〉【备份数据库】命令。
4. 在随后打开的SQL Server备份窗口中,设置备份的相关选项。参见前面的备份方案
单击【常规】选项卡,在【调度】项中,选中【调度】复选框,然后单击【调度】复选框后的【…】按钮。在随后出现的【编辑调度】对话框中,设置时间调度安排。
5. 设置完成后,单击【确定】按钮,SQL Server将执行备份操作,同时在【SQL Server 代理】—〉【作业 】中自动建立对应的作业。
6. 在【SQL Server 代理】—〉【作业 】窗口中,可以像处理普通作业一样修改或删除数据库备份窗口中定义的备份计划。
演示
方案二 数据转换法(DTS)
具体的方案就是:
1.主服务器和备份服务器装载完全一样的操作系统和数据库软件,以及相应编制的管理软件;
2.事先选定需要定期更新的表、视图、存储过程等等,必要时可选择全部数据库更新;
3.使用SQL Server 提供的数据转换服务导入/ 导出向导(以SQL Server2000 为例) ,利用复制 SQL Server 对象任务,将 Microsoft SQL Server 对象从SQL Server 的一个实例复制到另一个SQL Server 中;
4.编辑反复出现的作业调度,确定发生的频率和具体时间,一般情况下,由于数据量较大,不提倡每日发生多次,尽量安排在网络空余时间发生。
这个方案优点是:
1.成本低、可靠性高,操作简单,较易维护;
2.系统转换时间短,备份系统替换主服务器只需几分钟。即使出现意外,备份系统很快就会恢复正常,只损失少量数据,重新输入即可;
3.本地和异地备份都是利用晚上网络空闲时间进行的,没有增加日常网络流量,不会增加网络负担。
注意选择传输对象,相同版本的SQL Server 可以相互,或者由低版本向高版本SQL Server 备份,如:
SQL Server 7.0 的实例备份到 SQLServer 2000 的实例。
SQL Server 2000 的实例备份到另一个 SQL Server 2000 的实例。
备份的操作步骤:
1.打开企业管理器,选择SQLServer 服务器的数据库,单击鼠标右键,选择“所有任务”,并点选“导入数据”或“导出数据”。 如果是在主服务器上进行操作,选导出数据;在备份服务器上进行操作,则选导入数据。
2.第一步操作后,调出“数据转换服务导入/ 导出向导”界面,单击“下一步”,进入“DTS 导入/ 导出向导”的选择数据源界面,选择“目的”,选择“制定表复制或查询”,选择要复制的对象。 弱
做选择时,首先根据具体的客户端选择数据源,如果是OLE DB客户端,选择“用于SQL Server的Microsoft提供的OLEDB 程序”。
然后选择提供数据源的服务器,接下来选择进入数据库的方式,可选择“使用Windows 身份验证”或“使用SQL Server 身份验证”。 如果选“使用SQL Server 身份验证”,须填写SQL Server 认可并对数据有修改权的用户,一般可选“SA”及其密码。最后选择要复制的数据库。
3.在“制定表复制和查询”中,选择“在SQL Server数据库之间复制对象和数据”,然后单击下一步。选择具体复制对象和相应的选项等等.。
4.通过保存调度和复制包,定制进行复制的时间和频率。
5.全部设置完成后,提示会列出源、目的、采用的方式、数据库等选项,由你确认完成。
6.如果设置结束后要进行定制时间修改,在企业管理器中,通过服务器、数据库、管理、SQL server 代理、作业,然后选择具体的作业,调出界面进行修改。
至此,你就可以在自己的中小企业环境中,轻松实现多台数据库服务器间的定时自动数据备份了。
演示
方案三 数据库维护计划+X命令(推荐使用)
1. 展开一个服务器组
2. 展开一个服务器实例(SQL Server实例)。
3. 展开【管理】,右击【数据库维护计划】,在弹出的快捷菜单中选择【新建维护计划】命令。
4. 在随后出现的【数据库维护计划 —(Local)】对话框中,单击【下一步】按钮跳过欢迎页,在接下来的【选择数据库】步骤中,定义要备份的数据库。
5. 单击【下一步】按钮,跳过与数据库备份无关的步骤,在【指定数据库备份计划】步骤中,选择【作为维护计划的一部分来备份数据库】复选框;通过单击【磁带】或者【磁盘】单选按钮来选择备份设备;单击【调度】选项右边的【更改】按钮,可以在随后出现的【编辑反复出现的作业调度】对话框中设置维护计划的时间安排。
6. 单击【下一步】按钮,如果在步骤(5)中,备份设备选择的是【磁盘】设备,则会进入【指定备份磁盘目录】步骤,根据实际情况,设置此步骤中的内容。
7. 单击【下一步】按钮,进入【指定事务日志备份计划】步骤,如果需要进行事务日志备份,则选择【作为维护计划的一部分来备份事务日志】复选框。备份事务日志的其他设置步骤参考(5)~(6)。
8. 根据需要设置其他步骤,最后进入【正在完成数据库维护计划向导】步骤,设置好【计划名】,单击【完成】按钮完成数据库维护计划的定义。
9. 完成步骤(1)~(8)后,单击【数据库维护计划】,在企业管理器控制台右边的详细信息窗口中就可以看到定义好的数据库维护计划,同时,展开【SQL Server代理】—〉【作业】,可以【作业】右边的详细窗口中,可以看到维护计划自动建立的备份出路作业。
10. 通过有机维护计划,选择【属性】命令,可以修改已经定义的维护计划。
11. 通过右击维护计划,选择【删除】命令,可以删除已经定义的维护计划,同时【SQL Server 代理】—〉【作业】中的相关作业也会自动删除。
新建一个批文件 Copy.bat具体脚本如下:
@echo off
title 正在传输数据库备份文件到远程备份服务器上!
echo 提示:开始验证服务器上是否存在备份文件!
echo 请稍候!
if exist F:\DBback\*.bak (goto Process ) else goto UnFound
:Process
echo 提示:在服务器上找到了备份文件!
echo -------------------------------------------------------------------------------
echo 提示:开始删除远程备份服务器上的原始文件!

rem 备注:下列IP地址为远程备份服务器的IP地址!
del \\192.168.244.24\DBback /q /s /f
del \\192.168.244.24\DBback\*.* /q /s /f
if errorlevel 0 goto success
:success
echo 提示:成功删除原始文件!
echo -------------------------------------------------------------------------------
echo 提示:开始复制数据库备份文件到远程备份服务器\\192.168.244.24\DBback!
echo 请稍候!
rem 备注:请具体更改\\192.168.244.1\DBback为服务器备份文件存放的位置。\\192.168.244.24\DBback为备份服务器上存放的位置!
x \\192.168.244.1\DBback \\192.168.244.24\DBback /y /f
rem 备注:当X命令结束后返回的Errorlevel为4说明磁盘控件不足。当X命令返回0时说明成功完成操作!
if errorlevel 4 goto lowmemory
if errorlevel 0 goto showmessage
:lowmemory
echo 警告:请查看磁盘空间是否不足!

:UnFound
echo 警告:在服务器上找不到备份文件,批任务将要结束。服务器备份工作似乎没有正常进行,请确认服务器是否正常生成备份文件!
goto exit

:showmessage
echo 提示:批任务完成!
echo 提示:成功复制数据库备份到远程服务器\\192.168.244.24\DBback!
echo 按任意键结束退出!
echo --------------------------------------------------------------------------------
:exit
pause
echo 成功复制PersonnelM数据库备份到远程服务器\\192.168.244.24\1上!
Pause

利用Windows 任务计划来调度批任务
1. 单击“开始”—〉“程序”—〉“附件”—〉“系统工具”—〉“任务计划”
2. 双击“新建任务计划”,弹出“任务计划向导”单击“下一步”。在选择任务窗体中选择“浏览”。我们选择要调度执行的Copy.bat文件。
3. 在接下来弹出的窗体中为我们的任务计划起个名称并且选择执行频率。这里我们选择“每天”
4. 在密码确认窗体中输入本机的密码。单击“下一步”选择“完成”。至此任务计划设置完成。(有需要的话可以单击选择“在单击完成时,打开此任务的高级属性”复选框以便对此任务进行高级设置!)

方案四 同步备份服务器(脚本)
/*该部分参考了邹建的脚本*/
/*--说明:
下面的代码演示了如何利用日志还原功能,将主数据库中的数据变化及时反馈到备用数据库中
备用数据库的数据可以随时用于查询,但不能被更新(备用数据库只读)。
--*/
--首先,创建一个演示用的数据库(主数据库)
CREATE DATABASE Db_test
ON
( NAME = Db_test_DATA,
FILENAME = 'c:\Db_test.mdf' )
LOG ON
( NAME = Db_test_LOG,
FILENAME = 'c:\Db_test.ldf')
GO
--对数据库进行备份
BACKUP DATABASE Db_test TO DISK='c:\test_data.bak' WITH FORMAT
GO
--把数据库还原成备用数据库(演示主数据库与这个备用数据库之间的同步)
RESTORE DATABASE Db_test_bak FROM DISK='c:\test_data.bak'
WITH REPLACE,STANDBY='c:\db_test_bak.ldf'
,MOVE 'Db_test_DATA' TO 'c:\Db_test_data.mdf'
,MOVE 'Db_test_LOG' TO 'c:\Db_test_log.ldf'
GO
--启动 SQL Agent 服务
EXEC master..xp_cmdshell 'net start sqlserveragent',no_output
GO
--创建主服务器数据训与备用服务器数据库之间同步的作业
DECLARE @jogid uniqueidentifier
EXEC msdb..sp_add_job
@job_id = @jogid OUTPUT,
@job_name = N'数据同步处理'
--创建同步处理步骤
EXEC msdb..sp_add_jobstep
@job_id = @jogid,
@step_name = N'数据同步',
@subsystem = 'TSQL',
@command = N''
--主数据库中进行日志备份
BACKUP LOG Db_test TO DISK="c:\test_log.bak" WITH FORMAT
--备用数据库中还原主数据库的日志备份(应用主数据库中的最新变化
--实际应该时主数据库备份与备用数据库的还原作业应该分别在主服务器和备用服务器上建立,并且备份文件应该放在主服务器和备用都能访问的共享目录中
RESTORE LOG Db_test_bak FROM DISK='c:\test_log.bak' WITH STANDBY='c:\test_log.ldf',
@retry_attempts = 5,
@retry_interval = 5
--创建调度(每分钟执行一次)
EXEC msdb..sp_add_jobschele
@job_id = @jogid,
@name = N'时间安排',
@freq_type=4,
@freq_interval=1,
@freq_subday_type=0x4,
@freq_subday_interval=1,
@freq_recurrence_factor=1
-- 添加目标服务器
EXEC msdb.dbo.sp_add_jobserver
@job_id = @jogid,
@server_name = N'(local)'
GO

--通过上述处理,主数据库与备用数据库之间的同步关系已经设置完成
--下面开始测试是否能实现同步
--在主数据库中创建一个测试用的表
CREATE TABLE Db_test.dbo.TB_test(ID int)
GO
--等待1分钟30秒(由于同步的时间间隔设置为1分钟,所以要延时才能看到效果)
WAITFOR DELAY '00:01:30'
GO
--查询一下备用数据库,看看同步是否成功
SELECT * FROM Db_test_bak.dbo.TB_test
/*--结果:
ID
-----------
(所影响的行数为 0 行)
--*/
--测试成功
GO

--最后删除所有的测试
DROP DATABASE Db_test,Db_test_bak
EXEC msdb..sp_delete_job @job_name=N'数据同步处理'
GO
/*===========================================================*/
/*--服务器宕机处理说明
使用这种方式建立的数据库同步,当主数据库不可用时(例如,主数据库损坏或者停机检修)
可以使用以下两种方法使备用数据库可用。
--*/
--1. 如果主数据库损坏,无法备份出最新的日志,可以直接使用下面的语句使备用数据库可读写(丢失最近一次日志还原后的所有数据)。
RESTORE LOG Db_test_bak WITH RECOVERY
--2. 如果主数据库可以备份出最新日志,则可以使用下面的语句。
--先备份主数据库的最新的事务日志
BACKUP LOG Db_test TO DISK=''c:\test_log.bak'' WITH FORMAT
--再在备用数据库中恢复最新的事务日志,并且使备用数据库可读写(升级为主数据库)
RESTORE LOG Db_test_bak FROM DISK='c:\test_log.bak'

方案五 复制订阅
开始学习之前我们先搞清楚以下几个概念:
复制(Replication)就是将数据由某处复制到一个或多个目的地,由于对数据库分散式应用的需求日渐增加,SQL Sever也提供了复制的功能。
SQL Server 的复制功能基本上是使用“发布服务器(Publisher) ”和“订阅服务器”(Subscriber)的结构,这整个结构中包含了数个不同的组件。
(1) 发布服务器(Publisher):在复制中,发布服务器就是负责发布数据库内容给其他服务器的SQL Server (一般的我们把主服务器当作发布服务器,形象一点比喻发布服务器就好像是一本书的作者)
(2) 订阅服务器(Subscriber):订阅服务器就是指受发布服务器所发布数据的SQL SERVER,通常发布服务器只有一个,但订阅服务器可以有多个。(形象比喻订阅服务就像是读者,购买相同图书的读者可以有很多。)
(3) 分发服务器(Distributor):除了发布服务器和订阅服务器这两个基本外,另一个可以由 SQL SERVER 在整个复制结构中扮演的角色就是分发服务器。分发服务器是负责将发布服务器所发布的数据库发布、传输到各订阅服务器的服务器。在简单的复制结构中,发布服务器和分发服务器通常是使用同一个 SQL SERVER。设置为分发服务器的 SQL SERVER,会有个名为 distribution 的系统数据库存放复制信息。
(4) 发布项(Article):发布服务器所发布的数据称为发布项,发布项是进行复制时的复制单位,发布项可以是表或存储过程等数据库对象,也可以知识表中的某几列或某几项数据。
(5) 发布(Publish):一组特定的发布项组合就称为发布,也就是 SQL SERVER进行复制时所复制的数据合。当订阅服务器向发布服务器订阅数据时,是以发布为单位,而不是以发布项为单位的。即,订阅服务器只能接收整个发布中的所有 article。而不能只选择其中几个发布项类订阅,每个发布只有来自单一数据库的内容,但我们可以为数据库设置多个发布。
(6) 为适应不同的复制需求,SQL SERVER提供了发送(Push)和请求(Pull)两种不同的订阅方式。区别如下:
(a) 发送订阅(Push Subscription也称为强制订阅):所谓的发送订阅就是由发布服务器主动传送发布给订阅服务器,也就是由发布服务器控制复制的操作,只要指定进行复制的时间一到,不管订阅服务器有没有提出要求,发布服务器都会将数据传送给订阅服务器。
(b) 请求订阅(Pull Subscription):请求订阅和发送订阅相反,是由订阅服务器自行根据排定的日程向发布服务器要求订阅发布,通常在订阅服务器数量较多,或是不需要即时取的最新的数据内容时,可采用此种订阅方式。

步骤:
下介绍实现复制的步骤。(以快照复制为例)
准备工作:
1.发布服务器,订阅服务器都创建一个同名的windows用户,并设置相同的密码,做为发布快照文件夹的有效访问用户
--我的电脑
--控制面板
--管理工具
--计算机管理
--用户和组
--右键用户
--新建用户
--建立一个隶属于administrator组的登陆windows的用户
2.在发布服务器上,新建一个共享目录,做为发布的快照文件的存放目录,操作:
我的电脑--D:\ 新建一个目录,名为: BakPUB
--右键这个新建的目录
--属性--共享
--选择"共享该文件夹"
--通过"权限"按纽来设置具体的用户权限,保证第一步中创建的用户具有对该文件夹的所有权限
--确定

3.设置SQL代理(SQLSERVERAGENT)服务的启动用户(发布/订阅服务器均做此设置)
开始--程序--管理工具--服务
--右键SQLSERVERAGENT
--属性--登陆--选择"此账户"
--输入或者选择第一步中创建的windows登录用户名
--"密码"中输入该用户的密码
4.设置SQL Server身份验证模式,解决连接时的权限问题(发布/订阅服务器均做此设置)
企业管理器
--右键SQL实例--属性
--安全性--身份验证
--选择"SQL Server 和 Windows"
--确定
5.在发布服务器和订阅服务器上互相注册
企业管理器
--右键SQL Server组
--新建SQL Server注册...
--下一步--可用的服务器中,输入你要注册的远程服务器名--添加
--下一步--连接使用,选择第二个"SQL Server身份验证"
--下一步--输入用户名和密码
--下一步--选择SQL Server组,也可以创建一个新组
--下一步--完成
6.对于只能用IP,不能用计算机名的,为其注册服务器别名
(在连接端配置,比如,在订阅服务器上配置的话,服务器名称中输入的是发布服务器的IP)
开始--程序--Microsoft SQL Server--客户端网络实用工具
--别名--添加
--网络库选择"tcp/ip"--服务器别名输入SQL服务器名
--连接参数--服务器名称中输入SQL服务器ip地址
--如果你修改了SQL的端口,取消选择"动态决定端口",并输入对应的端口号
==============================================================================
正式开始:
1.配置发布服务器
a. 选中指定 [服务器] 节点
b. 从 [工具] 下拉菜单的 [复制] 子菜单中选择 [发布、订阅服务器和分发] 命令
c. 系统弹出一个对话框点 [下一步] 然后看着提示操作
--直到"指定快照文件夹"
--在"快照文件夹"中输入准备工作中创建的目录: \\<服务器名>\ BakPUB
一[下一步] 直操作到完成。
d. 当完成了出版服务器的设置以后系统会为该服务器的树形结构中添加一个复制监视器
同时也生成一个分发数据库(distribution)

---------------------------------------------------------------------------
2.创建发布
a. 选中指定的服务器
b. 从 [工具] 菜单的 [复制] 子菜单中选择 [创建和管理发布] 命令。此时系统会弹出
一个对话框
c. 选择要创建发布的数据库,然后单击 [创建发布]
d. 在 [创建发布向导] 的提示对话框中单击 [下一步] 系统就会弹出一个对话框。对话
框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个
大家可以去看看帮助)
e. 单击 [下一步] 系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVER允许在
不同的数据库如 ORACLE或ACCESS之间进行数据复制。但是在这里我们选择运行
"SQL SERVER 2000"的数据库服务器
f. 单击 [下一步] ,选择要发布的对象(如表,视图,存储过程,一般是表)
g. 然后 [下一步] 直到操作完成。当完成出版物的创建后创建出版物的数据库也就变成了
一个共享数据库。

---------------------------------------------------------------------------
3.设计订阅
a. 选中指定的订阅服务器
b. 从 [工具] 下拉菜单中选择 [复制] 子菜单的 [请求订阅]
c. 按照提示单击 [下一步] 操作直到系统会提示检查SQL SERVER代理服务的运行状态,执行
复制操作的前提条件是SQL SERVER代理服务必须已经启动。
d. 单击 [完成] 完成订阅操作。

----------------------------------------------------------------------------
完成上面的步骤其实复制也就是成功了。但是如何来知道复制是否成功了呢?
这里可以通过这种方法来快速看是否成功。
展开出版服务器下面的复制——发布内容——右键发布内容——属性——击活——状态然后点立即运行代理程序接着点代理程序属性击活调度
把调度设置为每一天发生,每一分钟,在0:00:00和23:59:59之间。
接下来就是判断复制是否成功了打
开C:\Program Files\Microsoft SQL Server\MSSQL\REPLDATA\下面
看是不是有一些以时间做为文件名的文件夹差不多一分中就产生一个。