> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# كيفية إعداد ClickHouse على Docker باستخدام ODBC للاتصال بقاعدة بيانات Microsoft SQL Server (MSSQL)

> كيفية إعداد ClickHouse على Docker باستخدام ODBC للاتصال بقاعدة بيانات Microsoft SQL Server (MSSQL)

export const Image = ({img, alt, size = "lg"}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} />
      </Frame>
    </div>;
};

{frontMatter.description}

<div id="question">
  ## السؤال
</div>

كيف أُعِدّ ClickHouse باستخدام صورة Docker للاتصال بـ Microsoft SQL Server؟

<div id="answer">
  ## الإجابة
</div>

***ملاحظات حول هذا المثال***

* يستخدم صورة ClickHouse Docker المبنية على Ubuntu
* يستخدم برنامج تشغيل FreeTDS
* يستخدم MSSQL Server 2012R2
* اسم مضيف Windows في هذا المثال هو `MARSDB2.marsnet2.local` على عنوان IP: `192.168.1.133` (حدّثه باسم المضيف و/أو عنوان IP الخاص بك)
* اسم مثيل MSSQL هو `MARSDB2`
* اسم تسجيل الدخول في MSSQL ومستخدمو قاعدة البيانات هم `sql_user`

<div id="example-setup-in-mssql-for-testing-">
  ### إعداد مثال في MSSQL للاختبار
</div>

تم إنشاء قاعدة بيانات وجدول في MSSQL:

<Image img="https://mintcdn.com/private-7c7dfe99/mWK0LIJWA-YNz_kU/images/knowledgebase/ikb273/c8a5492f-5910-4454-bfbc-5c6ceda15ccd.webp?fit=max&auto=format&n=mWK0LIJWA-YNz_kU&q=85&s=176761966adb26eb258e2e5e1d771112" size="md" alt="بنية قاعدة البيانات والجدول في MSSQL" border width="501" height="233" data-path="images/knowledgebase/ikb273/c8a5492f-5910-4454-bfbc-5c6ceda15ccd.webp" />

مستخدم تسجيل الدخول في MSSQL، `sql_user`:

<Image img="https://mintcdn.com/private-7c7dfe99/mWK0LIJWA-YNz_kU/images/knowledgebase/ikb273/568f1143-475e-422f-a26a-2c23ac324771.webp?fit=max&auto=format&n=mWK0LIJWA-YNz_kU&q=85&s=a2b9f152ef559e103b35f32f34eefd32" size="md" alt="إعداد مستخدم تسجيل الدخول في MSSQL" border width="706" height="632" data-path="images/knowledgebase/ikb273/568f1143-475e-422f-a26a-2c23ac324771.webp" />

أدوار عضوية قاعدة البيانات لـ `sql_user`:

<Image img="https://mintcdn.com/private-7c7dfe99/mWK0LIJWA-YNz_kU/images/knowledgebase/ikb273/63992978-7078-4985-b661-a3c095099ea7.webp?fit=max&auto=format&n=mWK0LIJWA-YNz_kU&q=85&s=511ec4894b1a20bf800007b56ee2162c" size="md" alt="أدوار عضوية قاعدة البيانات في MSSQL" border width="703" height="627" data-path="images/knowledgebase/ikb273/63992978-7078-4985-b661-a3c095099ea7.webp" />

مستخدم قاعدة بيانات مرتبط بتسجيل دخول:

<Image img="https://mintcdn.com/private-7c7dfe99/mWK0LIJWA-YNz_kU/images/knowledgebase/ikb273/15a407ca-53c1-45b1-9beb-ddd8eedde64a.webp?fit=max&auto=format&n=mWK0LIJWA-YNz_kU&q=85&s=72303e872989b7c27ea0920ec5e8c3b5" size="md" alt="مستخدم قاعدة بيانات في MSSQL مرتبط بتسجيل دخول" border width="994" height="447" data-path="images/knowledgebase/ikb273/15a407ca-53c1-45b1-9beb-ddd8eedde64a.webp" />

<div id="configuring-clickhouse-with-odbc">
  ### تهيئة ClickHouse باستخدام ODBC
</div>

أنشئ مجلد عمل:

```sh theme={null}
mkdir ch-odbc-mssql
cd ch-odbc-mssql
```

أنشئ ملف `odbc.ini`:

```sh theme={null}
vim odbc.ini
```

أضِف الإدخالات التالية لتحديث اسم الـDSN وعنوان IP:

```sh theme={null}
[marsdb2_mssql]
Driver = FreeTDS
Server = 192.168.1.133
```

أنشئ ملف `odbcinst.ini`:

```sh theme={null}
vim odbcinst.ini
```

أضف الإدخالات التالية (يُعدّ trace اختياريًا، لكنه يساعد في استكشاف الأخطاء وإصلاحها):

