# 1 Database creation scripts

#### Overview

A Zabbix database must be created during the installation of Zabbix
server or proxy.

This section provides scripts for creating a Zabbix database. A separate
schema script is provided for each supported database.

::: notetip
`schema.sql`, `images.sql` and `data.sql` files are
located in the *database* subdirectory of Zabbix sources. If Zabbix was
installed from distribution packages, refer to the distribution
documentation.
:::

::: noteimportant
For a Zabbix proxy database, **only** `schema.sql`
should be imported (no images.sql nor data.sql)
:::

UTF-8 is the only encoding supported by Zabbix. It is known to work
without any security flaws. Users should be aware that there are known
security issues if using some of the other encodings.

**Scripts**

#### MySQL

Character set utf8 and utf8\_bin collation is required for Zabbix server
to work properly with MySQL database.

We assume that a *username* user with *password* password exists and has
permissions to create database objects.

    shell> mysql -u<username> -p<password>
    mysql> create database zabbix character set utf8 collate utf8_bin;
    mysql> quit;
    shell> mysql -u<username> -p<password> zabbix < database/mysql/schema.sql
    # stop here if you are creating database for Zabbix proxy
    shell> mysql -u<username> -p<password> zabbix < database/mysql/images.sql
    shell> mysql -u<username> -p<password> zabbix < database/mysql/data.sql

#### PostgreSQL

We assume that a *username* user exists and has permissions to create
database objects.

    shell> psql -U <username>
    psql> create database 'zabbix' with encoding 'UNICODE' template=template0; 
    psql> \q 
    shell> cd database/postgresql
    shell> psql -U <username> zabbix < schema.sql
    # stop here if you are creating database for Zabbix proxy
    shell> psql -U <username> zabbix < images.sql
    shell> psql -U <username> zabbix < data.sql

#### Oracle

We assume that a *zabbix* database user with *password* password exists
and has permissions to create database objects in ORCL service located
on the *host* Oracle database server with a *user* shell user having
write access to /tmp directory. Zabbix requires a Unicode database
character set and a `UTF8` national character set. Check current
settings:

    sqlplus> select parameter,value from v$nls_parameters where parameter='NLS_CHARACTERSET' or parameter='NLS_NCHAR_CHARACTERSET';

If you are creating a database for Zabbix server you need to have images
somewhere on the Oracle host, for example in /tmp/zabbix\_images folder.
Copy all images from misc/images/png\_modern to /tmp/zabbix\_images
directory on the Oracle host:

    shell> cd /path/to/zabbix-sources  
    shell> scp -r misc/images/png_modern user@host:/tmp/zabbix_images 

Edit the database/oracle/images.sql file and set `images_dir` variable
to the /tmp/zabbix\_images path:

    CREATE OR REPLACE DIRECTORY image_dir AS '/tmp/zabbix_images'

Now prepare the database:

    shell> sqlplus zabbix/password@host/ORCL
    sqlplus> @database/oracle/schema.sql
    # stop here if you are creating database for Zabbix proxy
    sqlplus> @database/oracle/images.sql
    sqlplus> @database/oracle/data.sql

::: notetip
Please set the initialization parameter
CURSOR\_SHARING=FORCE for best performance.
:::

#### IBM DB2

    shell> db2 "create database zabbix using codeset utf-8 territory us pagesize 32768"
    shell> cd database/ibm_db2
    shell> db2batch -d zabbix -f schema.sql
    # stop here if you are creating database for Zabbix proxy
    shell> db2batch -d zabbix -f images.sql
    shell> db2batch -d zabbix -f data.sql 

::: noteclassic
It is important to set UTF-8 locale for Zabbix server,
Zabbix proxy and web server running Zabbix frontend. Otherwise text
information from Zabbix will be interpreted by IBM DB2 server as
non-UTF-8 and will be additionally converted on the way from Zabbix to
the database and back. The database will store corrupted non-ASCII
characters.
:::

Zabbix frontend uses `OFFSET` and `LIMIT` clauses in SQL queries. For
this to work, IBM DB2 server must have DB2\_COMPATIBILITY\_VECTOR
variable be set to 3. Run the following command before starting the
database server:

    shell> db2set DB2_COMPATIBILITY_VECTOR=3

#### SQLite

    shell> cd database/sqlite3
    shell> sqlite3 /var/lib/sqlite/zabbix.db < schema.sql
    # stop here if you are creating database for Zabbix proxy
    shell> sqlite3 /var/lib/sqlite/zabbix.db < images.sql
    shell> sqlite3 /var/lib/sqlite/zabbix.db < data.sql

::: noteclassic
If using SQLite with Zabbix proxy, database will be
automatically created if it does not exist.
:::

Return to the [installation section](/manual/installation/install).
