Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» СУБД Oracle (Оракл - для поиска:)).

Автор: bandyn
Дата сообщения: 05.02.2007 16:54
lYY

Я понимаю что не выполнился!

В чем может быть проблема?
Автор: vshersh
Дата сообщения: 05.02.2007 17:05
bandyn
Смотри журнал создания базы... (сходу не скажу где он создается) Там должны быть ошибки...
Так же можно посмотреть alert.log - возможно и там будут зацепки...
У тебя сервер на линухе или под виндой?
Я бы пересоздал starter DB - а дальше смотреть по ситуации...
Автор: slaj1
Дата сообщения: 05.02.2007 17:32
bandyn
vshersh
обычно логи создания базы лежат в :\oracle\admin\mybase\create
Автор: alexsob
Дата сообщения: 06.02.2007 05:48
royt
В триггере Before в autonomus-процедуре в лог-таблицу можно заносить primary key отслеживаемой таблицы, в триггере After а в процедуре, фиксирующей факт изменений, искать строку с данным primary key и изменять значения с "Попытка..." на "Изменение...".
Возможны нюансы, но, в принципе, должно работать.
Автор: royt
Дата сообщения: 07.02.2007 13:37
alexsob
Цитата:
...можно заносить primary key отслеживаемой таблицы
тогда надо будет вписывать еще имя или какой-то другой уникальный id отслеживаемой таблицы (это в случае, если в одной таблице-логе будут отслеживаться разные таблицы - ведь значения их primary key могут пересекаться). Соответственно, при поиске такой записи в логе (во время работы триггера "after") придется использовать уже два поля, что в какой-то степени еще увеличивает время на отработку триггера. Это нюансы, но все же... Хотелось найти способ каким-то образом уникально идентифицировать отслеживаемую запись или глобальную (пользовтаельскую) транзакцию одним значением относительно всей схемы (а не только внутри таблицы). Пдозреваю, что у транзакции должен быть такой id (т.е. который можно узнать внутри как триггера "before", так и "after" - причем в обоих случаях этот id по идее должен быть одним и тем же).

А вот идея изменять вместо удалять - полезна, как то не подумал, спасибо за подсказку.
Автор: alexsob
Дата сообщения: 08.02.2007 08:50
royt

Цитата:
в какой-то степени еще увеличивает время на отработку триггера

Так ведь можно и проиндексировать лог-таблицу по двум полям либо использовать одно поле, в котором будет что-то типа ТАБЛИЦА/PRIMARY_KEY. Индекс, разумеется, тоже будет нужен.
А насчет ID транзакции, то, он, конечно есть, но:
1. Зарыт где-то глубоко и добраться до него если и возможно через внутренние представления, то время доступа к ним куда больше, чем время поиска по индексированному столбцу.
2. Этот номер вообще не нужен, т.к. транзакция включает в себя изменение не только одной строки, в вообще все изменения всех строк во всех таблицах до commit.

Автор: royt
Дата сообщения: 09.02.2007 07:31
alexsob

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


Цитата:
Зарыт где-то глубоко и добраться до него если и возможно через внутренние представления, то время доступа к ним куда больше, чем время поиска по индексированному столбцу.
Неужели действительно только через представления? Ведь этот ID должен лежать где-то "рядом", в контексте транзакции, постоянно находиться в памяти, и по идее может быть легко доступен по какой-нибудь команде/функции. Если только это не сделано по принципиальным соображениям, но я пока таких не могу придумать.
Слушайте, а может в Oracle вообще есть что-то типа TLS (thread local storage)? Тогда засунул бы сам туда UUID и получил то же самое (что и с transaction-id). В общем, будем еще рыть в этом направлении.


Цитата:
Этот номер вообще не нужен, т.к. транзакция включает в себя изменение не только одной строки, в вообще все изменения всех строк во всех таблицах до commit
Да, это тоже понятно конечно.
Но на самом деле неплохо было бы иметь id "пользовательской" транзакции в любом случае - тогда легче логически объединить все изменения одной транзакции в одно и показать в логе как единую операцию.

Добавлено:
вдогонку, есть оказывается такой
DBMS_TRANSACTION.LOCAL_TRANSACTION_ID
- уникален относительно инстанса, для моей задачи этого пока достаточно
Автор: bandyn
Дата сообщения: 10.02.2007 23:53
vshersh
Сервер у меня IBM System p5-520. ОС - AIX 5.3. ORACLE 9.2


Цитата:
Я бы пересоздал starter DB