```sh theme={null}
[ODBC]
Trace = Yes
TraceFile = /tmp/odbc.log

[FreeTDS]
Description = FreeTDS
Driver = /usr/lib/aarch64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
UsageCount = 1
```

<div id="configure-a-dockerfile-to-download-the-image-and-add-the-tds-and-required-odbc-libraries">
  ### تهيئة ملف Dockerfile لتنزيل الصورة وإضافة مكتبات TDS وODBC المطلوبة
</div>

أنشئ ملف Dockerfile:

```sh theme={null}
vim Dockerfile
```

أضِف محتوى ملف Dockerfile:

```sh theme={null}
FROM clickhouse/clickhouse-server:23.10

# Install the ODBC driver

RUN apt-get update && apt-get install -y --no-install-recommends unixodbc \
    && apt-get install -y freetds-bin freetds-common freetds-dev libct4 libsybdb5 \
	&& apt-get install tdsodbc
```

أنشئ صورة Docker الجديدة:

```sh theme={null}
docker build . -t marsnet/clickhouse-odbc:23.10
```

أنشئ ملفًا باسم `docker-compose.yml`:

```sh theme={null}
vim docker-compose.yml
```

أضِف المحتوى التالي إلى ملف YAML:

```sh theme={null}
version: '3.7'
services:
  clickhouse:
    image: marsnet/clickhouse-odbc:23.10
    container_name: clickhouse-odbc
    hostname: clickhouse-host
    ports:
      - "9000:9000"
      - "8123:8123"
      - "9009:9009"
    volumes:
      - ./odbc.ini:/etc/odbc.ini
      - ./odbcinst.ini:/etc/odbcinst.ini
    restart: always
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 262144
        hard: 262144
    deploy:
      resources:
        limits:
          memory: 4g
```

شغّل الحاوية:

```sh theme={null}
docker compose up --detach
```

بعد بدء تشغيل الحاوية، ينبغي أن ترى شيئًا مثل هذا:

```sh theme={null}
ch-odbc-mssql % docker compose up --detach
[+] Running 1/1
 ✔ Container clickhouse-odbc  Started
```

تأكد من أن الحاوية قيد التشغيل:

```sh theme={null}
ch-odbc-mssql % docker ps
CONTAINER ID   IMAGE                           COMMAND            CREATED          STATUS              PORTS                                                                    NAMES
87a400b803ce   marsnet/clickhouse-odbc:23.10   "/entrypoint.sh"   57 minutes ago   Up About a minute   0.0.0.0:8123->8123/tcp, 0.0.0.0:9000->9000/tcp, 0.0.0.0:9009->9009/tcp   clickhouse-odbc
```

<div id="test-odbc-connection">
  ### اختبار اتصال ODBC
</div>

سجّل الدخول باستخدام clickhouse client:

```sh theme={null}
./clickhouse client
```

اختبر الاستعلام `SELECT` باستخدام `odbc` table function على جدول قاعدة بيانات MSSQL البعيدة:

```
clickhouse-host :) SELECT * from odbc('DSN=marsdb2_mssql;port=1433;Uid=sql_user;Pwd=ClickHouse123;Database=db1', 'table1');

SELECT *
FROM odbc('DSN=marsdb2_mssql;port=1433;Uid=sql_user;Pwd=ClickHouse123;Database=db1', 'table1')

Query id: 23494da2-6e12-4ade-95fa-372a0420cac1

┌─id─┬─column1─┐
│  1 │ abc     │
│  2 │ def     │
│  3 │ ghi     │
└────┴─────────┘

3 rows in set. Elapsed: 0.188 sec. 
```

يمكنك أيضًا إنشاء جدول بعيد باستخدام محرك الجدول `odbc`:

```sql theme={null}
CREATE TABLE table1_odbc_mssql
(
    `id` Int32,
    `column1` String
)
ENGINE = ODBC('DSN=marsdb2_mssql;port=1433;Uid=sql_user;Pwd=ClickHouse123;Database=db1', 'dbo', 'table1')
```

استخدم استعلام `SELECT` لاختبار الجدول البعيد الجديد:

```
clickhouse-host :) select * from table1_odbc_mssql;

SELECT *
FROM table1_odbc_mssql

Query id: 94724368-485d-4364-ae58-a435a225c37d

┌─id─┬─column1─┐
│  1 │ abc     │
│  2 │ def     │
│  3 │ ghi     │
└────┴─────────┘

3 rows in set. Elapsed: 0.218 sec. 
```

لمزيد من المعلومات، يُرجى مراجعة:

* [https://hub.docker.com/\_/clickhouse](https://hub.docker.com/_/clickhouse)
* [https://clickhouse.com/docs/engines/table-engines/integrations/odbc](/docs/ar/reference/engines/table-engines/integrations/odbc)
* [https://github.com/ClickHouse/clickhouse-odbc](https://github.com/ClickHouse/clickhouse-odbc)
