Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: XML в таблицу базы

Подскажите пожалуйста, как решить задачу загрузки файла XML в таблицу базы?
Ответ:
vladka63
Есть выгрузка из таблицы базы в XML
После корректировки данных (информации, которая хранилась в таблице) XML файла его нужно загрузить обратно в таблицу.

Это вы так продолжате "править значеняи в большой таблице" ?
Вопрос: Поисковик по всем полям таблиц базы данных Oracle

Допустим, имеется база данных Oracle размером 1 Тб с различными полями разных типов данных.
Хочется поискать какое-то текстовое значение по всем полям всех таблиц базы данных.
Например, узнать все места, где хранится слово "9161234567" или "40817810001234567890" или "Иванов Иван Иванович" или "арест".
Желателен поиск по like.
Не обязательно искать по свежим данным, достаточно хотя бы один раз медленным процессом всё сгрузить в какую-то индексированную структуру и по ней уже вести поиск.
Понятно, что даже скан одной большой таблицы по одному полю в поисках нужной строки займёт много времени, а поиск по всей базе тем более.
Однако, интернет-поисковики с подобной задачей справляются.
Есть ли какие-то готовые реализации такого поиска на Oracle?
Например, загрузить некий набор таблиц - список всех слов, список всех мест, где то или иное слово встречается и т.п.
А потом уже по этому индексированному набору таблиц вести быстрый поиск.
Ответ: Есть отдельный продукт. Oracle Secure Enterprise Search
Вопрос: Помогите дописать процедуру - Количество строк во всех таблицах базы данных

Помогите написать процедуру - Количество строк во всех таблицах базы данных.

Результат пишу в таблицу AAA, ибо не знаю как сразу вернуть набор строк из процедуры - в принципе и так сойдёт, если бы работало.

Написал вот такую процедуру - Она при вызове выдаёт ошибку: "Lookup Error - MySQL Database Error: Unknown column 'aaa' in 'field list'"

DELIMITER $$
DROP PROCEDURE IF EXISTS `select_counts`$$
CREATE PROCEDURE `select_counts`()
BEGIN
  DECLARE done INT DEFAULT FALSE;
  DECLARE tn VARCHAR(1000);
  DECLARE cur1 CURSOR FOR select table_name from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='superudc_baza' order by table_name;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

DROP TABLE IF EXISTS `aaa`;

