Реализация распределенной базы данных с удаленным доступом

Автор работы: Пользователь скрыл имя, 30 Ноября 2011 в 00:17, курсовая работа

Краткое описание

В дипломном проекте рассмотрены общие подходы к реализации распределенных систем обработки данных на базе технологии клиент-сервер, а также задача создания действующей информационной системы на примере системы автоматизации расчетов с абонентами АО «Связьинформ» РМ. Актуальность построения этой системы обусловлена резким ростом количества предоставляемых услуг связи, а также переходом некоторых районов на повременную систему тарификации разговоров.
В процессе написания дипломной работы автором велась разработка архитектуры информационной системы, механизма репликации данных, средств удаленного доступа и удаленного администрирования системы, структуры БД, а также некоторых компонентов клиентской части системы (справочной службы и картотеки абонентов).

Содержание работы

ВВЕДЕНИЕ 4
1. ОСНОВНЫЕ ПОДХОДЫ К ПРОЕКТИРОВАНИЮ РАСПРЕДЕЛЕННЫХ БАЗ ДАННЫХ 6
1.1 ОСНОВНЫЕ ПОНЯТИЯ ТЕОРИИ РЕЛЯЦИОННЫХ БАЗ ДАННЫХ 6
1.2 СЕРВЕР БАЗЫ ДАННЫХ 10
1.2.1 Технология и модели "клиент-сервер" 10
1.2.2 Механизмы реализации активного ядра 19
1.2.3 Хранимые процедуры 20
1.2.4 Правила (триггеры) 21
1.2.5 Механизм событий 21
1.3 ОБРАБОТКА РАСПРЕДЕЛЕННЫХ ДАННЫХ 22
1.4 ВЗАИМОДЕЙСТВИЕ С PC-ОРИЕНТИРОВАННЫМИ СУБД 30
1.5 ОБРАБОТКА ТРАНЗАКЦИЙ 33
1.6 СРЕДСТВА ЗАЩИТЫ ДАННЫХ В СУБД 37
1.7 ПРИМЕНЕНИЕ CASE-СРЕДСТВ ДЛЯ ИНФОРМАЦИОННОГО МОДЕЛИРОВАНИЯ В СИСТЕМАХ ОБРАБОТКИ ДАННЫХ . 41
2. РЕАЛИЗАЦИЯ РАСПРЕДЕЛЕННОЙ БАЗЫ ДАННЫХ С УДАЛЕННЫМ ДОСТУПОМ 43
2.1 АНАЛИЗ СУЩЕСТВУЮЩЕЙ СИСТЕМЫ 44
2.2 НОВАЯ СХЕМА ОБМЕНА ИНФОРМАЦИЕЙ 45
2.3 ВЫБОР ОПЕРАЦИОННОЙ СИСТЕМЫ 47
2.4 ВЫБОР СЕРВЕРА БАЗ ДАННЫХ 48
2.5 ВЫБОР СРЕДСТВ РАЗРАБОТКИ 55
2.6 ОРГАНИЗАЦИЯ ВЗАИМОДЕЙСТВИЯ МЕЖДУ СЕРВЕРАМИ 56
2.6.1 Выбор модели распределенной базы данных 56
2.6.2 Модель взаимодействия 56
2.6.3 Использование слоя RPC для распределенной обработки данных на платформе Windows NT 57
2.6.4 Компоненты Microsoft RPC 57
2.6.5 Механизм работы RPC 58
2.6.6 Организация логического канала передачи данных 61
2.7 ОРГАНИЗАЦИЯ ДОСТУПА УДАЛЕННЫХ ПОЛЬЗОВАТЕЛЕЙ 61
2.7.1 Необходимость удаленного доступа 61
2.7.2 Использование слоя RAS для удаленного доступа на платформе Windows NT 61
2.7.3 Обеспечение информационной безопасности при удаленном доступе 63
2.8 ПРОЕКТИРОВАНИЕ СТРУКТУРЫ БАЗЫ ДАННЫХ 63
2.9 СХЕМА РЕПЛИКАЦИИ ДАННЫХ 65
2.10 ПРОЕКТИРОВАНИЕ КОММУНИКАЦИОННОГО СЕРВЕРА 67
2.10.1 Постановка задачи 67
2.10.2 Архитектура коммуникационного сервера 68
2.10.3 Вспомогательное программное обеспечение 70
3. ТЕХНИКО-ЭКОНОМИЧЕСКОЕ ОБОСНОВАНИЕ 71
3.1 ПЛАН ВЫПОЛНЕНИЯ ДИПЛОМНОГО ПРОЕКТА 71
3.2 РАСЧЕТ ОЖИДАЕМОЙ ПРОДОЛЖИТЕЛЬНОСТИ ВЫПОЛНЕНИЯ РАБОТ И ИХ ДИСПЕРСИЙ 73
3.3 ПОСТРОЕНИЕ ЛЕНТОЧНОГО ГРАФИКА ВЫПОЛНЕНИЯ РАБОТЫ 74
3.4 ОПРЕДЕЛЕНИЕ ПЛАНОВОЙ СЕБЕСТОИМОСТИ НИР 76
ЗАКЛЮЧЕНИЕ 79
СПИСОК ЛИТЕРАТУРЫ 80

