2017年8月30日水曜日

Ambariのアップグレードがschema does not existでできない場合(PostgreSQL)

ambari-server.log内のエラー

INFO [main] DBAccessorImpl:841 - Executing query: ALTER SCHEMA ambarischema OWNER TO "ambari";
ERROR [main] DBAccessorImpl:847 - Error executing query: ALTER SCHEMA ambarischema OWNER TO "ambari";
org.postgresql.util.PSQLException: ERROR: schema "ambarischema" does not exist
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2161)
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1890)
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:559)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:403)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:395)
        at org.apache.ambari.server.orm.DBAccessorImpl.executeQuery(DBAccessorImpl.java:844)
        at org.apache.ambari.server.orm.DBAccessorImpl.executeQuery(DBAccessorImpl.java:836)
        at org.apache.ambari.server.upgrade.AbstractUpgradeCatalog.changePostgresSearchPath(AbstractUpgradeCatalog.java:361)
        at org.apache.ambari.server.upgrade.AbstractUpgradeCatalog.upgradeSchema(AbstractUpgradeCatalog.java:922)
        at org.apache.ambari.server.upgrade.SchemaUpgradeHelper.executeUpgrade(SchemaUpgradeHelper.java:207)
        at org.apache.ambari.server.upgrade.SchemaUpgradeHelper.main(SchemaUpgradeHelper.java:425)

回避方法

概ね3通り
A) Schema Ownerを変えてみる
Ambari DBユーザかpostgresでpsqlを起動し、Information_schemaを確認する:
select catalog_name, schema_name, schema_owner from information_schema.schemata;
select table_catalog, table_schema from information_schema.tables where table_name = 'hostcomponentdesiredstate'
備考: AmbariのDBチエッカーは二つ目のクエリーと似たものでスキーマが正しいかチェックします。
現在のSchemaオーナーで再ログインして(もしくはpostgresユーザ)
\c ambari
ALTER SCHEMA ambari_tests OWNER TO "ambari"

B) データベースのエクスポート・インポート
pg_dump -Uambari ambari > ambari.sql
ambari.sqlファイル内の下記のラインが正しいことを確認
CREATE SCHEMA ambarischema;
ALTER SCHEMA ambarischema OWNER TO ambari;
SET search_path = ambarischema, pg_catalog;

sudo -u postgres psql -c "ALTER DATABASE ambari RENAME TO ambari_bakup"
sudo -u postgres psql -c "CREATE DATABASE ambari"
sudo -u postgres psql ambari < ambari.sql

備考:ALTERステートメントにスキーマが指定してあるので、スキーマを変更するのであれば確認が必要です。
例:ALTER TABLE ambarischema.metainfo OWNER TO ambari;
また、DBユーザのsearch_pathにこのスキーマが入っていないと、Ambariが起動しません。

C) テスト環境などで、一時的にUpgradeを完了したい場合は、"server.jdbc.postgres.schema" をambari.propertiesから削除するとALTER SCHEMAは実行されません。
ただし、 DBチェッカーが"select table_schema from information_schema.tables where table_name = 'hostcomponentdesiredstate'"のスキーマと違うためエラーを出します。

0 件のコメント:

コメントを投稿