пятница, 27 декабря 2013 г.

Oracle и дохлый винчестер

Началось все с сообщений о поврежденных файлах табличного пространства USERS (пример сообщения для одного из таких файлов):
26.12.13 17:24:20.523,ORB-12117208(57),ERROR,TransactJob,
com.bssys.db.jdbc.DBSQLException: ORA-01115: ошибка ввода/вывода при чтении блока из файла (блок # )
ORA-01110: файл данных 25: '/mnt/hdd2tb/oracle/ORACLE11/users20.dbf'
ORA-27072: Ошибка ввода/вывода файла
Additional information: 3
Additional information: 3632835
Additional information: 8192

Таких сообщений становилось все больше и больше.
В чем моя ошибка?
Во-первых, в том, что я не включил режим "ARCHIVELOG", поэтому восстановить файлы в RMAN не удалось.
Во-вторых, в том, что я его включил уже после ошибки: это привело к аварийной остановке Oracle, т.к. быстро растущие файлы FAST-RECOVERY сожрали все оставшееся свободное место на HDD с системой.
Ладно, довольно-таки быстро сообразил режим отключить и удалить файлы. Место свободное появилось.

После этого настала очередь борьбы с проблемой: Что делать, если умер HDD с частью табличных пространств и Oracle из-за этого не запускается, сообщая при startup'е:
ORA-01157: cannot identify/lock data file 15 - see DBWR trace file
ORA-01110: data file 15: '/mnt/hdd2tb/oracle/ORACLE11/USERS2/users2_07.dbf'
ORA-27037: unable to obtain file status
?

Помогло отключение недостающих DATA-файлов:
alter database datafile '/mnt/hdd2tb/oracle/ORACLE11/users10.dbf' offline drop;
После этого Oracle запустился.
Далее дело техники: либо удалить схемы, которые лежали на недостающих DATA-файлах (drop user cascade;), либо пересоздать табличное пространство
- drop tablespace including contents;
- см. описание "create tablespace".

----после 3-х часов безуспешных попыток удалить датафайлы, чтобы освободить место на диске---
В итоге, на Oracle 11g система не позволяет удалить датафайлы из USERS, сообщая:
SQL> alter tablespace USERS drop datafile '/opt/oracle/oradata/ORACLE11/users25.dbf';
alter tablespace USERS drop datafile '/opt/oracle/oradata/ORACLE11/users25.dbf'
*
ERROR at line 1:
ORA-01662: tablespace 'USERS' is non-empty and cannot be made temporary

Плюнул. Пересоздал БД Oracle.

пятница, 13 декабря 2013 г.

Создание БД (Oracle)

create-db.log:
13.12.13 19:06:45.633,main,DEBUG,DBConnectionPool,Closing of all free database connections
13.12.13 19:06:45.635,main,ERROR,CreateAzkInstance,
java.lang.RuntimeException: Exception creating database
at com.bssys.tools.sqlexecuter.CreateDatabase.create_database(CreateDatabase.java:127)
at com.bssys.tools.sqlexecuter.CreateDatabase.create_database(CreateDatabase.java:146)
at com.bssys.tools.sqlexecuter.Executer$7.process(Executer.java:126)
at com.bssys.tools.AbstractMain.process(AbstractMain.java:157)
at com.bssys.tools.sqlexecuter.Executer.process(Executer.java:246)
at com.bssys.tools.AbstractMain._process(AbstractMain.java:336)
at com.bssys.tools.AbstractMain.run(AbstractMain.java:374)
at com.bssys.tools.server.CreateInstance.createInstance(CreateInstance.java:97)
at com.bssys.tools.server.CreateInstance$1.process(CreateInstance.java:32)
at com.bssys.tools.AbstractMain.process(AbstractMain.java:157)
at com.bssys.tools.AbstractMain._process(AbstractMain.java:336)
at com.bssys.tools.AbstractMain._main(AbstractMain.java:453)
at com.bssys.tools.server.CreateAzkInstance.main(CreateAzkInstance.java:92)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.bssys.loader.MainRunner.run(MainRunner.java:18)
at com.bssys.loader.Runner.(Runner.java:30)
at com.bssys.loader.MainRunner.(MainRunner.java:14)
at com.bssys.loader.MainRunner.main(MainRunner.java:22)
Caused by: com.bssys.db.jdbc.DBSQLException: ORA-01031: привилегий недостаточно

at com.bssys.db.jdbc.SQLConnection.validate(SQLConnection.java:391)
at com.bssys.db.jdbc.SQLStatement.afterExecute(SQLStatement.java:27)
at com.bssys.db.jdbc.base.SQLStatementBase.execute(SQLStatementBase.java:57)
at com.bssys.tools.sqlexecuter.CreateDatabase.create_database(CreateDatabase.java:118)
... 20 more
Caused by: java.sql.SQLException: ORA-01031: привилегий недостаточно

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207)
at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:946)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1168)
at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1687)
at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1653)
at com.bssys.db.jdbc.base.SQLStatementBase.execute(SQLStatementBase.java:54)
... 21 more
------------------------------------------------------
Чтобы разрешить ситуацию нужно:
grant select on sys.v_$transaction to system with grant option;

понедельник, 2 декабря 2013 г.

Установка словарей для электронной книги Digma R60G

У этой книги используется программа StarDict. Чтобы загрузить в нее словари нужно создать в корневом каталоге папку (регистр букв важен) "Dict".
Сами словари можно скачать по адресам:
http://sourceforge.net/projects/xdxf/
http://xdxf.revdanica.com/
после скачивания, их в распакованном виде (но каждый словарь в своей папке) нужно скопировать в созданную папку "Dict".

Архив