Содержимое работы - 1 файл

РЕАЛИЗАЦИЯ РАСПРЕДЕЛЕННОЙ БАЗЫ ДАННЫХ С УДАЛЕННЫМ ДОСТУПОМ.doc

— 1.41 Мб (Скачать файл)

                           pszSecurity);  // Security descriptor 

      if (status != NO_ERROR) {

            return(1);

      }

   

      status = RpcServerRegisterIf(

                         CommService_ServerIfHandle, // !!!

                         NULL,   // MgrTypeUuid

                         NULL);  // MgrEpv; null means use default 

      if (status != NO_ERROR) {

            return(2);

      } 

      LogEvent(EVENTLOG_INFORMATION_TYPE, "\"Svyazinform\" Communicatin Service Initialized");

      return(0);

} 

void ServerDoPause()

{

      SuspendThread(&ShedulingThread);

      SuspendThread(&ClientHandlingThread);

      LogEvent(EVENTLOG_INFORMATION_TYPE, "\"Svyazinform\" Communicatin Service Paused");

} 

void ServerDoContinue()

{

      ResumeThread(&ShedulingThread);

      ResumeThread(&ClientHandlingThread);

      LogEvent(EVENTLOG_INFORMATION_TYPE, "\"Svyazinform\" Communicatin Service Resumed");

} 

void ServerDoStop() {

      RPC_STATUS status; 

    status = RpcMgmtStopServerListening(NULL);

      if (status != NO_ERROR) {

            // Error handling

      } 

    status = RpcServerUnregisterIf(NULL, NULL, FALSE);

      if (status != NO_ERROR) {

            // Error handling

      } 
 

      TerminateTasks(); 

      WaitForSingleObject(&ClientHandlingThread, 5000);

      CloseHandle(&ClientHandlingThread); 

      InterlockedIncrement(&TerminateSheduling);

      WaitForSingleObject(&ShedulingThread, 5000);

      CloseHandle(&ShedulingThread); 

      WaitForSingleObject(hConfigMutex, 3000);

      ReleaseMutex(hConfigMutex);

      CloseHandle(hConfigMutex); 

      WaitForSingleObject(hTaskMutex, 3000);

      ReleaseMutex(hTaskMutex);

      CloseHandle(hTaskMutex); 

      LogEvent(EVENTLOG_INFORMATION_TYPE, "\"Svyazinform\" Communicatin Service Stopped"); 

} 

/**************************************************************/

/*                 MIDL allocate and free                     */

/**************************************************************/ 

void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len)

{

    return(malloc(len));

} 

void __RPC_USER midl_user_free(void __RPC_FAR * ptr)

{

    free(ptr);

} 

ClientHandler.c

/**********************************************************/

/*     Этот  модуль обрабатывает подключения  клиентов      */

/**********************************************************/ 

#include <windows.h>

#include "ClientHandler.h"

#include "CommonConfig.h"

#include "../Comm.h" 

DWORD ClientHandlingThread; 

DWORD WINAPI RPCClientHandling(LPVOID ThreadParm)

{

      RPC_STATUS status; 
 

      status = RpcServerListen(

                       cMinCalls,

                       cMaxCalls,

                       fDontWait);

      if (status != NO_ERROR) {

            return 1;

      } 

      return 0;

} 

void RefreshIniProps()

{

      MessageBeep(1);

      return;

} 

EventLog.c

#include <windows.h>

#include "EventLog.h" 

void LogEvent(WORD EventType, LPSTR EventMsg)

{

      HANDLE h;

 

      h = RegisterEventSource(NULL, /* uses local computer         */

            "CommServ");              /* source name                 */

      if (h != NULL)

      {  

            ReportEvent(h,            /* event log handle            */

                EventType,     /* event type                  */

                  0,                    /* category zero               */

                  0x1003,               /* event identifier            */

                  NULL,                 /* no user security identifier */

                  1,                    /* one substitution string     */

                  0,                    /* no data                     */

                  &EventMsg,     /* address of string array     */

                  NULL);                /* address of data             */  

            DeregisterEventSource(h);

      }

 

      return;

} 

Comm_s.c

/* this ALWAYS GENERATED file contains the RPC server stubs */ 

/* File created by MIDL compiler version 3.00.15 */

/* at Tue Jun 03 11:35:46 1997

*/

/* Compiler settings for comm.idl:

    Os, W1, Zp8, env=Win32, ms_ext, c_ext, oldnames

    error checks: none

*/

//@@MIDL_FILE_HEADING(  ) 

#include <string.h>

#include "comm.h" 

#define TYPE_FORMAT_STRING_SIZE   1                                

#define PROC_FORMAT_STRING_SIZE   3                                  

