先日、自社に帰社したら、別の現場の方から
「OracleではIN句が1000個までしか指定できないので、回避策は無いか」
といった相談を受けました。
たとえば、こんなSQLで考えてみました。
select bonus from salary
where empno in (select empno from employee where prefecture = 'CHIBA');
このとき、千葉県の社員が1000人を超えるとORA-01795が発生します。
さて、どうやってSQLを書き変えましょうか。
IN句を書かずにこう書いてみます。
select bonus from salary,employee
where employee.prefecture = 'CHIBA' and salary.empno = employee.empno;
EXIST句で書く方法もあります。
select bonus from salary
where exists
( select empno from employee
where prefecture = 'CHIBA'
and salary.empno = employee.empno);
AccessでSQL実行してみましたが、問題無く動きました。
IN句とEXIST句の書き換えが難なくできるようになりたいものです。
2015年1月25日日曜日
2015年1月10日土曜日
ORA-01111 : name for data file XX is unknown
新年あけましておめでとうございます。今年も宜しくお願い致します。
さて、年初よりDataGuardと格闘をしております。
先日、訳あってスタンバイデータベースをリカバリしていたら、こんなエラーが出てしまい、ハマってしまいました。
ORA-01111: name for data file 47 is unknown ? rename to correct file
ORA-01110: data file 47: ‘/u01/app/oracle/product/11.2.0/db_1/dbs/UNNAMED00047′
ORA-01157: cannot identify/lock data file 47 ? see DBWR trace file
プライマリ側でデータファイルが追加になったのですが、スタンバイデータベースに表領域作成がされないため、
データベースが困っている状態のようです。
こんなときは、表領域を作成する必要があります。
alter database create datafile '/u01/app/oracle/product/11.2.0/db_1/dbs/UNNAMED00047'
as '+DATA/sakedb/aquavit.dbf';
データファイルが作成できたら、あとはrecover standby databaseでスタンバイデータベースを復旧できます。
さて、年初よりDataGuardと格闘をしております。
先日、訳あってスタンバイデータベースをリカバリしていたら、こんなエラーが出てしまい、ハマってしまいました。
ORA-01111: name for data file 47 is unknown ? rename to correct file
ORA-01110: data file 47: ‘/u01/app/oracle/product/11.2.0/db_1/dbs/UNNAMED00047′
ORA-01157: cannot identify/lock data file 47 ? see DBWR trace file
プライマリ側でデータファイルが追加になったのですが、スタンバイデータベースに表領域作成がされないため、
データベースが困っている状態のようです。
こんなときは、表領域を作成する必要があります。
alter database create datafile '/u01/app/oracle/product/11.2.0/db_1/dbs/UNNAMED00047'
as '+DATA/sakedb/aquavit.dbf';
データファイルが作成できたら、あとはrecover standby databaseでスタンバイデータベースを復旧できます。
登録:
投稿 (Atom)