精华内容
下载资源
问答
  • SQL Server与Oracle的数据同步方案解决过程,更内容请参考下文:  说到同步,其实是靠"作业"定时调度存储过程来操作数据,增,删,改,全在里面,结合触发器,游标来实现,关于作业调度,我使用了5秒运行一次来实行"秒...
    SQL Server与Oracle的数据同步方案及解决过程,更多内容请参考下文:  
    说到同步,其实是靠"作业"定时调度存储过程来操作数据,增,删,改,全在里面,结合触发器,游标来实现,关于作业调度,我使用了5秒运行一次来实行"秒级作业",这样基本就算比较快的"同步" 


    我做的是SQL Server往Oracle端同步,先在sql server上建立往Oracle端的链接服务器,我用一个视图"封装"了一下链接服务器下的一张表。 


    create view v_ora_PUBLISHLASTREC 

    as 

    select * from ORACLEDB..ROADSMS.PUBLISHLASTREC 


    //ORACLEDB链接服务器名,ROADSMS为表空间名,PUBLISHLASTREC 为数据表名 


    然后我们分别在sql server 要同步的表上建立,insert,delete,update触发器 


    脚本如下: 


    --说明:modiid等于1为insert,2为delete,3为update 

    create trigger trg_PUBLISHLASTREC_insert on PUBLISHLASTREC for insert 

    as 

    insert into dbo.PublishLastRec_SQL(modiid,SignalGUID,AreaNo,SignalNote,AreaNote,PublishRoadStatus,PublishTime,IsExec) 

    select '1',SignalGUID,AreaNo,SignalNote,AreaNote,PublishRoadStatus,PublishTime,'0' from inserted 


    create trigger trg_PUBLISHLASTREC_update on PUBLISHLASTREC for update 

    as 

    insert into dbo.PublishLastRec_SQL(modiid,SignalGUID,AreaNo,SignalNote,AreaNote,PublishRoadStatus,PublishTime,IsExec) 

    select '3',SignalGUID,AreaNo,SignalNote,AreaNote,PublishRoadStatus,PublishTime,'0' from inserted 


    create trigger trg_PUBLISHLASTREC_delete on PUBLISHLASTREC for delete 

    as 

    insert into dbo.PublishLastRec_SQL(modiid,SignalGUID,AreaNo,SignalNote,AreaNote,PublishRoadStatus,PublishTime,IsExec) 

    select '2',SignalGUID,AreaNo,SignalNote,AreaNote,PublishRoadStatus,PublishTime,'0' from deleted 


    所有的操作都是把各幻表的数据插入到一张表中,上面统一插入的表为PublishLastRec_SQL,记录下操作的标识,以标识该条记录是插入,删除,还是修改,modiid等于1为insert,2为delete,3为update,字段isexec标识该条记录是否已处理,0为未执行的,1为已执行的 


    接着就是最关键的一步,存储过程 


    脚本如下: 


    ALTER proc pro_PublishLastRec_Sql 

    as 

    declare @modiid int 

    declare @signalguid int 

    declare @areano numeric(1,0) 

    declare @signalnote varchar(50) 

    declare @areanote varchar(50) 

    declare @publishroadstatus varchar(20) 

    declare @publishtime varchar(50) 


    if not exists(select * from PublishLastRec_SQL where IsExec=0) 

    begin 

    truncate table PublishLastRec_SQL 

    return 

    end 


    declare cur_sql cursor for 

    select modiid,SignalGUID,AreaNo,SignalNote,AreaNote,PublishRoadStatus,PublishTime from 

    PublishLastRec_SQL where IsExec=0 order by [id]--IsExec 0为未执行的,1为已执行的 

    open cur_sql 

    fetch next from cur_sql into @modiid,@SignalGUID,@AreaNo,@SignalNote,@AreaNote,@PublishRoadStatus,@PublishTime 


    while @@fetch_status=0 

    begin 

    if (@modiid=1) --插入 

    begin 

    insert into v_ora_PUBLISHLASTREC(SignalGUID,AreaNo,SignalNote,AreaNote,PublishRoadStatus,PublishTime) 

    values(@SignalGUID,@AreaNo,@SignalNote,@AreaNote,@PublishRoadStatus,@PublishTime) 

    end 

    if (@modiid=2) --删除 

    begin 

    delete from v_ora_PUBLISHLASTREC where SignalGUID=@SignalGUID and AreaNo=@AreaNo 

    end 

    if (@modiid=3) --修改 

    begin 

    update v_ora_PUBLISHLASTREC 

    set SignalNote=@SignalNote,AreaNote=@AreaNote,PublishRoadStatus=@PublishRoadStatus, 

    PublishTime=@PublishTime 

    where SignalGUID=@SignalGUID and AreaNo=@AreaNo 

    end 

    update PublishLastRec_SQL 

    set IsExec=1 

    where current of cur_sql 

    fetch next from cur_sql into @modiid,@SignalGUID,@AreaNo,@SignalNote,@AreaNote,@PublishRoadStatus,@PublishTime 

    end 

    deallocate cur_sql 


    该存储过程使用游标逐行提取PublishLastRec_Sql记录,根据modiid判断不同的数据操作,该条记录处理完毕后把isexec字段更新为1. 


    最后是调用该存储过程的作业,我们先建一个一分钟运行一次的作业,然后在"步骤"的脚本中这样写: 


    DECLARE @dt datetime 

    SET @dt = DATEADD(minute, -1, GETDATE()) 

    WHILE @dt < GETDATE() 

    BEGIN 

    EXEC pro_PublishLastRec_Sql --这里pro_PublishLastRec_Sql 为你要作业执行的存储过程 

    WAITFOR DELAY '00:00:05' -- 等待5秒, 根据你的需要设置即可 

    END 

    现在,我们即可以实现5秒执行一次该存储过程,做到5秒数据同步。
    展开全文
  •  目前很软件厂商针对移动设备的数据库同步解决方案,这些方案主要分为两种:第一种,是针对某种特定数据库提供的数据同步方案,比如SQL Sever的RDA和Replication、Oracle Lite和Sybase SQL Anywhere等;...

      目前很多软件厂商针对移动设备的数据库同步解决方案,这些方案主要分为两种:第一种,是针对某种特定数据库提供的数据同步方案,比如SQL SeverRDAReplicationOracle LiteSybase SQL Anywhere等;第二种是ISV开发的针对不同数据库的数据同步方案。

    SQL Mobile支持两种数据同步的方法:Remote data accessRDA)和Replication。这两种方法都支持从远程的SQL Server服务器中下载数据到设备端的SQL Mobile数据库中,在本地对数据进行浏览和修改,再将修改结果更新到SQL Server服务器中。

    RDAReplication都需要配置SQL Mobile Server Tools,也就是说,必须要有一个运行IISWeb ServerServer Tools的主要作用是将移动设备通过网络发送的数据库访问请求,转发给SQL Server数据库,并将结果集发送回移动设备中。根据智能设备应用程序的用途、功能、规模和要求来决定在 Microsoft SQL Server 2005 Mobile Edition (SQL Server Mobile) 应用程序中使用远程数据访问 (RDA) 还是使用复制。每个连接数据解决方案都有不同的优点和缺点。

     

                            RDA架构

        运行于设备上的 Microsoft SQL Server 2005 Mobile Edition (SQL Server Mobile) 应用程序可以使用远程数据访问 (RDA)

    • 下载数据。应用程序可以将数据从 SQL Server 中的数据库请求到 SQL Server Mobile 中的数据库。例如,应用程序可能将公司员工目录、产品价格列表或产品目录下载到设备上。
    • 捕获和上载数据。应用程序可以捕获源自用户输入的表单、全球定位系统、条形码读取器或类似装置的数据。应用程序可以将捕获的数据存储在设备上的 SQL Server Mobile 数据库中。应用程序可以定期将捕获的数据从 SQL Server Mobile 数据库推送到 SQL Server 数据库。
    • 下载、更新和上载数据。应用程序可以将数据从 SQL Server 数据库请求到 SQL Server Mobile 数据库。然后,应用程序可以更新 SQL Server Mobile 数据库。应用程序可以定期将更改后的数据从 SQL Server Mobile 数据库推送到 SQL Server 数据库。
    • 提交 SQL 语句。应用程序可以提交要在远程 SQL Server 数据库上执行的 SQL 语句。如果设备始终与网络连接,此功能特别有用。

    应用程序可以组合使用这些技术。例如,销售支持应用程序可能将价格列表下载到设备上,并在设备上捕获和上载新的订单。应用程序还可以直接将 SQL 语句提交到 SQL Server 数据库。

     

    远程数据访问 (RDA) 使用 Microsoft SQL Server 2005 Mobile Edition (SQL Server Mobile) 的三个组件:SQL Server Mobile 数据库引擎、SQL Server Mobile 客户端代理和 SQL Server Mobile 服务器代理。

    RDA 使用 Microsoft Internet 信息服务 (IIS) 作为服务器上 SQL Server 数据库和设备上 SQL Server Mobile 数据库之间的通信机制。SQL Server Mobile 数据库引擎、SQL Server Mobile 客户端代理和 SQL Server Mobile 服务器代理协同工作才可以完成 RDA,如下面的关系图所示。

     

     

                         二、  复制的架构

    Microsoft SQL Server 2005 Mobile Edition (SQL Server Mobile) 中,复制使用下列组件:

    • SQL Server Mobile 数据库引擎 
    • SQL Server Mobile 客户端代理
    • SQL Server Mobile 服务器代理
    • SQL Server Mobile 复制提供程序

     

    SQL Server Mobile 数据库引擎

    SQL Server Mobile 数据库引擎 可管理设备上的本地数据库。对于订阅数据库,SQL Server Mobile 数据库引擎 可通过维护每条记录的更改跟踪信息,跟踪所有插入、更新或删除的数据库记录。

    SQL Server Mobile 客户端代理

    SQL Server Mobile 客户端代理是设备上主要的 SQL Server Mobile 复制组件。SQL Server Mobile 客户端代理可实现 SQL Server Mobile Replication 对象接口。应用程序可调用此接口,通过编程方式控制复制。

    SQL Server Mobile 服务器代理

    SQL Server Mobile 服务器代理是负责管理 SQL Server SQL Server Mobile 之间通信的组件。SQL Server Mobile 服务器代理位于运行 Microsoft Internet 信息服务 (IIS) 的服务器上,可以处理从 SQL Server Mobile 客户端代理发出的所有 HTTP 请求。

    SQL Server 协调器和 SQL Server Mobile 复制提供程序

    在执行同步时,SQL Server 协调器将调用 SQL Server Mobile 复制提供程序。SQL Server 协调器和 SQL Server Mobile 复制提供程序都位于运行 IIS 的服务器上,该服务器上还安装有 SQL Server Mobile 服务器工具。在启动 SQL

     

     

                        三、  RDA和复制的比较

    RDA 和复制都适用于无线传输。使用压缩可减小传输的数据量。在传输期间可以使用加密来保护敏感的用户数据。

    功能

    复制

    RDA

    交换所跟踪的数据更改

    在服务器和客户端之间复制更改

    列级跟踪通过仅传输更改的列数据,减少数据传输量

    行级跟踪传输整行

    仅从客户端到服务器推送更改。完成接收服务器更改所需的客户端数据的更新。

    行级跟踪传输整行

    可以从其传播数据的表的数量

    多个表与在发布中定义的一样多

    每个 RDA 方法对应一个表。

    可以传播的表的类型

    控制数据流的不同类型的表

    在发布(服务器)中添加或删除表是自动复制的,而无须在客户端上重新初始化订阅

    不适用

    在服务器上添加或删除表不会自动复制到客户端。

    约束和索引

    引用完整性约束和索引是从服务器自动复制的。

    不会复制引用完整性约束,可以选择复制索引。其他架构定义必须在客户端上定义。

    冲突

    冲突包括由不同用户更改的数据 和因错误而未应用的行。

    在服务器上解决和管理冲突

    支持内置和自定义冲突解决程序。

    冲突仅包括因错误而未应用的行。RDA 不检测数据是否已由其他用户更改。

    不管理冲突,但可以选择在客户端上的错误表中进行报告。

    无冲突解决程序。

    架构更改

    可以复制架构更改(如添加/删除列、添加/删除约束或更改列定义)。

    不允许进行架构更改。如果架构已更改,则客户端必须删除客户端上的表,并再次从服务器请求所有数据。根据架构更改的不同,推送可能会失败。

    标识列

    手动和自动处理标识范围。支持 BigInt Int 列。

    手动处理标识范围。支持 BigInt Int 列。

    数据/架构定义

    配置发布时在服务器上进行;创建订阅时在客户端上自动对其进行定义。

    将数据从服务器请求到客户端时,在客户端上进行数据和架构定义。

    工具 (UI)

    支持用于创建和管理订阅的大量工具,以及用于管理多个订阅、观察性能和同步时间的监视工具

    不支持任何工具。

    服务器入侵

    将表和列添加到服务器数据库以管理复制。

    不对服务器上的数据库进行更改。

     

                      mobile数据同步的配置

     

    大家也可以参考 Sql server 2005 book online ,但是有些东西,觉得它写的不是很清楚。

     

     

    我们需要一下五步来完成我们的数据同步,当然了机器上必须要安装上开发环境。开发环境的具体配置我们等下再说。

    1、创建 sql server 2005的数据库发布。

    2、配置该发布的web同步(也就是配置IIS

    3、创建订阅(于创建发布对应)

    4、创建应用程序

    5、部署发布并测试

    预备工作:

    软件要求如下:

    1.    xp系统

    2.    IIS5.0以上)默认安装的系统是没有安装IIS

       安装步骤:
    (1)
    、插入windows xp安装光盘,打开控制面板,然后打开其中的添加/删除程序
    (2)
    、在添加或删除程序窗口左边点击添加/删除Windows组建

    (3)
    、捎带片刻系统会启动Windows组建向导,在Internet信息服务(IIS)前面选勾,点击下一步:

    (4)、系统安装成功,系统会自动在系统盘新建网站目录,默认目录为:C:/Inetpub/wwwroot

    3.SQL Server 2005XP不能用SQL Server 服务器版,要用开发版或个人版,开发版功能和服务器版差不多,下载地址如下:http://www.downsite.cn/rj/cs_sql_2005_dev_all_dvd.rar

    推荐完全安装,注意要把客户端组件安装上。

     

    创建数据库并在其中填充数据

    (1)    打开 SQL Server Management Studio

    (2)             当提示您连接服务器时,请在服务器名称中键入 (local),然后单击连接

    (3)             打开一个新查询窗口。创建一个 SQLMobile 数据库,并在该数据库中填充数据。

       USE master;

    GO

    DROP Database SQLMobile;

    GO

    CREATE DATABASE SQLMobile;

    GO

    USE SQLMobile;

    GO

    CREATE TABLE MembershipData (MemberID INTEGER IDENTITY (1,1) CONSTRAINT pkMemberID PRIMARY KEY, MemberName NVarChar (50));

    CREATE TABLE FlightData (MemberID INTEGER FOREIGN KEY REFERENCES MembershipData(MemberID), Destination NVarChar (50), FlightStatus NVarChar(50), ArrivalDate DATETIME, FlownMiles INTEGER);

    INSERT INTO MembershipData (MemberName) VALUES ('Mr Don Hall');

    INSERT INTO MembershipData (MemberName) VALUES ('Mr Jon Morris');

    INSERT INTO MembershipData (MemberName) VALUES ('Ms TiAnna Jones');

    INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) VALUES (1, 'Seattle', 'Flight Delayed 1 hour', '8/25/00', '20000');

    INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) VALUES (2, 'London', 'Flight on time', '9/12/00', '15000');

    INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) VALUES (3, 'Sydney', 'Flight Gate Closing', '11/5/00', '30000');

    INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) VALUES (1, 'Tokyo', 'Delayed Fog', '5/25/00', '25000');

    INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) VALUES (2, 'Minneapolis', 'Flight on time', '5/1/00', '1000');

    INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) VALUES (3, 'Memphis', 'Flight Gate Closing', '1/5/00', '1000');

    (4)             单击执行(!)”运行该脚本并创建数据库。

    注意:

    您还可以按 F5,或者从查询菜单中选择执行来运行该查询。

    此时,将运行该脚本,创建一个名为 SQLMobile 的新数据库。

     

    现在我们开始我们的数据同步工作

    1,             Sql Server Agent  创建一个用户。

    (1)、在开始菜单上,右键单击我的电脑,然后选择控制面板”-〉“管理工具”

    (2)、在计算机管理中,展开系统工具,展开本地用户和组,右键单击用户,然后选择新用户

    (3)、在新用户对话框中,键入以下信息,然后单击创建,在这里我们用"SnycTest"帐户,设置密码"admin",,隶属于administrators,并只设置密码永不过期的属性。

     

    2、创建快照文件夹。

    在盘符中创建新的文件夹,并为它赋予相应的权限。

    创建办法:我的电脑→C:→新建文件夹→命名为"snapshot"→右键→共享和安全→共享→共享此文件→权限→添加→高级→立即查找→选择SnycTest→确定→并付给权限:更改和读取。安全选项卡→如同上面添加SnycTest用户→并设置权限为一下四个:读取和运行,列出文件夹目录,读取,写入。  (如果电脑的文件夹没有设置用户权限的选项,工具->文件夹选项->查看->去掉"简单文件共享"前的钩就行了;NTFS才有安全选项)

     

    至此我们的准备工作就可以了。

     

    3,创建发布。

    具体方法:

    (1)、在对象资源管理器中,展开“(本地)”节点(如果当前尚未展开),然后展开复制

    (2)、右键单击发布文件夹,然后选择新建发布

    (3)、在新建发布向导简介屏幕上,单击下一步

    1.               如果以前未曾在此计算机上创建发布,将提示您配置分发服务器。选择第一个选项将本地计算机作为它自己的分发服务器,然后单击下一步

    2.               如果以前未曾在此计算机上创建发布,将提示您指定快照文件夹。键入在前面过程中创建的快照文件夹的共享路径。以 //servername/share 格式键入共享路径,不要键入本地路径。在此演练中,我们建议您键入 //computer/snapshot(其中 computer 是您计算机的名称),然后单击下一步

    3.               在数据库列表中,选择SQLMobile,然后单击下一步

    在发布类型列表中,选择合并发布,然后单击下一步 下一步我们选择要发布的数据库SQLMobile,→发布类型,在这里有个四个发布类型

    快照发布:

    发布服务器按预定的时间间隔向订阅服务器发送已发布数据的快照。

    事务性发布:

    在订阅服务器收到已发布数据的初始快照后,发布服务器将事务流式传输到订阅服务器。

    具有可更新订阅的事务性发布:

    SQL Server 订阅服务器收到已发布数据的初始快照后,发布服务器将事务流式传输到订阅服务器。来自订阅服务器的事务被应用于发布服务器。

    合并发布:

    在订阅服务器收到已发布数据的初始快照后,发布服务器和订阅服务器可以独立更新已发布数据。更改会定期合并。Microsoft SQL Server Mobile

    Edition 只能订阅合并发布。

    4.               订阅服务器类型页中,选择启用对 SQL Server Mobile 订阅服务器的支持,然后单击下一步

    5.               在要发布的对象列表中,选中复选框。如果展开,您将发现 SQLMobile 数据库中的两个表都已被选中。单击下一步

    6.               会通知您将向表中添加唯一标识符。所有合并项目都需要一个 uniqueindentifier 列。单击下一步

    7.               筛选表行页中,现在即可添加对已发布数据的筛选器。对于此演练,您将无需筛选数据。单击下一步

    8.               快照代理页中,您可以配置创建快照的时间以及快照代理运行的频率。单击下一步以接受默认设置。

    9.               代理安全性对话框中,单击安全设置

       在“快照代理安全性”对话框中,输入前面过程中所创建帐户的登录信息。进程帐户为 computer_name/SnycTest(其中 computer_name

      是您计算机的名称),密码为 admin

      单击“确定”以保存设置。

    a.                         单击确定以保存设置。

    b.                        代理安全性页中,单击下一步

    10.          向导操作屏幕上,您可以确定创建发布的时间以及是否希望创建脚本文件。单击下一步以接受默认选择。

    11.          完成该向导屏幕上,键入 SQLMobile 作为发布的名称,然后单击完成

    12.          将创建发布。向导完成后,单击关闭

     

    4设置权限

    您必须为快照代理帐户和 IIS 匿名用户帐户授予权限。还必须将 IIS 匿名用户帐户添加到发布访问列表 (PAL) 中。

     4.1设置数据库权限

    1.     在 的对象资源管理器中,展开安全性,右键单击登录名,然后选择新建登录名

    2.     新建登录名对话框中,选择“Windows 身份验证,单击搜索,在输入要选择的对象名称框中键入 computername/SnycTest(其中 computername 为您的计算机名称),单击检查名称,然后单击确定

    3.     在导航窗格中,选择用户映射窗格。

    4.     在数据库列表中,选择“distribution”“db_owner”角色,选择“SQLMobile”“db_owner”角色,然后单击确定

    5.     右键单击登录名,然后选择新建登录名

    6.     新建登录名对话框中,选择“Windows 身份验证,单击搜索,在输入要选择的对象名称框中键入 computername/iusr_computername(其中 computername 为您的计算机名称),单击检查名称,然后单击确定

    7.     在导航窗格中,选择用户映射窗格。

    8.     在数据库列表中,选择“distribution”“SQLMobile”,然后单击确定

     

    4.2 授予发布权限

    1.     在对象资源管理器中,展开复制,展开发布,右键单击“[SQLMobile]:SQLMobile”发布,然后单击属性

    2.     在导航窗格中,选择发布访问列表

    3.     单击添加。在添加发布访问项对话框中,列出了 IUSR 帐户。选择该帐户,然后单击确定

    4.     请确保 IUSR 帐户当前位于 PAL 中,然后单击确定

    创建发布快照

    只有在创建发布快照之后才可对 SQLMobile 发布的订阅进行初始化。

     创建发布快照

    1. SQL Server Management Studio 的对象资源管理器中,展开“(本地)”计算机节点。
    2. 展开本地发布文件夹,选择发布名称,右键单击“SQLMobile”,然后单击查看快照代理状态
    3. 查看快照代理状态对话框中,单击启动

    在进行下一操作之前,请确保已成功完成快照作业。

     

     

    5、配置 Web 同步

    既然 SQL Server 已经配置了发布,您必须使该发布可以被 SQL Server Mobile 客户端通过网络进行访问。SQL Server Mobile 通过 IIS 连接到 SQL Server。特别是,您可以创建并配置一个虚拟目录,以允许客户端访问 SQL Server Mobile 服务器代理。

    5.1安装 SQL Server Mobile 服务器组件

    1.               Windows 资源管理器中,导航到以下目录:

    C:/Program Files/Microsoft SQL Server/90/Tools/Binn/VSShell/Common7/IDE(如果装在D盘,可能在D:/Program Files/Microsoft SQL

    Server/90/Tools/Binn/VSShell/Common7/IDE

    2.               双击 sqlce30setupen.msi 运行安装程序。

    3.               安装向导的简介屏幕上,单击下一步

    4.               阅读并接受 EULA 条款,然后单击下一步

    5.               系统配置检查屏幕上,确保所有项都通过检查。如果尚未安装 SQL Server 2000,将列出该列表的最后一项作为警告。因为您正在使用 SQL Server 2005,这并不是问题。单击下一步

    6.               在接下来的屏幕上,单击下一步,然后单击安装开始安装。

    7.               单击“Finish”

     

    5.2发布以进行 Web 同步

    1.               SQL Server Management Studio 的对象资源管理器中,展开“(本地)”计算机节点。

    2.               右键单击复制文件夹,然后选择配置 Web 同步

    3.               在该向导的简介屏幕上,单击下一步

    4.               订阅服务器类型屏幕上,选择“SQL Server Mobile Edition”,然后单击下一步

    5.               “Web 服务器屏幕的运行 IIS 的计算机文本框中,键入您计算机的名称(如果尚未提供),然后单击创建新的虚拟目录

    6.               在显示的树中,展开该计算机,展开网站,然后选择默认网站

    7.               单击下一步

    8.               虚拟目录信息屏幕上的别名文本框中,键入 SQLMobile,然后单击下一步

    9.               客户端身份验证屏幕上,选择客户端将以匿名方式进行连接,然后单击下一步

    10.          匿名访问屏幕上,单击下一步接受默认设置。

    11.          快照共享访问屏幕上,键入 //computer/snapshot(其中 computer 是您计算机的名称),然后单击下一步

    如果收到快照共享为空的警告,请单击

    12.          单击“Finish”

    13.          单击关闭

     

    5.3 SQL Server Mobile 任务

    在部署将要使用 SQL Server Mobile 的应用程序之前,预先创建 SQL Server Mobile 数据库和订阅通常会节省时间。SQL Server Management Studio 允许您在本地计算机上创建并使用 SQL Server Mobile 数据库。然后,您可以在开发应用程序时使用此数据库。

    创建新的 SQL Server Mobile 数据库

    1.               SQL Server Management Studio 的对象资源管理器中,单击连接,然后选择“SQL Server Mobile”

    2.               数据库文件字段中,选择“<新建数据库…>”

    3.               在文件名文本框中,键入 c:/sqlmobile.sdf,然后单击确定

    4.               连接到服务器对话框中,单击连接

    将在对象资源管理器中添加名为“SQL Server Mobile [My Computer/.../sqlmobile]”的新节点。

     

    6.创建新的订阅

    1.               在对象资源管理器中,展开“SQL Server Mobile”节点,展开复制,右键单击订阅,然后选择新建订阅

    2.               在简介屏幕上,单击下一步

    3.               选择发布屏幕的发布服务器下拉列表中,选择“<查找 SQL Server 发布服务器…>”

    4.               连接到服务器对话框,键入或选择本地计算机,然后单击连接

    5.               选择发布屏幕的发布列表中,展开SQLMobile,选择SQLMobile发布,然后单击下一步

    6.               标识订阅屏幕上,为订阅名称键入 SQLMobile,然后单击下一步

    7.               “Web 服务器身份验证屏幕上,键入前面过程中创建的虚拟目录的 URL。在此演练中,您已经创建了 URL http://localhost/SQLMobile 的虚拟目录。

    8.               单击订阅服务器将以匿名方式进行连接,然后单击下一步

    9.               “SQL Server 身份验证屏幕上,单击下一步接受默认设置。

    在最终屏幕上,该向导将显示示例代码,您可以在应用程序中创建订阅时使用该代码。选择示例代码(Visual Basic C#,取决于您在创建应用程序时使用的语言),然后复制代码。若要执行复制操作,请选择该代码并按 Ctrl+C。启动记事本或其他文本编辑器,然后粘贴示例代码。在使用下列步骤创建应用程序时,您将使用此代码。

    10.          在复制示例代码之后,单击完成

    11.          单击关闭

    展开全文
  • Oracle GoldenGate 数据仓库解决方案   集中复制适宜的环境 集中复制的优缺点 对一数据同步(集中复制) 对一数据同步架构:   对一数据同步实现方式同一对,也是将extract-replicat将进程拆分...

    Oracle GoldenGate 数据仓库解决方案

     

    集中复制适宜的环境
    集中复制的优缺点

    多对一数据同步(集中复制)

    多对一数据同步架构:

     

    多对一数据同步实现方式同一对多,也是将extract-replicat将进程拆分成多个。

    多对一同步需要注意的是,所有源端和目标端的表都应该使用一致的主键约束,而且在不同的源端不应该对同一键值的数据进行维护。也就是说,需要在业务上将不同源的数据隔离开来,以防止对同一数据的覆盖更改等问题。一般用于维护业务的区域性数据、然后统一同步到业务中心数据源的业务场景。

             还有一个需要注意的方面是TRUCATE的捕获,在多对一的配置下应避免捕获。因为GoldenGate处理TRUNCATE同步是直接传输了这个语句,并不会提供具体删除的数据信息(没有REDO也无法提供),所以无论哪个源端执行了TRUNCATE,如果同步到了目标端,都会直接把目标端的表数据直接删光,无论目标数据是否是来源于这个源,造成数据的不一致。

     

    oracle goldengate 容灾、双业务详细配置

     

    SourceDB:

    192.168.1.150:7809

    192.168.1.151:7809

    TargetDB:

    192.168.4.252:7809

     

    软件准备:

    1.Oracle10.2.0.1

    2.ggs_Windows_x86_ora10g_32bit

    3.wls1033_win32

    4.gg-director-serversetup_win_v11_1_1_1_0_001

    5.gg-director-clientsetup_win_v11_1_1_1_0_001

     

    ==============================

    Weblogic Server 11g 用户

    weblogic/12345678

     

     

    Oracle DataaBase

    添加用户

    Oracle GoldenGate DirectorServer11.1.1.1.0_001 专用

    database user: ggserver/ggserver11

    配置

    alter database add supplemental log data;

    alter database add supplemental log data(primary key,unique,foreign key) columns;

     

    GoldenGate用户

    专用

    gatedba/gatedba

    测试同步用户

    gate01/gate01 

     

    =====================

    步骤:

     

    1.安装ggs_Windows_x86_ora10g_32bit

     

    2.


    ***************Gate01 服务器***************

    dblogin userid gatedba,password gatedba

    start mgr

     

    edit param extgate1

    /***

    extract extgate1 

                                

    userid gatedba,password gatedba

     

    exttrail C:\ggs_Windows_x86_ora10g_32bit\dirdat\a1

     

    tranlogoptions excludeuser gatedba 

     

    dynamicresolution                       

     

    gettruncates

     

    TABLE gate01.*;

    ***/

    add extract extgate1,tranlog,begin now

    add exttrailC:\ggs_Windows_x86_ora10g_32bit\dirdat\a1, extract extgate1

     

    ####DataPump:  gate01 to gate03

    edit param pp1

    /***

    extract pp1

     

    userid gatedba,password gatedba

     

    rmthost 192.168.4.252,mgrport 7809,compress,COMPRESSTHRESHOLD 0

     

    rmttrailC:\ggs_Windows_x86_ora10g_32bit\dirdat\rep\a1

     

    PASSTHRU 

     

    gettruncates

     

    table gate01.*;

    ***/

    add extract pp1,exttrailsourceC:\ggs_Windows_x86_ora10g_32bit\dirdat\a1,begin now

    add rmttrail C:\ggs_Windows_x86_ora10g_32bit\dirdat\rep\a1, extract pp1

     

    *******************Gate02 服务器*********************

    dblogin userid gatedba,password gatedba

    start mgr

     

    edit param extgate2

    /***

    extract extgate2

                                

    userid gatedba,password gatedba

     

    exttrailC:\ggs_Windows_x86_ora10g_32bit\dirdat\b1

     

    tranlogoptions excludeuser gatedba 

     

    dynamicresolution                       

     

    gettruncates

     

    TABLE gate02.*;

    ***/

    add extract extgate2,tranlog,begin now

    add exttrailC:\ggs_Windows_x86_ora10g_32bit\dirdat\b1, extract extgate2

     

    ####DataPump:  gate02 to gate03

    edit param pp2

    /***

    extract pp2

     

    userid gatedba,password gatedba

     

    rmthost 192.168.4.252,mgrport 7809,compress,COMPRESSTHRESHOLD 0

     

    rmttrailC:\ggs_Windows_x86_ora10g_32bit\dirdat\rep\b1

     

    PASSTHRU 

     

    gettruncates

     

    table gate02.*;

    ***/

    add extract pp2,exttrailsource C:\ggs_Windows_x86_ora10g_32bit\dirdat\b1,beginnow

    add rmttrail C:\ggs_Windows_x86_ora10g_32bit\dirdat\rep\b1, extract pp2

     

    *******************Gate03数据仓库 服务器*********************

    dblogin userid gatedba,password gatedba

    start mgr

     

    ##########接收Gate1数据############

    edit param repgate1

    /***

    replicat repgate1    

                             

    userid gatedba,password gatedba 

                      

    ASSUMETARGETDEFS 

                        

    reperror default,discard

                        

    discardfile C:\ggs_Windows_x86_ora10g_32bit\dirrpt\repgate1.dsc,append,megabytes200 

     

    gettruncates

     

    HANDLECOLLISIONS

     

    MAP gate01.*, TARGET gate03.*;

    ***/

     

    add replicat repgate1,exttrailC:\ggs_Windows_x86_ora10g_32bit\dirdat\rep\a1, nodbcheckpoint

     

    ##########接收Gate2数据############

    edit param repgate2

    /***

    replicat repgate2    

                             

    userid gatedba,password gatedba 

                      

    ASSUMETARGETDEFS 

                        

    reperror default,discard

                        

    discardfile C:\ggs_Windows_x86_ora10g_32bit\dirrpt\repgate2.dsc,append,megabytes200 

     

    gettruncates

     

    HANDLECOLLISIONS

     

    MAP gate02.*, TARGET gate03.*;

    ***/

     

    add replicat repgate2,exttrailC:\ggs_Windows_x86_ora10g_32bit\dirdat\rep\b1, nodbcheckpoint

     

    ===============================

    3.安装Oracle Golden Gatedirector Server

    oracle database :

    ggserver/ggserver11

     

    4.安装Oracle Golden Gatedirector client

    登陆帐户:

    username:admin

    password:admin

    server: 192.168.4.252:7001

     

    5.配置Oracle GDSC AdminTool

    登陆帐户:

    username:admin

    password:admin

     

    添加DataSource

    host identity:

     fully qualified domain name:192.168.1.150

     manager port: 7809

     data source name gate01--自定义别名,用来区分数据库

     

    GoldenGate info:

     Host operating system:WU

     Database:ORA

     Goldengate version:11.1.1.1

     

    Default DB Credentials:

     DSN: --没有Host解析不填

     Username: gatedba --专用

     password: gatedba

     

    Access Control

     owner: admin

     Host is observale: yes

     

     

     

    展开全文
  • PHP服务器有台,用nginx做负载均衡,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很问题,比如说最常见的登录状态,下面提供了几种方式来解决session共享的问题: ...

    查了一些资料,看了一些别人写的文档,总结如下,实现nginx session的共享

    PHP服务器有多台,用nginx做负载均衡,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态,下面提供了几种方式来解决session共享的问题:

    1、不使用session,换用cookie

    session是存放在服务器端的,cookie是存放在客户端的,我们可以把用户访问页面产生的session放到cookie里面,就是以cookie为中转站。你访问web服务器A,产生了session然后把它放到cookie里面,当你的请求被分配到B服务器时,服务器B先判断服务器有没有这个session,如果没有,再去看看客户端的cookie里面有没有这个session,如果也没有,说明session真的不存,如果cookie里面有,就把cookie里面的sessoin同步到服务器B,这样就可以实现session的同步了。

    说明:这种方法实现起来简单,方便,也不会加大数据库的负担,但是如果客户端把cookie禁掉了的话,那么session就无从同步了,这样会给网站带来损失;cookie的安全性不高,虽然它已经加了密,但是还是可以伪造的。

    2、session存在数据库MySQL等)中

    PHP可以配置将session保存在数据库中,这种方法是把存放session的表和其他数据库表放在一起,如果mysql也做了集群了话,每个mysql节点都要有这张表,并且这张session表的数据表要实时同步。

    说明:用数据库来同步session,会加大数据库的IO,增加数据库的负担。而且数据库读写速度较慢,不利于session的适时同步。

    3、session存在memcache或者Redis

    memcache可以做分布式,php配置文件中设置存储方式为memcache,这样php自己会建立一个session集群,将session数据存储在memcache中。

    说明:以这种方式来同步session,不会加大数据库的负担,并且安全性比用cookie大大的提高,把session放到内存里面,比从文件中读取要快很多。但是memcache把内存分成很多种规格的存储块,有块就有大小,这种方式也就决定了,memcache不能完全利用内存,会产生内存碎片,如果存储块不足,还会产生内存溢出。

    4、nginx中的ip_hash技术能够将某个ip的请求定向到同一台后端,这样一来这个ip下的某个客户端和某个后端就能建立起稳固的session,ip_hash是在upstream配置中定义的:

     

       upstream nginx.example.com
           { 
                    server 192.168.74.235:80; 
                    server 192.168.74.236:80;
                    ip_hash;
           }
           server
           {
                    listen 80;
                    location /
                    {
                            proxy_pass
                           http://nginx.example.com;
                    }
        }

    ip_hash是容易理解的,但是因为仅仅能用ip这个因子来分配后端,因此ip_hash是有缺陷的,不能在一些情况下使用:
    1.nginx不是最前端的服务器。

    ip_hash要求nginx一定是最前端的服务器,否则nginx得不到正确ip,就不能根据ip作hash。譬如使用的是squid为最前端,那么nginx取ip时只能得到squid的服务器ip地址,用这个地址来作分流是肯定错乱的。
    2.nginx的后端还有其它方式的负载均衡。

    假如nginx后端又有其它负载均衡,将请求又通过另外的方式分流了,那么某个客户端的请求肯定不能定位到同一台session应用服务器上。这么算起来,nginx后端只能直接指向应用服务器,或者再搭一个squid,然后指向应用服务器。最好的办法是用 location作一次分流,将需要session的部分请求通过ip_hash分流,剩下的走其它后端去。

    5、upstream_hash
    为了解决ip_hash的一些问题,可以使用upstream_hash这个第三方模块,这个模块多数情况下是用作url_hash的,但是并不妨碍将它用来做session共享。没试过真心的不明白

    补充:memcached简单的介绍

    一、概念

    Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能。

    二、适用场合

    1.      分布式应用。由于memcached本身基于分布式的系统,所以尤其适合大型的分布式系统。

    2.      数据库前段缓存。数据库常常是网站系统的瓶颈。数据库的大并发量访问,常常造成网站内存溢出。当然我们也可以使用hibernate的缓存机制。但memcached是基于分布式的,并可独立于网站应用本身,所以更适合大型网站进行应用的拆分。

    3.      服务器间数据共享。举例来讲,我们将网站的登录系统、查询系统拆分为两个应用,放在不同的服务器上,并进行集群,那这个时候用户登录后,登录信息如何从登录系统服务器同步到查询系统服务器呢?这时候,我们便可以使用memcached,登录系统将登录信息缓存起来,查询系统便可以获得登录信息,就像获取本地信息一样。

    三、不适用场合

    那些不需要“分布”的,不需要共享的,或者干脆规模小到只有一台服务器的应用,memcached不会带来任何好处,相反还会拖慢系统效率,因为网络连接同样需要资源

     

    解决方案,使用memcached做为session的存储,memcached服务器设置在和nginx同一台Linux主机上。

    解决过程,

    两台apache的主机IP分别是 192.168.74.235192.168.74.236

    Nginx主机IP是192.168.74.131

    Memcached主机的IP是192.168.74.131

    在192.168.74.131 安装memcached,并且启动

    以一台为例192.168.74.236,安装php及php对memcached的依赖库yuminstall memcached-devel.i686 libmemcached-devel.i686  php-pecl-memcache.i686

    配置php.ini

    session.save_handler= memcache

    session.save_path= "tcp://192.168.74.131:11211"

    或者(以下两个没有尝试)

    1.某个目录下的 .htaccess :

    php_value session.save_handler "memcache"
    php_value session.save_path  "tcp://IP:11211"

    2.在某个一个应用中:

    ini_set("session.save_handler", "memcache");
    ini_set("session.save_path", "tcp://IP:11211"); 

     

    同时一定要把下面的;session.save_path= "/var/lib/php/session" 注释掉

    同时把extension=memcache.so 打开

    重启一下 apache,查看 phpinfo 中的 "Registered save handlers" 会有 "files usermemcache" 这3个可用,如果有就证明装好了

    Memcached服务器执行及结果

    [root@Git ~]# memcached-tool127.0.0.1:11211

     #  Item_Size  Max_age  Pages   Count   Full? Evicted Evict_Time OOM

    在236机器上添加下面的php文件

    <?php

    session_start();

    if (!isset($_SESSION['TEST'])) {

       $_SESSION['TEST'] = time();

    }

    $_SESSION['TEST3'] = time();

    print $_SESSION['TEST'];

    print "<br><br>";

    print $_SESSION['TEST3'];

    print "<br><br>";

    print session_id();

    ?>

    然后去memcached服务器上执行

    [root@Git ~]# memcached-tool127.0.0.1:11211

     #  Item_Size  Max_age  Pages   Count   Full? Evicted Evict_Time OOM

     1      80B         0s       1      0      no        0       0    0

    这样应该就算可以把session写到memcached服务器上了。

    总结下:

    1.      防火墙问题,很多连接局域网服务器失败都是防火墙引起的

    2.      依赖没有安装完毕,一开始使用memcached总失败,因为我没有安装php-memcached这样的扩展库

     

    转载于:https://www.cnblogs.com/qulinke/articles/6003049.html

    展开全文
  • rsync数据同步优缺点  与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远服务器,对本地...
  • 火电厂烟气排放过程自动监控解决方案旨在利用环保数采仪组网工况监测系统,对火电厂烟气排放设备运行进行监控、对排放气体污染物因子参数进行采集监测,各数据实时传输至云平台,异常数据警报提示,pc、手机便捷...
  • 贝尔通信容灾备份解决方案 充分利用容灾端数据可复用功能,可用于业务模块的重分布,报表系统,数据抽取等。从数据级保证系统的高可用性,维持高可用的系统之间的数据同步性。数据集中: 实现数据的集中抽取,系统稽核,...
  • 同步系统的基本设计思想[1]是在系统发送端数据帧中适当的位置处插入同步字码组,在接收端设计一个大的数据缓冲区,能够将所有同步字节恰好覆盖,并在数据帧缓冲区的适当位置处提取同步字码组,同时将提取到的同步...
  • BBSSDK是一套能快速实现discuz论坛移动化的一套解决方案。今天主要讲讲这个产品的数据同步存储原理。 主要从这三个方面:一.存储机制;二.版本控制;三.同步原理。 一. 存储机制首先要理清我们有哪些内容,在对...
  •  与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远服务器,对本地磁盘定期做数据镜像等。...
  • Java和JS的AES加密解密同步

    万次阅读 2016-07-13 23:02:53
    Java和JS的AES加密算法同步 公司要求登录时用户名和密码必须先加密,再将数据发送...后来在搜寻了很算法后,发现了解决方案,改动公司的算法,然后就可以轻松匹配了。 • Java的算法:import javax.crypto.Ci
  • 与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远服务器,对本地磁盘定期做数据镜像等。...
  • Token高并发解决方案

    2021-01-05 15:57:48
    Token高并发解决方案 一:作为token使用的第三方 客户端模式使用token 可以采用单例模式或定义一个全局变量isRefresh 标志,加同步锁Synchronized来保证token过期的那个时间点,刷新token方法只被调用一次。 二:...
  • [导读] ...调研了很久最后采用了 golang+mongod集群的这个方案,使用mongo做数据分析的存储数据同步就成为一个问题,目前网上主流的工具和解决方案都比较少,唯一一个稍微多点的文章就是tungsten...
  • [导读] ...调研了很久最后采用了 golang+mongod集群的这个方案,使用mongo做数据分析的存储数据同步就成为一个问题,目前网上主流的工具和解决方案都比较少,唯一一个稍微多点的文章就是tungst...
  • 在日常工作经常需要对服务器的数据进行备份,如异地备,必须通过网络将数据传输到远程服务器做备份。对于这类事务,如果单纯通过手工去操作的话,不仅效率低,而且会很烦锁。虽然很商业类备份软件可以提供解决...
  • 方案有很,rsync是其中一种解决方案,本文对rsync的安装及配置进行简单说明,其他实现方式有兴趣可以研究。以下是本文提纲,供参考: rsync安装篇 rsync配置篇(服务器&客户端) 使用方法简介 一、rsync安装...
  • KM0932/KM0532组控制32-端口矩阵式KVM电脑切换器专为现代的数据中心量身打造,以满足高可靠度、高安全性访问与控管台服务器的管理需求。 KM0932/KM0532允许9组/5组控制独立同步控管多达32台直接
  • 数据同步 183 4.1.7.12. 服务器集群和负载均衡 183 4.1.7.13. 防火墙 184 4.1.8 项目交付定义 185 4.1.9 项目验收方案 186 4.1.9.1. 验收方案 186 1. 验收目的 186 2. 验收对象 186 3. 项目验收的前提条件 ...
  • 使用ES6 / ES2015 React.js的全栈应用程序的一站式解决方案,具有通用Redux,Redux Thunk,React Router,热重载,Emotion,Express 4.x和个ORM。 :rocket: 以前称为choonkending / react-webpack-node 特征: ...
  • 车机车载智能屏互动影音蓝牙解决方案 智能汽车车机车载蓝牙模块解决方案 一.车载手机双屏映射蓝牙方案 RBMP1 蓝牙通信协议是公司根据高端汽车音响需求,配合高清图像同步(MHL)实现车机屏幕与手机屏幕同步...
  • 和手机一样,快速地按下会产生很事件和执行,但是TV相对于手机,性能要差很,另外遥控按下的速度普遍比手机要快,遥控是...”synchronized“同步关键词,在处理数据的,大io的方法里进行synchroni...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 253
精华内容 101
热门标签
关键字:

多端数据同步解决方案