Ошибка создания таблицы сообщение от движка базы данных файл бд не открыта

I come to you after a lot of hours googling and reading other discussions about SQLite on StackOverflow, but I definitely can’t find any explanation to my problem, so here it is :

  • The context :
    I’m developping an application for iPad wich has to deal with some «large» amounts of data, in several occasions. In one of them, I must import points coordinates from a .kml file (Google’s xml for geographical data) into my database, in order to reuse them later with a MKMapView and load them faster than by parsing xml when it needs to show a specific layer.

  • The details :
    The import thing is quite easy : when dealing with those files, I’m only concerned with 2 tables :

    • One containing zones definitions and details : for the moment, an integer as an id, and a text for naming.
    • One containing two real for coordinate storage and an integer referencing the first table for knowing which zone point is part of.
      So as long as reading my file, I first create an entry for the new zone, and then I insert points into the second table, with ID of the last zone created in the first table…nothing complicated!

    But…

  • The problem :
    After running fine a while, I get an exception from SQLite with the famous message «Unable to open the database file», and then it comes I can’t do anything more with the database. This exception can randomly occur in the zone creation or the points insertion methods.

  • My reflexions :
    Considering the numerous points in those files, I suspected memory or disk saturation but other parts of my app discarded those points (to my mind).
    First, memory : it comes that when the exception occurs, the app is using about 10 or 12 MB of RAM. It can seems quite huge, but it’s due to the ~10MB .kml file loaded in memory, so it’s explainable. And above it all, the MKMapView thing of my app deals with tons of high-res tiles layers above map, and so leads to memory peaks which can afford 20 or even 25MB without making the iPad to crash.
    Second, disk : when reseting my database and filling only the 2 tables described above, the db file size when the exception occurs is always about 2.2 or 2.5MB, but when I fill other tables (the other parts of my apps works well!) the db file is about 6 or 7MB, and the device doesn’t complain at all.

  • So what?!
    CPU-angryness and panic? I don’t think so because some of the other tables of my database are filled at the same rythm without problem… and running my app in simulator crashes too, with a core i7 just laughing at the job.
    SQLite bad use? There we go! To my mind, it’s the only solution left! But I really can’t understand what’s going on here because I process my requests the same way I do in other app’s parts which — repeating myself — work like a charm!

  • SQLite details :
    I have a DB class which is a singleton I use to avoid creating/releasing an SqliteConnection object each request I do, and all my methods dealing with database are contained in this class to be sure I don’t play with the connection anywhere else without knowing it. Here are concerned methods of this class :

    public void     saveZone(ObjZone zone)  { //at this point, just creates an entry with a name and let sqlite give it a new id
        lock (connection) { //SqliteConnection object
            try {
                openConnection();
                SqliteCommand cmd = connection.CreateCommand();
                cmd.CommandText = zone.id == 0 ?
                    "insert into ZONES (Z_NAME) values (" + format(zone.name) + ") ;" :
                    "update ZONES set Z_NAME = " + format(zone.name) + " where Z_ID = " + format(zone.id) + " ;";
                cmd.ExecuteNonQuery();
                if (zone.id == 0) {
                    cmd.CommandText = "select Z_ID from ZONES where ROWID = last_insert_rowid() ;";
                    zone.id = uint.Parse(cmd.ExecuteScalar().ToString());
                }
                cmd.Dispose();
            }
            catch (Exception e) {
                Log.failure("DB.saveZone(" + zone.ToString() + ") : [" + e.GetType().ToString() + "] - " +
                    e.Message + "n" + e.StackTrace); //custom Console.WriteLine() method with some formating
                throw e;
            }
            finally {
                connection.Close();
            }
        }
    }
    
    public void     setPointsForZone(List<CLLocationCoordinate2D> points, uint zone_id) { //registers points for a given zone
        lock (connection) {
            try {
                openConnection();
                SqliteCommand cmd = connection.CreateCommand();
                cmd.CommandText = "delete from ZONESPOINTS where Z_ID = " + format(zone_id);
                cmd.ExecuteNonQuery();
                foreach(CLLocationCoordinate2D point in points) {
                    cmd.CommandText = "insert into ZONESPOINTS values " +
                        "(" + format(zi_id) + ", " + format(point.Latitude.ToString().Replace(",", ".")) + ", "
                        + format(point.Longitude.ToString().Replace(",", ".")) + ");";
                    cmd.ExecuteNonQuery();
                    cmd.Dispose();
                }
            }
            catch (Exception e) {
                Log.failure("DB.setPointsForZone(" + zone_id + ") : [" + e.GetType().ToString() + "] - " + e.Message);  
                throw e;
            }
            finally {
                connection.Close();
            }
        }
    }
    

    And to be as clear as I can, here are some of the methods referenced in the two above (I use this custom openConnection() method because I use foreign keys constraints in most of my tables and cascading behaviours are not enabled by default, but I need them.) :

    void openConnection() {
        try {
            connection.Open();
            SqliteCommand cmd = connection.CreateCommand();
            cmd.CommandText = "PRAGMA foreign_keys = ON";
            cmd.ExecuteNonQuery();
            cmd.Dispose();
        }
        catch (Exception e) {
            Log.failure("DB.openConnection() : [" + e.GetType().ToString() + "] - " + e.Message);
            throw e;
        }
    }
    
    public static string format(object o) {
        return "'" + o.ToString().Replace("'", "''") + "'";
    }
    

Well, sorry for the novel, I may already thank you for reading all that stuff, no?! Anyway, if I missed something that could be useful, let me know and I’ll document it as soon as possible.
I hope someone will be able to help me, anyway, thank you by advance!
(And my apologies for my poor frenchie’s english.)

