R: Копировать / клонировать полную БД с SQL Server на локальный - PullRequest
5 голосов
/ 29 октября 2019

В R у меня есть соединение SQL Server с этой базой данных:

enter image description here

С этот ответ Я понимаю, что этиуровни catalogs (=databases), schemas, and tables. Следующий код:

library(odbc)
library(DBI)
library(RSQlite)
library(dbi)
confull <- odbc::dbConnect(odbc(), 
                           Driver = "SQL Server", 
                           Server = "XXX")
odbcListObjects(confull, schema="schema")

Выход:

         name    type
1     DBAInfo catalog
2 InBluePrism catalog
3      master catalog
4        msdb catalog
5      tempdb catalog

Вопросы:

  1. Как извлечь полное структурное дерево этой базы данных, а не толькоcatalogs?
  2. Как можно программно сохранить (клонировать) всю эту базу данных (включая все таблицы, схемы и каталоги) в локальную таблицу SQLite?

ДляПервый вопрос Я попытался следующее:

> all_schemas <- DBI::dbGetQuery(confull, "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA")
> all_schemas
                SCHEMA_NAME
1                       dbo
2                     guest
3        INFORMATION_SCHEMA
4                       sys
5              CCAutomation
6      XXXXXX\\xxxAdmin
7      XXXXXX\\z_swmon
8      NT AUTHORITY\\SYSTEM
9      XXXXXX\\z_Backup
10                 db_owner
11           db_accessadmin
12         db_securityadmin
13              db_ddladmin
14        db_backupoperator
15            db_datareader
16            db_datawriter
17        db_denydatareader
18        db_denydatawriter

Для второго вопроса я попытался:

  1. для создания сценариев в SQL Server, но я получаю сообщение об ошибке, и более того яЯ хотел бы сохранить эту программу программной.
  2. , чтобы просто сохранить все таблицы, заданные dbListTables(confull), однако тогда я потеряю информацию о каталогах и схемах, к которым эти таблицы принадлежат.

РЕДАКТИРОВАТЬ: следующая ссылка также содержит полезную информацию

Ответы [ 2 ]

3 голосов
/ 05 ноября 2019

Я не знаю, какая у вас версия SQL Server. Я основываюсь на том, что у меня есть, а именно на SQL Server 2008 и 2016.

Чтобы иметь инструмент CLI, вы можете загрузить Export2SqlCE.zip

Описание:

Утилита командной строки SQL Server 2005/2008 для создания сценария, совместимого с SQL Compact или SQLite, со схемой и данными (или только схемой)

После загрузки выможет запустить его для извлечения информации, используя:

Export2SQLCE.exe "Data Source=(local);Initial Catalog=<your_database>;Integrated Security=True" your_database.sql sqlite 
0 голосов
/ 07 ноября 2019

Мы можем использовать конвейер Powerbuilder версии 9/10 / 10.5 в зависимости от вашей версии SQL Server. База данных и данные будут легко перенесены. Все, что вам нужно знать, - это создавать соединения ODBC / базы данных, для чего нужно всего несколько щелчков мыши.

Использование объекта Pipeline путем определения пользовательского объекта стандартного класса, унаследованного от встроенного Pipeline. объект в User Object Painter. Затем мы можем получить доступ к событиям конвейера, написав сценарии, содержащие код для событий.

Вот как мы можем выполнить конвейер, написав сценарий.

Сценарий этого случая заключается в том, что мы хотимпередать таблицу из одной базы данных в другую базу данных. Итак, во-первых, нам нужно как минимум 2 объекта транзакции, что означает, что мы должны сначала объявить в верхней части скрипта. Поскольку у нас есть соединение по умолчанию с базой данных SQLCA, нам нужно только объявить еще один новый объект транзакции с именем SQLCAtarget, который представляет целевое соединение с базой данных. Помните, что в этом случае SQLCA будет источником соединения с базой данных

transaction SQLCAtarget // declare this variable as INSTANT variable

SQLCA.DBMS = 'your source dbms name'
SQLCA.Database = 'your source database name'
SQLCA.LogId = 'your source database login id'
SQLCA.LogPass = 'your source database password'
SQLCA.ServerName = 'your source database server'
CONNECT USING SQLCA;

SQLCAtarget = CREATE transaction
SQLCAtarget.DBMS = 'your target dbms name'
SQLCAtarget.Database = 'your target database login id'
SQLCAtarget.LogPass = 'your target database password'
SQLCAtarget.ServerName = 'your target database server'
SQLCAtarget.LogId = 'your target database login id'
CONNECT USING SQLCAtarget;

Следующим шагом нам нужно построить объект конвейера, щелкнув средство рисования конвейеров на главной панели инструментов. Помните, используйте MAIN TOOLBAR, если мы хотим передать данные в ДРУГУЮ БАЗУ ДАННЫХ.

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

для начала, нажмите кнопку конвейера от powerbuilder

Выберите источник и цель конвейера

установите таблицу, столбец и критерии вашего конвейера

сохраните ваш конвейер

Создайте окно, затем поместите один объект datawindow и один объект кнопки. Нам не нужно помещать объект данных для окна данных, просто оставьте его пустым. И поместите приведенный ниже скрипт в событие clicked в объекте кнопки.

integer iReturn
pipeline myPipeline
myPipeline = CREATE pipeline

myPipeline.DataObject = "pl_mypipeline"
iReturn = myPipeline.Start(SQLCA, SQLCAtarget, dw_1)

// always disconnect your database connection
DISCONNECT USING SQLCA;
DISCONNECT USING SQLCAtarget;

iReturn should have 0 (zero) value if the pipeline runs smoothly.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...