/// <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]); } }
/// <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); }
/// <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; }