EDIT
My problem is «solved»! After a few changes for debugging pourposes, no big modifications, and no success, I put back the code in the state I posted it… and now it works. But I really would appreciate if some someone could give me an explanation of what may have happened! It seems like SQLite behaviour (on iPad at least — never used it anywhere else) can be quite obscure at some times… :/

I come to you after a lot of hours googling and reading other discussions about SQLite on StackOverflow, but I definitely can’t find any explanation to my problem, so here it is :

  • The context :
    I’m developping an application for iPad wich has to deal with some «large» amounts of data, in several occasions. In one of them, I must import points coordinates from a .kml file (Google’s xml for geographical data) into my database, in order to reuse them later with a MKMapView and load them faster than by parsing xml when it needs to show a specific layer.

  • The details :
    The import thing is quite easy : when dealing with those files, I’m only concerned with 2 tables :

    • One containing zones definitions and details : for the moment, an integer as an id, and a text for naming.
    • One containing two real for coordinate storage and an integer referencing the first table for knowing which zone point is part of.
      So as long as reading my file, I first create an entry for the new zone, and then I insert points into the second table, with ID of the last zone created in the first table…nothing complicated!

    But…

  • The problem :
    After running fine a while, I get an exception from SQLite with the famous message «Unable to open the database file», and then it comes I can’t do anything more with the database. This exception can randomly occur in the zone creation or the points insertion methods.

  • My reflexions :
    Considering the numerous points in those files, I suspected memory or disk saturation but other parts of my app discarded those points (to my mind).
    First, memory : it comes that when the exception occurs, the app is using about 10 or 12 MB of RAM. It can seems quite huge, but it’s due to the ~10MB .kml file loaded in memory, so it’s explainable. And above it all, the MKMapView thing of my app deals with tons of high-res tiles layers above map, and so leads to memory peaks which can afford 20 or even 25MB without making the iPad to crash.
    Second, disk : when reseting my database and filling only the 2 tables described above, the db file size when the exception occurs is always about 2.2 or 2.5MB, but when I fill other tables (the other parts of my apps works well!) the db file is about 6 or 7MB, and the device doesn’t complain at all.

  • So what?!
    CPU-angryness and panic? I don’t think so because some of the other tables of my database are filled at the same rythm without problem… and running my app in simulator crashes too, with a core i7 just laughing at the job.
    SQLite bad use? There we go! To my mind, it’s the only solution left! But I really can’t understand what’s going on here because I process my requests the same way I do in other app’s parts which — repeating myself — work like a charm!

  • SQLite details :
    I have a DB class which is a singleton I use to avoid creating/releasing an SqliteConnection object each request I do, and all my methods dealing with database are contained in this class to be sure I don’t play with the connection anywhere else without knowing it. Here are concerned methods of this class :

    public void     saveZone(ObjZone zone)  { //at this point, just creates an entry with a name and let sqlite give it a new id
        lock (connection) { //SqliteConnection object
            try {
                openConnection();
                SqliteCommand cmd = connection.CreateCommand();
                cmd.CommandText = zone.id == 0 ?
                    "insert into ZONES (Z_NAME) values (" + format(zone.name) + ") ;" :
                    "update ZONES set Z_NAME = " + format(zone.name) + " where Z_ID = " + format(zone.id) + " ;";
                cmd.ExecuteNonQuery();
                if (zone.id == 0) {
                    cmd.CommandText = "select Z_ID from ZONES where ROWID = last_insert_rowid() ;";
                    zone.id = uint.Parse(cmd.ExecuteScalar().ToString());
                }
                cmd.Dispose();
            }
            catch (Exception e) {
                Log.failure("DB.saveZone(" + zone.ToString() + ") : [" + e.GetType().ToString() + "] - " +
                    e.Message + "n" + e.StackTrace); //custom Console.WriteLine() method with some formating
                throw e;
            }
            finally {
                connection.Close();
            }
        }
    }
    
    public void     setPointsForZone(List<CLLocationCoordinate2D> points, uint zone_id) { //registers points for a given zone
        lock (connection) {
            try {
                openConnection();
                SqliteCommand cmd = connection.CreateCommand();
                cmd.CommandText = "delete from ZONESPOINTS where Z_ID = " + format(zone_id);
                cmd.ExecuteNonQuery();
                foreach(CLLocationCoordinate2D point in points) {
                    cmd.CommandText = "insert into ZONESPOINTS values " +
                        "(" + format(zi_id) + ", " + format(point.Latitude.ToString().Replace(",", ".")) + ", "
                        + format(point.Longitude.ToString().Replace(",", ".")) + ");";
                    cmd.ExecuteNonQuery();
                    cmd.Dispose();
                }
            }
            catch (Exception e) {
                Log.failure("DB.setPointsForZone(" + zone_id + ") : [" + e.GetType().ToString() + "] - " + e.Message);  
                throw e;
            }
            finally {
                connection.Close();
            }
        }
    }
    

    And to be as clear as I can, here are some of the methods referenced in the two above (I use this custom openConnection() method because I use foreign keys constraints in most of my tables and cascading behaviours are not enabled by default, but I need them.) :

    void openConnection() {
        try {
            connection.Open();
            SqliteCommand cmd = connection.CreateCommand();
            cmd.CommandText = "PRAGMA foreign_keys = ON";
            cmd.ExecuteNonQuery();
            cmd.Dispose();
        }
        catch (Exception e) {
            Log.failure("DB.openConnection() : [" + e.GetType().ToString() + "] - " + e.Message);
            throw e;
        }
    }
    
    public static string format(object o) {
        return "'" + o.ToString().Replace("'", "''") + "'";
    }
    

Well, sorry for the novel, I may already thank you for reading all that stuff, no?! Anyway, if I missed something that could be useful, let me know and I’ll document it as soon as possible.
I hope someone will be able to help me, anyway, thank you by advance!
(And my apologies for my poor frenchie’s english.)