А как пересоздать? Я в ORACLE новичок.
Автор: vshersh
Дата сообщения: 12.02.2007 19:03
bandyn
Я не уверен, что у меня достаточно опыта для того чтобы полностью проконсультировать, как это сделать... Тем более я сталкивался с Oracle под серверами с ОС Linux и Windows
Но может быть поможет [more=эта статья...]
How to Create a Database in the Unix Environment

PURPOSE
This entry includes the following four methods for creating a database
within the UNIX environment and Oracle7:

Method I - Creating the Database Manually
Method II - Using the CRDBXXX.SQL Script
Method III - Using ORAINST
Method IV - Using the UNIX "CP" Command


SCOPE & APPLICATION
To help ensure a better understanding of the corresponding created
database files, it is recommended that the following documentation
is also referenced:

Administrator's Guide, Creating A Database: Chapter 2
SQL Language Reference Manual, Create Database Command



Method I - Creating the Database Manually

Setting the Unix Enviroment

When creating a database, Oracle looks at the environment to see which
database to create. Therefore, it is essential that before creating a
database your environment is set with the database name. If you are
creating a second database, be sure to use a new database name.
The following environment variables need to be set:

ORACLE_SID - set to the database name you wish to create
ORACLE_HOME - set to full pathname of the Oracle system home directory
PATH - needs to include $ORACLE_HOME/bin


To set your Unix environment use the following commands depending on the Unix
shell you are using:

sh - ORACLE_SID XXX;export ORACLE_SID
csh - setenv ORACLE_SID XXX

Check to be sure it was changed:

echo $ORACLE_SID
<NEW_NAME>

NOTE: Not changing the ORACLE_SID environment and running the create
database may wipe out your existing database and all of its data.


Creating the Database

This method involves typing the create database statement within SQL*DBA
or Server Manager. Using this method allows for more flexibility such as
specifying the MAXDATAFILES parameter or specifying multiple SYSTEM tablespace

database files. However by doing this manually there is also a greater
possibility of syntax errors. In addition there is no logfile automatically
created to record the options which have been specified.

Steps for Method I:

1. Set the UNIX environment (SEE SETTING UNIX ENVIRONMENT SECTION ABOVE).

2. Create new init<sid>.ora and config<sid>.ora files for your new
database by copying the default ones provided by Oracle:

% cp $ORACLE_HOME/dbs/init<sid>.ora $ORACLE_HOME/dbs/initNEW_NAME.ora
% cp $ORACLE_HOME/dbs/config<sid>.ora
$ORACLE_HOME/dbs/configNEW_NAME.ora

3. Change db_name parameter in the new initNEW_NAME.ora from DEFAULT to
the new database name and specify the control file's name and location
(this is often found in the config<sid>.ora file).

NOTE: If the database name is not specified when using the create
database statement, the name specified for the initialization
parameter "DB_NAME" in the init<sid>.ora file is used.

4. Startup SQL*DBA or Server Manager in line mode:

sqldba lmode=y
or
svrmgrl

Note: We will use Server Manager in our examples.
If you are using SQL*DBA (versions prior to V7.3.x), the
commands are the same.

5. Connect to the instance, and startup in a 'NOMOUNT' state:

SVRMGR> connect internal
Connected
SVRMGR> startup nomount
ORACLE instance started

6. Refer to the SQL Language Reference Guide for the 'CREATE DATABASE'
statement syntax - page 4-148.

Here is a sample create database statement:

SVRMGR> create database NEW_NAME
2> logfile group 1 '$ORACLE_HOME/dbs/log1NEW_NAME.dbf' size 500K,
3> group 2 '$ORACLE_HOME/dbs/log2NEW_NAME.dbf' size 500K
4> datafile '$ORACLE_HOME/dbs/dbsNEW_NAME.dbf' size 20M
5> maxdatafiles 50;

7. Once completed run catalog.sql located in the oracle_home/rdbms/admin
directory. This script must be run under the 'SYS' user or connected
'internal'.

NOTE: If such products as replication, parallel server or procedural
option are installed, the following additional scripts must be run:

SVRMGR>@oracle_home/rdbms/admin/catalog.sql

In addition, if procedural option is installed:

SVRMGR>@oracle_home/rdbms/admin/catproc.sql

In addition, if replication is installed:

SVRMGR>@oracle_home/rdbms/admin/catrep.sql

In addition, if parallel server in installed:

SVRMGR>@oracle_home/rdbms/admin/catparr.sql


8. After the database has been created, the SYSTEM tablespace and SYSTEM
rollback segment will exist. However, a second rollback segment in the
SYSTEM tablespace must be created and activated before any other
tablespaces can be created in the database (Refer to SQL Language
Reference Manual for full syntax).

Creating the rollback segment:

