Oracle 12cでスキーマ(ユーザ)を作成すると下記のエラーが発生する場合があります。
このエラーへの対処の前に、まずはOracle 12cのアーキテクチャを理解する必要があります。
Oracle 12cでは、まず「マルチテナントコンテナデータベース」(CDB)と呼ばれる親DBが存在し、その下に「プラガブルデータベース」(PDB)と呼ばれる子DBが存在します。
PDBは仮想DBのようなもので、1つのインスタンス上で複数作成・起動することができます。
そしてCDBとPDBには下記のルールがあります。
・通常のローカル接続(11gR2までと同じように接続)した場合、CDBに接続される。
・CDBにはユーザスキーマを作成することはできない。(ORA-65096となる)
・ユーザスキーマはPDBに接続して作成する必要がある。
・CDBからはユーザスキーマが見えない。
つまり、「ORA-65096」が発生するのは、これまでの Oracle 11gR2 までと同じ感覚で接続し、CDBに作成しようとしていたためです。
すなわちPDBに接続して作成する必要がありますが、下記の手順を取る必要があります。
PDBを起動するためにsysadminで接続し、下記のSQLを実行します。
SQL> alter pluggable database pdborcl open;
PDBを停止する場合は、下記のSQLを実行します。
SQL> alter pluggable database pdborcl close immediate;
2. PDBへ接続するために「tnsnames.ora」を編集する。
デフォルトではCDBへ接続されるようになっているので、新規でPDB接続用を作成します。
下記の例ではCDB接続用を「ORCLCDB」、PDB接続用を「ORCLPDB」としています。
以上で、クライアントからPDBへ接続できるようになり、スキーマの作成が可能となります。
続いてSQLPLUSからPDBへ接続する手順です。
1. 現在の接続先を確認する
下記のSQLを実行します。CDBに接続されていることが分かります。
SQL> show con_name
2, 接続先を変更する
下記のSQLを実行します。PDBに接続されていることを確認します。
SQL> alter session set container = pdborcl;
※本記事は現在検証中のため、誤記等が含まれている可能性がある点ご承知おきください。
関連したトピックス
- Oracle DB起動時にエラーORA-01034・ORA-27101が出て起動しない際の対処法
- DBMotoレプリケーションに必要なOracle 12c(PDB/CDB)権限
- Oracleトランザクションセットアップ例(Log ReaderまたはLog Server Agent)[Syniti Data Replication]
- Oracleアーカイブログモードの変更
- Oracle Error ORA-1017 について(Oracle 11g)【リアルタイムレプリケーションツールDBMoto】
- DBMotoレプリケーションに必要なOracleユーザ権限
- Ritmo/iを使用してどのようにAS/400データベースに接続しますか?
- DBMotoレプリケーションに必要なSQL Serverユーザ権限
- DB2/400→SQLServer リフレッシュレプリケーション手法について【リアルタイムレプリケーションDBMoto】
- [DBMoto]Oracle順序オブジェクト(シーケンス)のレプリケーションをスクリプトで実現