EDIT
My problem is «solved»! After a few changes for debugging pourposes, no big modifications, and no success, I put back the code in the state I posted it… and now it works. But I really would appreciate if some someone could give me an explanation of what may have happened! It seems like SQLite behaviour (on iPad at least — never used it anywhere else) can be quite obscure at some times… :/

ispravlyaem-oshibki-mysqlЗдравствуйте!

Сегодняшняя заметка будет касаться только достаточно «узкой» категории читателей блога — речь пойдет о базах данных MySQL (и ошибках, при работе с ними…).

Вообще, подобные базы данных используются многими движками сайтов (CMS), причем некоторые из них не блещут высокой безопасностью… Кроме этого, к базе MySQL возможен прямой доступ через веб-интерфейс. А если добавить к этому ошибки при копировании и переносе БД (что бывает очень часто), то, разумеется, всё это вкупе создает определенные риски для данных… 😢

Собственно, ниже рассмотрим, что можно сделать, если появилась-таки ошибка, что база данных недоступна (или не может быть прочитана, или…). Заранее скажу, что подобные ошибки далеко не всегда означает полную утрату БД, во многих случаях удается сравнительно-легко восстановить работоспособность сайта (интернет-магазина, и пр.).

И так…

*

Несколько рекомендаций, если возникла ошибка с MySQL БД

👉 Совет 1

Если вы накануне никак не взаимодействовали с БД (например, не переносили сайт с одного сервера на другой), и всё работало в штатном режиме — возможно, что ошибка недоступности к базе связана с возникшими проблемами на стороне хостинг-компании (⇒ запрос в поддержку…).

Кроме этого, обратите внимание на конфигурационные файлы CMS, отвечающие за доступ к базе данных. Возможно, что с самой БД всё в порядке, а вот путь (или пароль) для доступа к ней указан некорректно…

Например, в такой популярной CMS как WordPress, файлом для настройки доступа к БД явл. wp-config.php.

Параметры MySql — эту информацию можно получить у хостинг-провайдера

Параметры MySQL — эту информацию можно получить у хостинг-провайдера

*

👉 Совет 2

Еще одна довольно очевидная рекомендация — проверить наличие бэкапа (резервной копии). Даже если вы самостоятельно не делали его — возможно его сделал хостинг-провайдер.

Кроме этого, как только возникла какая-то ошибка с БД — я бы порекомендовал в любом случае сделать ее копию (если это возможно). Вдруг диск начал «сыпаться», и в дальнейшем даже текущая БД исчезнет «на совсем»…

PHP My Admin — экспорт базы данных

PHP My Admin — экспорт базы данных

*

👉 Совет 3

Далее следует попробовать провести восстановление БД встроенными средствами MySQL…

Итак, что нужно сделать в случае, если БД MySQL перестала запускаться: 

  1. Откройте файл my.cnf и установите следующий параметр: innodb_force_recovery = 1; 
  2. Перезапустите MySQL следующей командой: /etc/init.d/mysql restart; 
  3. Сделайте дамп БД и запакуйте его: mysqldump db | gzip > db.sql.gz; 
  4. Создайте новую БДmysql -e create database new_DB«; 
  5. Импортируйте туда данныеzcat database.sql.gz | mysql new_DB. 

***

👉 Примечание!

my.cnf — это файл конфигурации MySQL. Чтобы найти файл, используйте команду: locate my.cnf

В Linux’e обычно он находится по такому пути:

/etc/my.cnf
# либо
/etc/mysql/my.cnf

***

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

С помощью указанных команд мы пробуем создать дамп БД, затем импортировать его в новую базу, которую далее можно будет открыть обычным способом. 

Если это получается, старую БД можно удалить. Кстати, если способ не помогает, и старая база не запускается, нужно пробовать другие значения параметра innodb_force_recovery, вплоть до 6. 

MySQL

MySQL

При нормальном запуске БД система пытается запустить все процессы, включая и те, которые были завершены аварийно (например, из-за проблем с электричеством).

Благодаря опции innodb_force_recovery можно отключить некоторые параметры, которые мешают штатному запуску БД.

Цифры означают следующее: 

  1. Запуск MySQL не останавливается, даже если система в процессе запуска обнаруживает поврежденные страницы;
  2. Отмена запуска фоновых операций;
  3. Отмена попыток отката транзакций;
  4. Отказ от расчета статистики и использования сохраненных изменений;
  5. Не учитывает логи отката при запуске;
  6. Не учитывает параметры ib_logfiles во время запуска.

*

👉 Совет 4 (альтернативный способ восстановления БД)

Описанный выше способ довольно эффективен, хотя, к сожалению, может оказаться сложным для некоторых пользователей. Но работа с любым форматом базы данных — это всегда непросто…

Если нет желания редактировать конфиги, открывать командную строку и изучать синтаксис нужных команд, то нужен достаточно простой и дружелюбный в использовании инструмент, например, такой как Recovery Toolbox for MySQL. (👇)

Recovery Toolbox for MySQL — скриншот главного окна программы

Recovery Toolbox for MySQL — скриншот главного окна программы

Пожалуй, это самый простой и эффективный способ восстановления БД MySQL, именно то, что нужно большинству начинающих пользователей. 👌

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

Стоит сразу отметить, что Recovery Toolbox for MySQL работает только с копией базы, поэтому никогда не испортит то, что осталось от старой БД. Почувствуйте разницу, копаясь в конфигах и настройках «боевого» сервера, и каждую минуту опасаясь сделать что-то неправильно, что приведет к полному уничтожению того, что еще осталось…

*

👉 Как восстановить базу с помощью Recovery Toolbox for MySQL:

Для восстановления поврежденной БД MySQL при помощи этой программы нужно сделать следующее:

  1. Скачать Recovery Toolbox for MySQL с офиц. сайта: https://mysql.recoverytoolbox.com/ru/;
  2. Установить и запустить программу;
  3. Выбрать папку, в которой хранятся файлы поврежденной базы данных MySQL (предварительно создайте копию);
  4. Выбрать поврежденную базу данных из списка
  5. Запустить анализ выбранной БД;
  6. Просмотреть результаты восстановления: таблицы, объекты, индексы;
  7. Настроить способ сохранения восстановленных данных;
  8. Сохранить данные (доступно в полной версии). Пример на скриншоте ниже. 👇

Пример восстановления БД

Пример восстановления БД

Программа загружается совершенно бесплатно и устанавливается без регистрации. С помощью Recovery Toolbox for MySQL можно бесплатно просматривать восстановленные данные, оценивать эффективность работы.

Можно даже подсмотреть какие-то изменения и легко внести их руками в «протухший», но еще пригодный к использованию бэкап. Заплатить предложат только в том случае, если потребуется сохранить восстановленные данные, пересоздать базу MySQL и подключить ее к системе.

База восстановлена - сохранить?

База восстановлена — сохранить?

*

👉 «Пару слов» о безопасности при работе с Recovery Toolbox for MySQL

Самое главное – программа всегда работает только с копией исходной базы, поэтому этот способ восстановления намного надежнее, чем вносить изменения в конфиги БД и смотреть, что из этого получится. Помните, попытка ремонта БД на «продакшн» сервере может окончательно добить ее, такое бывает даже у опытных админов…

Также стоит отметить, что Recovery Toolbox for MySQL не использует сторонние подключения. В процессе восстановления (может занять довольно продолжительное время, в зависимости от размеров исходной базы данных) ПО не использует доступ к Интернет.

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

Есть способ чуть сложнее: установить анализатор сетевого траффика (советую WireShark, NetLimiter) и проверить, не идут ли подозрительные пакеты от Recovery Toolbox for MySQL.

👉 В помощь!

Как запретить программе доступ к интернету (блокировка входящего/исходящего трафика)

Конечно, этот способ предполагает некий здоровый энтузиазм, желание познать новое (мануалы на WireShark совсем немаленькие) и, самое главное, наличие свободного времени…

*

Дополнения по теме — не помешают!

Всем успехов!

👋

Пост по заметкам

от компании Recovery Toolbox

donate

dzen-ya

Полезный софт:

  • видеомонтаж
  • Видео-Монтаж
  • Отличное ПО для создания своих первых видеороликов (все действия идут по шагам!).
    Видео сделает даже новичок!

  • утилита для оптимизации
  • Ускоритель компьютера
  • Программа для очистки Windows от «мусора» (удаляет временные файлы, ускоряет систему, оптимизирует реестр).

Здравствуйте, у меня возникла следующая проблема при тестировании БД: «Ошибка СУБД: база данных не открыта» Тестирование проходит во всех режимах проверки с исправлением.

клево. Будут еще волшебные вещи происходить, делись, не стесняйся.

Ой, эта тема оказалась с другого форума, не туда ссылку дал… У меня база тоже не запускалась ни в режиме предприятия, ни в режиме конфигуратора, скорее всего после того, как 1С не успело закрыться и было принудительно закрыто в процессе перезагрузки. Я почистил кэш (C:Documents and SettingsuserLocal SettingsApplication Data1C1Cv81) — не помогло, а потом попытался удалить файл 1Cv8tmp.1CD в каталоге БД, файловая система сказала, что файл занят и отказалась его удалять. После еще одной перезагрузки я его перенес в другой каталог и база запустилась…

Тестируешь конфигуратором? файловый вариант?

Тэги:

Комментарии доступны только авторизированным пользователям

Ой, эта тема оказалась с другого форума, не туда ссылку дал…

У меня база тоже не запускалась ни в режиме предприятия, ни в режиме конфигуратора, скорее всего после того, как 1С не успело закрыться и было принудительно закрыто в процессе перезагрузки.

Я почистил кэш (C:Documents and SettingsuserLocal SettingsApplication Data1C1Cv81) — не помогло, а потом попытался удалить файл 1Cv8tmp.1CD в каталоге БД, файловая система сказала, что файл занят и отказалась его удалять. После еще одной перезагрузки я его перенес в другой каталог и база запустилась…

Устранение проблем с разрешениями, сообщения об ошибках в продуктах Майкрософт и MySQL в Dreamweaver.

Пользовательский интерфейс в Dreamweaver и более поздних версиях стал проще. В результате этого некоторые функции, описанные в этой статье, могут отсутствовать в Dreamweaver и более поздних версиях. Дополнительные сведения см. в этой статье.

Устранение проблем с разрешениями

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

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

Чтобы открыть веб-серверу доступ к файлу базы данных, понадобится предоставить учетной записи «IUSR_имя_компьютера» правильные разрешения. Кроме того, чтобы разрешить запись в базу данных, также нужно настроить определенные разрешения для папки, содержащей эту базу данных.

Если предполагается анонимный доступ к странице, предоставьте учетной записи «IUSR_имя_компьютера» полный доступ к этой папке и файлу базы данных, как описано ниже.

Помимо этого, если путь к базе данных указан в формате UNC (\СерверПапка), убедитесь, что в разрешениях для общего ресурса учетной записи «IUSR_имя_компьютера» предоставлен полный доступ. Этот шаг нужно выполнить даже в том случае, если общий ресурс расположен на локальном веб-сервере.

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

