Ejemplo n.º 1
0
        /// <summary>
        /// Метод создающий журналы и триггеры
        /// </summary>
        public void OnStart()
        {
            if (!this._dbmMaster.IsConnected())
            {
                this.ConnectMaster(this._config.MaxDBErrorCount);
            }

            if (!this._dbmSlave.IsConnected())
            {
                this.ConnectSlave(this._config.MaxDBErrorCount);
            }
            this._dbmSlave.CreateDB();
            this._dbmSlave.CreateSchema(this._config.SchemaName);

            SqlDBStruct masterStruct = this._dbmMaster.GetDBInfo();

            for (int i = 0; i < masterStruct.TablesCount; i++)
            {
                SqlTableStruct tempStruct = this._dbmMaster.GetTableInfo(masterStruct.SchemasNames[i], masterStruct.TablesNames[i]);
                this._dbmSlave.CreateJournal(this._config.SchemaName, masterStruct.SchemasNames[i], masterStruct.TablesNames[i], tempStruct);
                this._dbmMaster.CreateTriggerOnInsert(this._config.SchemaName, masterStruct.SchemasNames[i], masterStruct.TablesNames[i], this._config.SlaveDBName);
                this._dbmMaster.CreateTriggerOnUpdate(this._config.SchemaName, masterStruct.SchemasNames[i], masterStruct.TablesNames[i], this._config.SlaveDBName);
                this._dbmMaster.CreateTriggerOnDelete(this._config.SchemaName, masterStruct.SchemasNames[i], masterStruct.TablesNames[i], this._config.SlaveDBName);
                this._dbmSlave.CreateSchema(masterStruct.SchemasNames[i]);
                this._dbmSlave.CreateTable(masterStruct.SchemasNames[i], masterStruct.TablesNames[i], tempStruct);
                this._dbmSlave.MergeTables(this._config.MasterDBName, masterStruct.SchemasNames[i], masterStruct.TablesNames[i], this._config.SlaveDBName, masterStruct.SchemasNames[i], masterStruct.TablesNames[i]);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Запуск чтения всех журналов и обработка всех записей
        /// </summary>
        public void ReplicateAll()
        {
            if (!this._dbmMaster.IsConnected())
            {
                this.ConnectMaster(this._config.MaxDBErrorCount);
            }
            SqlDBStruct masterStruct = this._dbmMaster.GetDBInfo();

            for (int i = 0; i < masterStruct.TablesCount; i++)
            {
                this.ReplicateOne(this._config.SchemaName, masterStruct.SchemasNames[i] + masterStruct.TablesNames[i], masterStruct.SchemasNames[i], masterStruct.TablesNames[i]);
            }
        }
        /// <summary>
        /// Получение информации о структуре базы данных
        /// </summary>
        /// <returns>
        /// Названия таблиц, их идентификаторы и названия схем в которых расположены эти таблицы
        /// </returns>
        public SqlDBStruct GetDBInfo()
        {
            var         result = this.RunQuery(@"USE " + this._dbName + @";
                                        SELECT SS.name, SO.name, SO.object_id
                                        FROM sys.objects AS SO
	                                        JOIN sys.schemas AS SS
		                                        ON SO.schema_id = SS.schema_id
                                        WHERE type = 'U';");
            SqlDBStruct retval = new SqlDBStruct();

            retval.TablesCount = result.Count;
            for (int i = 0; i < result.Count; i++)
            {
                retval.SchemasNames.Add(result[i].Values[0].ToString());
                retval.TablesNames.Add(result[i].Values[1].ToString());
                retval.ObjectsIDs.Add(result[i].Values[2].ToString());
            }
            return(retval);
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Получение информации о структуре базы данных
 /// </summary>
 /// <returns>
 /// Названия таблиц, их идентификаторы и названия схем в которых расположены эти таблицы
 /// </returns>
 public SqlDBStruct GetDBInfo()
 {
     var result = this.RunQuery(@"USE " + this._dbName + @";
                                 SELECT SS.name, SO.name, SO.object_id
                                 FROM sys.objects AS SO
                                     JOIN sys.schemas AS SS
                                         ON SO.schema_id = SS.schema_id
                                 WHERE type = 'U';");
     SqlDBStruct retval = new SqlDBStruct();
     retval.TablesCount = result.Count;
     for (int i = 0; i < result.Count; i++)
     {
         retval.SchemasNames.Add(result[i].Values[0].ToString());
         retval.TablesNames.Add(result[i].Values[1].ToString());
         retval.ObjectsIDs.Add(result[i].Values[2].ToString());
     }
     return retval;
 }