オラクルデータベースへの接続
環境が作成できたら、オラクルデータベースに接続をしてみましょう。
データベースへの接続にはローカル接続と、ネットワークを経由してクライアントコンピューターから接続するリモート接続があります。
今回はネットワークは使用せずに直接接続するローカル接続の方法を紹介します。
基本的には接続する際にSQL*Plusというツールを使用します。
このSQL*Plusを使用してローカル接続する場合は以下のように接続します。
sqlplus <ユーザー名>/<パスワード> [as sysdba]
データベースを作成時点ではSYSという管理者ユーザーが作成されており、基本的に最初はこのユーザーを使用して接続します。
SYSユーザーで接続する場合は、以下のように as sysdba を指定して接続しましょう。
この時指定するパスワードはデータベース作成時に設定したパスワードを入力します。
また、接続する際に環境変数を指定してから接続しましょう。
[oracle@v19single ~]$ export ORACLE_SID=v19
[oracle@v19single ~]$ export ORACLE_BASE=/u01/app/oracle
[oracle@v19single ~]$ export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
[oracle@v19single ~]$ export PATH=$PATH:$ORACLE_HOME/bin
[oracle@v19single ~]$ sqlplus sys/oracle as sysdba ★接続
SQL*Plus: Release 19.0.0.0.0 – Production on 金 9月 20 15:56:41 2024
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.21.0.0.0
に接続されました。 ★接続された
SQL> show user
ユーザーは”SYS”です。 ★SYSユーザーで接続されている
SQL>
※指定する環境変数は、個々の環境に合わせて設定してください。
※上記はLinuxの場合の環境変数設定です。
Windowsの場合は以下のように設定します。
set ORACLE_BASE=C:\app\oracle
set ORACLE_HOME=C:\app\oracle\product\19.0.0\dbhome_1
set ORACLE_SID=ver19
set PATH=%ORACLE_HOME%\bin;%PATH%
また、 Oracle DatabaseをインストールしたOSユーザーを使用してSYSユーザーで接続する場合は、ユーザー名とパスワードを省略することが可能です。
以下のように接続します。
sqlplus / as sysdba
[oracle@v19single ~]$ sqlplus / as sysdba ★ユーザー名とパスワードを省略
SQL*Plus: Release 19.0.0.0.0 – Production on 金 9月 20 16:06:06 2024
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.21.0.0.0
に接続されました。
SQL> show user
ユーザーは”SYS”です。 ★SYSユーザーで接続されている
SQL>
また、ユーザーを作成して接続することも可能です。
以下のコマンドでユーザー作成が可能です。
create user <ユーザー名> identified by “<パスワード>” ;
※パスワードは大文字小文字が区別されます。
詳細は以下のマニュアルをご参考ください。
SQL言語リファレンス – CREATE USER
また、ユーザーを作成したのみでは接続はできません。
接続できるようにするためには “CREATE SESSION” という権限を付与する必要があります。
また、例えば表を作成する等の操作にも権限が必要です。(CREATE TABLE権限)
作成したユーザーで様々な処理を行う場合は必要な権限を付与しましょう。
権限には多くの種類があるため詳細はマニュアルを確認しましょう。
SQL言語リファレンス – GRANT
権限を付与する場合は、以下のコマンドを実行します。
grant <付与する権限名> to <ユーザー名> ;
また、作成したユーザーでデータベースには以下のコマンドで接続できます。
※as sysdbaは不要です。
sqlplus <ユーザー名>/<パスワード>
以下は、USER1を作成し、CREATE SESSION権限(接続権限)を付与し、USER1で接続する例です。
SQL> create user user1 identified by “user1”; ★USER1というユーザーを作成
ユーザーが作成されました。
SQL> grant create session to user1; ★接続権限を付与
権限付与が成功しました。
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.21.0.0.0との接続が切断されました。
[oracle@v19single ~]$ sqlplus user1/user1 ★USER1で接続
SQL*Plus: Release 19.0.0.0.0 – Production on 金 9月 20 16:09:28 2024
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.21.0.0.0
に接続されました。
SQL> show user
ユーザーは”USER1″です。 ★USER1で接続
SQL>
また、以下のように connect コマンドを使用することで、ユーザーを切り替えることも可能です。
connect <ユーザー名>/<パスワード> [as sysdba]
SQL> show user
ユーザーは”USER1″です。 ★USER1で接続している
SQL> connect / as sysdba
接続されました。
SQL> show user
ユーザーは”SYS”です。 ★SYSで接続された
SQL> connect user1/user1
接続されました。
SQL> show user
ユーザーは”USER1″です。 ★USER1で接続された
SQL>
※connectコマンドはconnと省略することも可能です。
切断する場合は、exitかquitコマンドを使用します。
どちらでも問題ありません。
SQL> exit ★切断
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.21.0.0.0との接続が切断されました。 ★切断完了
[oracle@v19single ~]$
データベースの起動
データベースに接続した際に、以下のように「アイドルインスタンスに接続しました。」と出力した場合は、データベースが停止しています。
また、停止しているデータベースにはSYSユーザー等のSYSDBAやSYSOPER権限が付与されているユーザーでないと接続ができません。
SYSユーザー等の権限があるユーザーで接続し、startupコマンドを実行することでデータベースを起動しましょう。
startup
[oracle@v19single ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 – Production on 金 9月 20 17:32:29 2024
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
アイドル・インスタンスに接続しました。 ★
SQL> startup ★起動
ORACLEインスタンスが起動しました。
Total System Global Area 1543500120 bytes
Fixed Size 8925528 bytes
Variable Size 889192448 bytes
Database Buffers 637534208 bytes
Redo Buffers 7847936 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL> select status from v$instance;
STATUS
—————
OPEN ★
SQL>
また、以下のようにnomountやmountを指定し、管理モードの状態で起動することも可能です。
startup [ nomount | mount ]
nomountやmountを指定せずにstartupコマンドを実行した場合は、内部的に以下の順で起動しています。
停止状態 → nomount → mount → OPEN (起動状態)
nomountで起動した後にmountに移行する場合は、以下のコマンドを実行します。
alter database mount ;
また、mountからOPEN(起動状態)に移行する場合は、以下のコマンドを実行します。
alter database open ;
[oracle@v19single ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 – Production on 金 9月 20 17:54:28 2024
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
アイドル・インスタンスに接続しました。
SQL> startup nomount ★nomountで起動
ORACLEインスタンスが起動しました。
Total System Global Area 1543500120 bytes
Fixed Size 8925528 bytes
Variable Size 889192448 bytes
Database Buffers 637534208 bytes
Redo Buffers 7847936 bytes
SQL> select status from v$instance;
STATUS
———————
STARTED ★これがnomount(startedと出ていますが・・・)
SQL> alter database mount; ★mountへ移行
データベースが変更されました。
SQL> select status from v$instance;
STATUS
———————
MOUNTED ★mount
SQL> alter database open; ★openへ移行
データベースが変更されました。
SQL> select status from v$instance;
STATUS
———————
OPEN ★open
SQL>
詳細は以下のマニュアルをご参考ください。
ユーザーズ・ガイドおよびリファレンス – 12.46 STARTUP
例外として、誤ったORACLE_SID環境変数を指定する等の場合にも、「アイドル・インスタンスに接続しました。」と出力する場合があります。
例えば誤ったORACLE_SIDを指定して接続し、startupを実行すると以下のようなエラーが出力します。(正しいインスタンスに接続できていないため。)
エラーが発生した場合は、まず設定した環境変数が誤っていないか確認しましょう。
[oracle@v19single ~]$ export ORACLE_SID=v20 ★誤った環境変数
[oracle@v19single ~]$ export ORACLE_BASE=/u01/app/oracle
[oracle@v19single ~]$ export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
[oracle@v19single ~]$ export PATH=$PATH:$ORACLE_HOME/bin
[oracle@v19single ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 – Production on 金 9月 20 18:23:53 2024
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
アイドル・インスタンスに接続しました。
SQL> startup
ORA-01078: failure in processing system parameters ★エラー
LRM-00109: ������������������������������’/u01/app/oracle/product/19.0.0/dbhome_1/dbs/initv20.ora’���������������������������������
SQL> exit
切断しました。
[oracle@v19single ~]$ export ORACLE_SID=v19 ★正しい環境変数に修正
[oracle@v19single ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 – Production on 金 9月 20 18:24:16 2024
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
アイドル・インスタンスに接続しました。
SQL> startup ★起動できる
ORACLEインスタンスが起動しました。
Total System Global Area 1543500120 bytes
Fixed Size 8925528 bytes
Variable Size 889192448 bytes
Database Buffers 637534208 bytes
Redo Buffers 7847936 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL>
データベースの停止
データベースの停止を行う場合も、SYSDABやSYSOPER権限があるユーザーで行う必要があります。
データベースを停止する場合は、以下のコマンドを実行します。
shutdown [ normal | immediate | transactional | abort ]
最もよく使用するのはshutdown immediateだと思われます。
各オプションを指定した際の動作の再は以下となります。
・shutdown (normal)
オプションを指定せずにshutdownコマンドを実行した場合は、内部的にshutdown normalが
実行されています。
shutdown normalは、ユーザーがすべて手動で切断されるまで待機し、データベースを停止します。
そのため、接続しているユーザーが切断するまでデータベースは停止されません。
・shutdown immediate
現在のすべてのトランザクションを即座に終了し、データベースを安全に停止する。
すぐに停止するが、すべての未コミットのトランザクションはロールバックされる。
接続中のユーザーは強制的に切断されます。
・shutdown transactional
現在実行中のトランザクションが完了するのを待ち、それが終了するとデータベースを停止する。
新しい接続やトランザクションは許可されない。
・shutdown abort (強制停止)
すべてのトランザクションを即時終了し、データベースを強制的に停止する。
安全なシャットダウンではないため、データが破損するリスクがある。
通常shutdown immediate等で停止できない場合に使用する。
→通常は使用しないコマンド。
shutdown immediateとshutdown abortはともに、接続しているユーザーを切断し即時終了するという点では似ていますが、内部の処理は全く異なります。
shutdown immdiateはあくまでも “正常な停止” ですが、shutdown abortは通常それ以外の方法でデータベースが停止しない等の場合に使用する “強制停止” となる点に注意してください。
データベースをshutdown immediateで停止する例は以下です。
[oracle@v19single ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 – Production on 金 9月 20 18:48:46 2024
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.21.0.0.0
に接続されました。
SQL> shutdown immediate ★停止
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。 ★停止完了
SQL>
詳細は以下のマニュアルをご参考ください。
ユーザーズ・ガイドおよびリファレンス – 12.43 SHUTDOWN
トランザクションとは、「一連の作業をまとめて扱うための仕組み」です。これを使うと、複数の作業(操作)を一つのまとまりとして実行でき、その途中で問題があった場合は、最初からやり直すことができるという便利な機能です。
【トランザクションの例】
例えば、銀行でお金を振り込むときを考えてみてください。あなたがAさんの口座から1000円をBさんの口座に振り込むとき、以下の2つの作業が行われます:
1.Aさんの口座から1000円を引き落とす。
2.Bさんの口座に1000円を入金する。
これが一連の作業(トランザクション)です。この一連の作業は全部成功するか、全部失敗するかのどちらかが必要です。たとえば、Aさんの口座から1000円を引き落とした後に、Bさんの口座にお金が正しく入金されなかった場合、大変なことになりますね。
トランザクションを使うと、こういう場合に自動で「失敗したから元に戻そう」とデータを巻き戻す(取り消す)ことができます。これが「ロールバック(やり直し)」です。
トランザクションの大事なポイント
・全部うまくいったら確定する(これを「コミット」と言います)。
・途中で失敗したら最初からやり直す(これが「ロールバック」です)。
コメント