Как сделать копию таблицы в sql oracle

Добавил пользователь Дмитрий К.
Обновлено: 10.09.2024

Я хочу продолжить работу над oracle db из дома, и мне нужны определенные таблицы, которые я создал. Как мне их сохранить, а затем восстановить?

4 ответа 4

Быстрый и простой способ - используйте инструменты Oracle exp & imp

Чтобы экспортировать их:

Передайте файл dmp к месту назначения и затем импортируйте их:

Это покажет вам наиболее распространенные параметры, которые вы можете использовать, а также покажет вам значения по умолчанию для каждого параметра.

Для экспорта таблицы:-

expdp mydbusername/mydbpassword@mydbinstancename tables=mytablename directory=MY_DIR dumpfile=mytablename.dmp

Для импорта таблицы:-

impdp mydbusername/mydbpassword@mydbinstancename tables=mytablename directory=MY_DIR dumpfile=mytablename.dmp

В качестве параметра directory вы можете использовать каталог по умолчанию DATA_PUMP_DIR или свой собственный каталог MY_DIR .

Версия Oracle используется для вышеуказанных команд:-

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit

Эти инструменты импорта и экспорта можно использовать для переноса всей базы данных или отдельных таблиц, но я считаю, что существует ограничение в том, что данные должны импортироваться обратно в одно и то же табличное пространство (что не будет проблемой, если вы используете Oracle 10g или новее, которые поддерживают переименование табличных пространств).

Я не вижу никакой полезной информации для команды ODUMP в результатах поиска Google, поэтому, возможно, я не помню название инструмента правильно (я не пользуюсь Oracle уже несколько лет после перехода на PostgreSQL, но я по-прежнему расцените это как отличный сервер SQL).

Я знаю, что могу легко создать копию таблицы с create table t1 select * from table2; Но мне нужно скопировать:

  • столбцы
  • Комментарии
  • табличного
  • индексы
  • гранты
  • триггеры
  • ключи
  • значения по умолчанию
  • .
  • любые другие зависимости

Есть ли способ сделать это путем pl/sql процедура? Моя версия Oracle - 11R2.

2 ответа

Ты можешь использовать DBMS_REDEFINITION пакет, эта вещь может сделать копию всей таблицы, включая комментарии и т. д. Она также "дефрагментирует" новую копию, занимая меньше места, чем исходная таблица.

Пример по запросу:

Итак, давайте создадим тестовую схему, таблицу и заполните ее некоторыми данными:

Теперь мы можем проверить содержимое тестовой таблицы:

Давайте начнем процесс копирования с создания пустой таблицы в точности так, как выглядит исходная таблица (используя WHERE 1=0 , который не будет принимать никаких данных).

Здесь вы можете настроить паралеллизацию и т. Д., Подготовить данные и т. Д. После того, как все будет сделано, давайте запустим процесс REDEFINITION:

Когда содержимое копируется, нам нужно скопировать каждый объект, который зависит от таблицы (например, триггеры, индексы и т. Д. )

Мы можем проверить, возникли ли какие-либо ошибки во время копирования зависимостей с помощью этого запроса:

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

И вуаля, новый стол похож на клонированную овечку Долли со всем в ней:

Теперь, чтобы очистить схему теста, запустите:

Надеюсь, это помогло.

Если вы используете TOAD, SQL DEVELOPER, вы можете получить доступ к Таблице SQL, используя f4 в toad и используя объект поиска, а затем SQL в SQL-разработчике. Это даст вам сценарий SQL для создания таблицы. Это будет иметь все индексы, значения по умолчанию, структуру столбцов, гранты, комментарии столбцов, табличное пространство. Для триггеров вы можете получить это из раздела DBA_triggers/Triggers вышеупомянутого метода. Просто измените имя таблицы и выполните оператор, а затем вставьте все данные из базовой таблицы в новую таблицу.

Одним из наиболее распространенных сценариев в разработке приложений является отображение данных на форме в приложении Windows, изменение этих данных и отправка обновленных данных обратно в базу данных. Это пошаговое руководство описывает создание формы, отображающей данные из двух связанных таблиц, правку записей и сохранение изменений в базе данных. В данном примере используются таблицы Customers и Orders из учебной базы данных "Борей".

Вы можете сохранить данные из приложения в базе данных, вызвав метод Update адаптера таблицы. При перетаскивании таблиц из окна Источники данных на форму автоматически добавляется код, необходимый для сохранения данных. Для всех дополнительных таблиц, добавляемых в форму, требуется добавление этого кода вручную. Это пошаговое руководство описывает добавление кода для сохранения обновлений из нескольких таблиц.

В данном пошаговом руководстве представлены следующие задачи.

Создание и Настройка источника данных в приложении с помощью мастера настройки источника данных.

