{"id":29737814,"url":"https://github.com/liteobject/demo-mssql-replication","last_synced_at":"2025-07-25T17:15:52.466Z","repository":{"id":305435558,"uuid":"1021180710","full_name":"LiteObject/demo-mssql-replication","owner":"LiteObject","description":"Transactional SQL Server replication demo in Docker. Includes automated setup, Python verification scripts, and troubleshooting tools for primary/replica sync.","archived":false,"fork":false,"pushed_at":"2025-07-20T03:54:30.000Z","size":37,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-20T05:44:27.033Z","etag":null,"topics":["docker","mssql","mssql-database","python","replication"],"latest_commit_sha":null,"homepage":"","language":"TSQL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LiteObject.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-17T02:49:02.000Z","updated_at":"2025-07-20T03:55:21.000Z","dependencies_parsed_at":"2025-07-20T05:54:34.512Z","dependency_job_id":null,"html_url":"https://github.com/LiteObject/demo-mssql-replication","commit_stats":null,"previous_names":["liteobject/demo-mssql-replication"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/LiteObject/demo-mssql-replication","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LiteObject%2Fdemo-mssql-replication","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LiteObject%2Fdemo-mssql-replication/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LiteObject%2Fdemo-mssql-replication/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LiteObject%2Fdemo-mssql-replication/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LiteObject","download_url":"https://codeload.github.com/LiteObject/demo-mssql-replication/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LiteObject%2Fdemo-mssql-replication/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267038428,"owners_count":24025612,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-25T02:00:09.625Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","mssql","mssql-database","python","replication"],"created_at":"2025-07-25T17:15:51.547Z","updated_at":"2025-07-25T17:15:52.450Z","avatar_url":"https://github.com/LiteObject.png","language":"TSQL","readme":"# Demo MSSQL Replication\n\nA demonstration project for SQL Server database setup with Docker, featuring primary and replica database containers with transactional replication for testing database connectivity and replication operations.\n\n## Features\n\n- **Docker Compose Setup**: Easy deployment of SQL Server primary and replica instances\n- **Transactional Replication**: Real-time data synchronization between primary and replica\n- **Database Utilities**: Python utilities for database connection and operations\n- **Replication Verification**: Automated testing of replication functionality\n- **Adminer Integration**: Web-based database administration interface\n- **Environment Configuration**: Flexible configuration via environment variables\n\n## Quick Start\n\n1. **Clone and Setup**:\n   ```bash\n   git clone \u003crepository-url\u003e\n   cd demo-mssql-replication\n   ```\n\n2. **Start Services with Automatic Replication**:\n   ```bash\n   docker-compose up -d\n   ```\n   \n   **Note**: The containers will automatically set up replication during startup. This process takes about 90 seconds:\n   - Both containers start and initialize SQL Server (~30 seconds)\n   - Replica container creates the subscriber database and table\n   - Publisher container waits for subscriber to be ready\n   - Publisher creates the distributor, publication, and subscription\n   - Snapshot agent job is automatically started during setup\n   - Replication agents are started automatically\n   - You can monitor progress with: `docker-compose logs -f`\n\n3. **Wait for Initialization** (Recommended):\n   ```bash\n   # Wait for all containers to be ready\n   docker-compose logs -f mssql\n   # Look for \"Initialization script completed\" and \"Subscription and push subscription agent created successfully\"\n   ```\n\n4. **Test Replication**:\n   ```bash\n   python verify_replication.py\n   ```\n\n5. **Test After Container Restart** (Optional):\n   ```bash\n   # Test that replication works after a complete restart\n   python verify_replication.py\n   ```\n\n6. **Manual Setup** (Only if automatic setup fails):\n   \n   **Option A – Run the setup script:**\n   ```bash\n   # Linux/macOS\n   chmod +x setup_replication.sh\n   ./setup_replication.sh\n   \n   # Windows PowerShell\n   .\\setup_replication.ps1\n   ```\n   \n   **Option B – Manually execute the SQL setup script in the container:**\n   ```bash\n   # Copy the SQL setup script into the primary container\n   docker cp setup_replication.sql mssql_test:/tmp/\n   # Run the script inside the container (adjust password if needed)\n   docker exec -it mssql_test /opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P 'YourStrong!Passw0rd' -C -i \"/tmp/setup_replication.sql\" -v IS_PUBLISHER=\"true\"\n   ```\n   \n   - The above command will manually configure replication if the automatic setup did not complete.\n   - Check the container logs for errors and refer to the TROUBLESHOOTING.md for further help.\n\n7. **Access Adminer**: http://localhost:8080\n   - Server: `localhost:1433` (primary) or `localhost:1434` (replica)\n   - Username: `SA`\n   - Password: `YourStrong!Passw0rd`\n   - Database: `MyDatabase`\n\n## How SQL Server Replication Works\n\n### Replication Architecture\n\nSQL Server transactional replication follows a publisher-distributor-subscriber model:\n\n```\n┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐\n│   PUBLISHER     │    │   DISTRIBUTOR   │    │   SUBSCRIBER    │\n│  (mssql_test)   │    │  (mssql_test)   │    │ (mssql_replica) │\n│                 │    │                 │    │                 │\n│ ┌─────────────┐ │    │ ┌─────────────┐ │    │ ┌─────────────┐ │\n│ │ MyDatabase  │ │    │ │distribution │ │    │ │ MyDatabase  │ │\n│ │ └─TestData  │ │    │ │  database   │ │    │ │ └─TestData  │ │\n│ └─────────────┘ │    │ └─────────────┘ │    │ └─────────────┘ │\n└─────────────────┘    └─────────────────┘    └─────────────────┘\n         │                        │                        │\n         │     Log Reader         │    Distribution        │\n         │        Agent           │       Agent            │\n         └────────────────────────┼────────────────────────┘\n                                  │\n                            ┌─────────────┐\n                            │   Snapshot  │\n                            │    Agent    │\n                            └─────────────┘\n```\n\n### Replication Process\n\n1. **Transaction Capture**: When data changes occur on the publisher, the Log Reader Agent scans the transaction log and captures committed transactions.\n\n2. **Distribution Storage**: Captured transactions are stored in the distribution database as replication commands.\n\n3. **Data Delivery**: The Distribution Agent reads commands from the distribution database and applies them to the subscriber.\n\n4. **Initial Synchronization**: The Snapshot Agent creates an initial copy of the published data to synchronize new subscriptions.\n\n### Key Components\n\n#### **Publisher** (`mssql_test`)\n- Contains the source database with original data\n- Publishes the `TestData` table as part of `MyDatabasePublication`\n- Hosts the Log Reader Agent that captures transaction log changes\n\n#### **Distributor** (`mssql_test` - same server)\n- Stores replication metadata and commands in the `distribution` database\n- Hosts the Distribution Agent that delivers changes to subscribers\n- Manages replication history and retention policies\n\n#### **Subscriber** (`mssql_replica`)\n- Receives replicated data from the distributor\n- Contains a copy of the `TestData` table kept in sync with the publisher\n- Typically read-only to prevent conflicts\n\n#### **Replication Agents**\n- **Log Reader Agent**: Monitors publisher transaction log for changes\n- **Distribution Agent**: Delivers changes from distributor to subscriber\n- **Snapshot Agent**: Creates initial data snapshots for new subscriptions\n\n## Project Files Overview\n\n### Core Configuration Files\n\n#### `docker-compose.yml`\nDefines the multi-container Docker application with:\n- **mssql_test**: Primary SQL Server container (Publisher/Distributor)\n- **mssql_replica**: Replica SQL Server container (Subscriber)\n- **adminer**: Web-based database management interface\n- **Networking**: Internal Docker network for inter-container communication\n\n#### `setup_replication.sh` / `setup_replication.ps1`\nAutomated setup scripts for replication:\n- **Cross-platform**: Bash script for Linux/macOS, PowerShell for Windows\n- **Container validation**: Checks if both containers are running\n- **Automated execution**: Copies and runs the SQL setup script\n- **Error handling**: Provides clear success/failure messages\n\n#### `setup_replication.sql`\nThe main replication configuration script that:\n- Enables SQL Server Agent (required for replication)\n- Configures the distributor and creates the distribution database\n- Creates the `MyDatabase` and `TestData` table\n- Sets up the publication and article (table to replicate)\n- Configures the subscription with proper authentication\n- Creates and starts the snapshot agent job\n\n### Database Initialization Files\n\n#### `init_db.sql`\nInitial database setup script that:\n- Creates the `MyDatabase` database\n- Creates the `TestData` table with proper schema\n- Inserts initial test data\n\n#### `init-db.sh`\nShell script for container initialization that:\n- Waits for SQL Server to be ready\n- Executes the `init_db.sql` script\n- Handles SSL certificate trust for SQL Server 2022\n\n### Python Utilities\n\n#### `db_utils.py`\nCore database utility module providing:\n- **Connection Management**: Functions to load and validate connection configurations\n- **Connection String Generation**: Creates ODBC connection strings from configuration\n- **Connection Testing**: Validates database connectivity\n- **Environment Variable Support**: Loads configuration from environment variables\n\n#### `verify_replication.py`\nReplication verification script that:\n- Inserts a test record into the primary database\n- Waits for replication to occur (10-second delay)\n- Checks if the record appears in the replica database\n- Reports whether replication is working correctly\n\n### Support Files\n\n#### `setup_subscriber.sql`\nSQL script for setting up the subscriber database:\n- Creates the subscriber database and table structure\n- Prepares the replica for receiving replication data\n- Executed automatically during container startup\n\n#### `requirements.txt`\nPython dependencies file listing required packages:\n- `pyodbc` for SQL Server connectivity\n- `python-dotenv` for environment variable management\n\n#### `.env.example`\nExample environment configuration file showing:\n- Database connection parameters for primary and replica\n- Default values and connection string formats\n- Template for creating your own `.env` file\n\n#### `README.md`\nThis documentation file explaining:\n- Project overview and setup instructions\n- How SQL Server replication works\n- Detailed explanation of each file's purpose\n- Troubleshooting and configuration guidance\n\n## Replication Configuration Details\n\n### Authentication\n- **Publisher to Distributor**: Windows Authentication (same server)\n- **Distributor to Subscriber**: SQL Server Authentication with SA credentials\n- **Reason**: Cross-container communication requires SQL authentication\n\n### Network Configuration\n- **Primary Container**: `mssql_test` on port 1433\n- **Replica Container**: `mssql_replica` on port 1434\n- **Internal Network**: Docker Compose creates isolated network for container communication\n\n### Data Synchronization\n- **Replication Type**: Transactional replication\n- **Sync Mode**: Continuous (near real-time)\n- **Initial Sync**: Snapshot agent creates initial data copy\n- **Ongoing Sync**: Log Reader Agent captures changes, Distribution Agent delivers them\n\n### Troubleshooting\nIf replication fails, check:\n1. Replication directory exists: `/var/opt/mssql/ReplData`\n2. Distribution agent is running: Check job status in `msdb.dbo.sysjobs`\n3. Network connectivity between containers\n4. SQL Server Agent is enabled and running\n5. Server names are case-sensitive: use `mssql_replica` not `MSSQL_REPLICA`\n\n## Database Utilities\n\nThe `db_utils.py` module provides helper functions for database operations:\n\n### Core Functions\n\n#### `load_connection_config()`\nLoads database connection configurations from environment variables.\n\n**Returns:**\n- `tuple`: (primary_conn, replica_conn) dictionaries with connection parameters\n\n#### `get_connection_string(conn_info)`\nGenerates ODBC connection strings from connection info dictionaries.\n\n**Args:**\n- `conn_info` (dict): Dictionary containing connection parameters\n\n**Returns:**\n- `str`: Formatted ODBC connection string\n\n#### `check_connection_info(conn_info, label)`\nValidates that all required connection parameters are present.\n\n**Args:**\n- `conn_info` (dict): Dictionary containing connection parameters\n- `label` (str): Human-readable label for the database connection\n\n**Returns:**\n- `bool`: True if all parameters are present, False otherwise\n\n#### `test_connection(conn_str, label)`\nTests database connections and provides feedback.\n\n**Args:**\n- `conn_str` (str): ODBC connection string\n- `label` (str): Human-readable label for the database connection\n\n**Returns:**\n- `pyodbc.Connection` or `None`: Connection object if successful, None if failed\n\n#### `execute_query(conn_str, query, label, fetch_results=True)`\nExecutes queries with error handling.\n\n**Args:**\n- `conn_str` (str): ODBC connection string\n- `query` (str): SQL query to execute\n- `label` (str): Human-readable label for the database connection\n- `fetch_results` (bool): If True, fetch and return query results\n\n**Returns:**\n- `list` or `int` or `None`: Query results, row count, or None on error\n\n#### `insert_record_primary(conn_info, table_name, data)`\nInserts records into the primary database.\n\n**Args:**\n- `conn_info` (dict): Primary database connection information\n- `table_name` (str): Name of the table to insert into\n- `data` (dict): Dictionary of column names and values to insert\n\n**Returns:**\n- `int` or `None`: Number of rows inserted, or None on error\n\n### Example Usage\n\n```python\nfrom db_utils import load_connection_config, get_connection_string, test_connection\n\n# Load connection info\nPRIMARY_CONN, REPLICA_CONN = load_connection_config()\n\n# Test connectivity\nconn_str = get_connection_string(PRIMARY_CONN)\nconn = test_connection(conn_str, \"Primary DB\")\nif conn:\n    print(\"Connection successful!\")\n    conn.close()\n```\n\n## Environment Variables\n\nThe project uses the following environment variables for configuration:\n\n### Database Connection Variables\n- `PRIMARY_SERVER`: Primary database server (default: localhost)\n- `PRIMARY_PORT`: Primary database port (default: 1433)\n- `PRIMARY_DATABASE`: Primary database name (default: MyDatabase)\n- `PRIMARY_USERNAME`: Primary database username (default: SA)\n- `PRIMARY_PASSWORD`: Primary database password (default: YourStrong!Passw0rd)\n\n- `REPLICA_SERVER`: Replica database server (default: localhost)\n- `REPLICA_PORT`: Replica database port (default: 1434)\n- `REPLICA_DATABASE`: Replica database name (default: MyDatabase)\n- `REPLICA_USERNAME`: Replica database username (default: SA)\n- `REPLICA_PASSWORD`: Replica database password (default: YourStrong!Passw0rd)\n\n### Docker Configuration\nSet these variables in your environment or create a `.env` file in the project root:\n\n```env\n# Primary Database\nPRIMARY_SERVER=localhost\nPRIMARY_PORT=1433\nPRIMARY_DATABASE=MyDatabase\nPRIMARY_USERNAME=SA\nPRIMARY_PASSWORD=YourStrong!Passw0rd\n\n# Replica Database\nREPLICA_SERVER=localhost\nREPLICA_PORT=1434\nREPLICA_DATABASE=MyDatabase\nREPLICA_USERNAME=SA\nREPLICA_PASSWORD=YourStrong!Passw0rd\n```\n\n## Performance Considerations\n\n### Replication Latency\n- **Typical Latency**: 10-15 seconds for transaction replication\n- **Factors Affecting Latency**:\n  - Network latency between containers\n  - Transaction log scan frequency\n  - Distribution agent polling interval\n  - Size and complexity of transactions\n\n### Monitoring Replication\nUse these queries to monitor replication performance:\n\n```sql\n-- Check pending commands in distribution database\nUSE distribution;\nSELECT COUNT(*) AS PendingCommands \nFROM MSrepl_commands \nWHERE article_id = 1 AND publisher_database_id = 1;\n\n-- Check distribution agent status\nSELECT agent_id, comments, time, runstatus \nFROM MSdistribution_history \nWHERE agent_id = 4 \nORDER BY time DESC;\n\n-- Check replication jobs\nUSE msdb;\nSELECT name, enabled, date_created \nFROM dbo.sysjobs \nWHERE name LIKE '%MyDatabasePublication%';\n```\n\n## Security Considerations\n\n### Authentication\n- **Production**: Use Windows Authentication or dedicated SQL Server accounts\n- **Development**: SA account is acceptable for testing\n- **Cross-Container**: SQL Server authentication required for Docker networking\n\n### Network Security\n- **Internal Network**: Containers communicate via Docker's internal network\n- **Port Exposure**: Only necessary ports are exposed to the host\n- **SSL/TLS**: SQL Server connections use encryption (`-C` flag in sqlcmd)\n\n### Data Protection\n- **Backup Strategy**: Implement regular backups of both primary and replica\n- **Recovery Planning**: Document recovery procedures for replication failures\n- **Monitoring**: Set up alerts for replication agent failures\n\n## Development and Testing\n\n### Running Tests\n```bash\n# Test replication functionality\npython verify_replication.py\n\n# Check container logs\ndocker logs mssql_test\ndocker logs mssql_replica\n```\n\n### Debugging Replication Issues\n```bash\n# Check replication agent jobs\ndocker exec -it mssql_test /opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P 'YourStrong!Passw0rd' -C -Q \"USE msdb; SELECT name, enabled FROM dbo.sysjobs WHERE name LIKE '%replication%';\"\n\n# Check distribution agent history\ndocker exec -it mssql_test /opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P 'YourStrong!Passw0rd' -C -Q \"USE distribution; SELECT TOP 10 agent_id, comments, time, runstatus FROM MSdistribution_history ORDER BY time DESC;\"\n```\n\n## License\n\nThis project is provided as-is for educational and demonstration purposes. Modify and use according to your needs.\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Test thoroughly\n5. Submit a pull request\n\n## Support\n\nFor issues or questions:\n1. Check the troubleshooting section in this README\n2. Review the replication agent logs\n3. Consult SQL Server replication documentation\n4. Create an issue in the repository\n    print(\"Connected successfully!\")\n    conn.close()\n\n# Insert data example\ndata = {\"Value\": \"Test record\", \"CreatedAt\": \"2025-01-01\"}\nresult = insert_record_primary(PRIMARY_CONN, \"TestData\", data)\nif result:\n    print(f\"Inserted {result} record(s)\")\n```\n\n## Database Schema\n\nThe demo includes a `TestData` table with the following structure:\n\n```sql\nCREATE TABLE TestData (\n    Id INT IDENTITY(1,1) PRIMARY KEY,\n    Value NVARCHAR(255),\n    CreatedAt DATETIME2 DEFAULT GETDATE()\n);\n```\n\n## Environment Configuration\n\nCreate a `.env` file with your database connection settings:\n\n```env\n# Primary Database\nPRIMARY_SERVER=localhost,1433\nPRIMARY_DATABASE=MyDatabase\nPRIMARY_USERNAME=SA\nPRIMARY_PASSWORD=YourStrong!Passw0rd\nPRIMARY_DRIVER={ODBC Driver 17 for SQL Server}\n\n# Replica Database\nREPLICA_SERVER=localhost,1434\nREPLICA_DATABASE=MyDatabase\nREPLICA_USERNAME=SA\nREPLICA_PASSWORD=YourStrong!Passw0rd\nREPLICA_DRIVER={ODBC Driver 17 for SQL Server}\n```\n\n## Important Notes\n\n### Replication Setup\n- **Automated Configuration**: The containers automatically set up transactional replication during startup\n- **Real-time Synchronization**: Changes to the primary database are automatically replicated to the replica\n- **Container Dependencies**: The replica container waits for the primary to be healthy before starting\n\n### Container Setup\n- **Primary Container**: Exposed on port 1433 (Publisher/Distributor)\n- **Replica Container**: Exposed on port 1434 (Subscriber)\n- **Adminer**: Available on port 8080 for database management\n- **Initialization**: Both containers automatically create the MyDatabase and TestData table on startup\n\n## Architecture\n\n```\n┌─────────────────┐    ┌─────────────────┐\n│   Primary DB    │    │   Replica DB    │\n│   (port 1433)   │    │   (port 1434)   │\n│                 │    │                 │\n│   MyDatabase    │    │   MyDatabase    │\n│   └─TestData    │    │   └─TestData    │\n└─────────────────┘    └─────────────────┘\n         │                       │\n         └───────────┬───────────┘\n                     │\n            ┌─────────────────┐\n            │    Adminer      │\n            │   (port 8080)   │\n            └─────────────────┘\n```\n\n## Usage Examples\n\n### Testing Replication\n```bash\n# Run the replication verification script\npython verify_replication.py\n```\n\n### Custom Database Operations\n```python\nfrom db_utils import load_connection_config, execute_query, get_connection_string\n\nprimary_conn, replica_conn = load_connection_config()\nprimary_str = get_connection_string(primary_conn)\n\n# Execute custom query\nresults = execute_query(primary_str, \"SELECT COUNT(*) FROM TestData\", \"Primary DB\")\nif results:\n    print(f\"Total records: {results[0][0]}\")\n```\n\n## Troubleshooting\n\n### Connection Issues\n- Ensure containers are running: `docker-compose ps`\n- Check container logs: `docker-compose logs mssql` or `docker-compose logs mssql_replica`\n- Verify environment variables in `.env` file\n- Test with Adminer web interface first\n\n### Database Not Found\n- Wait for containers to fully initialize (can take 90+ seconds)\n- Check if initialization scripts ran successfully in container logs\n- Manually create database if needed via Adminer\n\n### SQL Server Authentication\n- Default SA password: `YourStrong!Passw0rd`\n- Ensure SQL Server authentication is enabled (configured in Docker setup)\n- Check firewall/networking if connecting from external machines\n\n## Development\n\n### Adding New Utilities\nAdd new database utility functions to `db_utils.py` following the established patterns:\n- Include comprehensive docstrings\n- Handle errors gracefully with try/except blocks\n- Return consistent data types (None on error)\n- Print informative messages for debugging\n\n### Testing\nUse `verify_replication.py` to test:\n- Replication functionality between primary and replica\n- Data synchronization verification\n- End-to-end replication workflow\n\n## Project Structure\n\n```\ndemo-mssql-replication/\n├── .env.example               # Example environment configuration\n├── .gitignore                 # Git ignore patterns\n├── db_utils.py               # Database utility functions\n├── docker-compose.yml        # Container orchestration\n├── Dockerfile.mssql         # Custom SQL Server image\n├── init-db.sh              # Database initialization script\n├── init_db.sql             # Database creation SQL\n├── README.md               # This documentation\n├── requirements.txt        # Python dependencies\n├── setup_replication.ps1   # PowerShell setup script\n├── setup_replication.sh    # Bash setup script\n├── setup_replication.sql   # Main replication configuration\n├── setup_subscriber.sql    # Subscriber setup script\n├── TROUBLESHOOTING.md      # Troubleshooting guide\n└── verify_replication.py   # Replication verification script\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliteobject%2Fdemo-mssql-replication","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fliteobject%2Fdemo-mssql-replication","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliteobject%2Fdemo-mssql-replication/lists"}