CREATE TABLE `aaa` (
  `tab_name` varchar(1000),
  `count1` varchar(1000)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

  OPEN cur1;

  read_loop: LOOP
    FETCH cur1 INTO tn;
    IF done THEN
      LEAVE read_loop;
    END IF;
SET @sql_query:=CONCAT("insert into aaa (tab_name,count1) select ",tn,",count(1) from ",tn);

PREPARE sql_query FROM @sql_query;
EXECUTE sql_query;
DEALLOCATE PREPARE sql_query;	

  END LOOP;

  CLOSE cur1;

END$$
DELIMITER ;
Ответ: Akina, огромное спасибо - так работает.
Вопрос: Можно ли делать представление из таблицы базы другого сервера

Можно ли делать представление из таблицы базы другого сервера?
Ответ: P.S. Подразумевается, что другой сервер тоже MySQL. Иначе даже подключиться нельзя.
Вопрос: Создание новой таблицы базы на основе периодического выбора из таблицы другой базы.

Добрый день прошу ткунть носом помочь в решении задачи. Суть такова: постоянно работающий процесс периодически скидывает в папку БД (sqlite) на некоторое время. Требуется выбрать новые данные из этой базы и перенести в БД - накопитель, с учетом проверки наличия записей в этой БД.
То есть, например, файл temp.db с таблицей numbers
CREATE TABLE numbers (id INTEGER PRIMARY KEY AUTOINCREMENT, number TEXT);
INSERT INTO numbers(number) VALUES('89001001010');
INSERT INTO numbers(number) VALUES('89002002020');
INSERT INTO numbers(number) VALUES('89003003030');

Получаем такое:
id | number
1 89001001010
2 89002002020
3 89003003030
Также у нас есть база-накопитель full.db c одной таблицей numbersn (в которой, например, есть одна строка с таким же значением как и во временной базе, а также другие отличные строки)
CREATE TABLE numbersn (id INTEGER PRIMARY KEY AUTOINCREMENT, number TEXT);
INSERT INTO numbersn(number) VALUES('89001001010');
INSERT INTO numbersn(number) VALUES('89004004040');

id | number
1 89001001010
2 89004004040
Это очень приблизительно, потому как в оригинале около номеров еще будут вторичные параметры, по которым тоже нужно будет искать и добавлять но уже к существующему номеру новые данные. Поэтому хочется разобраться хотябы на этой, казалось бы простой задаче.
В качестве решения, которое мне пришло на ум предлагается вначале подключить две базы данных (накопительную вторичной, а временную основной ), а затем провести сравнение и вставку. Но у меня не хватает ума теоретических знаний.... Если б это был С# с текстовым файлом со строками я бы сделал за 5 минут. А тут - не могу (ни найти ни придумать как). Набросок примерного решения
ATTACH DATABASE 'temp.db' AS tempdb;
ATTACH DATABASE 'full.db' AS fulldb;
INSERT INTO numbersn(number) 
SELECT 'сюда как-то нужно добавить каждый по очереди' new
WHERE NOT EXISTS (SELECT 1 FROM numbers WHERE number = new);

Если это прописные истины - прошу не смеяться, а помочь в решении. Заранее спасибо. Учится никогда не поздно :)
Ответ: спасибо огромное уважаемый! Все работает! А можно ли набраться наглости и попросить вас подумать над решением усложненного вида этой задачи: в исходной базе исходная таблица имеет столбцы номер и реквизиты номера (например имя). Решением будет после нескольких обработок получить две таблицы: в первой будут номера, и их уникальный номер (индекс), а во втором столбце будут реквизиты и рядом столбец с привязкой к уникальному номеру из первой (полученной) таблицы:
Исходник tempdb (source_table)
id | number | name
1 | 89001001010 | Вася
2 |89002002020 | Петя
3 | 89003003030 | Маша
Исходник через некоторое время tempdb (source_table)
id | number | name
1 | 89001001010 | Вася
2 | 89002002020 | Иванов
3 | 89004004040 | Вика
Хотелось бы получить две таблицы в fulldb после двух обработок tempdb (source_table) (спустя некоторое время)
target_table1
id | number | index
1 | 89001001010 | 1
2 |89002002020 | 2
3 | 89003003030 | 3
4 | 89004004040 | 4

target_table2
id | name | index
1 | Вася | 1
2 | Петя | 2
3 | Иванов | 2
4 | Маша | 3
5 | Вика | 4
Чтобы в итоге после запроса получить результат по поиску 89002002020 - Петя, Иванов
Вопрос заключается в том, что как сделать привязку (index) "один-ко-многим" я знаю. Но не понимаю как сделать разграничение поиска и вставки по нескольким параметрам с сравнениями. Если что не так сказал, не обессудьте. "Я не волшебник, я только учусь...."
Вопрос: Дефрагментация таблиц базы побыстрому bcp ? export import

Готовил новую базу из рабочей путем очистки данных. SQL Server 2008 Естественно появилось куча фрагментированных таблиц (с индексами мне все понятно)(база 1С)
Сначала попытался сделать shrinkdatabase с опцией перемещения данных в новый файл данных , но она не смогла перенести какие то блоки "Cannot move all contents of file ххххх to other places to complete the emptyfile operation" Как понял это нормально This is because the primary file has contain the metadata and can not be moved but the file other data has been move to the new files.
И эти блоки как раз около high watermark.
В итоге понял что нужно какое то средство экспорта импорта базы аналогичное как в Oracle , которое восстанавливает данные таблиц и ребилдит индексы.
Есть конечно конфигуратор 1С с экспортом импортом , но экспорт импорт 1С хорош для небольших объемов баз и для начального развертывания.
Посмотрел bcp и export import wizard , вроде бы они могут это сделать. Но операция восстановления должна делать trancate, потом заполнение данными таблиц, а дальше rebuid индексов а я чтото этих операций в параметрах не увидел. Написание большого скрипта не вдохновляет
Вопрос - если ть ли какое то простое универсальное средство или готовый скрипт, которое может сделать операцию экспорта импорта с эффектом дефрагментации таблиц?
Ответ:
selis76
А Rebuild индексов можно делать с использованием tempdb, как понимаю это спасает от таких проблем.