SYNTAX: CREATE ROLLBACK SEGMENT system2
TABLESPACE SYSTEM
STORAGE (...);

Activating the rollback segment:

SYNTAX: ALTER ROLLBACK SEGMENT system2 ONLINE;

You will then need to create a new tablespace. This tablespace should only
contain rollback segments. For example, to create a tablespace of size 20M
with the name RBS:

SVRMGR> create tablespace RBS datafile '<datafile name>' size <20M>;

You will then need to create additional rollback segments and bring
them online. Once at least one other rollback segment is online, you
should then drop the second rollback segment 'system2' created above.

SVRMGR> create rollback segment <name1> tablespace RBS size <n>;
SVRMGR> create rollback segment <name2> tablespace RBS size <n>;
SVRMGR> alter rollback segment <name1> online;
SVRMGR> alter rollback segment <name2> online;
SVRMGR> alter rollback segment system2 offline;
SVRMGR> drop rollback segment system2 ;

If the rollback segments were created as private rollback segments,
you will need to edit the init<SID>.ora parameter file and add the line:

rollback_segments = (<list of rollback segments>)

so that the next time the database is started they are brought online
automatically.

9. Run the pupbld.sql script

% cd $ORACLE_HOMEsqlplus/admin
% svrmgrl
SVRMGR> connect system/<password>
SVRMGR> @pupbld

10. Modify the /etc/oratab file by adding the new database name. This
is used by dbstart to startup all databases with a 'Y' entry in this
file. (See page 4-17 of Oracle for Unix technical Reference Guide).


[Top]

Method II - Using the CRDBXXX.SQL Script

Setting the Unix Environment

When creating a database, Oracle looks at the environment to see which
database to create. Therefore, it is essential that before creating a
database your environment is set with the database name. If you are
creating a second database, be sure to use a new database name.
The following environment variables need to be set:

ORACLE_SID - set to the database name you wish to create
ORACLE_HOME - set to full pathname of the Oracle system home directory
PATH - needs to include $ORACLE_HOME/bin


To set your Unix environment use the following commands depending on the Unix
shell you are using:

sh - ORACLE_SID XXX;export ORACLE_SID
csh - setenv ORACLE_SID XXX

Check to be sure it was changed:

echo $ORACLE_SID
<NEW_NAME>

NOTE: Not changing the ORACLE_SID environment and running the create
database may wipe out your existing database and all of its data.


Creating the Database

This method assumes that you have created *at least one database through the
install* and therefore have a 'crdbXXX.sql' script (XXX being the created
database name). With this option you copy this sql script and make the
necessary modifications. This option allows you to make whatever changes
are desired, such as the MAXDATAFILES parameter or specifying multiple
SYSTEM tablespace database files.

Steps for Method II:

1. Set the UNIX environment (SEE SETTING UNIX ENVIRONMENT SECTION ABOVE).

2. Create new init<sid>.ora and config<sid>.ora files for your new database by
copying the default ones provided by Oracle:

% cp $ORACLE_HOME/dbs/init<sid>.ora $ORACLE_HOME/dbs/initNEW_NAME.ora
% cp $ORACLE_HOME/dbs/config<sid>.ora $ORACLE_HOME/dbs/configNEW_NAME.ora

3. Change db_name parameter in the new initNEW_NAME.ora from DEFAULT to
the new database name and specify the control file's name and location
(this is often found in the config<sid>.ora file).

NOTE: If the database name is not specified when using the create
database statement, the name specified for the initialization
parameter "DB_NAME" in the init<sid>.ora file is used.

4. Create a new crdbXXX.sql for your new database by copying the existing one
in the ORACLE_HOME/dbs directory. NOTE: If you have never created a
database through the install, you CANNOT use this method.

5. Modify the crdb<dbname>.sql and change the system datafile,
logfiles, database name, and pfile="path/initNEW_NAME.ora"

6. Run the modified create script:

$ sqldba lmode=y
SQLDBA> @crdbXXX
or

$ svrmgrl
SVRMGR> @crdbXXX

Note: We will use Server Manager in our examples.
If you are using SQL*DBA (versions prior to V7.3.x),
the commands are the same.

OPTIONAL!!! If you wish only to create the system tablespace, skip to step 9.
Only go through steps 7 and 8 if you wish to also create the standard
tablespaces the install creates.

7. Create a new crdb2<dbname>.sql by coping an existing one.
Make the necessary changes to is, as above, such as datafile names, sizes,
etc. However, this applies to the standard tablespaces which are created
by the install, including RBS, USERS, TEMP, TOOLS.

8. Run the modified script, skip to step 10:

SVRMGR> @crdb2XXX

