[Oracle] DBA業務で使うコマンド集

「OSコマンド」「ORACLEコマンド」「SQLコマンド」の備忘録

# 実行環境

* OS: Oracle Linux

---

# OS コマンド

## ホストネーム確認

```shell
$ hostname
$ uname -n # node host name 
```

## OSバージョン確認

```shell
cat /etc/os-release
```

## OSのカーネル情報確認

```shell
$ uname -srv

#  -s, --kernel-name        print the kernel name
#  -r, --kernel-release     print the kernel release
#  -v, --kernel-version     print the kernel version
```

## ユーザ・グループ確認


```shell
$ id
uid=54321 (oracle) ... 所属グループ=54321 (oinstall), ...
```

## 環境変数確認

```shell
$ env | grep ORA
ORACLE_SID=orcl
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/oracle/product/バージョン/dbhome_1
```

## SID一覧確認

```shell
# $ORACLE_SID:$ORACLE_HOME:[Y|N] のフォーマット形式で記載されている。
$ cat /etc/oratab 
```

## データベース動作確認

```shell
# ora_で始まる全てのプロセス(e)をフルフォーマット(f)で表示する
$ ps -ef | grep ora_
# => grep以外のプロセスが複数出力されれば動作している

# 存在している非CDBとCDBのインスタンス名を確認
$ ps -ef | grep smon
#=> 「ora_smon_インスタンス名」として出力される
# PDBまで確認したい場合は、CDBに接続してから「show pdbs」
# CDBの確認は「show con_name」
# OSからの簡易的なPDBの存在確認方法は「lsnrctl status」

```

## ログのリアルタイム監視

```shell
$ tail -f ログファイル.log
```

--- 

# ORACLE コマンド

## 環境変数設定

```shell
$ . oraenv
ORACLE_SID = [orcl] ? orcl
```

## データベース接続

```
$ sqlplus / as sysdba
$ sqlplus [username][/password][@netservicename]

# Pluggable DatabaseにSYSDBAで接続
$ sqlplus sys/<Password>@<PDB名> as sysdba
```

## ネットサービス確認

```shell
$ tnsping SID

$ cat $ORACLE_HOME/network/admin/tnsnames.ora
```

## SQL Developer 起動

```shell
$ cd $ORACLE_HOME/sqldeveloper
$ sh sqldeveloper.sh
```

