Создать базу данных в PervasiveSQL из командной строки

Как создать базу данных в PervasiveSQL с помощью командной строки.

Я знаю, как это сделать через Центр управления, но я бы предпочел создать его через командную строку. Я работаю над автоматизацией установки коробки PervasiveSQL для проекта, над которым я работаю. У меня установка сервера происходит автоматически, и я настраиваю конфигурацию сервера с помощью импорта RegKey.

Теперь мне просто нужно написать сценарий создания базы данных. Новая база данных будет использовать существующие файлы базы данных, которые уже скопированы на сервер.

В документации я использую здесь: утилита под названием dbMaint (стр. 264), которая, похоже, справится с этой задачей, но, похоже, на моем сервере нет этой утилиты.

Спасибо заранее за вашу помощь.


person Sage    schedule 21.12.2017    source источник


Ответы (1)


dbMaint предоставляется только для PSQL в Linux. Существует способ написать утилиту с использованием интерфейса распределенной настройки (DTI) или объекта распределенной настройки (DTO) для создания базы данных. Я не могу ссылаться на документацию PSQL, но в загружаемой документации PSQL v11 есть файлы PSQL_DTI_GUIDE.pdf и PSQL_DTO_Guide.pdf, в которых описывается, как использовать эти API.

Нашел образец С#, который я собрал некоторое время назад. Библиотека Pervasive DTO должна быть добавлена ​​в качестве ссылки. Это COM-объект. Простой образец:

using System;
using DTOLib;

namespace dtoTest
{
    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            string compName = null;
            string userName = null;
            string password = null;
            string dbname = null;
            string ddflocation = null;
            string datalocation = null;
            dtoDbFlags dbflags = DTOLib.dtoDbFlags.dtoDbFlagDefault;

            DTOLib.dtoResult result;
            if (args.LongLength < 1)
            {
                Console.WriteLine("Invalid options.\n");
                Console.WriteLine("Usage: dtoDBN.EXE <computername> <username> <password> <dbname> <ddf location> <data location> <DBFlage>");
                Console.WriteLine("NOTE: locations must be relative to the computer where the PSQL engine is running.");
                Console.WriteLine("DB Flags must be passed as integer in this example with these values:  ");
                Console.WriteLine(" P_DBFLAG_BOUND =  1;  (* bound database - must have P_DBFLAG_CREATE_DDF too *)");
                Console.WriteLine(" P_DBFLAG_RI = 2; (*relational integrity *)");
                Console.WriteLine(" P_DBFLAG_CREATE_DDF = 4; (*create ddf flag *)");
                Console.WriteLine(" P_DBFLAG_NA = 2147483648; (*not applicable *)");
                Console.WriteLine(" P_DBFLAG_DEFAULT = (P_DBFLAG_BOUND or P_DBFLAG_RI); ");

                return;
            }
            if (args.LongLength == 7)
            {
                compName = args[0].ToString();
                userName = args[1].ToString();
                password = args[2].ToString();
                dbname = args[3].ToString();
                ddflocation = args[4].ToString();
                datalocation = args[5].ToString();
                dbflags = (dtoDbFlags)Convert.ToInt32(args[6]);
            }
            Console.WriteLine("Create Pervasive Database using DTO and C#");
            DtoSession mDtoSession = new DTOLib.DtoSession();
            try
            {
                result = mDtoSession.Connect(compName, userName, password);
                if (result != 0)
                {
                    Console.WriteLine("Error connecting to server.  Error code:");
                }
                else
                {
                    //Create a Database name here.  
                    DtoDatabase db = new DtoDatabase();
                    db.Name = dbname;
                    db.DdfPath = ddflocation;
                    db.DataPath = datalocation;
                    db.Flags = dbflags;
                    result = mDtoSession.Databases.Add(db);
                    if (result !=0)
                    {
                        Console.WriteLine(string.Format("Error creating the datbase ({0}).  Error code: {1}", dbname, result.ToString()));
                    }
                    else
                    {
                        Console.WriteLine(string.Format("Database ({0}) created. ", dbname));

                    }

                    result = mDtoSession.Disconnect();
                    Console.ReadLine();
                }
            }
            catch (Exception e1)
            {
                Console.WriteLine(e1.Message.ToString());
            }
        }
    }
}
person mirtheil    schedule 21.12.2017
comment
Не тот ответ, на который я надеялся, но ответ, которого я ожидал, тем не менее. Мой следующий вопрос: могу ли я использовать этот инструмент на компьютере с Linux для создания БД на компьютере с Windows? - person Sage; 26.12.2017
comment
Глядя на документацию, не видно, что вы можете использовать ее для создания удаленных имен БД. Раньше у меня был небольшой образец с использованием DTI/DTO, позвольте мне посмотреть, смогу ли я его найти. - person mirtheil; 26.12.2017
comment
вам когда-нибудь удавалось найти этот пример с помощью DTI\DTO? - person Sage; 23.01.2018
comment
Добавлен образец, который я нашел с помощью DTO и C#. - person mirtheil; 24.01.2018
comment
Смотри, ты классный! Я дам вам знать, как это работает, это определенно выглядит довольно понятно. Еще раз большое спасибо. - person Sage; 24.01.2018