9. Run catalog.sql found in the ORACLE_HOME/rdbms/admin directory.
This script should be run while connected internal after the
database is successfully created.

NOTE: this step is only necessary if you skipped steps 7 and 8.

SVRMGR>@oracle_home/rdbms/admin/catalog.sql

10. If such products as replication, parallel server or procedural
option are installed, the following additional scripts must be run:

If procedural option is installed:

SVRMGR>@oracle_home/rdbms/admin/catproc.sql

If replication is installed:

SVRMGR>@oracle_home/rdbms/admin/catrep.sql

If parallel server in installed:

SVRMGR>@oracle_home/rdbms/admin/catparr.sql

11. Run the pupbld.sql script

% cd $ORACLE_HOMEsqlplus/admin
% svrmgrl
SVRMGR> connect system/<password>
SVRMGR> @pupbld


[Top]

Method III - Using ORAINST

Setting the Unix Environment

When creating a database, Oracle looks at the environment to see which
database to create. Therefore, it is essential that before creating a
database your environment is set with the database name. If you are
creating a second database, be sure to use a new database name.
The following environment variables need to be set:

ORACLE_SID - set to the database name you wish to create
ORACLE_HOME - set to full pathname of the Oracle system home directory
PATH - needs to include $ORACLE_HOME/bin


To set your Unix environment use the following commands depending on the Unix
shell you are using:

sh - ORACLE_SID XXX;export ORACLE_SID
csh - setenv ORACLE_SID XXX

Check to be sure it was changed:

echo $ORACLE_SID
<NEW_NAME>

NOTE: Not changing the ORACLE_SID environment and running the create
database may wipe out your existing database and all of its data.



Creating the Database

Note: This method *cannot* be used for V7.3.2.1 installs,
but *can* be used for versions 7.3.2.2 and up.

With this method a database can be created using the orainst.
Since this process is menu driven it is easy to use, in addition
it will run necessary scripts for any product selected. However,
this method does not have all database options available, such as
specifying a higher MAXDATAFILES value. In addition, if this method is
chosen, you must create all the standard non-system tablespaces.

Here are the steps for Method III:

1. Make a copy of your existing config.ora file in the $ORACLE_HOME/dbs
directory. THIS FILE WILL BE OVERWRITTEN WITH THIS METHOD.

% cp $ORACLE_HOME/dbs/config.ora $ORACLE_HOME/dbs/configORIG_DB.ora

2. Run orainst from the $ORACLE_HOME/install directory.
(Note: This may also be in the $ORACLE_HOME/orainst directory.)

3. When running orainst a logfile will be generated. Specify a name
for this logfile so that this file can be easily found and accessed.

4. From the Install Actions choose:
'Create New Database Objects'

5. Enter the new SID for this database.

6. From the Select Available Products choose:

'Oracle7 Server (RDBMS)'

In addition select all other appropriate products that you will
wish to use with the new database. (Note: This option will
not reinstall the product software.)

Once you select all the products, tab to <install> and accept.

7. Continue the installation by answering the appropriate questions.

8. Orainst will let you know what step it is processing. Once it is done,
in addition to a database, you will also have a crdb<DBNAME>.sql discussed
in Method II above. Be sure to check the log specified in step 2
to be sure no errors occurred.

9. Clear up the config.ora confusion:

a. Copy config.ora to new database name
% cp $ORACLE_HOME/dbs/config.ora $ORACLE_HOME/dbs/configNEW_DB.ora
b. Edit initORIGINAL_DB.ora change the ifile entry from config.ora to
configORIG_DB.ora
c. Edit initNEW_DB.ora change the ifile entry from config.ora to
configNEW_DB.ora


[Top]

Method IV - Using the UNIX "CP" Command

Setting the Unix Environment

When creating a database, Oracle looks at the environment to see which
database to create. Therefore, it is essential that before creating a
database your environment is set with the database name. If you are
creating a second database, be sure to use a new database name.
The following environment variables need to be set:

ORACLE_SID - set to the database name you wish to create
ORACLE_HOME - set to full pathname of the Oracle system home directory
PATH - needs to include $ORACLE_HOME/bin


To set your Unix environment use the following commands depending on the Unix

shell you are using:

sh - ORACLE_SID XXX;export ORACLE_SID
csh - setenv ORACLE_SID XXX

Check to be sure it was changed:

echo $ORACLE_SID
<NEW_NAME>

NOTE: Not changing the ORACLE_SID environment and running the create
database may wipe out your existing database and all of its data.


Creating the Database

The following procedure describes how to create a second database and instance
from an existing database using the UNIX 'cp' command and Oracle's 'create
control file statement'. The second instance can also be created by restoring
datafiles from a cold backup.

