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

Коллеги, возник такой вопрос.

Microsoft SQL Server 2016 (RTM-CU2) (KB3182270) - 13.0.2164.0 (X64) Sep 9 2016 20:13:26 Copyright (c) Microsoft Corporation Enterprise Edition:

Есть 2016 sql server, always on, работающий в асинхронном режиме.
Задача. Использовать бд реплики always on, для отчетной системы, в которой будет множество пользователей, но при этом к примари серверу у этих пользователей не должно быть доступа и создавать этих пользователей на примари не хотелось бы (несколько десятков, с десяток групп). Пользователи доменные. Доступ у этих пользователей будет (на сервере с репликой) к хранимым процедурам в другой бд (в одной хп используются несколько бд).

Как можно организовать доступ к бд реплики ?
Ответ: гость always on,

настройте подключение отчетов так , чтобы не было олицетворения пользователей. Тогда все запросы будут от имени учетной записи сервера отчетов.
Вопрос: Запросы тормазят реплику

уже поднемал тут этот вопрос. Но пока не разобрался!

Есть большая, постоянно пополняемая(ежеминутно) база. есть её реплика, с этой репликой работают(достают статистику)

и если запросы накладываются на обновление реплики то они её тормазят(блочат таблицу)!

Движок InnoDB почти везде!

Что с этим делать? Как избежать конфликтов
Ответ:
Зачем в RO-реплике InnoDB?
Вопрос: Мастер и реплика на одной машине

Могу ли я на одном компе поставить два MySQL сервера и наладить на одном из них мастера на другом реплику?
Ответ:
Цитата(Areostar @  2.3.2015,  11:23 )
С БД снимают реплику чтоб работать с ней - получать статистику

Это означает, что реплика используется только для чтения. Значит, изменяет данные только процесс репликации, и никаких конфликтов и проблем не будет. Единственная опасность - получение статистики по неизменённым данным, когда транзакция внесения изменений не завершилась. Но "запаздывание" в данном случае неизбежно.
Вопрос: Висит подключение к кубу из Excel к MSAS 2005

Доброго вечера всем!