нет.
что сортировать будет/не будет в темпдб, это именно сортировка.
а новый индекс он строит в той же базе, в ее файле данных.
так что это выделение нового места в только что ужатом файле.

selis76
Но в любом случае какой тогда порядок грамотного освобождения свободного пространства в моем случае (допустим все таблицы имеют кластерный индекс)?

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

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

а пустое место, если база не будет read only, займут вновь прибывшие данные,
т.е. нет смысла шринковать, если только не собираетесь больше данные менять/загружать
Вопрос: Связать с некоторой таблицой базы аксес только для чтения

База отдельно, приложение отдельно. Через приложение надо чтобы на некоторые таблицы можно было редактировать, на некоторые таблицы только для чтения. Возможно ли это?
Ответ:
Анатолий ( Киев )
Также таблицу "только для чтения" можно не линковать, а создать на ней запрос вида:
SELECT DISTINCT * FROM TableName IN 'Путь к БД'

Для форм / отчетов / других запросов неважно, что является источником - таблица или запрос.

Красссавчик. То что мне надо. Спасибо большое.
Вопрос: MSSQL2005: Как селектом получить список таблиц базы?

Какие таблицы хранят эти данные? И хранят ли вообще? Спасибо.
Ответ: коллэйшен базы регистрозависимый (CS)?
нафиг писать заглавные там, где их нет
sp_spaceused
Вопрос: Обновление локальной базы

Имеется база на MS SQL 2008 R2 с большой кучей таблиц. Мне из этой базы нужны лишь 5 таблиц. Вначале я их подключал в Access 2010 через ODBC, но админ настоятельно рекомендовал мне сделать локальную копию таблиц, обновлять их и уже запросы все отсылать на эти копии а не дергать сервер. Импортировать из внешних данных таблицы в Аccess 2010 получается, но не могу сообразить как сделать так, чтобы по нажатию кнопки на форме в Accesse можно было бы 5 таблиц в Accesse 2010 обновлять (пополнять) данными из аналогичных таблиц базы на MS SQL 2008 R2 вместо импорта. Т.е. происходит сравнение и если на сервере в нужные 5 таблиц добавлены новые записи, то только их импортировать в аналогичные таблицы в Accesse. Записи которые были удалены из базы на сервере не нужно удалять из копий таблиц в Accesse.

Помогите пожалуйста...
Ответ:
Rupok
Кэш-коды генерируются оборудованием

Если они уникальны в каждой таблице, то вот и замена
vmag
есть ли в этих пяти таблицах ключи-счетчики или просто авто счетчики
Вопрос: Связь базы на sql server с access

Добрый день. Возможно ли сделать такое:
Воспользовавшись универсальными средствами доступа к базе данных – драйверами ODBC и источниками данных, установите связь созданной базы с клиентским приложением (базой данных Microsoft Access). Создайте формы, обеспечивающие доступ к таблицам базы данных.

Как я понимаю это. Нужно создать базу на sql server, создать таблицы, связи и т.д.
Далее через ODBC связать базу с Access. Потом в Access создать формы для работы с этой базы.
Технически такое возможно или это невыполнимое задание?
Ответ:
Сообщение от dima-dima
Потом в Access создать формы для работы с этой базы.
Технически такое возможно
Запросто. В Access есть панель инструментов "внешние данные", с ее помощью присоедините таблицы в базе и будете работать практически как с родными.