Steps for Method IV:

1. Set the UNIX environment variable to the current database, DatabaseA.
(SEE SETTING UNIX ENVIRONMENT SECTION ABOVE).

2. Backup the control file to trace From DatabaseA. The trace file
(ora_xxx.trc) is located in the directory defined by USER_DUMP_DEST.

SQLDBA>alter database backup controlfile to trace resetlogs;

3. Modify trace file script by doing the following:

a. Remove the header information.
b. Modify the LOGFILE to point to the new names of the redo logfiles.
c. Modify the DATAFILE to point to the new names of the data files.
d. Modify the create controlfile statement to:
CREATE CONTROLFILE SET DATABASE DatabaseB RESETLOGS NOARCHIVELOG
or if the database is in archive log mode:
CREATE CONTROLFILE SET DATABASE DatabaseB RESETLOGS ARCHIVELOG
e. Remove everything from script after the end of the
create controlfile statement.

4. Shutdown DatabaseA. Make sure that this is a NORMAL or IMMEDIATE
shutdown. DatabaseA MUST NOT be shutdown using SHUTDOWN ABORT.

5. Copy DatabaseA database files and redo logfiles (dbf,log) to the DatabaseB
directories. The files may alternatively be restored from a cold backup.

6. Copy DatabaseA parameter files to DatabaseB parameter files by
doing the following:

a. Copy initDatabaseA.ora to initDatabaseB.ora.
b. Copy configDatabaseA.ora to configDatabaseB.ora.
c. Modify initDatabaseB.ora to point to the config.ora of DatabaseB.
d. Modify the following parameters in initDatabaseB.ora:

IFILE = configDatabaseB.ora
CONTROL_FILE = new control files names
DB_NAME = new database name

Comment out the parameter REMOTE_LOGIN_PASSWORDFILE if it is set
to EXCLUSIVE.

Be sure to copy the files using the same Unix user as the current owner.
If the files have the wrong permissions, when attempting to create
the controlfile you are likely to encounter ORA-1503, ORA-1161,
ORA-1110.

7. Set the following environment variables:

ORACLE_SID = DatabaseB
ORACLE_HOME = Full pathname of home directory of DatabaseB

8. Run the trace file script from 3) via SVRMGRL as a privileged user
(connect internal in Oracle 8.1 or earlier).

After the CREATE CONTROLFILE statement has run, you will need to
take one of the following actions:

8a. If this is a copy from a cold backup, issue the command:

ALTER DATABASE OPEN RESETLOGS;

8b. If the files are from a backup, and you want to roll forward, perform
standard media recovery. When the recovery is successfully complete,
issue the command:

ALTER DATABASE OPEN RESETLOGS;

8c. If the files are from an aborted instance, you will need to perform
a recovery. The recovery will need to roll forward through the online
redo logs copied over with the database. The controlfile will not
indicate which online redo log is current. A list of online logs
which will indicate which redo log is current can be obtained using
the command:

SELECT member FROM v$logfile;

Issue the following command:

RECOVER DATABASE USING BACKUP CONTROLFILE

At the recovery prompt apply the online logs in sequence by typing the
unquoted full path and file name of the online redo log to apply. After
applying the current redo log, you will receive the message 'Media
Recovery Complete'. Once the media recovery is complete issue the
command:

ALTER DATABASE OPEN RESETLOGS;

The database is now up and open under the new sid. DatabaseA may be
restarted.

alter database rename global_name to DatabaseB.WORLD;

9. Modify other utilities:

SQLNET (i.e. listener.ora, tnsnames.ora)
AUTOMATIC STARTUP (i.e. oratab)


[Top]

Search Words:

db, 2nd, instance, second, dbase, manual, copy, create, database, methods,
creation

@ create database create copy creation instance crdb create database cp
@ create database create copy creation instance crdb create database cp
@ create database create copy creation instance crdb create database cp
@ create database create copy creation instance crdb create database cp
@ create database create copy creation instance crdb create database cp
@ create database create copy creation instance crdb create database cp
@ create database create database create database create database create database
@ create database create database create database create database create database
@ create database create database create database create database create database
@ create database create database create database create database create database .
[/more]
Автор: bandyn
Дата сообщения: 13.02.2007 13:50
lYY


Цитата:
1. Оракл стоит, база создана, все работает и ты решил создать еще одну базу на том же сервере.
- как делаешь?


