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

Автор работы: Пользователь скрыл имя, 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 Мб (Скачать файл)

            if (((struct TASKENTRY*)ThreadParm)->TermProc = GetProcAddress(hLib, (LPCSTR)TaskProcName))

            {

                  ((struct TASKENTRY*)ThreadParm)->Active = TRUE;

                  ReleaseMutex(hConfigMutex); 

                  if (hProc = GetProcAddress(hLib, (LPCSTR)TaskProcName)) {

                        hProc();

                        __try {

                              WaitForSingleObject(hConfigMutex, INFINITE);

                              ((struct TASKENTRY*)ThreadParm)->Active = FALSE;

                              CloseHandle((HANDLE)((struct TASKENTRY*)ThreadParm)->TaskThread);

                        }

                        __finally {

                              ReleaseMutex(hConfigMutex);

                        }

                  } else LogEvent(EVENTLOG_ERROR_TYPE, "Error Getting Procedure Address"); 

            } else  LogEvent(EVENTLOG_ERROR_TYPE, "Error Getting TermProc Address"); 

      } else {

            ReleaseMutex(hConfigMutex);

            LogEvent(EVENTLOG_ERROR_TYPE, "Error Loading Library");

      } 

      InterlockedDecrement(&TaskCount); 

      return 0;

} 

void AnalyseTaskTable()

{

      DWORD CurrTime;

      int  i; 

      CurrTime = GetTimeInMins(); 

      __try {

            WaitForSingleObject(hConfigMutex, INFINITE); 

            for (i = 0; i < EntryCount; i++) {

                  if ((TaskTable[i].ExecTime == CurrTime) &&

                        (!TaskTable[i].Active)) {

                              CreateThread(NULL, 0, TaskProc, &TaskTable[i], 0, &TaskTable[i].TaskThread);

                  }

            } 

      }

      __finally {

            ReleaseMutex(hConfigMutex);

      }

} 

DWORD GetTimeInMins()

{

      SYSTEMTIME SysTime; 

      GetLocalTime(&SysTime); 

      return SysTime.wHour*60+SysTime.wMinute;

} 

void TerminateTasks()

{

      int i;

      DWORD TaskIndex = 0; 

      HANDLE Handles[TASK_COUNT]; 

      for (i = 0; i < EntryCount; i++) {

            if (TaskTable[i].Active) {

                  TaskTable[i].TermProc();

                  Handles[TaskIndex++] = (HANDLE)TaskTable[i].TaskThread;

            }

      } 

      WaitForMultipleObjects(TaskIndex, Handles, TRUE, INFINITE);

}

Comm.h

/* this ALWAYS GENERATED file contains the definitions for the interfaces */ 
 

/* 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 "rpc.h"

#include "rpcndr.h" 

#ifndef __comm_h__

#define __comm_h__ 

#ifdef __cplusplus

extern "C"{

#endif  

/* Forward Declarations */  

void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t);

void __RPC_USER MIDL_user_free( void __RPC_FAR * );  

#ifndef __CommService_INTERFACE_DEFINED__

#define __CommService_INTERFACE_DEFINED__ 

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

* Generated header for interface: CommService

* at Tue Jun 03 11:35:46 1997

* using MIDL 3.00.15

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

/* [implicit_handle][version][uuid] */  
 

void RefreshIniProps( void); 
 

extern handle_t CommServ_IfHandle; 
 

extern RPC_IF_HANDLE CommService_ClientIfHandle;

extern RPC_IF_HANDLE CommService_ServerIfHandle;

#endif /* __CommService_INTERFACE_DEFINED__ */ 

/* Additional Prototypes for ALL interfaces */ 

/* end of Additional Prototypes */ 

#ifdef __cplusplus

}

#endif 

#endif 
 
 
 

DoService.h

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

/* DoService Module - implementation of initialisation other

/*                      tasks                                 */

/*                                                            */

/*                    Copuright (c) 1997 by Malkov O.V.       */

/*                             JSC "Svyazinform" RM           */

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

#ifndef __DOSERVICE

#define __DESERVICE 

void ServerProcess();

DWORD ServerInit();

void ServerDoPause();

void ServerDoStop();

void ServerDoContinue(); 
 

#endif 

CommonConfig.h

/**************** Server Engine Header File *******************/ 

#ifndef __COMMON_CONFIG

#define __COMMON_CONFIG 

#define TASK_COUNT 10 

#include "../RegistryConfig.h" 

extern DWORD ConfigWatchingThread; 

extern HANDLE hConfigMutex;

extern HANDLE hTaskMutex; 

extern unsigned char *pszProtocolSequence;

extern unsigned char *pszSecurity;

