Показаны сообщения с ярлыком Create. Показать все сообщения
Показаны сообщения с ярлыком Create. Показать все сообщения

среда, 28 мая 2025 г.

DataBase, Create, Auto

DataBase, Create, Auto

https://giga.chat/link/gcsacidXhW

  • Создание базы данных вручную:
  • Самый простой путь — предварительно создать базу данных через SQL Server Management Studio (SSMS)
  • или другой удобный инструмент.
  • Автоматическое создание базы данных через Entity Framework Core:
  • Начиная с EF Core 3.0, появилась возможность включить автоматическое создание базы данных при её отсутствии.
  • Для этого можно использовать метод EnsureCreated().

  • Пример:
  • using (var context = new LoggerDbContext())
    {
        context.Database.EnsureCreated(); // Создаёт базу данных, если её нет
    }
  • Обратите внимание, что этот метод не учитывает миграций и
  • применяется только для создания чистой пустой базы данных.
  • Программное создание базы данных средствами SQL Server:
  • Можно заранее программно подготовить сценарий для создания базы данных:
  • IF NOT EXISTS(SELECT * FROM sys.databases WHERE name='LoggerG01')
    BEGIN
        CREATE DATABASE LoggerG01;
    END
    GO
    1. Этот SQL-код проверяет существование базы данных и создает её, если таковой нет.

    Заключение:

    • Современные версии SQL Server и Entity Framework Core требуют явного указания действий при создании базы данных.
    • Автоматическое создание базы данных исключено ради безопасности и точности процессов.
    • Рекомендуется либо предварительное ручное создание базы данных,
    • либо использование методов вроде EnsureCreated() для автоматизированного создания пустых баз данных.
    • ---------------------------------------------
    • Если задача — создать полную копию существующей базы данных с новыми именем и расположением файлов,

      Способ 1: Через GUI (SSMS)

      1. Подключитесь к серверу SQL Server через SQL Server Management Studio (SSMS).
      2. В обозревателе объектов найдите нужную базу данных, щелкните правой кнопкой мыши и
      3. выберите пункт меню Задачи → Создать копию базы данных.
      4. В открывшемся диалоговом окне укажите новое имя базы данных и расположение файлов (mdf и ldf).
      5. Нажмите ОК, и копия базы данных будет создана мгновенно.

      Способ 2: Через T-SQL запрос (скрипт)

      Для клонирования базы данных можно использовать инструкцию RESTORE WITH MOVE.

      Пример сценария:

      -- Сделать резервную копию исходной базы данных
      BACKUP DATABASE OriginalDB TO DISK = 'D:\Backup\OriginalDB.bak';
      
      -- Восстановить резервную копию под новым именем
      RESTORE DATABASE NewCopyDB
      FROM DISK = 'D:\Backup\OriginalDB.bak'
      WITH MOVE 'OriginalDB' TO 'D:\Data\NewCopyDB.mdf',
      MOVE 'OriginalDB_log' TO 'D:\Data\NewCopyDB_log.ldf';

      Этот запрос сделает точную копию вашей базы данных с новым именем и размещением файлов.


      2. Создание пустой копии базы данных (структуры без данных)

      Если цель — создать базу данных с той же структурой, но без данных, то тут также есть два способа:

      Способ 1: Экспорт структуры базы данных через SSMS

      1. Подключитесь к серверу SQL Server через SSMS.
      2. В обозревателе объектов найдите нужную базу данных, щелкните правой кнопкой мыши и выберите пункт меню Задачи → Генерация сценариев.
      3. В мастере генерации сценариев выберите опцию экспорта только структуры (без данных).
      4. Сохраните созданный скрипт и выполните его для создания новой базы данных с такой же структурой.

      Способ 2: Через T-SQL запрос (скрипт)

      Если нужно создать чистую копию базы данных с такой же структурой,

      Пример сценария для копирования структуры:

      -- Копирование структуры базы данных OriginalDB в новую базу данных EmptyStructureDB
      EXEC sp_MSforeachtable @command1="PRINT 'Restructuring table structure for ?', SELECT INTO EmptyStructureDB.dbo.? FROM OriginalDB.dbo.?"

      Однако будьте осторожны с использованием хранимых процедур MSForEachTable,

      Более безопасный способ — создать резервную копию и затем очистить её:

      -- Сделайте резервную копию исходной базы данных
      BACKUP DATABASE OriginalDB TO DISK = 'D:\Backup\OriginalDB_StructureOnly.bak';
      
      -- Создайте пустую базу данных с той же структурой
      RESTORE DATABASE EmptyStructureDB
      FROM DISK = 'D:\Backup\OriginalDB_StructureOnly.bak'
      WITH FILE = 1, NOCOPYONLY, REPLACE, KEEP_REPLICATION, KEEP_CDC, STATS = 10;
      
      -- Удаляем все данные из новой базы данных
      DECLARE @Command VARCHAR(MAX) = '';
      SELECT @Command += 'TRUNCATE TABLE [' + SCHEMA_NAME(schema_id) + '].[' + name + ']; '
      FROM sys.tables;
      EXEC (@Command);

      Затем запустите последний блок кода, чтобы избавиться от данных, оставив только структуру.


      Заключение:

      Оба подхода возможны и зависят от ваших предпочтений и специфики задачи.

    • Предварительно сделайте резервную копию нужной базы данных, а затем восстановите её под новым именем.

    • так как они являются внутренними процедурами и официально не рекомендованы к использованию.

    • можно выполнить экспорт структуры через команду SCHEMA_ONLY и выполнить получившиеся сценарии.

    • это можно сделать двумя способами:

    • Выбор между графическим интерфейсом и сценариями зависит от частоты выполнения таких операций и необходимого уровня автоматизации.

    вторник, 27 мая 2025 г.

    Loggers, Project, Create

    Loggers, Project

    Loggers - does not work
    Loggers1
    Loggers2 work
    D:\VC25\SQL\Loogers\1
    Loggers_ALL_Works.sql
    Loggers2_ALL_Works.sql


    D:\VC25\SQL\Loogers\1
    Create All
    D:\VC25\SQL\Loogers\1\Create_Loggers_Whole_01.sql
    Or Separatly
    Host_App_Log_01.sql
    Log_Instance_02.sql
    LogItems_02.sql
    Alter_Connections_01.sql
    --------------------------------------------------------------------------
    1. Create DB
    ------------------------------------------------------------------
    -- Создание базы данных
    USE master;
    IF DB_ID('Loggers') IS NOT NULL DROP DATABASE Loggers;
    CREATE DATABASE Loggers;
    GO

    -- Подключение к новой базе данных
    USE Loggers;
    GO

    -- Создаем таблицу Hosts
    CREATE TABLE dbo.Hosts (
        ID INT IDENTITY(1,1) PRIMARY KEY,
        Name NVARCHAR(50) NOT NULL,
        Descriptions NVARCHAR(50) NOT NULL,
        Created DATETIME2(7) NOT NULL DEFAULT SYSDATETIME()
    );

    -- Создаем таблицу Apps
    CREATE TABLE dbo.Apps (
        ID INT IDENTITY(1,1) PRIMARY KEY,
        Name NVARCHAR(50) NOT NULL,
        Descriptions NVARCHAR(50) NOT NULL,
        Created DATETIME2(7) NOT NULL DEFAULT SYSDATETIME()
    );

    -- Создаем таблицу Logs
    CREATE TABLE dbo.Logs (
        ID INT IDENTITY(1,1) PRIMARY KEY,
        Name NVARCHAR(50) NOT NULL,
        Descriptions NVARCHAR(50) NOT NULL,
        Created DATETIME2(7) NOT NULL DEFAULT SYSDATETIME()
    );
    GO
    ------------------------------------------------------------------
    2. Create LogInstance
    -------------------------------------------------------------------
    USE Loggers
    GO

    CREATE TABLE dbo.LogInstance (
        ID INT IDENTITY(1,1) PRIMARY KEY,
        HostID INT NOT NULL,
        AppID INT NOT NULL,
        LogID INT NOT NULL,
        Created DATETIME2(7) NOT NULL DEFAULT SYSDATETIME(),
        Modified DATETIME2(7) NOT NULL DEFAULT SYSDATETIME(),
        CONSTRAINT FK_LogInstance_Hosts FOREIGN KEY (HostID) REFERENCES dbo.Hosts(ID),
        CONSTRAINT FK_LogInstance_Apps FOREIGN KEY (AppID) REFERENCES dbo.Apps(ID),
        CONSTRAINT FK_LogInstance_Logs FOREIGN KEY (LogID) REFERENCES dbo.Logs(ID)
    );
    GO
    ------------------------------------------------------------------------
    3. Create LogItems
    ------------------------------------------------------------------------
    USE Loggers
    GO

    CREATE TABLE dbo.LogItems (
        EventLogItemID BIGINT IDENTITY(1,1) PRIMARY KEY,
        DT DATETIME2 NOT NULL,
        LogLevel INT NOT NULL,
        Source NVARCHAR(50) NULL,
        Entity NVARCHAR(50) NULL,
        Operation NVARCHAR(50) NULL,
        Description NVARCHAR(50) NULL,
        LogInstanceID INT NOT NULL,
        CONSTRAINT FK_LogItems_LogInstance FOREIGN KEY (LogInstanceID) REFERENCES dbo.LogInstance(ID)
    );
    GO
    -----------------------------------------------------------------------
    4. Check Create DB FK PK
    -----------------------------------------------------------------------
    USE Loggers
    GO

    SELECT 
        fk.name AS FK_name, 
        tp.name AS parent_table, 
        cp.name AS parent_column, 
        tr.name AS referenced_table, 
        cr.name AS referenced_column
    FROM 
        sys.foreign_keys AS fk
    INNER JOIN 
        sys.foreign_key_columns AS fkc ON fk.object_id = fkc.constraint_object_id
    INNER JOIN 
        sys.tables AS tp ON fkc.parent_object_id = tp.object_id
    INNER JOIN 
        sys.columns AS cp ON fkc.parent_object_id = cp.object_id AND fkc.parent_column_id = cp.column_id
    INNER JOIN 
        sys.tables AS tr ON fkc.referenced_object_id = tr.object_id
    INNER JOIN 
        sys.columns AS cr ON fkc.referenced_object_id = cr.object_id AND fkc.referenced_column_id = cr.column_id
    WHERE 
        tp.name IN (N'LogInstance', N'LogItems');

    GO
    -------------------------------------------------------------
    FK_LogInstance_Hosts LogInstance HostID                 Hosts         ID
    FK_LogInstance_Apps     LogInstance AppID                 Apps         ID
    FK_LogInstance_Logs         LogInstance LogID                 Logs         ID
    FK_LogItems_LogInstance LogItems LogInstanceID LogInstance ID
    --------------------------------------------------------------------------