Да оракл стоит и база. Прислали новую базу с инструкцией по установке. Первый же скрип запарывается. см.выше
Автор: oid
Дата сообщения: 22.03.2007 10:46
Други мои!
Вопрос для тех, кто может реально помочь.
Имеет быть система, построенная по схеме "звезда" из 8 серверов Ора-10Г. 7 серверов филиалов и один логирующий определённую инфу. Между Ф(илиал) и Ц(ентр) поднят приват ДБлинк (7 штук), который обеспечивает обмен инфой.
Так вот проблема в том, что даже когда данные не передаются - загрузка канала 100%.
Подскажите, что можно сделать в данной ситуации. Оперативный обмен просто необходим, т.к. хранить копии 7 баз на каждом сервере - извращение.
Автор: dene14
Дата сообщения: 26.03.2007 14:35
Вопрос:
Есть запрос, который возвращает нное кол-во строк, можно ли сделать так, чтобы значение п столбцам просуммироваись и вывелась всего одна строка?
Автор: slaj1
Дата сообщения: 26.03.2007 15:34
dene14
тебя спасет функция sum
Автор: kvadm
Дата сообщения: 30.03.2007 17:16
Непонятки с ролями. Запросы

Код: select * from dba_role_privs where grantee = 'ABC' order by 2
Автор: lYY
Дата сообщения: 02.04.2007 07:25
Да и нормально это, у меня так же.
Если обычный юзер - результаты запросов совпадают, а если админ, то 3й запрос выдает больше.
Автор: dene14
Дата сообщения: 05.04.2007 18:48
Помогите пожалуйста сформировать запрос...
Проблема в следующем:
Есть таблица с колонками Truck, Fuel, Date1, Date2 (Date1 - Date2 это временной отрезок) и есть значение SDate. Так вот нужно чтобы SDate не попадало в отрезок Date2 - Date1 (именно так, имеется ввиду начало следующего отрезка) и строки окончания отрезка...

Сам пытаюсь решить через допу... и всё равно безуспешно...

SELECT * FROM ROUTEPAPER RP WHERE (RP.DATE2 BETWEEN (:SDATE - 5) AND :SDATE)

SELECT RP.TRUCK1 FROM ROUTEPAPER RP WHERE (RP.DATE1 > :SDATE - 1)

но не знаю как объединить эти два селекта, чтобы выбирались только те TRUCK1 которые получает второй селект... Подскажите как довести хотя бы такое решение, но т.к. оно не идеальное и у кого-то назреет более правильное решение поставленной проблемы - буду весьма признателен...
Автор: lYY
Дата сообщения: 06.04.2007 07:42
dene14

Я, например, ничего не понял.
Может так:
(SDATE < Date1 or SDATE > Date2)
- выберет все строки, кроме диапазона Date1 - Date2
?

А твои запросы:
1. Выбирает строки, где Date2 попадает в диапазон (SDste-5) - SDate
2. Выбирает строки, где Date1 больше (SDste-1)
- нарисуй на бумаге шкалу дат и посмотри, что получается.



D1 SD-5 D2 SD
---x---------------------o------------------x--------o-----o----
SD-1
Автор: dene14
Дата сообщения: 06.04.2007 10:20
Date1 :SDate - 5 Date2 :SDate
--x--------------------x------------------------x-----------x--
:SDate
Date1 :SDate - 5 Date2 :SDate
--x--------------------x------------------------x-----------x-----------x--


Это два подряд идущих временных отрезка для одного Truck. Так вот интересует выборка данных из первой строки, если значение Date1 второй строки равно или больше чем SDate или Date2 .

Или помогите сделать запрос из 2х моих:
SELECT * FROM ROUTEPAPER RP WHERE (RP.DATE2 BETWEEN (:SDATE - 5) AND :SDATE)

SELECT RP.TRUCK1 FROM ROUTEPAPER RP WHERE (RP.DATE1 > :SDATE - 1)

нужно чтобы первый селект имел ещё фильтр по тем TRUCK1, которые возвращает второй селект и всё это выполнялось в одном запросе... помогите плиз...
Автор: tavz
Дата сообщения: 06.04.2007 13:49
dene14

я не совсем разобрался в необходимом результате но разве нельзя оба условия поставить в одно выражение:

SELECT * FROM ROUTEPAPER RP WHERE (RP.DATE2 BETWEEN (:SDATE - 5) AND :SDATE) AND (RP.DATE1 > :SDATE - 1)

ну или же если это дает неверный результат то просто в тупую объеденить эти два селекта:

SELECT *
FROM ROUTEPAPER RP
WHERE (RP.DATE2 BETWEEN (:SDATE - 5) AND :SDATE)
AND RP.TRUCK? IN (SELECT RP2.TRUCK1
FROM ROUTEPAPER RP2
WHERE (RP2.DATE1 > :SDATE - 1) )
Автор: lYY
Дата сообщения: 06.04.2007 13:50
dene14