extern unsigned char *pszEndpoint;

extern unsigned int   cMinCalls;

extern unsigned int   cMaxCalls;

extern unsigned int   fDontWait; 

extern struct TASKENTRY TaskTable[TASK_COUNT];

extern int  EntryCount;

extern DWORD TaskThreads[TASK_COUNT];

extern int  TaskCount; 
 
 

DWORD WINAPI CommonConfigWatcher(LPVOID ThreadParm);

void UpdateVariables(); 

#endif 

EventLog.h 

#ifndef __EVENT_LOG

#define __EVENT_LOG 

void LogEvent(WORD EventType, LPSTR EventMsg); 

#endif 

ClientHandler.h 

#ifndef __CLIENT_HANDLER

#define __CLIENT_HANDLER 
 

extern DWORD ClientHandlingThread;  

DWORD WINAPI RPCClientHandling(LPVOID ThreadParm);

void RefreshIniProps(); 

#endif 

ShedulerServ.h 

#ifndef __SHEDULING_SERVICE

#define __SHEDULING_SERVICE 

#define TaskProcName "TaskProc" 

extern BOOL  TerminateSheduling;

extern DWORD ShedulingThread; 

DWORD WINAPI ShedulingProc(LPVOID ThreadParm);

void TerminateTasks(); 

#endif 

RegistryConfig.h 

#ifndef __REGISTRY_CONFIG

#define __REGISTRY_CONFIG 

#define REGISTRY_TASKS_PATH "SOFTWARE\\Svyazinform\\CommService\\Tasks" 

struct TASKENTRY

{

      DWORD ExecTime;

      char DllName[256];

      FARPROC TermProc;

      DWORD TaskThread;

      BOOL Active;

}; 

#endif 

Comm.idl

/* IDL File  */ 

[ uuid (4a25d2e0-6703-11d0-8927-00a02413850e),

  version(1.0)

]

interface CommService

{

void RefreshIniProps();

} 

Comm.acf

/* acf file for TimeInclude Service (RPC) */ 

[ implicit_handle(handle_t CommServ_IfHandle)

]interface CommService

{

} 

Приложение 4

 

 Исходные тексты  программы установки коммуникационного сервиса 

#include <windows.h>

#include <stdio.h> 

void RegEventSource(); 

VOID _CRTAPI1 main(void)

{ 

  LPCTSTR lpszBinaryPathName =

        TEXT("c:\\ibserver\\bin\\CommServ.exe");

 

  SC_HANDLE schSCManager;

  SC_HANDLE schService;

  /* Open a handle to the SC Manager database. */ 

  schSCManager = OpenSCManager(

       NULL,                   /* local machine           */

     NULL,                   /* ServicesActive database */

     SC_MANAGER_ALL_ACCESS); /* full access rights      */ 

  if (schSCManager == NULL) {

        printf("\nError opening Service Manager.\n");

        return;

  }

        

  

  schService = CreateService(

       schSCManager,              /* SCManager database      */

       TEXT("CommServ"),        /* name of service         */

        TEXT("JSC \"SvjazInform\" Communication Service"),          /* service name to display */

       SERVICE_ALL_ACCESS,        /* desired access          */

       SERVICE_WIN32_OWN_PROCESS, /* service type            */

       SERVICE_DEMAND_START,      /* start type              */

       SERVICE_ERROR_NORMAL,      /* error control type      */

       lpszBinaryPathName,        /* service's binary        */

       NULL,                      /* no load ordering group  */

       NULL,                      /* no tag identifier       */

       NULL,                      /* no dependencies         */

       NULL,                      /* LocalSystem account     */

       NULL);                     /* no password             */ 

  if (schService == NULL) {

      printf("\nFailed to create service!\n");

  }

  else

      printf("CreateService SUCCESS\n"); 

  CloseServiceHandle(schService);

  CloseServiceHandle(schSCManager); 
 

  RegEventSource(); 

} 
 

void RegEventSource()

{ 

      HKEY hk; 

      DWORD dwData;

      UCHAR szBuf[80];

 

       

      if (RegCreateKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\

            \\EventLog\\Application\\CommServ", &hk)) { 

            printf("could not create registry key");

            return;

      }

 

 

      /* Set the Event ID message-file name. */

 

      strcpy(szBuf, "c:\\ibserver\\bin\\CommServ.exe");

 

      /* Add the Event ID message-file name to the subkey. */

 

      if (RegSetValueEx(hk,             /* subkey handle   */

                "EventMessageFile",       /* value name     */

                  0,                        /* must be zero  */

                   REG_EXPAND_SZ,            /* value type   */

                  (LPBYTE) szBuf,           /* address of value data */

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