Проверка или изменение разрешений для файла базы данных (в Windows XP)

  1. Для изменения разрешений необходимо иметь права администратора на соответствующем компьютере.

  2. Откройте проводник Windows, перейдите к файлу базы данных или папке, содержащей эту базу данных, щелкните правой кнопкой мыши файл или папку и выберите пункт «Свойства».

  3. Перейдите на вкладку «Безопасность».

    Этот шаг применим только в том случае, если используется файловая система NTFS. На компьютерах с файловой системой FAT в этом диалоговом окне вкладки «Безопасность» нет.

  4. Если учетной записи «IUSR_имя_компьютера» нет в списке «Группы или пользователи», нажмите кнопку «Добавить» и добавьте ее.

  5. В диалоговом окне «Выбор пользователей или групп» нажмите кнопку «Дополнительно».

    В диалоговом окне отобразятся дополнительные параметры.

  6. Щелкните «Размещение» и выберите имя компьютера.

  7. Нажмите кнопку «Поиск», чтобы отобразить список учетных записей, связанных с компьютером.

  8. Выберите учетную запись «IUSR_имя_компьютера» и нажмите кнопку «ОК»; затем нажмите «ОК» еще раз, чтобы очистить это диалоговое окно.

  9. Чтобы предоставить учетной записи IUSR неограниченные права доступа, выберите «Полный доступ» и нажмите кнопку «ОК».

Проверка или изменение разрешений для файла базы данных (в Windows 2000)

  1. Для изменения разрешений необходимо иметь права администратора на соответствующем компьютере.

  2. Откройте проводник Windows, перейдите к файлу базы данных или папке, содержащей эту базу данных, щелкните правой кнопкой мыши файл или папку и выберите пункт «Свойства».

  3. Перейдите на вкладку «Безопасность».

    Этот шаг применим только в том случае, если используется файловая система NTFS. На компьютерах с файловой системой FAT в этом диалоговом окне вкладки «Безопасность» нет.

  4. Если учетной записи «IUSR_имя_компьютера» нет в списке учетных записей Windows в диалоговом окне «Разрешения для файлов», нажмите кнопку «Добавить» и добавьте ее.

  5. В диалоговом окне «Выбор пользователей, компьютеров или групп» выберите в меню «Папка» имя компьютера, чтобы отобразить список учетных записей, связанных с компьютером.

  6. Выберите учетную запись «IUSR_имя_компьютера» и нажмите кнопку «Добавить».

  7. Чтобы предоставить учетной записи IUSR все разрешения, в меню «Тип доступа» выберите «Полный доступ» и нажмите кнопку «ОК».

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

    Дополнительные сведения о разрешениях для учетной записи IUSR и веб-сервера см. в следующих статьях раздела TechNote на веб-сайте центра поддержки Adobe.

    • Общие сведения об анонимной проверке подлинности и учетной записи IUSR находятся по адресу: www.adobe.com/go/authentication_ru

    • Подробнее о настройке разрешений веб-сервера IIS см. по адресу: www.adobe.com/go/server_permissions_ru

Устранение неполадок, связанных с сообщениями об ошибках в продуктах Майкрософт

Подобные сообщения об ошибках могут появляться во время запроса динамической страницы с сервера, если сервер IIS (Internet Information Server) используется с базой данных, разработанной корпорацией Майкрософт, например Access или SQL Server.

Корпорация Adobe не предоставляет техническую поддержку для программных продуктов сторонних разработчиков, например для Microsoft Windows и сервера IIS. Если приведенная в данной главе информация не помогла устранить проблему, обратитесь в службу технической поддержки Майкрософт или посетите веб-сайт технической поддержки Майкрософт по адресу: http://support.microsoft.com/.

Дополнительные сведения об ошибках 80004005 см. в статье «Руководство по устранению неполадок в случае появления ошибки 80004005 при работе со страницами ASP и компонентами Microsoft для доступа к данным (Q306518)» на веб-сайте корпорации Майкрософт по адресу: http://support.microsoft.com/default.aspx?scid=kb;ru-ru;Q306518.

[[Ссылка]80004005 — Источник данных не найден и не указан драйвер, используемый по умолчанию]

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

  • 80004005 — Ошибка SQLSetConnectAttr драйвера

  • 80004005 — Общий сбой. Не удается открыть раздел реестра «DriverId»

    Далее перечислены возможные причины и способы решения.

  • Странице не удается найти имя DSN. Убедитесь, что DSN было создано и на веб-сервере, и на локальном компьютере.

  • Возможно, имя DSN задано как DSN пользователя, а не DSN системы. Удалите DSN пользователя и создайте вместо него DSN системы.

Если этого не сделать, дублирующиеся имена DSN вызовут новую ошибку ODBC.

Если используется приложение Microsoft Access, файл базы данных (MDB-файл) может быть заблокирован. Причина блокирования может заключаться в том, что DSN с другим именем уже использует базу данных. Откройте проводник Windows, в папке, в которой расположен файл базы данных (MDB-файл), найдите файл блокировки (LDB-файл) и удалите его. Если другое имя DSN указывает на один и тот же файл базы данных, удалите это имя, чтобы избежать ошибок в дальнейшем. Перезагрузите компьютер после внесения изменений.

[[Ссылка]80004005 — Не удается использовать «(нет данных)»; файл уже используется]

Эта ошибка возникает при использовании базы данных Microsoft Access и попытке просмотра динамической страницы в веб-браузере или интерактивном представлении. Еще один вариант текста этого сообщения об ошибке: «80004005 — Обработчик баз данных Microsoft Jet не может открыть файл (нет данных)».