Код:
SELECT * FROM ROUTEPAPER RP
WHERE
(RP.DATE2 BETWEEN (:SDATE - 5) AND :SDATE) and
RP.TRUCK in (SELECT RP.TRUCK1 FROM ROUTEPAPER RP WHERE (RP.DATE1 > :SDATE - 1) )
Автор: dene14
Дата сообщения: 08.04.2007 18:22
lYY
Спасибо, но вот второй скрипт не срабатывает нормально... выдаёт кучу строк, когда их должно быть 3-5
Автор: SergiuZ
Дата сообщения: 10.04.2007 14:28
Пытался установить Oracle10, в самом начале установка прерывается и выдаёться сообщение, типа "установка невозможна, отчёт смотри в файлах ... " Вот, что пишеться в этих файлах:

файл №1: oraInstall2007-04-06_09-53-43PM.err
"Exception java.lang.InternalError: jzentry == 0,
jzfile = 90574616,
total = 27,
name = D:\Oracle\product\10.1.0\Client_1\inventory\Actions21\generalActions\10.1.0.2.0\generalActions.jar,
i = 20,
message = invalid LOC header (bad signature) occurred..
java.lang.InternalError: jzentry == 0,
jzfile = 90574616,
total = 27,
name = D:\Oracle\product\10.1.0\Client_1\inventory\Actions21\generalActions\10.1.0.2.0\generalActions.jar,
i = 20,
message = invalid LOC header (bad signature)
    at java.util.zip.ZipFile$2.nextElement(Unknown Source)
    at oracle.sysman.oii.oiix.OiixJarClassLoader.updateEntriesList(OiixJarClassLoader.java:261)
    at oracle.sysman.oii.oiix.OiixJarClassLoader.<init>(OiixJarClassLoader.java:219)...."
дальше не буду приводить, остальное примерно такое же.

файл№2: installActions2007-04-06_09-53-43PM.log

Using paramFile: E:\Oracle 10g For Windows 2000 & NT\install\oraparam.ini

No pre-requisite checks found in oraparam.ini, no system pre-requisite checks will be executed.
Environment Variables:
    ORACLE_HOME =
    PATH = C:\Program Files\ATI Technologies\ATI Control Panel;C:\PROGRA~1\Borland\CBUILD~1\Bin;C:\PROGRA~1\Borland\CBUILD~1\Projects\Bpl;C:\Program Files\Borland\Delphi7\Bin;C:\Program Files\Borland\Delphi7\Projects\Bpl\;C:\watcom-1.3\binnt;C:\watcom-1.3\binw;C:\Inprise\vbroker\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Intel\DMIX;C:\Program Files\ATI Technologies\ATI Control Panel;C:\Program Files\Samsung\Samsung PC Studio 3\;C:\Program Files\Microsoft SQL Server\80\Tools\Binn\
    CLASSPATH =
Username:Света
Unable to read the list of homes from the inventory.

Далее идёт отчёт о каждом установленном компоненте, там же иногда встречаются строки, типа :
Conflict while setting install type of "Enterprise Manager Minimal Integration 10.1.0.2.0 " to "Custom (Custom)". Install type already set to "Typical (Typical)". Seting it to "Custom (Custom)".

Буду благодарен за любую помощь.

P.S. К сожалению, следовать популярной инструкции RTFM совершенно нет времени , поэтому прошу присылать лишь конкретные советы.
Автор: lYY
Дата сообщения: 11.04.2007 08:02
Попробуй поставить на чистую машину, переменную среды сделай TEMP=C:\Temp

http://www.sql.ru/forum/actualthread.aspx?tid=199804

p.s. Да и напиши хоть, что получилось
Автор: lYY
Дата сообщения: 12.04.2007 13:16
Вопрос к знатокам, нужен совет.

Что-то мой Oracle 8.1.7 начал притормаживать (может растем помаленьку, а может настраивать не умеем).

Ser: Pentium IV 1.6/512/2 x 40Gb SCSI в зеркале
OS: RedHat 7.2
Пользователи: до 70 постоянного подключения + до 40 пользователей через HTTP
Данные: около 2Gb, в самой большой таблице до 700 тыс. записей
Софт: Builder через DOA, HTML через PHP, все пишем сами
OLTP / Data Warehousing / Multipurpose : выбрано Multipurpose
Dedicated Server Mode / Shared Server Mode : выбрано Dedicated Server Mode
(Shared pul ему мало, на latches ругается, даже на винты ругался, что для меня странно)

Есть желание перейти на 2х процессорный Обтерон (уже куплен).