С недавнего времени намертво зависает подключение к кубу на этапе выбора его в мастере источника данных в Excell. При этом если подключается пользователь с админскими првами на MSAS - подключение проходит моментально, а у пользователей из других секюрных ролей начинает жестко висеть. При чем если отвиснет, то дальше можно нормально работать до следующего подключения. Куб успешно работает уже около года, в последнее время в нем увеличилось количество пользователей в 2-3 раза и начались такие проблемы. При этом если подключать пользователей к каким-то другим, мелким кубам на том же сервере - подключение происходит быстро. В чём может быть проблема?
Спасибо.
Ответ: Может быть это как-то связано с тем что зависающие при подключении из Excel роли имеют динамические ограничения к данным куба, в то время как администратор в принципе не имеет никаких ограничений и подключение происходит моментально?
Профайлер в момент этого висящего подключения показывает блокировку на обращении к какой-то (сейчас уже не вспомню точно) "таблице схем". Как только блокировку попускает - происходит моментальное подключение и дальнейшая безпроблемная работа. Простите за мой "английский", но возможно это хоть как-то поможет локализовать проблемное место (((
Вопрос: Не освобождается память подключений к БД FB 3.0.0 - 3.0.1 х64 SS

Собственно говоря был использован оптимальный конфиг для FB 3.0. Количество пользователей порядка 80 днем, к ночи падает до единиц. TempCacheLimit = 364М (на сколько я понимаю это максимальное значение занимаемой ОЗУ для хранения данных запросов подключения). Собственно говоря исходя из названия при завершении подключения занимаемая им ОЗУ должна освобождаться. Но по факту имеем занятые почти 32 Гб памяти и днем и ночью. Специально вечером подключался к серверам с той же архитектурой FB в отсутствие подключений: было занято по 1 Гб памяти при том что работало только серверное приложение, которое держит Read Only транзакцию для отображения информации о подключениях.
Хотелось бы отметить, что на серверах с FB 3.0.Х x32 SS без подключенных пользователей процесс сервера занимал 70-110 Мб ОЗУ.
Что это может быть и как с этим бороться?
Ответ:
Симонов Денис
Freddie26,

таблица MON$MEMORY_USAGE может быть поможет выяснить что именно жрёт память вплоть до конкретного стейтмента


Интересно...

Рано я начал грешить на 3.0.1. Там похоже всё хорошо. Сервер 3.0.1 SS x64 на 40-50 пользователей с оптимальным конфигом по ссылке выше, процесс FB потребляет 3 Гб ОЗУ. По таблице MON$MEMORY_USAGE все подключения используют ~800 Мб.

Для сравнения взял второй сервер 3.0.0 SS x64, 100 подключений, так же оптимальный конфиг, использование памяти по таблице MON$MEMORY_USAGE 500 Мб. Процесс FB кушает 13 Гб ОЗУ.

Предполагаю проблема в утечке памяти которая была исправлена в 3.0.1 (что-то связанное c select'ами если не ошибаюсь).

Симонов Денис
нет. Либо по закрытию курсора, либо по завершению транзакции.


Я так понимаю Blob'ы входят в отображаемую память MON$MEMORY_USAGE и хранятся в оперативном доступе? Если так, то занятый объем не существенен.
Вопрос: Удаленное подключение к SQL Server

Всем доброго времени суток. Суть проблемы такова, на компьютере стоит SQL Server 2012 к которому необходимо подключиться удаленно. В настройках скулы "Разрешить удаленное подключение установлено" активировано. В Configuration Manager TCP/IP тоже работает, порты 1433. В брандмауэре тоже создал разрешение на 2 типа подключения TCP С портом 1433 и UDP с портом 1434. Server Browser так же работает. Если подключаться к серверу локально с IP 127.0.0.1, то подключается без проблем, а вот если заменить на IP моего компьютера в сети, который просмотрен с сайта, ничего не выходит. Поможете направить мысли в нужное русло? или хотя бы как проверить возможность подключения. С ноутбука на компьютер, где располагается сервер, коннект не удался.

К сообщению приложен файл. Размер - 136Kb
Ответ: Так, пробую описать ооочень подробно всю ситуацию. Дома стоит роутер, через него осуществляется подключение к интернету. На компьютере стоит SQL Server, вот его ipconfig:

Адаптер беспроводной локальной сети Беспроводная сеть:
IPv4-Адрес: 192.168.1.146
Маска подсети: 255.255.255.0
Основной шлюз: 192.168.1.1

Ethernet adapter Ethernet 2:
IPv4-адрес: 25.192.2.78
Маска подсети: 255.0.0.0

192.168.1.146 - это как раз адрес машины. Адрес 25.192.2.78 - это адрес USB адаптера.
Если мой ноутбук подключён к домашней сети, то я успешно подключаюсь к серверу на компьютере по адресу 192.168.1.146. Настройки TCP/IP на картинке. Если же я пробую подключиться к серверу с телефона, подключенного не к домашней сети, а к мобильному интернету, то приложение с базой отказывается коннектиться по тому же самому адресу 192.168.1.146. Я проверил, порт 1433 открыт, как и писал ранее, в брандмауэре создал исключения для портов 1433 и 1434.
На всякий случай, вот код подключения:

 private void inicialization() throws SQLException, ClassNotFoundException {
        declarar();
        ipaddress = "192.168.1.146";
        db = "SHopperGuide";
        username = "deadrayder";
        password = "12";
        connect = Conn(username,password,db,ipaddress);
    }

    @SuppressLint("NewApi")
    private Connection Conn(String p_user, String p_pass, String p_db, String p_server) throws ClassNotFoundException, SQLException {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        Connection conn = null;
        String ConnURL = null;
        try {
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
            ConnURL = "jdbc:jtds:sqlserver://" + p_server + ";" + "databaseName=" + p_db + ";user=" + p_user + ";password=" + p_pass + ";";
            conn = DriverManager.getConnection(ConnURL);

        }catch (android.database.SQLException se){
            Log.e("Error", se.getMessage());
        }catch (ClassNotFoundException e){
            Log.e("Error", e.getMessage());
        }catch (Exception e){
            Log.e("Error", e.getMessage());
        }

        return conn;
    }


В итоге, на эмуляторе получаю рабочее приложение, а на деле ничего не работает. И кстати, опять же, если телефон подключен по Wi-Fi к домашнему интернету, приложение тоже разрешает доступ к базе. Пытался делать пробросы портов для своего роутера, безрезультатно. Хотя бы потому, что запутался совсем и уже не особо понимаю какие порты нужно использовать, хотя как мне кажется стандартные 1433 и 1434...

К сообщению приложен файл. Размер - 29Kb
Вопрос: запрос подключения пользователя и количество подключений к серверу

Delphi (ADO) и mssql 2005
Задача :
Контроль количества подключенных пользователей к серверу (ограничение по количеству подключений).
Блокировка второго подключения с тем же логином.
Как сделать?
Ответ: aqula, смысл в том, что вы создаете собственную сущность "сессия", которая будет иметь смысл только для вашего приложения, и никоим образом не привязываться к сессиям SQL Server'а.
Такая архитектура нужна, если вы в приложении создаете и уничтожаете подключения к базе, если используете разные подключения в разных потоках и т.д.
Если ваше приложение просто создает один коннект к базе при запуске, работает с ним и закрывает его при закрытии приложения - можете воспользоваться вышеприведенными рекомендациями - триггер на логон, хранение spid'ов (это то, что в sp_who2 выводится) и т.п.
Вопрос: Запрос об удачных и неудачных попытках подключения к базе данных

Помогите написать запрос.

В таблицу записана информация, об удачных и
неудачных попытках подключения к базе данных (Пользователь,
Время, Удачно\Неудачно). Требуется получить список
пользователей, которые совершили подряд три неудачные
попытки подключения наряду с зафиксированным временем
третьей неудачной попытки. После трех подряд неудачных
попыток отсчет попыток начинается сначала.

Например, для таблицы:

Пользователь Время Статус
A 20.11.11 17:58:00 Неудачно
B 20.11.11 18:00:05 Удачно
C 20.11.11 18:10:03 Неудачно
A 20.11.11 18:12:20 Неудачно
B 20.11.11 18:18:00 Неудачно
B 20.11.11 18:20:01 Удачно
C 20.11.11 18:25:42 Неудачно
A 20.11.11 18:30:12 Неудачно
A 20.11.11 18:32:24 Неудачно
A 20.11.11 18:35:00 Удачно
B 20.11.11 18:41:30 Удачно
C 20.11.11 18:42:08 Неудачно
C 20.11.11 18:48:00 Удачно
A 20.11.11 18:52:00 Неудачно
A 20.11.11 18:53:13 Неудачно
B 20.11.11 18:54:30 Неудачно
A 20.11.11 18:55:19 Неудачно
A 20.11.11 18:55:58 Удачно

Результат должен быть такой:

Пользователь Время
A 20.11.11 18:30:12
C 20.11.11 18:42:08
A 20.11.11 18:55:19
Ответ: Сперва создаем таблицу.
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE TABLE test AS 
SELECT * FROM (
  SELECT 'A' username, to_date('20.11.11 17:58:00', 'dd.mm.yy HH24:mi:ss') date_add, 'Неудачно' STATUS FROM dual UNION ALL
  SELECT 'B', to_date('20.11.11 18:00:05', 'dd.mm.yy HH24:mi:ss'), 'Удачно'   FROM dual UNION ALL
  SELECT 'C', to_date('20.11.11 18:10:03', 'dd.mm.yy HH24:mi:ss'), 'Неудачно' FROM dual UNION ALL
  SELECT 'A', to_date('20.11.11 18:12:20', 'dd.mm.yy HH24:mi:ss'), 'Неудачно' FROM dual UNION ALL
  SELECT 'B', to_date('20.11.11 18:18:00', 'dd.mm.yy HH24:mi:ss'), 'Неудачно' FROM dual UNION ALL
  SELECT 'B', to_date('20.11.11 18:20:01', 'dd.mm.yy HH24:mi:ss'), 'Удачно'   FROM dual UNION ALL
  SELECT 'C', to_date('20.11.11 18:25:42', 'dd.mm.yy HH24:mi:ss'), 'Неудачно' FROM dual UNION ALL
  SELECT 'A', to_date('20.11.11 18:30:12', 'dd.mm.yy HH24:mi:ss'), 'Неудачно' FROM dual UNION ALL
  SELECT 'A', to_date('20.11.11 18:32:24', 'dd.mm.yy HH24:mi:ss'), 'Неудачно' FROM dual UNION ALL
  SELECT 'A', to_date('20.11.11 18:35:00', 'dd.mm.yy HH24:mi:ss'), 'Удачно'   FROM dual UNION ALL
  SELECT 'B', to_date('20.11.11 18:41:30', 'dd.mm.yy HH24:mi:ss'), 'Удачно'   FROM dual UNION ALL
  SELECT 'C', to_date('20.11.11 18:42:08', 'dd.mm.yy HH24:mi:ss'), 'Неудачно' FROM dual UNION ALL
  SELECT 'C', to_date('20.11.11 18:48:00', 'dd.mm.yy HH24:mi:ss'), 'Удачно'   FROM dual UNION ALL
  SELECT 'A', to_date('20.11.11 18:52:00', 'dd.mm.yy HH24:mi:ss'), 'Неудачно' FROM dual UNION ALL
  SELECT 'A', to_date('20.11.11 18:53:13', 'dd.mm.yy HH24:mi:ss'), 'Неудачно' FROM dual UNION ALL
  SELECT 'B', to_date('20.11.11 18:54:30', 'dd.mm.yy HH24:mi:ss'), 'Неудачно' FROM dual UNION ALL
  SELECT 'A', to_date('20.11.11 18:55:19', 'dd.mm.yy HH24:mi:ss'), 'Неудачно' FROM dual UNION ALL
  SELECT 'A', to_date('20.11.11 18:55:58', 'dd.mm.yy HH24:mi:ss'), 'Удачно'   FROM dual
);
Если очень хочется, можно создать таблицу первым запросом из UNION ALL и сделать 17 INSERT INTO test остальными запросами.
Потом берем запрос KuKu, поскольку я считаю, что он более удачный. Я его только чуть-чуть адаптирую к моим именам полей, поскольку их использовал в CREATE TABLE.

SQL
1
2
3
4
5
6
7
8
9
10
SELECT username, date_add, STATUS FROM ( 
SELECT username, date_add, STATUS, grp,
         ROW_NUMBER() OVER(partition BY username, grp ORDER BY date_add) rn 
FROM (
SELECT username, date_add, STATUS, 
         SUM(CASE STATUS WHEN 'Неудачно' THEN 0 ELSE 1 END) OVER(partition BY username  ORDER BY date_add) grp 
FROM test 
) WHERE STATUS = 'Неудачно' 
) WHERE MOD(rn, 3) = 0 
ORDER BY date_add
Идея запроса в том, что записи для каждого пользователя разбиваются на группы удачными попытками подключения. Соответственно, в каждой группе подряд идут неудачные попытки (если они есть). В запросе выводится каждая третья неудачная попытка подключения. Основным плюсом данного запроса является то, что его можно переделать, например, на четыре неудачных подключения подряд легким движением руки (3 заменяем на 4). С моим запросом такой номер не пройдет, его надо переписывать целиком.

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

Добавлено через 17 часов 46 минут
Все-таки написал селект, который не использует аналитические функции. Зато происходит пять сканирований таблицы test. Идея та же. Сперва делим на группы удачными попытками, потом в каждой группе иммитируем порядковый номер. Выбираем каждый третий номер из группы, если он есть
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
SELECT username, date_add 
FROM (
SELECT aa.username, bb.date_add, aa.grp,
       COUNT(*) nn
FROM (  SELECT username, grp, MIN(date_add) date_min, MAX(date_add) date_max
        FROM (
        SELECT a.username, MAX(a.date_add) date_add, 
               COUNT(CASE WHEN a.STATUS ='Неудачно' THEN NULL ELSE a.STATUS END ) grp
        FROM test a,
             test b
        WHERE a.date_add <= b.date_add
          AND a.username=b.username 
        GROUP BY a.username, b.date_add
        ) GROUP BY username, grp
     ) aa,
     test bb,
     test cc
WHERE aa.username = bb.username
  AND bb.date_add BETWEEN  aa.date_min AND aa.date_max
  AND bb.STATUS='Неудачно'
  AND cc.STATUS='Неудачно'
  AND cc.username = bb.username
  AND cc.date_add BETWEEN aa.date_min AND bb.date_add
GROUP BY aa.username, bb.date_add, aa.grp
) WHERE MOD(nn,3)=0
ORDER BY 2,1;
Добавлено через 2 минуты
Чуть-чуть подкорректировал селект в сторону упрощения, вроде и так работает, только теперь осталось четыре сканирования таблицы test
Добавлено через 11 минут
Честно говоря, написать селекты с аналитическими функциями было гораздо легче. Ваш препод, скорее всего, спокойно бы отнесся к исходному селекту, а вот последний вызовет у него подозрения, поскольку так никто не делает. Надо иметь некоторый опыт, чтобы это придумать, и надо иметь в голове план, который почти невозможно построить на первых этапах обучения
Добавлено через 1 час 32 минуты
Подправил мелкие ошибки
Добавлено через 11 минут
Вопрос: Access и PostgreSQL: подключение к БД, работа с таблицами

Доброго времени суток!

Возникла необходимость научиться работать через элементы управления, созданные в Access 2013 с PostgreSQL.

Для начала решил подключиться к БД и присоединить из нее тестовую пустую таблицу.

Что сделано:
  • Сервер PostgreSQL работает (на удаленном компе).
  • ODBC-драйвер на моем компе установлен.
  • PGAdmin с моего компа и сервер и базу и таблицу в ней видит.
  • Тест соединения из "Администратора источника данных ODBC" выдает положительный ответ.

Что не так:
При попытке подключиться (действие повешено на одну из кнопок) выдает ошибку 3151 "ODBC - ошибка подключения к PostgreSQL35W"

Код, который затыкается на последней строке (хотя дело явно не в ней):
Visual Basic
1
2
3
4
    Set NewTableDef = CurrentDb.CreateTableDef("From_PGSQL")
    NewTableDef.Connect = "ODBC;DSN=PostgreSQL35W;DATABASE=pgtest;SERVER=!!!ИМЯСЕРВЕРА!!!;UID=pgtest;PWD=пароль;"
    NewTableDef.SourceTableName = "tt01"
    CurrentDb.TableDefs.Append NewTableDef
PostgreSQL35W - название DSN в настройках источников данных ODBC
!!!ИМЯСЕРВЕРА!!! - на самом деле на это место ставилось имя сервера из PGAdmin'a или имя компьютера, на котором запущен PostgreSQL, что на результате не сказалось.
tt01 - таблица в базе данных pgtest.
From_PGSQL - наименование будущей подсоединенной таблицы в Access (если я все верно понял - оно может быть произвольным, в разумных пределах, пробовал дать имя соответствующее имени в PostgreSQL - tt01 - те же грабли).

Что я делаю не так?
Ответ: Уважаемый alvk!
Цитирую продолжение своего предыдущего сообщения: "После установки дополнительно 32-битной версии ручное подключение к БД и ее подключение в Excel заработало."
А вот проблема программного подключения посредством VBA никуда не делась.
Вручную таблица линкуется, после того, как приликнованную таблицу вручную же удалишь (так быстрее) - начинает работать и программная линковка.
Если прилинкованную таблицу удалить и перезапустить Access - снова не линкуется.
Если прилинкованную таблицу не удалять, перезапустить Access, удалить прилинкованную таблицу - снова не линкуется.
Если прилинкованную таблицу не удалять, перезапустить Access, открыть и закрыть прилинкованную таблицу, затем удалить прилинкованную таблицу - программный линк работает.

Понять что ручная линковка делает такого, что не получается сделать программно не получается.

Добавлено через 13 минут
Уважаемые коллеги, всем спасибо за помощь!

Оказалось проблема в двух моментах:
1) Версия ODBC драйвера - должна соответствовать битности Access (из-за этого была масса глюков)
2) Совершенно дурацкая ошибка с моей стороны - не учел регистр при наборе пароля После ручного подключения, видимо, где-то сохранялась информация о том, что правильный пароль был введен.

Проблема решена, тему можно закрывать.

Добавлено через 6 минут
Кому интересно - код:
Visual Basic
1
2
3
4
    Set NewTableDef = CurrentDb.CreateTableDef("tt01")
    NewTableDef.Connect = "ODBC; DSN=PostgreSQL; SERVER=ИмяСервера; DATABASE=pgtest; UID=pgtest; PWD=Пароль;"
    NewTableDef.SourceTableName = "tt01"
    db.TableDefs.Append NewTableDef
DSN отличается от предыдущего, т.к. создан новый.
Пароль теперь с большой буквы.
Все. Всем спасибо!
Вопрос: Подключение к серверу с Windows 7 64-bit

Имеется проблемы подключения к серверу informix 7.3 с клиента на windows 7 64-бита. Ставили разные клиенты до версии 4.1. Зависает при попытки подключения и выдает ошибку 08004.
Что делать?как быть?помогите пожалуйста)
Ответ:
eugene287
Зависает при попытки подключения и выдает ошибку 08004

Проблемы с подключением по сети. Может быть все что угодно, начиная с битых проводов и кончая неправильной комбинацией логин/пароль.
Сервер на какой машине находится? Локальной или удаленной?
Если на удаленной, то локально на сервер удается соединиться (например через dbaccess) ?
Пинг на сервер идет? Если пинг идет, попробуйте выполнить команду telnet <host> <сервис информикса>