Возможная причина — неправильно установлены разрешения. Далее перечислены несколько конкретных причин и способов решения.

  • Возможно, учетная запись, используемая сервером IIS (как правило, это учетная запись IUSR), не имеет нужных разрешений Windows для доступа к файловой базе данных или папке, содержащей эту базу данных. Проверьте разрешения учетной записи IIS (IUSR) в диспетчере пользователей.

  • Пользователь может не иметь разрешения на создание или удаление временных файлов. Проверьте разрешения для файла и папки. Убедитесь в наличии разрешения на создание или удаление временных файлов. Временные файлы обычно создаются в той же папке, в которой содержится база данных, но они также могут создаваться и в других папках, например «/Winnt».

  • В Windows 2000 может потребоваться изменить значение времени ожидания для DSN базы данных Access. Чтобы изменить это значение, выберите команды «Пуск» > «Настройка» > «Панель управления» > «Администрирование» > «Источники данных» (ODBC). Откройте вкладку «Система», выделите правильное имя DSN и нажмите кнопку «Настройка». Нажмите кнопку «Параметры» и в поле «Время ожидания страницы» введите значение 5000.

    Если проблемы так и не удалось решить, см. следующие статьи базы знаний Майкрософт:

  • Статья: 80004005 — «Невозможно использовать ‘(неизвестно)’; файл уже используется» по адресу: http://support.microsoft.com/default.aspx?scid=kb;ru-ru;Q174943.

  • Статья: «Сбой подключения к базам данных Microsoft Access в ASP» по адресу: http://support.microsoft.com/default.aspx?scid=kb;ru-ru;Q253604.

  • Статья: «Ошибка «не удается открыть неизвестный файл» при использовании Access» по адресу: http://support.microsoft.com/default.aspx?scid=kb;ru-ru;Q166029.

[[Ссылка]80004005 — Сбой при входе в систему()]

Эта ошибка возникает при использовании сервера Microsoft SQL Server и попытке просмотра динамической страницы в веб-браузере или интерактивном представлении.

Эта ошибка создается сервером SQL Server, если он не принимает либо не распознает учетную запись или введенный пароль (если используется стандартная защита), или же если учетная запись Windows не соответствует учетной записи SQL (если используется встроенная система безопасности).

Далее перечислены возможные решения.

  • Если используется стандартная защита, причиной ошибки может быть неправильные имя учетной записи и пароль. Попробуйте воспользоваться учетной записью и паролем системного администратора (UID= «sa» без пароля), которые должны были быть определены в строке подключения. (Имена DSN не хранят имена и пароли пользователей.)

  • Если используется встроенная система безопасности, проверьте учетную запись Windows, обращающуюся к странице, и найдите соответствующую ей учетную запись SQL (при наличии).

  • Сервер SQL Server не допускает использование нижних подчеркиваний в именах учетных записей SQL. Если вручную сопоставить учетную запись Windows «IUSR_имя_компьютера» учетной записи SQL с таким же именем, эта учетная запись не будет принята сервером. Учетную запись, в которой использовано нижнее подчеркивание, нужно сопоставлять с именем учетной записи на сервере SQL, в котором нижнее подчеркивание не используется.

[[Ссылка]80004005 — В операции должен использоваться обновляемый запрос]

Данная ошибка возникает, когда событие обновляет набор записей или вставляет в него данные.

Далее перечислены возможные причины и способы решения.

  • Разрешения для доступа к папке, содержащей базу данных, слишком ограничены. Учетная запись IUSR должна обладать правами на чтение/запись.

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

  • Возможно, база данных не расположена в каталоге Inetpub/wwwroot. Для обновления базы данных требуется, чтобы она располагалась в каталоге wwwroot. В противном случае будут доступны только просмотр и поиск данных, но не их обновление.

  • Набор записей основан на необновляемом запросе. Хорошими примерами необновляемых запросов в базе данных являются соединения. Преобразуйте необновляемые запросы в обновляемые.

    Дополнительные сведения об этой ошибке см. в статье базы знаний Майкрософт «Ошибка ASP «запрос не является обновляемым» при обновлении записи в таблице» по адресу: http://support.microsoft.com/default.aspx?scid=kb;ru-ru;Q174640.

[[Ссылка]80040e07 — Несоответствие типов данных в выражении условия отбора]

Данная ошибка возникает при попытке сервера обработать страницу, содержащую серверное поведение «Вставить запись» или «Обновить запись», которое пытается задать пустую строку («») в качестве значения для столбца «Дата/время» в базе данных Microsoft Access.

Microsoft Access имеет строгую типизацию данных, которая устанавливает четкий набор правил для соответствующих значений столбцов. Пустая строка в запросе SQL не может храниться в столбце «Дата/время» базы данных Access. Единственный известный на текущий момент способ избежать возникновения данной ошибки — это не вставлять и не обновлять столбцы «Дата/время» в Access пустыми строками («») или любыми другими значениями, которые не соответствуют диапазону значений, заданному для этого типа данных.

[[Ссылка] 80040e10 «Слишком мало параметров»]

Данная ошибка возникает в том случае, если столбец, указанный в запросе SQL, отсутствует в таблице базы данных. Проверьте имена столбцов в таблице базы данных на соответствие столбцам, указанным в запросе SQL. Зачастую причиной этой ошибки является опечатка.

[[Ссылка]80040e10 — Неверное поле COUNT]

Данная ошибка возникает при просмотре страницы, содержащей серверное поведение «Вставить запись», в веб-браузере и попытке с ее помощью вставить запись в базу данных Microsoft Access.

Данная ошибка может возникать при попытке вставить запись в поле базы данных, в имени которого содержится вопросительный знак (?). Для некоторых обработчиков баз данных, включая Microsoft Access, вопросительный знак является специальным символом, поэтому его нельзя использовать в именах таблиц баз данных и в именах полей.

Откройте систему базы данных и удалите вопросительный знак (?). из имен полей, а затем обновите на странице варианты поведения сервера, которые ссылаются на это поле.

[[Ссылка]80040e14 — Ошибка синтаксиса в инструкции INSERT INTO]

Данная ошибка возникает при попытке сервера обработать страницу, содержащую серверное поведение «Вставить запись».

