{OCI データベース} PostgreSQLを使用したOCIデータベース

 

 

https://qiita.com/nisshii0/items/d4131fef1c05b5017608
https://qiita.com/dingtianhongjie/items/8547e156fb8e4528733e
https://cloudii.jp/news/blog/oracle-cloud/ocipostgresql/

https://www.oracle.com/cloud/postgresql/pricing/

https://docs.oracle.com/ja-jp/iaas/Content/postgresql/home.htm
https://medium.com/oracledevs/oci-database-with-postgresql-cheat-sheet-ee8173a0a2ba

 

前提: 
セキュリティリストでVCN内から5432番ポート許可したVCN作成済み
postgresql-client-14をインストールした接続確認用コンピュートインスタンス作成済み

※DB用のサブネットは「プライベートサブネット」の設定で作成必要

resource "oci_core_subnet" "subnet02" {
    #Required
    cidr_block = "10.0.2.0/24"
    compartment_id = oci_identity_compartment.cmp01.id
    vcn_id = oci_core_vcn.vcn01.id

    display_name = "subnet02"
    dns_label = "subnet02"
    route_table_id = oci_core_route_table.rt01.id
    security_list_ids = [oci_core_security_list.sl01.id]
    
    prohibit_public_ip_on_vnic = true
}

 

 


-- 1. DBシステムの作成

oci psql shape-summary list-shapes \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--query 'sort_by(data.items, &"ocpu-count").{"id":"id","ocpu-count":"ocpu-count","memory-size-in-gbs":"memory-size-in-gbs"}' \
--output table


→ PostgreSQL.VM.Standard.E4.Flex.2.32GB


oci psql default-configuration-collection list-default-configurations \
--lifecycle-state ACTIVE \
--query 'sort_by(data.items, &"display-name").{"display-name":"display-name","id":"id","lifecycle-state":"lifecycle-state"}' \
--output table

 

 


oci psql db-system-collection list-db-systems \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--all 

oci psql db-system create --generate-full-command-json-input 


oci psql db-system create \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--db-version 14 \
--display-name postgres01 \
--network-details '{
    "nsgIds": ,
    "subnetId": "ocid1.subnet.oc1.iad.000000000000000000000000000000000000000000000000000000000000"
  }' \
--shape "PostgreSQL.VM.Standard.E4.Flex.2.32GB" \
--config-id ocid1.postgresqldefaultconfiguration.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--description postgres01 \
--instance-count 1 \
--instance-memory-size-in-gbs 32 \
--instance-ocpu-count 2 \
--system-type "OCI_OPTIMIZED_STORAGE" \
--storage-details '{
      "availabilityDomain": "OEIw:US-ASHBURN-AD-3",
      "iops": 300000,
      "isRegionallyDurable": false,
      "systemType": "OCI_OPTIMIZED_STORAGE"
    }' \
--credentials '{
    "username": "postgres",
    "passwordDetails": {
        "password": "passwordpassword",
        "passwordType": "PLAIN_TEXT"
     }
  }' \
--instances-details '[
    {
      "description": "postgres0101",
      "displayName": "postgres0101",
    }
  ]' 

 

 

oci psql db-system-collection list-db-systems \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--all \
--query 'data.items.{"display-name":"display-name","id":"id","lifecycle-state":"lifecycle-state"}' \
--output table

 


oci psql db-system get \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000 


oci psql db-system get-primary-db-instance \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000 

oci psql connection-details get \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000 


oci psql db-system delete \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--force 

 

 


-- 2. DB Systemへの接続

接続確認用コンピュートインスタンスでの作業

ssh -i $HOME/.ssh/id_rsa ubuntu@192.0.2.1

psql -h 10.0.2.190 -U postgres 


\q
exit


-- 3. ノードの追加
oci psql connection-details get \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000 


oci psql db-system patch \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--items '[
    {
      "operation": "INSERT",
      "selection": "instances",
      "value": {
        "displayName": "postgres0102"
      }
    }
]' 

 

 


-- 4. ノードの再起動

データベース・システムのプライマリ・ノードは再起動できません。

標準: データベース・プロセスのみが再起動されます。これには1分未満かかります。
ノード再起動: 基礎となるコンピュート・インスタンスが再起動され、PostgreSQLプロセスも再起動されます。これには数分間かかる場合があります。


oci psql connection-details get \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000 


oci psql db-system restart-db-instance-in \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--db-instance-id 11111111-1111-1111-1111-111111111111 \
--restart-type NODE_REBOOT 

 


-- 5. 別のノードへのデータベース・システムのフェイルオーバー

oci psql db-system get-primary-db-instance \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000 

oci psql db-system failover \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--db-instance-id 11111111-1111-1111-1111-111111111111 


oci psql db-system get-primary-db-instance \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000 

 

-- 6. ノードの削除

oci psql connection-details get \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000 


cat <<-'EOF' > remove_node.json
{
  "dbSystemId": "ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000",
 "items": [
    {
      "operation": "REMOVE",
      "selection": "instances[?id == '22222222-2222-2222-2222-222222222222']"
    }
  ]
}
EOF

oci psql db-system patch --from-json file://remove_node.json

 


-- 7. 手動バックアップの作成


oci psql backup-collection list-backups \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 

oci psql backup create \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--display-name postgres01bk01 \
--description ppostgres01bk01 \
--retention-period 1 

 


oci psql backup-collection list-backups \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--query 'data.items[].{"display-name":"display-name","id":"id","lifecycle-state":"lifecycle-state"}' \
--output table


oci psql  backup delete \
--backup-id ocid1.postgresqlbackup.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--force

 


-- 8. バックアップからのリストア

既存のバックアップからPostgreSQLデータベース・システムを含むOCIデータベースをリストアします。

データベース・システムをリストアすると、データが失われる可能性があります。
リストアする前に、データベース・システムの手動バックアップを作成することをお薦めします。


oci psql db-system restore \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--backup-id ocid1.postgresqlbackup.oc1.iad.000000000000000000000000000000000000000000000000000000000000