接続は[SQL Developerを使用したデータベース接続の作成](https://docs.oracle.com/cd/E57425_01/121/ADMQS/GUID-0DE0C9F4-8800-4142-A755-14B2FAA6624F.htm)

## Oracle Net Manager起動

```shell
$ netmgr
```

## Oracle Net Configuration Assistant

```shell
$ netca
```

## SQL*Loader

```shell
$ sqlldr ユーザ名/パスワード control=ファイル名.ctl
```

## Listener

```shell
$ lsnrctl status
$ lsnrctl start
$ lsnrctl stop
```




## RMAN
```bash
-- RMAN接続
$ rman target /

-- 設定確認
RMAN> show all;

-- REDOログ・ファイルのアーカイブを有効化
RMAN> shutdown immediate;
RMAN> startup mount;
RMAN> alter database archivelog;
RMAN> alter database open;
-- SQL> archive log list -- データベース・ログ・モードの確認

-- データベース全体のバックアップを実行
RmAN> backup database plus archivelog; -- アーカイブ・ログファイルをバックアップ

-- フラッシュバック
RMAN> alter database flashback on; -- 有効化
SQL> alter table テーブル名 enable row movement; -- 行の移動を有効化
SQL> flashback table テーブル名 to timestamp to timestamp('2020-12-31 00:00:00', 'YYYY-MM-DD HH24:MI:SS'); -- フラッシュバック実行


-- データベース障害のリスト表示
RMAN> list failure;

-- 障害に対するアドバイス取得
RMAN> advise failure;

-- アドバイス実行
RMAN> repair failure;
-- => この修復を実行しますか(YESまたはNOを入力してください。）

```

# SQL コマンド

## 便利・小技

```sql
-- OSコマンド実行
SQL> !OSコマンド

-- 直前のSQL文を実行
SQL> /

-- 直前のSQL文を確認
SQL> ;

-- 直前に実行したSQLをファイルに保存
SQL> save ファイル名.sql

-- 出力を見やすくする
SQL> set pages 1000;
SQL> set line 1000;
SQL> col 列名 format a50;

-- 実行計画を表示する
SQL> set autotrace on explain

```

## EasyConnect

```sql

-- Pluggable DB
SQL> CONN sys/<pass>@<host or IP>:<port>/<PDB Name> as sysdba
SQL> CONN <user>/<pass>@<PDB Name>

```

## 各種システム情報取得

```sql
-- データベースバージョン確認
SQL> select * from v$version;

-- インスタンス情報
SQL> select * from v$instance;

-- セッション情報
SQL> select * from v$session;
SQL> SELECT username, con_id FROM sys.v_$session;

-- 診断情報のログファイル格納場所
SQL> select name, value from v$diag_info;

-- サービス情報
SQL> select name from v$services;

-- PDB情報(show pdbsと同じ）
SQL> select con_id, name, open_mode, restricted from v$pdbs;

```

## ポート

```sql
-- ポート開放プロシージャ
SQL> exec dbms_xdb_config.sethttpsport(5500);
-- 解放されているポートの確認ファンクション
SQL> select dbms_dba_config.gethttpsport() from dual;

```

[DBMS_XDB_CONFIG](https://docs.oracle.com/cd/E57425_01/121/ARPLS/d_xdb_config.htm#BABEEDDA)




## 権限

```sql
-- 確認
-- マルチテナント環境
SQL> select grantee, granted_role, common, con_id from cdb_role_privs
SQL> select grantee, privilege, common, con_id from cdb_sys_privs;

-- コンテナデータ属性を確認
SQL> SELECT USERNAME, DEFAULT_ATTR, OWNER, OBJECT_NAME,
    ALL_CONTAINERS, CONTAINER_NAME, CON_ID
    FROM CDB_CONTAINER_DATA

-- 共通ユーザに他のコンテナへの情報アクセスを許可
-- ルートで実行
SQL> ALTER USER <共通ユーザ>
    SET CONTAINER_DATA = (CDB$ROOT, PDB名1, PDB名2)
    FOR V_$SESSION
    CONTAINER=CURRENT; 

```

## 起動・停止

```sql
-- 起動
SQL> startup

SQL> startup mount
SQL> alter database open

-- 停止
SQL> shutdown immediate
```

## データベース削除

```sql
-- sysユーザで実行
SQL> shutdown immediate;
SQL> startup mount restrict;
SQL> drop database;
```

## 初期化パラメーター

```sql
-- 確認
SQL> show parameter [パラメータ名(一部でも可)]

-- 非CDB
SQL> select name, type, value from v$parameter where name like '%パラメータ名%';
-- CDB
select con_id, value from v$parameter where name like '%パラメータ名%';
-- CDBからPDB
select con_id, value from v$system_parameter where name like '%パラメータ名%';

-- 変更
SQL> alter system set パラメータ名=値 scope=スコープ
-- 例
SQL > alter system set open_cursors=100 scope=both;
SQL > alter system set open_cursors=100 scope=spfile;

-- SPFILEからPFILEを作成
SQL> create pfile='/home/oracle/p.txt' from spfile;
-- PFILEを指定してDBを起動
SQL> startup pfile='/home/oracle/p.txt';
-- PFILEからSPFILEを作成
SQL> create spfile from pfile='/home/oracle/p.txt';
-- 現行インスタンスからPFILEを作成
SQL> create pfile='/home/oracle/p.txt' from memory;
```

## 制御ファイル

```sql
-- 確認
SQL> select name from v$controlfile; -- フルパスが出力

SQL> show parameter control_files  -- フルパスが出力
```

## REDOログファイル

```sql
-- 確認
SQL> col member format a50  -- 見やすいレイアウトで出力
SQL> select group#, member from v$logfile order by 1;

-- メンバ追加
SQL> alter database add logfile member '/u01/app/oracle/ORCL/onlinelog/ファイル名.log' to group グループ番号
```

## データベース・ログ・モード

```sql
SQL> archive log list
```

## 表領域

```sql
-- データディクショナリから確認
SQL> select tablespace_name from dba_tablespaces; -- 表領域名のみ
SQL> select tablespace_name, file_name, autoextensible from dba_data_files; -- データファイルも含めて

-- 作成
SQL> create tablespace 表領域名 datafile '/u01/app/oracle/oradata/ORCL/datafile/ファイル名.dbf' size 100M;

-- 編集
SQL> alter database datafile '/u01/app/oracle/oradata/ORCL/datafile/ファイル名.dbf' autoextend on; -- 自動拡張可能に設定
```

## バックアップ

```sql

-- 制御ファイルをトレース・ファイルにバックアップ
SQL> alter database backup controlfile to trace;

```

## PDB

```sql

-- PDB Status確認
SQL> select pdb_name, status from cdb_pdbs;

-- PDB削除（データ・ファイルは残したまま）
SQL> drop pluggable database <PDB名> keep datafiles;
-- PDB削除（データ・ファイルは残さない）
SQL> drop pluggable database <PDB名> including datafiles;

-- 互換性
-- DBMS_PDB.CHECK_PLUG_COMPATIBLITYファンクションでfalseになった場合のメッセージ確認
SQL> select message, action from pdb_plug_in_violations where name=<PDB名>;

-- Open
-- すべて
SQL> alter pluggable database all [except <PDB名>] open;


-- PDB名変更
-- show pdbsで逐次ステータスを確認可能
-- 対象のPDBに接続
SQL> conn sys/<pass>@<PDB名> as sysdba;
-- closeしてrestrictedモードでopen
SQL> alter pluggable database close immediate;
SQL> alter pluggable database open restricted;
-- RENAME
SQL> alter pluggable database rename global_name to <新PDB名>;
-- closeして通常モードでopen
SQL> alter pluggable database close immediate;
SQL> alter pluggable database open;

```

[PDBの削除](https://docs.oracle.com/cd/E96517_01/multi/removing-a-pdb.html#GUID-6EEAC62B-E7DD-47BA-A62B-1F34B3D9D02E)

---

# Location

## アラート・ログファイル

```sql
SQL> select name, value from v$diag_info where name like '%Trace%';
-- alert_orcl.log
```

## 制御ファイル

```sql
SQL> show parameter control_files;
```

## Statspackドキュメント

```shell
$ORACLE_HOME/rdbms/admin/spdoc.txt
```

---

# その他

Enterprise Manager Database Express アクセス

```
https://localhost:5500/em
```