Как правило, эта ошибка появляется вследствие одной или нескольких описанных ниже проблем с именами полей, объектов или переменных в базе данных.

  • В качестве имени использовано зарезервированное слово. Большинство баз данных имеют набор зарезервированных слов. Например, слово «date» является зарезервированным и, следовательно, не может быть использовано в именах столбцов базы данных.

  • В имени использованы специальные символы. Вот несколько примеров специальных символов:

    . / * : ! # & — ?

  • Имя содержит пробел.

    Подобная ошибка также может возникать, если для объекта в базе данных была определена маска ввода, но вставленные данные не соответствуют этой маске.

    Чтобы решить проблему, не используйте в именах столбцов базы данных зарезервированные слова, например «date», «name», «select», «select» и «level». Помимо этого, исключите пробелы и специальные символы.

    Списки зарезервированных слов для наиболее распространенных систем баз данных см. на следующих веб-страницах.

  • Microsoft Access: http://support.microsoft.com/default.aspx?scid=kb;ru-ru;Q209187

  • MySQL: http://dev.mysql.com/doc/mysql/en/reserved-words.html

[[Ссылка]80040e21 — Ошибка ODBC при вставке или обновлении]

Данная ошибка возникает при попытке сервера обработать страницу, содержащую серверное поведение «Обновить запись» или «Вставить запись». Базе данных не удается обработать операцию обновления или вставки, которую пытается выполнить серверное поведение.

Далее перечислены возможные причины и способы решения.

  • Серверное поведение пытается обновить поле автонумерации в таблице базы данных или вставить запись в это поле. Так как поля автонумерации заполняются автоматически самой системой базы данных, внешние попытки заполнить эти поля значениями приводят к ошибкам.

  • Серверное поведение обновляет или вставляет данные неправильного типа в поле базы данных. Например, дата вставляется в логическое поле, требующее значение «да» или «нет», строка вставляется в числовое поле, а неправильно отформатированная строка — в поле «Дата/время».

[[Ссылка]800a0bcd — Функция BOF или EOF возвращает значение True]

Эта ошибка возникает при попытке просмотра динамической страницы в веб-браузере или интерактивном представлении.

Данная проблема возникает при попытке отобразить на странице данные из пустого набора записей. Для решения проблемы к динамическому содержимому, которое будет отображено на странице, нужно применить серверное поведение «Показать область». Вот как это сделать:

  1. Выделите динамическое содержимое на странице.

  2. На панели «Поведение сервера» нажмите кнопку со знаком «Плюс» (+) и выберите пункты «Показать область» > «Показать область, если набор записей не пустой».

  3. Выберите набор записей, из которого берется динамическое содержимое, и нажмите кнопку «ОК».

  4. Повторите шаги 1–3 для каждого элемента динамического содержимого на странице.

Устранение неполадок, связанных с сообщениями об ошибках MySQL

Одним из распространенных сообщений об ошибке, которое может появиться во время тестирования подключения базы данных PHP к MySQL 4.1 является «Клиент не поддерживает запрашиваемый протокол аутентификации. Обновите клиент MySQL.»

Может понадобиться вернуться к более ранней версии MySQL или установить PHP 5 и скопировать некоторые динамически связываемые библиотеки (DLL). Подробные инструкции см. в разделе Настройка среды разработки PHP.

ispravlyaem-oshibki-mysqlЗдравствуйте!

Сегодняшняя заметка будет касаться только достаточно «узкой» категории читателей блога — речь пойдет о базах данных MySQL (и ошибках, при работе с ними…).

Вообще, подобные базы данных используются многими движками сайтов (CMS), причем некоторые из них не блещут высокой безопасностью… Кроме этого, к базе MySQL возможен прямой доступ через веб-интерфейс. А если добавить к этому ошибки при копировании и переносе БД (что бывает очень часто), то, разумеется, всё это вкупе создает определенные риски для данных… 😢

Собственно, ниже рассмотрим, что можно сделать, если появилась-таки ошибка, что база данных недоступна (или не может быть прочитана, или…). Заранее скажу, что подобные ошибки далеко не всегда означает полную утрату БД, во многих случаях удается сравнительно-легко восстановить работоспособность сайта (интернет-магазина, и пр.).

И так…

*

Несколько рекомендаций, если возникла ошибка с MySQL БД

👉 Совет 1

Если вы накануне никак не взаимодействовали с БД (например, не переносили сайт с одного сервера на другой), и всё работало в штатном режиме — возможно, что ошибка недоступности к базе связана с возникшими проблемами на стороне хостинг-компании (⇒ запрос в поддержку…).

Кроме этого, обратите внимание на конфигурационные файлы CMS, отвечающие за доступ к базе данных. Возможно, что с самой БД всё в порядке, а вот путь (или пароль) для доступа к ней указан некорректно…

Например, в такой популярной CMS как WordPress, файлом для настройки доступа к БД явл. wp-config.php.

Параметры MySql — эту информацию можно получить у хостинг-провайдера

Параметры MySQL — эту информацию можно получить у хостинг-провайдера

*

👉 Совет 2

Еще одна довольно очевидная рекомендация — проверить наличие бэкапа (резервной копии). Даже если вы самостоятельно не делали его — возможно его сделал хостинг-провайдер.

Кроме этого, как только возникла какая-то ошибка с БД — я бы порекомендовал в любом случае сделать ее копию (если это возможно). Вдруг диск начал «сыпаться», и в дальнейшем даже текущая БД исчезнет «на совсем»…

PHP My Admin — экспорт базы данных

PHP My Admin — экспорт базы данных

*

👉 Совет 3

Далее следует попробовать провести восстановление БД встроенными средствами MySQL…

Итак, что нужно сделать в случае, если БД MySQL перестала запускаться: 

  1. Откройте файл my.cnf и установите следующий параметр: innodb_force_recovery = 1; 
  2. Перезапустите MySQL следующей командой: /etc/init.d/mysql restart; 
  3. Сделайте дамп БД и запакуйте его: mysqldump db | gzip > db.sql.gz; 
  4. Создайте новую БДmysql -e create database new_DB«; 
  5. Импортируйте туда данныеzcat database.sql.gz | mysql new_DB. 

