*[[Oracle TIPS]] #author("2018-12-10T10:44:27+09:00","default:zzr12000","zzr12000") *[[Oracle TIPS]] [#m6788b71] #contents **データベースのキャラクタセット **データベースのキャラクタセット [#v0201a92] よくわからない場合は、とりあえずJA16SJISTILDEにしておきましょう。 月間DBマガジン2006 2を参考に **sysでログイン **sysでログイン [#ec9b85f7] sqlplusでsysでログインしようとすると ORA-28009: connection to sys should be as sysdba or sysoper と表示される場合があります。このときは、 sqlplus /nolog でログインし、 connect sys as sysdba と入力後、パスワードを入力します。もしくは、 sqlplus "sys/hogepass@hogetns as sysdba" **表の名称変更 **表の名称変更 [#uf322dc2] RENAME 元の表 TO 新しい表; **列の削除 **列の削除 [#mf5ead15] ALTER TABLE テーブル名 DROP COLUMN 列名; **データベースリンクの作成方法 **データベースリンクの作成方法 [#p8471c43] CREATE DATABASE LINK 作成リンク名 CONNECT TO ユーザーID IDENTIFIED BY パスワード USING ’接続文字列’; select * from テーブル@作成リンク名 **文字コードの確認 **文字コードの確認 [#ne861b9b] select * from NLS_DATABASE_PARAMETERS where PARAMETER = ’NLS_NCHAR_CHARACTERSET’; **現在アクティブな(ログインしている)ユーザーの検索、削除 **現在アクティブな(ログインしている)ユーザーの検索、削除 [#x61c62f3] -検索 SQL> select sid,serial#,status,osuser,username,machine from v$session 2 where username='hoge'; SID SERIAL# ---------- ---------- 9 87 -削除 SQL> alter system kill session ’9,87’; もっと簡単にやるには Enterprise Managerを使いましょう **ライセンス数 **ライセンス数 [#eb7e2077] select * from v$license; **カーソル数 **カーソル数 [#he1272f1] select * from v$open_cursor; **ログイン時に実行されるトリガー **ログイン時に実行されるトリガー [#yd62cae6] CREATE OR REPLACE TRIGGER LOG_LOGON AFTER LOGON ON DATABASE BEGIN INSERT INTO TBL_TEST VALUES(1,1); END; **データファイルの場所 **データファイルの場所 [#gf2c5d52] select * from dba_data_files; **テーブルスペース確認 **テーブルスペース確認 [#q9a7b5fc] select * from dba_tablespaces; ※データファイルに関する情報の確認 select * from dba_data_files; ※表領域に関する情報の確認 **データファイルの移動 **データファイルの移動 [#v32ed0d7] 1.表領域をオフライン alter tablespace testspace OFFLINE; 2.データファイル移動または、名前変更(エクスプローラ等) 3.Alter database rename file ’C:\data\test.ORA’ to ’C:\data\testnew.ORA’ 4.表領域をオンライン alter tablespace testspace ONLINE; **SQLPLUS 初期実行ファイル **SQLPLUS 初期実行ファイル [#g977b018] C:\oracle\ora81\sqlplus\admin\glogin.sql に --orignal set lines 160; set pages 60; def_editor=’C:\Program Files\Hidemaru\Hidemaru.exe’ --set heading off; select * from v$version; select * from NLS_DATABASE_PARAMETERS where PARAMETER = 'NLS_NCHAR_CHARACTERSET’; select * from global_name; select host_name,instance_name from v$instance; set time on; --set heading on; --set pause on; **データベース削除 **表領域を自動拡張に変更 [#gb40ebba] select file_name,autoextensible from dba_data_files; で確認後 ALTER DATABASE DATAFILE 'C:\APP\TEST\ORADATA\ORCL\HOGE.DBF' AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED; **データベース削除 [#e7bebc42] oraadim -DELETE -SID sid これで、 サービス[OracleServicesid] レジストリ[HKEY_LOCAL_MACHINE]-[SOFTWARE]-[ORACLE]-[HOME0] にあるORA_sidで始まる5項目が削除されます。 あとは、 oracle_home\oradata\sid oracle_home\admin\sid のファイルを削除 簡単にするには、OracleDatabaseConfigurationを使いましょう。 **PLAN_TABLE **PLAN_TABLE [#p720df63] Oracle9i \oracle\ora92\rdbms\admin\utlxplan.sql Oracle10g \oracle\product\10.1.0\Db_1\RDBMS\ADMIN\utlxplan.sql **今実行されているSQLを知りたい **今実行されているSQLを知りたい [#o661366c] SELECT TO_CHAR(SES.LOGON_TIME, 'HH24:MI:SS') AS LOGON_TIME, SES.USERNAME AS LOGON_USER, SES.SID AS SID, SES.SERIAL# AS SERIAL, SES.STATUS AS STATUS, SQL.SQL_TEXT AS SQL_TEXT FROM V$SESSION SES, V$SQLAREA SQL WHERE SES.SQL_ADDRESS = SQL.ADDRESS(+) AND SES.SQL_HASH_VALUE = SQL.HASH_VALUE AND SES.TYPE = 'USER' ORDER BY SES.LOGON_TIME; **別のテーブルの値で更新したい場合 **別のテーブルの値で更新したい場合 [#dbc0e6e7] テーブルtest1のc,d項目をテーブルtest2のc,d項目で更新する。このとき、test1.aとtest2.a、test1.bとtest2.bでジョインできるものとして、 update test1 a1 set (a1.c,a1.d) = ( select ba.c,ba.d from test2 ba where a1.a=ba.a and a1.b=ba.b ) where exists( select * from test2 ba where a1.a=ba.a and a1.b=ba.b ) **Enterprise Manager **Enterprise Manager [#vb5ae452] 10gよりEnterprise Managerにブラウザからアクセスするようになりました。サービスのdbconsoleが起動しているのを確認してORACLE_HOME/install/portlist.iniを参照しましょう。 http://localhost:1158/em **フラッシュバック **フラッシュバック [#ref624e7] 9iからも一部実装されてましたが、過去に消したデータやテーブルを復活させることができます。このために10gにする価値はあります。 ***テーブルを消した場合 ***テーブルを消した場合 [#hc5aab92] select * from user_recyclebin; これで削除したテーブルが確認できますので、戻してみましょう。 flashback table tablename to before drop; つまりWindowsのゴミ箱みたいなもんです。ですので、当然消さないとたまります。自分で消したい場合は、 PURGE RECYCLEBIN ですべてを、またテーブルを指定したい場合は、 PURGE TABLE tablename **Caused by: java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG column **Caused by: java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG column [#d1a2abde] JDBCで接続している場合このエラーがでたら、JDBCのバージョンを見直してみましょう。~ http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=31968&forum=12&6 **マテリアライズド・ビュー・ログは最終リフレッシュよりも新しいものです。のエラーが出た場合 **マテリアライズド・ビュー・ログは最終リフレッシュよりも新しいものです。のエラーが出た場合 [#d142f80a] DECLARE debug BINARY_INTEGER; BEGIN DBMS_MVIEW.REFRESH_ALL_MVIEWS(debug,'?','',FALSE,FALSE); END; / ** オプティマイザ統計情報の手動収集 ** オプティマイザ統計情報の手動収集 [#fe56cebf] exec DBMS_STATS.GATHER_SCHEMA_STATS ('ユーザ名', estimate_percent=>dbms_stats.auto_sample_size); ** リスナーが起動せん ** リスナーが起動せん [#cd605402] listener.logが4GBを超えた為、Listenerが起動できていなかった。~ http://mattari-oboe.blogspot.jp/2014/10/oracle-listenerlog4gb.html /u01/app/oracle/diag/tnslsnr/localhost/listener/trace ** テーブルスペース移動 ** テーブルスペース移動 [#k2610a42] alter tablespace HOGE OFFLINE; cd /u01/app/oracle/oradata/orcl12/pdborcl cp -pi HOGE.DBF /home/oracle/oracle/ rm -i HOGE.DBF alter tablespace HOGE rename datafile '/u01/app/oracle/oradata/orcl12/pdborcl/HOGE.DBF' to '/home/oracle/oracle/HOGE.DBF'; alter tablespace HOGE ONLINE; http://qiita.com/nishimry/items/3d57e681c8f8dbdd6caa ** リンク ** リンク [#edf4d819] ** 参考書籍 ** 参考書籍 [#g0b6f67f] ** コメント ** コメント [#ke28f5b6] -#comment