Liferay Support does not recommend or endorse specific third-party products over others. Liferay is not responsible for any instructions herein or referenced regarding these products. Any implementation of these principles is the responsibility of the subscriber.
この記事は、Oracleデータベースを設定してLiferayに接続するためのガイドであり、高度な構成のためのさらなるガイドラインを提供します。
解決
データベースのセットアップ
- [スタート]メニュー-> Oracle-OraDb11g_home1->アプリケーション開発-> SQL Plusをクリックする
- ユーザー名/パスワードのプロンプトがSQLコマンドラインにない場合は、「connect」と入力する
- Oracleのインストール時に管理者のユーザー名とパスワードを入力します(例:ユーザー名:system、パスワード:password)
- コマンドラインに「create user (name) identified by (password); 」と入力する(Oracleは他の一般的なデータベースとは異なる用語を使用します。Oracleでは、各「ユーザー」とそれに対応するパスワードはデータベースを表します)
- コマンドラインに「grant all privileges to (name); 」と入力する。これにより、データベース接続へのアクセスが許可されます
Liferayのインストール
- アプリケーションサーバーからOracleデータベースにアクセスするには、Liferayでは通常使用できない特別なjarが必要です。インストールされたOracleインスタンス上で、C:\app\Administrator\product\11.2.0\dbhome_1\jdbc\libに移動します。JDK5のojdbc5.jarまたはJDK6のojdbc6.jarをコピーします。
- 他の依存関係、hsql.jar、portal-service.jar、およびportlet.jarの場所に移動します。ここにojdbc.jarを貼り付けます。
データベースをLiferayに接続する
- portal-ext.propertiesを作成する
-
Oracle 10g Express Editionを使用している場合は、内部に次のテキストを記載する
jdbc.default.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.default.url=jdbc:oracle:thin:@localhost:1521:xe
jdbc.default.username=(name)
jdbc.default.password=(password) -
Oracle 11gおよびOracle 12c Enterprise Editionを使用している場合は、次のテキストを内部に配置する
jdbc.default.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.default.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.default.username=(name)
jdbc.default.password=(password) - 「(名前)」と「(パスワード)」:上記で作成したユーザーに対応します
- データベースがLiferayとは異なるマシンにある場合は、localhostをIPアドレスに変更する
高度な構成およびチューニングオプション
そのようなインストールを確立するために絶対に必要な要素は何ですか?
1)既存または空のOracleデータベース。
既存のデータベースがある場合、データベースのブロックサイズを確認することを忘れないでください。これは、少なくとも8KブロックサイズとAL32UTF8文字セットで作成する必要があります。ブロックサイズも文字セットも後で(簡単に)変更できないことに注意してください。
select value from v$parameter where name = 'db_block_size';
または、データベースがより小さなブロックサイズ(4Kなど)で作成されている場合、ユーザーは十分な大きさのブロックサイズで作成されたテーブルスペースを検索するか、新しいテーブルスペースを検索できます。ただし、8Kですべてを作成する代わりに、異なるブロックサイズのテーブルスペースを持つOracleデータベースを維持するには、かなり高度なDBA知識が必要であることを強調することが重要です。
select tablespace_name from dba_tablespaces where block_size >= 8192;
2)Liferayの空のスキーマ。
ユーザーは、次のSQL * Plusスクリプトを使用して、Oracleでサブスクライバをサポートする際に空のスキーマを作成できます。パラメータは1つだけです:スキーマ名
-- create_schema.sql -- set define on set echo on -- Create user create user &1 identified by &1 default tablespace lportal temporary tablespace temp; -- Give necessary privileges grant resource to &1 ; grant connect to &1; -- Default tablespace, you can pick your own if you have created one. alter user &1 quota unlimited on lportal; set echo off
次の方法で実行できます。
$ sqlplus / as sysdba SQL> @create_schema.sql <Liferay's schema name>
3)Liferayのスキーマユーザーの権限(CONNECT、RESOURCE)。
上記のスクリプトで完了しました。
4)portal-ext.propertiesの構成
次のコードスニペットをportal-ext.propertiesに追加します。
jdbc.default.driverClassName=oracle.jdbc.driver.OracleDriver # For using SID jdbc.default.url=jdbc:oracle:thin:@<HOST>:<PORT>:<SID> # For using Service name jdbc.default.url=jdbc:oracle:thin:@//<HOST>:<PORT>/<SERVICE> jdbc.default.username=<Liferay's schema name> jdbc.default.password=<Password for Liferay's schema>
Oracleには2つのJDBC URLフォーマットパターンがあります:
- 後方互換性のために「SID」(別名、システム識別子)を介して接続
- Oracle 8i以降の「サービス名」を介して接続
aSIDとサービス名にはわずかな違いがあります:
- 「SID」は、特定のホスト内で一意の名前を持つ単一のデータベースインスタンスを識別します。 Oracle Express Editionの場合、SIDは「XE」、Enterprise Editionの場合は「ORCL」です
- 「サービス名」は、インスタンス(またはクラスタ化されたデータベースの場合はインスタンス)のエイリアスであり、DBAが物理データベースアーキテクチャを論理接続名から分離できるようにします。
5) Liferay用のオブジェクトの作成
Liferayは、初回起動時にデータベーステーブル、インデックスを自動的に作成します。事前にcreate-oracle.sqlスクリプトを使用して作成することもできます。
高度なデプロイメントオプション
大企業は、厳しいセキュリティ要件に準拠する必要があり、データベースに高度なストレージアプライアンスを使用する傾向があります。
このセクションでは、リポジトリのスキーマユーザーを直接portal-ext.propertiesに入れずにLiferayを使用する方法と、テーブル、インデックス、およびLOBストレージを分離する方法を示します。
このセクションで使用される表記法は以下のとおりです:
Liferay's default tablespace LPORTAL_DATA
Liferay's tablespace for indices LPORTAL_IDX
Liferay's tablespace for LOBs LPORTAL_LOB
Liferay's temp tablespace LPORTAL_TEMP
Liferay's schema user LPORTAL_REPOS
Liferay's proxy user LPORTAL_PROXY
1) ストレージとテーブルスペース
-- LPORTAL_DATA will contain table data create tablespace lportal_data datafile '/path/to/yourdb/lportal_data_01.dbf' size 64m autoextend on next 32m maxsize 4096m; -- LPORTAL_IDX will contain index data create tablespace lportal_idx datafile '/path/to/yourdb/lportal_idx_01.dbf' size 64m autoextend on next 32m maxsize 4096m; -- LPORTAL_LOB will contain data of LOBs (BLOB/CLOB) create tablespace lportal_lob datafile '/path/to/yourdb/lportal_lob_01.dbf' size 64m autoextend on next 32m maxsize 4096m; -- LPORTAL_TEMP will be used for temporary storage needed for on-disk sort operations create tablespace lportal_temp tempfile '/path/to/yourdb/lportal_temp_01.dbf' size 64m autoextend on next 32m maxsize 4096m;
すべてのデプロイメントは異なり、さまざまなシナリオで使用される可能性があるため、テーブルスペースの正確な推奨サイズは指定できません。 ここにいくつかのベストプラクティスがあります:
- スペースを無駄にする可能性があるため、初期サイズは大きすぎないようにしてください。
- 個々のデータファイルが大きく(8〜10Gb以上)ならないようにしてください。メンテナンスの観点からは非現実的です。 代わりに、複数のデータファイル(それぞれ最大サイズが8〜10Gb)を追加します
- DB全体に単一のブロックサイズ(8K)を使用して、非標準のテーブルスペース(ブロックサイズがDB_BLOCK_SIZEと異なる)のバッファプール管理の危険性を回避します
2) スキーマの作成
LPORTAL_REPOSは、Liferayのオブジェクトを保存するために使用されます。 ただし、セキュリティ上の理由によりロックされます。 アプリケーションサーバーは、Liferayのオブジェクトに対してSELECTおよび通常のDML操作を実行する権限を持つテクニカルユーザー(LPORTAL_PROXY)を介して接続しますが、オブジェクトを変更/削除することはできません。
-- User LPORTAL_PROXY create user LPORTAL_PROXY identified by <yourpass> default tablespace LPORTAL_DATA temporary tablespace LPORTAL_TEMP; grant create session to LPORTAL_PROXY; -- User LPORTAL_REPOS create user LPORTAL_REPOS identified by <yourpass> account lock default tablespace LPORTAL_DATA temporary tablespace LPORTAL_TEMP; alter user LPORTAL_REPOS quota unlimited on LPORTAL_DATA; alter user LPORTAL_REPOS quota unlimited on LPORTAL_IDX; alter user LPORTAL_REPOS quota unlimited on LPORTAL_LOB; grant connect, resource to LPORTAL_REPOS;
3) LPORTAL_REPOSの下にオブジェクトを作成
SQLスクリプト(例:liferay-portal-sql-6.1.10-ee-ga1/create/create-oracle.sql)からスキーマ作成スクリプトを使いやすい場所にコピーし、以下の説明に従って変更します。 目的のリポジトリ所有者(LPORTAL_REPOS)が既に存在するため、先頭の次のブロックは不要となります。
drop user &1 cascade; create user &1 identified by &2; grant connect,resource to &1; connect &1/&2;
SYSDBAとして対象のDBに接続し、スクリプトを実行してオブジェクトを作成します。
SQL> connect / as sysdba SQL> alter session set current_schema = LPORTAL_REPOS; SQL> @create-oracle.sql
4) LPORTAL_REPOSのオブジェクトのLPORTAL_PROXYの下にシノニムを作成する
LPORTAL_REPOSにはLiferayを正常に実行するために必要なすべてのオブジェクトがありますが、セキュリティ上の理由からLPORTAL_PROXYが使用されます。
このシナリオを可能にするために、LPORTAL_PROXYはLPORTAL_REPOSのテーブルとシノニムを持ち、必要な特権(SELECT/INSERT/UPDATE/DELETE)が付与されます。
set serveroutput on
declare
v_owner varchar2(50) := 'LPORTAL_REPOS';
v_proxy varchar2(50) := 'LPORTAL_PROXY';
procedure exec(p_sql in varchar2) is
begin
dbms_output.put(p_sql || ' ... ');
execute immediate p_sql;
dbms_output.put_line('OK');
exception
when others then
dbms_output.put_line(sqlerrm);
end;
begin
dbms_output.enable(1024*1024);
for tab in
(select table_name from dba_tables where owner = v_owner)
loop
-- Create synonym
exec('create or replace synonym ' ||
v_proxy || '.' || tab.table_name || ' for ' ||
v_owner || '.' || tab.table_name);
-- Grant
exec('grant select, insert, update, delete on ' ||
v_owner || '.' || tab.table_name || ' to ' || v_proxy);
end loop;
end;
/
5) オブジェクトを適切なテーブルスペースに移動する
メンテナンスの観点からは、異なる種類のオブジェクトに対して複数のテーブルスペースを用意することは有益です。 一般的なベストプラクティスは、インデックス、テーブル、およびLOBを別々に保存することです。 高スループットDBアプリケーションの場合、データヒートマップ(特定のデータセットがどれだけの利用頻度か)を確立し、頻度に基づいて異なるテーブルスペースにテーブルを配置することも一般的です: SSD上の頻繁にアクセスされるテーブル、またはある種の圧縮メディア上の緩やかに変化する人気の低いデータ等
set serveroutput on
declare
v_owner varchar2(50) := 'LPORTAL_REPOS';
v_data_tbs varchar2(50) := 'LPORTAL_DATA';
v_index_tbs varchar2(50) := 'LPORTAL_IDX';
v_lob_tbs varchar2(50) := 'LPORTAL_LOB';
procedure exec(p_sql in varchar2) is
begin
dbms_output.put(p_sql || ' ... ');
execute immediate p_sql;
dbms_output.put_line('OK');
exception
when others then
dbms_output.put_line(sqlerrm);
end;
begin
dbms_output.enable(1024*1024);
-- Move tables
for tab in
(select table_name from dba_tables where owner = v_owner)
loop
exec('alter table ' || v_owner || '.' || tab.table_name ||
' move tablespace ' || v_data_tbs);
end loop;
-- Move indices
for idx in
(select index_name from dba_indexes where owner = v_owner and index_type = 'NORMAL')
loop
exec('alter index ' || v_owner || '.' || idx.index_name ||
' rebuild tablespace ' || v_index_tbs);
end loop;
-- Move LOBs
for lob in
(select table_name, column_name from dba_lobs where owner = v_owner)
loop
exec('alter table ' || v_owner || '.' || lob.table_name ||
' move lob(' || lob.column_name || ')' ||
' store as (tablespace ' || v_lob_tbs || ')');
end loop;
end;
6) すべてが完了したので、portal-ext.propertiesでユーザー名を変更します。
jdbc.default.username=LPORTAL_PROXY
追加情報
http://www.oracle.com/pls/db111/portal.portal_db?selected=11
- DBには少なくとも8Kのブロックサイズを使用します
- 一部のインデックスを作成できないため、「NLS_LENGTH_SEMANTICS」初期化パラメータを「CHAR」に設定しないでください