Создание элементов управления с привязкой к данным с помощью перетаскивания элементов из окна Источники данных на форму.

Изменение нескольких записей в каждой таблице в наборе данных.

Изменение кода для отправки обновленных данных в наборе данных обратно в базу данных.

Предварительные требования

в этом пошаговом руководстве используется SQL Server Express LocalDB и образец базы данных Northwind.

если у вас нет SQL Server Express LocalDB, установите его на странице загрузки SQL Server Expressили с помощью Visual Studio Installer. в Visual Studio Installer можно установить SQL Server Express LocalDB как часть рабочей нагрузки хранения и обработки данных или как отдельный компонент.

Установите учебную базу данных Northwind, выполнив следующие действия.

в Visual Studio откройте окно обозреватель объектов SQL Server . (SQL Server обозреватель объектов устанавливается как часть рабочей нагрузки хранения и обработки данных в Visual Studio Installer.) разверните узел SQL Server . щелкните правой кнопкой мыши экземпляр LocalDB и выберите создать запрос.

Откроется окно редактора запросов.

скопируйте скрипт Transact-SQL Northwind в буфер обмена. этот сценарий T-SQL создает базу данных Northwind с нуля и заполняет ее данными.

вставьте скрипт T-SQL в редактор запросов, а затем нажмите кнопку выполнить .

По истечении короткого времени выполнение запроса завершается и создается база данных Northwind.

создание приложения Windows Forms

Создание источника данных

На этом шаге Мастер настройки источника данных используется для создания источника данных из базы данных Northwind. Для создания подключения необходимо иметь доступ к учебной базе данных "Борей". Сведения о настройке образца базы данных Northwind см. в разделе как установить образцы базданных.

В меню Данные выберите пункт Показать источники данных.

Открывается окно Источники данных.

В окне Источники данных выберите Добавить новый источник данных , чтобы запустить Мастер настройки источника данных.

На экране Выбор типа источника данных выберите база данных, а затем нажмите кнопку Далее.

На экране Выбор подключения к данным выполните одно из следующих действий.

Если подключение к учебной базе данных Northwind доступно в раскрывающемся списке, то выберите его.

Выберите Новое подключение для открытия диалогового окна Добавить/изменить подключение.

Если базе данных требуется пароль, выберите параметр, чтобы включить конфиденциальные данные, а затем нажмите кнопку Далее.

В строке сохранить подключение в файл конфигурации приложения нажмите кнопку Далее.

На экране Выбор объектов базы данных разверните узел таблицы .

Выберите таблицы Customers и Orders , а затем нажмите кнопку Готово.

Объект NorthwindDataSet добавляется в проект, и таблицы отображаются в окне Источники данных.

Задание создаваемых элементов управления

В этом пошаговом руководстве данные в Customers таблице находятся в макете сведений , где данные отображаются в отдельных элементах управления. Данные из Orders таблицы находятся в макете сетки , который отображается в DataGridView элементе управления.

Установка типа удаления для элементов в окне "Источники данных"

В окне Источники данных разверните узел Клиенты .

В узле Клиенты выберите сведения из списка управления, чтобы изменить элемент управления таблицы Customers на отдельные элементы управления. Дополнительные сведения см. в разделе Установка элемента управления, создаваемого при перетаскивании из окна Источники данных.

Создание формы с привязкой к данным

Вы можете создавать элементы управления с привязкой к данным с помощью перетаскивания элементов из окна Источники данных на форму.

Перетащите главный узел Customers из окна Источники данных на форму Form1.

Привязанные к данным элементы управления с метками описания отображаются на форме вместе с панелью инструментов (BindingNavigator) для перемещения по записям. CustomersTableAdapter BindingSource BindingNavigator В области компонентов появятся NorthwindDataSet,, и.

Перетащите связанный узел Заказы из окна Источники данных на Form1.

Связанный узел Заказы расположен под столбцом Факс и является дочерним для узла Клиенты.

На форме появляется элемент DataGridView и панель инструментов (BindingNavigator) для перемещения по записям. OrdersTableAdapter И BindingSource появятся в области компонентов.

Добавление кода для обновления базы данных

Вы можете обновить базу данных, вызвав методы Update адаптеров таблицы Клиенты и Заказы. По умолчанию обработчик событий для кнопки сохранить BindingNavigator добавляется в код формы для отправки обновлений в базу данных. Эта процедура изменяет код для отправки обновлений в правильном порядке. Это устраняет возможность возникновения ошибок ссылочной целостности. Этот код также реализует обработку ошибок, упаковывая вызов обновления в блок try-catch. Вы можете изменить этот код в соответствии с потребностями своего приложения.