***

👉 Примечание!

my.cnf — это файл конфигурации MySQL. Чтобы найти файл, используйте команду: locate my.cnf

В Linux’e обычно он находится по такому пути:

/etc/my.cnf
# либо
/etc/mysql/my.cnf

***

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

С помощью указанных команд мы пробуем создать дамп БД, затем импортировать его в новую базу, которую далее можно будет открыть обычным способом. 

Если это получается, старую БД можно удалить. Кстати, если способ не помогает, и старая база не запускается, нужно пробовать другие значения параметра innodb_force_recovery, вплоть до 6. 

MySQL

MySQL

При нормальном запуске БД система пытается запустить все процессы, включая и те, которые были завершены аварийно (например, из-за проблем с электричеством).

Благодаря опции innodb_force_recovery можно отключить некоторые параметры, которые мешают штатному запуску БД.

Цифры означают следующее: 

  1. Запуск MySQL не останавливается, даже если система в процессе запуска обнаруживает поврежденные страницы;
  2. Отмена запуска фоновых операций;
  3. Отмена попыток отката транзакций;
  4. Отказ от расчета статистики и использования сохраненных изменений;
  5. Не учитывает логи отката при запуске;
  6. Не учитывает параметры ib_logfiles во время запуска.

*

👉 Совет 4 (альтернативный способ восстановления БД)

Описанный выше способ довольно эффективен, хотя, к сожалению, может оказаться сложным для некоторых пользователей. Но работа с любым форматом базы данных — это всегда непросто…

Если нет желания редактировать конфиги, открывать командную строку и изучать синтаксис нужных команд, то нужен достаточно простой и дружелюбный в использовании инструмент, например, такой как Recovery Toolbox for MySQL. (👇)

Recovery Toolbox for MySQL — скриншот главного окна программы

Recovery Toolbox for MySQL — скриншот главного окна программы

Пожалуй, это самый простой и эффективный способ восстановления БД MySQL, именно то, что нужно большинству начинающих пользователей. 👌

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

Стоит сразу отметить, что Recovery Toolbox for MySQL работает только с копией базы, поэтому никогда не испортит то, что осталось от старой БД. Почувствуйте разницу, копаясь в конфигах и настройках «боевого» сервера, и каждую минуту опасаясь сделать что-то неправильно, что приведет к полному уничтожению того, что еще осталось…

*

👉 Как восстановить базу с помощью Recovery Toolbox for MySQL:

Для восстановления поврежденной БД MySQL при помощи этой программы нужно сделать следующее:

  1. Скачать Recovery Toolbox for MySQL с офиц. сайта: https://mysql.recoverytoolbox.com/ru/;
  2. Установить и запустить программу;
  3. Выбрать папку, в которой хранятся файлы поврежденной базы данных MySQL (предварительно создайте копию);
  4. Выбрать поврежденную базу данных из списка
  5. Запустить анализ выбранной БД;
  6. Просмотреть результаты восстановления: таблицы, объекты, индексы;
  7. Настроить способ сохранения восстановленных данных;
  8. Сохранить данные (доступно в полной версии). Пример на скриншоте ниже. 👇

Пример восстановления БД

Пример восстановления БД

Программа загружается совершенно бесплатно и устанавливается без регистрации. С помощью Recovery Toolbox for MySQL можно бесплатно просматривать восстановленные данные, оценивать эффективность работы.

Можно даже подсмотреть какие-то изменения и легко внести их руками в «протухший», но еще пригодный к использованию бэкап. Заплатить предложат только в том случае, если потребуется сохранить восстановленные данные, пересоздать базу MySQL и подключить ее к системе.

База восстановлена - сохранить?

База восстановлена — сохранить?

*

👉 «Пару слов» о безопасности при работе с Recovery Toolbox for MySQL

Самое главное – программа всегда работает только с копией исходной базы, поэтому этот способ восстановления намного надежнее, чем вносить изменения в конфиги БД и смотреть, что из этого получится. Помните, попытка ремонта БД на «продакшн» сервере может окончательно добить ее, такое бывает даже у опытных админов…

Также стоит отметить, что Recovery Toolbox for MySQL не использует сторонние подключения. В процессе восстановления (может занять довольно продолжительное время, в зависимости от размеров исходной базы данных) ПО не использует доступ к Интернет.

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

Есть способ чуть сложнее: установить анализатор сетевого траффика (советую WireShark, NetLimiter) и проверить, не идут ли подозрительные пакеты от Recovery Toolbox for MySQL.

👉 В помощь!

Как запретить программе доступ к интернету (блокировка входящего/исходящего трафика)

Конечно, этот способ предполагает некий здоровый энтузиазм, желание познать новое (мануалы на WireShark совсем немаленькие) и, самое главное, наличие свободного времени…

*

Дополнения по теме — не помешают!

Всем успехов!

👋

Пост по заметкам

от компании Recovery Toolbox

donate

dzen-ya

Полезный софт:

  • видеомонтаж
  • Видео-Монтаж
  • Отличное ПО для создания своих первых видеороликов (все действия идут по шагам!).
    Видео сделает даже новичок!

  • утилита для оптимизации
  • Ускоритель компьютера
  • Программа для очистки Windows от «мусора» (удаляет временные файлы, ускоряет систему, оптимизирует реестр).

  • Ошибка создания подписи не установлена или недействительна лицензия скзи криптопро
  • Ошибка создания счета internal error market cs go
  • Ошибка создания подписи не удается построить цепочку сертификатов для доверенного корневого центра
  • Ошибка создания сохраненных данных
  • Ошибка создания подписи набор ключей не существует 0x80090016