Urt
Дата: 09.03.2005 16:27:00
Мне дали задание, но я не могу задавать по нему вопросы, поэтому я обращаюсь
к вам как к спецам.(т.к. не совсем ясно, что от меня требуется)
Вот оно:
1) Нужно установить соединение с сервером.
2) Вывести все базы данных (схемы в случае Oracle), доступные пользователю.
3) Найти все таблицы в базе данных (схеме в случае Oracle), кроме системных.
Ну и далее, приложение должно уметь (со стороны клиента) создавать/удалять таблицу, редактировать её и т.п.
Мои вопросы:
1)Что значить "установить соединение с сервером" - может быть, имеется в виду, что должен быть Web service, который будет предоставлять требуемые
услуги? Или что-то другое?
2) Как найти все базы данных на сервере, доступные пользователю?
И все таблицы, в них содержащиеся?
tru55
Дата: 09.03.2005 16:55:50
Конкретно по Oracle
1. "Установить соединение с сервером" - значит подключиться к нему. К Web-сервису, в общем случае, не имеет никакого отношения. Конкретная реализация зависит от используемого клиентского средства
2.
SELECT * FROM user_tables -- все таблицы текущего пользователя
... all_tables -- все таблицы, доступные пользователю
... dba_tables -- все таблицы (естественно, д.б. админ. привилегии)
|
Urt
Дата: 09.03.2005 17:11:02
1) Дело в том, что нужно найти все доступные БД, не только Oracle.
2)user_tables, all_tables, dba_tables - это что, стандартно для Oracle, и что такое вообще схемы Oracle?
tru55
Дата: 09.03.2005 17:25:10
Urt |
1) Дело в том, что нужно найти все доступные БД, не только Oracle. 2)user_tables, all_tables, dba_tables - это что, стандартно для Oracle, и что такое вообще схемы Oracle? |
1. Не знаю, как для MS SQL, но, в общем случае, задача не тривиальная (конкретно, по Oracle когда-то обсуждали в форуме, но нормального решения, в общем случае так и не нашли - как мне помнится).
Хотя, смотря что понимать под базой данных, судя по фразе
Вывести все базы данных (схемы в случае Oracle).
Например, в dBase под базой данных понимался, насколько помню, один dbf-файл
2. Да, стандартно. Схема - это набор объектов (таблицы, индексы, представления и др.), принадлежащие конкретному пользователю (имена пользователя и схемы совпадают)
Urt
Дата: 09.03.2005 17:30:59
Так что, единственное решение - создать на сервере БД (любую), в которой будет храниться список всего, что мы имеем - для Oracle, MS SQL и т.д.,
для каждого генерировать свой код - OleDbConnection.ConnectionString и
иже с ним? Это же сдохнуть можно! Нет ли более универсальнлй возможности?
Alexey Kudinov
Дата: 09.03.2005 17:43:31
Urt - вы абсолютно уверены, что правильно поняли задание ?
Потому что на одном _сервере_ баз данных может существовать _несколько_ баз данных.
Очень похоже, что вам нужно подключиться к серверу Oracle и опубликовать список баз, доступных пользователю.
tru55
Дата: 09.03.2005 17:48:44
Опять же по Oracle, т.к. в MS SQL не силен.
Если я сажусь за незнакомую машину, которая имеет доступ к Oracle, я ищу директорий ORACLE_HOME\network\admin. Там д.б. файл sqlnet.ora, в котором задается метод доступа к Oracle (т.к. они могут быть различны). Самый распространенный - c пом. файла tnsnames.ora, который находится там же (однако есть и другие методы - с пом. файла hosts и с пом. LDAP-directory). В этом файле прописаны пути к базам. Но это не абсолют - я могу прописать доступ к базе, которая в настоящий момент не используется. Проверить, возможен ли доступ к прописанной базе можно с пом. команды tnsping <alias>. Если я нахожусь непосредственно на сервере, то там вместо tnsnames.ora можно смотреть файл listener.ora и т.д..... Т.е. я себе не представляю, как можно решить задачу в общем виде да еще программным путем
Urt
Дата: 09.03.2005 17:50:42
Alexey Kudinov |
Очень похоже, что вам нужно подключиться к серверу Oracle и опубликовать список баз, доступных пользователю. |
Не совсем то - сначала указывается сервер - в диалоговом окне(это может быть Oracle, MS SQL или что-то другое), а я должен выдать пользователю все доступные ему БД, предоставить возможность их менять(если у него есть права) и т.п.
tru55
Дата: 09.03.2005 17:54:26
Очень похоже, что вам нужно подключиться к серверу Oracle и опубликовать список баз, доступных пользователю
Не совсем так. Базой данных управляет экземпляр (instance), которых действительно может быть несколько на одной машине (еще несколько экземпляров могут работать с одной базой, но сейчас об этом говорить не будем). Причем в конктретный момент времени часть экземпляров м.б. запущена, а часть нет. Узнать в общем случае, сколько экземпляров живут в настоящий момент, нельзя иначе, кроме как попробовать законнектиться к каждому из них.
tru55
Дата: 09.03.2005 17:58:51
Urt |
Alexey Kudinov | Очень похоже, что вам нужно подключиться к серверу Oracle и опубликовать список баз, доступных пользователю. |
Не совсем то - сначала указывается сервер - в диалоговом окне(это может быть Oracle, MS SQL или что-то другое), а я должен выдать пользователю все доступные ему БД, предоставить возможность их менять(если у него есть права) и т.п. |
Не совсем удачный способ, т.к. в зависимости от сервера м.б. разные возможности работы с ними (вплоть до отличий в SQL). Впрочем, не хочу затевать дискуссию на эту тему, т.к. это неоднократно обсуждалось в "Сравнение СУБД", "Проектировании СУБД", "Delphi" (это где я видел)