Для ясности в этом пошаговом руководстве не используется транзакция. Однако при обновлении двух или более связанных таблиц включите всю логику обновления в рамках транзакции. Транзакция — это процесс, который гарантирует, что все связанные изменения базы данных будут успешными до фиксации каких-либо изменений. Дополнительные сведения см. в разделе Transactions and Concurrency.

Добавление логики обновления в приложение

Замените код в обработчике событий на вызов методов Update связанных адаптеров таблицы. Следующий код сначала создает три временные таблицы данных для хранения обновленной информации для каждого DataRowState (Deleted, Added и Modified). Обновления выполняются в правильном порядке. Код должен выглядеть следующим образом:

Тестирование приложения

Нажмите клавишу F5.

Внесите изменения в данные одной или нескольких записей в каждой таблице.

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

как сохранить таблицу в памяти в Oracle?

Я знаю, что Oracle автоматически сохраняет часто используемые данные в памяти. Мне любопытно, есть ли способ сохранить таблицу в памяти вручную для большей производительности?

2 ответа

Да, конечно, вы могли бы это сделать. Вам необходимо закрепить таблицу в кэше KEEP POOL в кеше БД.

Кстати, Oracle 11g и выше, вы можете посмотреть КЭШ РЕЗУЛЬТАТОВ . Это очень полезно.

Короткий ответ — нет, и вы не хотите.

Если вам нужен такой высокий уровень производительности поиска, подумайте об использовании БД в памяти, например Times 10.

Подумайте, что вы просите сделать БД. Вы просите БД выделить n количество кеш-памяти для одной таблицы и удерживать ее там неопределенное время. В загруженной БД это просто убьет производительность до такой степени, что БД станет бесполезной. Допустим, у вас есть БД с несколькими сотнями таблиц в ней, некоторые из них маленькие, некоторые большие и некоторые очень большие и добавляют несколько PK и индексов.

Приходит запрос, который запрашивает, скажем, 100 тыс. Строк данных по 1 Кбайт каждая, а индекс представляет собой строку длиной 100 байт. БД выделит достаточно памяти для загрузки индекса, а затем начнет захватывать 8К фрагментов данных с диска и помещать их в кеш.

Если вы попросите его постоянно хранить несколько гигабайт данных в оперативной памяти, у вас в большой спешке закончится память, если только у вас не будет ОЧЕНЬ дорогая машина с 512 ГБ оперативной памяти, и вы начнете загружать файл подкачки и что ж, в этот момент ваше выступление — тост.

Если у вас возникают проблемы с производительностью по запросам, запустите объяснение плана и узнайте, как его использовать для обнаружения узких мест. У меня есть 24-ядерная машина с 48 гигабайтами оперативной памяти, но у меня есть таблицы с миллиардами строк данных. Я внимательно слежу за попаданиями в кеш и планами выполнения.

Быстрое копирование таблиц большого размера и/или с большим числом строк, на примере регистра сведений (для MS SQL)

Было замечательное солнечное утро, регламентные работы по обновлению конфигурации прошли штатно, как тогда казалось. Спустя пол часа картина изменилась. Включилось старое фоновое задание, которое за один запуск затерло основной регистр сведений. Дело в том что, до определенного момента текущая база забирала данные этого регистра из другой, но в один прекрасный момент архитектура изменилась и мастер-базой регистр стала текущая.

Первое что нас спасло это бекап перед релизом. Всегда помним про бекап. Далее, Регистр большой и универсальными обработками загружать/выгружать пришлось бы до морковкиного заговенья, хотя сначала мы конечно предприняли подобные попытки))). Минуты шли напряжение росло и тогда было принято решение резать не дожидаясь перитонита!))) Мы открыли SQL Server Management Studio и проблема была решена в мгновение ока.

Быстрое восстановление затертого регистра сведений из бекапа по средствам SQL:

  1. Просим развернуть бекап созданный перед релизом.
  2. Открываем SQL Server Management Studio


Tasks ? Export Data или Tasks ? Import Data


Если Вы планируете загрузить таблицу в текущую БД тогда Tasks ? Import Data

Если Вы планируете скопировать из текущей БД таблицу тогда: Tasks ? Export

Количество столбцов в предложении INSERT должно совпадать с количеством столбцов в подзапросе.

Инструкцию INSERT можно применять для добавления строк в таблицу, причем значения извлекаются из существующих таблиц. Вместо предложения VALUES используется подзапрос.

INSERT INTO table [ column (, column) ] subquery;

table имя таблицы;

column имя столбца в таблице для заполнения значениями;

subquery подзапрос, возвращающий строки в таблицу.

Количество столбцов и их типы данных в списке столбцов предложения INSERT должны совпадать с количеством значений и их типами данных в подзапросе. Чтобы создать копию строк из другой таблицы, используйте в подзапросе SELECT * .

INSERT INTO EMPL3 <