Посоветуйте:
- Какую выбрать ОС (Windows/Linux, какой релиз)?
- Какой поставить Oracle (8, 9, 10G, 32bit или 64bit)?

(Есть желание попробовать Oracle 10G 64bit под 64bit OC - после чтения sql.ru оно пропало,
ОС будем покупать, Oracle будем пользовать как есть)

Добавлено:
По скольку высказаться никто не пожелал, адресуюсь на sql.ru
Автор: fandm
Дата сообщения: 22.05.2007 10:18
Всем привет!

А у меня такой вопрос...
Никто никогда случаем не сталкивался с задачей программного сравнения объектов 2-х схем Oracle с целью приведения в абсолютное соответствие одной к другой?

Смысл в чём... Есть такая утилита как Quest TOAD for Oracle... Так вот там есть возможность создать .def файл для конкретной схемы, а затем позже в той же TOAD сделать сравнение .def файла с подобной схемой БД, но, предположим, устаревшей, имеющей более старую версию. Там же есть возможность произвести все необходимые "апдейты" дабы привести старую схему в соответствие с новой.

Так вот вопрос в том, что надо реализовать подобный механизм, но программно, своими силами... например на Delphi... Кто-то что-то знает??? Задницей чувствую, что с нуля этим заниматься - отнимет уйму времени... так не хочется изобретать велосипед...
Автор: lYY
Дата сообщения: 22.05.2007 10:33
Т.е. ты хочешь повторить /TOAD сравнение .def файла/ своими руками на Delphi, да еще чтобы готовые куски кода/компоненты были? А смысл существования таких компонентов?
Кто и для чего их будет писать? Кому надо сравнить, TOAD возмут (или еще что либо подобное), а профессионалы и в ручную все сами сравнят.
Имхо, вопрос не понятен.
Автор: fandm
Дата сообщения: 22.05.2007 10:41
lYY

Да, ты меня понял абсолютно верно За исключением компонентов... о компонентах я и не думал в принципе

Теперь попытаюсь объяснить нафиг это надо...
Дело в том, что по долгу службы мне приходится работать над реализацией требований программной защиты информации в нашем продукте (система автоматизации делопроизводства) для прохождения экспертизы с целью получения соответствующего сертификата на право обработки документов ДСК и т.д. и т.п.
Так вот одним из требований является то, что "апдейт" схемы БД должен производиться автоматизированно и ТОЛЬКО средствами разработчика самой системы. Пользование продуктами 3-й стороны (аля ЖАБА) просто исключается... А там ещё будет прикручиваться шифрование, контроль целостности на этот .def файл, исключения возможности запуска не под админом и т.д. и т.п. Короче это должна быть своя административная утилита... отак...
Работая над данным вопросом, обратил внимание, что подобные вещи очень красиво реализованы в ЖАБЕ, вот и подумал, а что если... собственно дальше думаю понятно

Так что? Есть хоть какие-то намёки?
Автор: lYY
Дата сообщения: 22.05.2007 10:49
Если ты учавствуеш в разработке этой системы, то все ручками и с нуля. Не думаю, что реально найти подобные коды/скрипты в открытом виде.
Автор: fandm
Дата сообщения: 22.05.2007 10:52
Откровенно говоря, я сначала хотел выкусить из ЖАБЫ кусок кода на ассемблере, который собственно и производит сравнение .def файла с объектами конкретной схемы, но увы... практических навыков не хватат Так... WinHEX-ом иногда балуюсь, но не до такой же степени
А попросить этот кусок кода у Quest как-то рука не поднимается...

Добавлено:

Цитата:
Если ты учавствуеш в разработке этой системы, то все ручками и с нуля.


Я не то что участвую... Я собственно чуть ли не стою у её истоков... Да собственно не в этом и дело... Я просто не считаю что это весомый аргумент делать всё с нуля Уверен, что кто-то когда-то где-то уже с подобной задачей сталкивался... вот и решил спросить совета А ещё поджимают слегка сроки, увы...
Автор: dene14
Дата сообщения: 08.06.2007 14:00
Скажите, возможно ли объединить 2 SELECTa так, чтобы стобцы склеить???
Допустим есть селект который выводит таблицу:
|ID|CUSTOMER|PRICE|YEAR|
и второй селект, выводящий
|ID|CUSTOMER|SALES|UNITS|
т.е. в итоге хотелось бы получить объединение вида:
|ID|CUSTOMER|PRICE|YEAR|SALES|UNITS|
по столбцам |ID|CUSTOMER|

Страницы: 1234567891011121314151617181920212223

Предыдущая тема: JET и Excel


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.