typedef struct _MIDL_TYPE_FORMAT_STRING

    {

    short          Pad;

    unsigned char  Format[ TYPE_FORMAT_STRING_SIZE ];

    } MIDL_TYPE_FORMAT_STRING; 

typedef struct _MIDL_PROC_FORMAT_STRING

    {

    short          Pad;

    unsigned char  Format[ PROC_FORMAT_STRING_SIZE ];

    } MIDL_PROC_FORMAT_STRING; 

extern const MIDL_TYPE_FORMAT_STRING __MIDLTypeFormatString;

extern const MIDL_PROC_FORMAT_STRING __MIDLProcFormatString; 

/* Standard interface: CommService, ver. 1.0,

   GUID={0x4a25d2e0,0x6703,0x11d0,{0x89,0x27,0x00,0xa0,0x24,0x13,0x85,0x0e}} */ 
 

extern RPC_DISPATCH_TABLE CommService_DispatchTable; 

static const RPC_SERVER_INTERFACE CommService___RpcServerInterface =

    {

    sizeof(RPC_SERVER_INTERFACE),

    {{0x4a25d2e0,0x6703,0x11d0,{0x89,0x27,0x00,0xa0,0x24,0x13,0x85,0x0e}},{1,0}},

    {{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}},

    &CommService_DispatchTable,

    0,

    0,

    0,

    0,

    0

    };

RPC_IF_HANDLE CommService_ServerIfHandle = (RPC_IF_HANDLE)& CommService___RpcServerInterface; 

extern const MIDL_STUB_DESC CommService_StubDesc; 

void __RPC_STUB

CommService_RefreshIniProps(

    PRPC_MESSAGE _pRpcMessage )

{

    MIDL_STUB_MESSAGE _StubMsg;

    RPC_STATUS _Status;

   

    ((void)(_Status));

    NdrServerInitializeNew(

                          _pRpcMessage,

                          &_StubMsg,

                          &CommService_StubDesc);

   

    RpcTryFinally

        {

       

        RefreshIniProps();

       

        }

    RpcFinally

        {

        }

    RpcEndFinally

    _pRpcMessage->BufferLength =

        (unsigned int)((long)_StubMsg.Buffer - (long)_pRpcMessage->Buffer);

   

} 
 

static const MIDL_STUB_DESC CommService_StubDesc =

    {

    (void __RPC_FAR *)& CommService___RpcServerInterface,

    MIDL_user_allocate,

    MIDL_user_free,

    0,

    0,

    0,

    0,

    0,

    __MIDLTypeFormatString.Format,

    0, /* -error bounds_check flag */

    0x10001, /* Ndr library version */

    0,

    0x300000f, /* MIDL Version 3.0.15 */

    0,

    0,

    0,  /* Reserved1 */

    0,  /* Reserved2 */

    0,  /* Reserved3 */

    0,  /* Reserved4 */

    0   /* Reserved5 */

    }; 

static RPC_DISPATCH_FUNCTION CommService_table[] =

    {

    CommService_RefreshIniProps,

    0

    };

RPC_DISPATCH_TABLE CommService_DispatchTable =

    {

    1,

    CommService_table

    }; 

#if !defined(__RPC_WIN32__)

#error  Invalid build platform for this stub.

#endif 

static const MIDL_PROC_FORMAT_STRING __MIDLProcFormatString =

    {

        0,

        {

                  0x5b,  /* FC_END */

                  0x5c,  /* FC_PAD */ 

                  0x0

        }

    }; 

static const MIDL_TYPE_FORMAT_STRING __MIDLTypeFormatString =

    {

        0,

        { 

                  0x0

        }

    }; 

ShedulerServ.c

/**********************************************************//*     Task Sheduler

/**********************************************************/ 

#include <windows.h>

#include "ShedulerServ.h"

#include "CommonConfig.h"

#include "EventLog.h" 

#define SLEEP_INTERVAL 5000

#define ACTIVATE_INTERVAL 60000 

BOOL  TerminateSheduling = FALSE;

DWORD ShedulingThread; 
 

DWORD WINAPI TaskProc(LPVOID ThreadParm);

void AnalyseTaskTable();

DWORD GetTimeInMins(); 

DWORD WINAPI ShedulingProc(LPVOID ThreadParm)

      long i = 0; 

      while (!TerminateSheduling) { 

            if ((i += SLEEP_INTERVAL) >= ACTIVATE_INTERVAL) { 

                  i = 0;

                  if (TaskCount == 0) UpdateVariables(); 

                  AnalyseTaskTable();

            }

            Sleep(SLEEP_INTERVAL);

      }

      return 0;

} 

DWORD WINAPI TaskProc(LPVOID ThreadParm)

{

      HINSTANCE hLib;

      FARPROC  hProc; 

      InterlockedIncrement(&TaskCount); 

      WaitForSingleObject(hConfigMutex, INFINITE);

      MessageBeep(1);

      if (hLib = LoadLibrary((char *)&((struct TASKENTRY*)ThreadParm)->DllName)) { 

Информация о работе Реализация распределенной базы данных с удаленным доступом