# 3.10. ການໂອນຍ້າຍຖານຂໍ້ມູນ (database migrations)

ເຖິງແມ່ນວ່າພວກເຮົາຈະພະຍາຍາມໃຫ້ດີທີ່ສຸດເພື່ອໂອນຍ້າຍເຄືອຂ່າຍຂອງທ່ານໂດຍອັດຕະໂນມັດໃນຂະນະທີ່ມີການຍົກລະດັບຂອງລະບົບຂຶ້ນ, ແຕ່ກໍມີບາງຄັ້ງທີ່ມັນເປັນໄປບໍ່ໄດ້. ໃນສ່ວນນີ້ພວກເຮົາຈະພະຍາຍາມກວມເອົາບາງການໂອນຍ້າຍທີ່ພົບເລື້ອຍທີ່ສຸດທີ່ທ່ານອາດຈະພົບໃນເວລາທີ່ແລ່ນຊອບແວຣ໌ຂອງພວກເຮົາດ້ວຍຕົນເອງຜ່ານ Docker container.

{% hint style="warning" %}
ຢ່າພະຍາຍາມຍົກລະດັບຂອງລະບົບ GeoPrism Registry ຈາກເວີຊັ້ນຫຼັກເກີນກວ່າສອງລະດັບຕໍ່ຄັ້ງ.
{% endhint %}

ຂັ້ນຕອນທົ່ວໄປໃນການປະຕິບັດການໂອນຍ້າຍປະເພດໃດໜຶ່ງສາມາດແບ່ງອອກເປັນດັ່ງນີ້:

1. ສ້າງສະພາບແວດລ້ອມທີ່ຮຽນແບບເຄືອຂ່າຍການຜະລິດຂອງທ່ານ ເພື່ອທີ່ພວກເຮົາຈະທົດສອບຂັ້ນຕອນເຫຼົ່ານີ້
2. ປະຕິບັດທຸກຂັ້ນຕອນທີ່ຕ້ອງການຕາມທີ່ໄດ້ລະບຸໄວ້ໃນ "Orient DB Migration" ແລະ/ຫຼື "PostgreSQL Migration" ຂ້າງລຸ່ມນີ້ໃນສະພາບແວດລ້ອມທີ່ຮຽນແບບໄວ້, ຕິດຕາມຄໍາສັ່ງທີ່ແນ່ນອນທີ່ກ່ຽວຂ້ອງກັບສະພາບແວດລ້ອມຂອງທ່ານ ແລະ ຈົດບັນທຶກບັນຫາ ຫຼື ຄຳເຕືອນ.
3. ຕັ້ງເອກະສານ docker-compose.yml ຂອງທ່ານ (ໃນສະພາບແວດລ້ອມການທົດສອບ) ໃຫ້ກັບລຸ້ນ GeoPrism Registry / Postgres / OrientDB ໃໝ່ ແລະ ເປີດໃຊ້ `docker compose down` ຈາກນັ້ນ `docker compose pull`. ຈາກນັ້ນ `docker compose up`. ເມື່ອ GeoPrism Registry boots, ມັນຈະດໍາເນີນການແກ້ໄຂເພີ່ມເຕີມ ຫຼື ໂອນຍ້າຍຕົ້ນສະບັບໂດຍອັດຕະໂນມັດຕາມຄວາມຈໍາເປັນ. ກະລຸນາອົດທົນເນື່ອງຈາກວ່າຂັ້ນຕອນນີ້ຈະຕ້ອງໃຊ້ເວລາ.
4. ກວດເບິ່ງບັນທຶກເພື່ອຊອກຫາຄວາມຜິດພາດ ແລະ ເພື່ອໃຫ້ແນ່ໃຈວ່າການທົດສອບເຄືອຂ່າຍແມ່ນນຳໃຊ້ໄດ້ ແລະ ມີການຕອບສະໜອງ.
5. ຈັດສັນ "ຊ່ວງເວລາຢຸດເຮັດວຽກ (downtime window)" ສໍາລັບເຄືອຂ່າຍຂອງທ່ານເພື່ອຫຼຸດຜ່ອນການລົບກວນຜູ້ໃຊ້ອື່ນໃຫ້ໜ້ອຍທີ່ສຸດເທົ່າທີ່ເປັນໄປໄດ້
6. ດຳເນີນການຖ່າຍພາບ/ສໍາຮອງຂໍ້ມູນຂອງເຄືອຂ່າຍການຜະລິດຂອງທ່ານ
7. ຢຸດ webserver ດ້ວຍ `docker stop georegistry`
8. ດຳເນີນຂັ້ນຕອນຕ່າງໆໃຫ້ຄືກັນກັບທີ່ປະຕິບັດຢູ່ສະພາບແວດລ້ອມການທົດສອບ, ຍົກເວັ້ນວ່າຮອບນີ້ແມ່ນໃນສະພາບແວດລ້ອມການຜະລິດຈິງ

## 3.10.1. ການໂອນຍ້າຍ OrientDB (OrientDB migration)

ຖ້າ GeoPrism Registry ລຸ້ນໃໝ່ຕ້ອງການການຍົກລະດັບຊອບແວ OrientDB ຫຼັກຂອງທ່ານ, ການໂອນຂໍ້ມູນຕ້ອງປະຕິບັດດ້ວຍຕົນເອງ.

ເອກະສານການໂອນຍ້າຍ OrientDB ຢ່າງເປັນທາງການສາມາດພົບໄດ້ທີ່ນີ້: <http://www.orientdb.com/docs/last/release/Upgrade.html>

ເນື່ອງຈາກເອກະສານການໂອນຍ້າຍ OrientDB ຢ່າງເປັນທາງການອາດຈະມີການເຮັດໃຫ້ເກີດຄວາມສັບສົນ, ຂາດລາຍລະອຽດ, ຫຼື ບໍ່ເປັນໄປຕາມເປົ້າໝາຍໂດຍກົງ ໃນວິທີທີ່ພວກເຮົານຳໃຊ້ຊອບແວຣ໌ຂອງພວກເຂົາ, ພວກເຮົາຈະນໍາທ່ານຜ່ານຂັ້ນຕອນລະອຽດຢູ່ນີ້.

1. ຢຸດ webserver ດ້ວຍ `docker stop georegistry`
2. ສ້າງຈຸດໂອນຍ້າຍຂໍ້ມູນຂອງເຄືອຂ່າຍ Orient DB. ຄໍາສັ່ງນີ້ປະກອບມີຕົວແປ (ເລີ່ມຕົ້ນດ້ວຍ $) ເຊິ່ງຕ້ອງຖືກປ່ຽນແທນກ່ອນທີ່ຈະດໍາເນີນການ. `docker exec georegistry-orientdb bash -c 'bin/console.sh "connect remote:localhost/georegistry $ORIENTDB_ROOT_USER $ORIENTDB_ROOT_PASS; export database /orientdb/backup/$ORIENTDB_MAJOR_VERSION.json"'`
   1. &#x20;ຊື່ຜູ້ໃຊ້ orientdb root ເລີ່ມຕົ້ນແມ່ນ 'root'
   2. &#x20;ລະຫັດຜ່ານ orientdb root ເລີ່ມຕົ້ນແມ່ນ 'root'
   3. ລຸ້ນຫຼັກຂອງ OrientDB ບໍ່ຄວນລວມເອົາລຸ້ນສະບັບແກ້ໄຂ. ຕົວຢ່າງ, '3.2'.
3. ກຳຈັດເຄືອຂ່າຍ OrientDB `docker rm -f georegistry-orientdb`
4. ລຶບຂໍ້ມູນທັງໝົດໃນປະລິມານທີ່ຕິດຕັ້ງ (mounted volume) `rm -rf data/orientdb/databases/*`
5. ດຳເນີນການເປີດໃຊ້ OrientDB ລຸ້ນໃໝ່. ຄໍາສັ່ງນີ້ປະກອບມີຕົວແປ (ເລີ່ມຕົ້ນດ້ວຍ $) ເຊິ່ງຕ້ອງຖືກປ່ຽນແທນກ່ອນທີ່ຈະດໍາເນີນການ. `docker run --name georegistry-orientdb2 -e ORIENTDB_ROOT_PASSWORD="$ORIENTDB_ROOT_PASS" -e ORIENTDB_OPTS_MEMORY="-Xms512M -Xmx2G" -d -v /data/orientdb/databases:/orientdb/databases -v /data/orientdb/backup:/orientdb/backup orientdb:$ORIENTDB_MAJOR_VERSION`
6. ນຳເຂົ້າຂໍ້ມູນສຳຮອງໃສ່ Orient DB ລຸ້ນໃໝ່. ຄໍາສັ່ງນີ້ປະກອບມີຕົວແປ (ເລີ່ມຕົ້ນດ້ວຍ $) ເຊິ່ງຕ້ອງຖືກປ່ຽນແທນກ່ອນທີ່ຈະດໍາເນີນການ. `docker exec georegistry-orientdb2 bash -c 'bin/console.sh "CREATE DATABASE remote:localhost/georegistry $ORIENTDB_ROOT_USER $ORIENTDB_ROOT_PASS; connect remote:localhost/georegistry $ORIENTDB_ROOT_USER $ORIENTDB_ROOT_PASS; import database /orientdb/backup/$ORIENTDB_MAJOR_VERSION.json.gz"'`
7. ກຳຈັດເຄືອຂ່າຍ OrientDB ຊົ່ວຄາວ `docker rm -f georegistry-orientdb2`

## 3.1.0.2. ການໂອນຍ້າຍ PostgreSQL (PostgreSQL migration)

ການຍົກລະດັບ PostgreSQL ແມ່ນຂ້ອນຂ້າງກົງໄປກົງມາ ແລະ ເຊື່ອຖືໄດ້.

ເອກະສານການເຄື່ອນຍ້າຍ PostgreSQL ຢ່າງເປັນທາງການສາມາດພົບໄດ້ທີ່ນີ້: <https://www.postgresql.org/docs/current/upgrading.html#UPGRADING-VIA-PGDUMPALL>

ຂັ້ນຕອນພື້ນຖານສໍາລັບການປະຕິບັດການຍົກລະດັບໃນສະພາບແວດລ້ອມການຂຽນ docker ແມ່ນມີດັ່ງຕໍ່ໄປນີ້:

1. ຢຸດ webserver ດ້ວຍ `docker stop georegistry`
2. ດໍາເນີນການເປີດໃຊ້ Postgres ລຸ້ນໃໝ່ຄືນໃໝ່. ຄໍາສັ່ງນີ້ປະກອບມີຕົວແປ (ເລີ່ມຕົ້ນດ້ວຍ $) ເຊິ່ງຕ້ອງຖືກປ່ຽນແທນກ່ອນທີ່ຈະດໍາເນີນການ. `docker run --name georegistry-postgres2 -d -p 5482:5432 --network $CGR_DOCKER_NETWORK --link georegistry-postgres -v /data/postgres-migrate:/var/lib/postgresql/data -e POSTGRES_PASSWORD=$POSTGRES_ROOT_PASSWORD postgis/postgis:$NEW_POSTGRES_VERSION`
   1. ຊື່ຜູ້ໃຊ້ postgres root ເລີ່ມຕົ້ນແມ່ນ `postgres`.
   2. ລະຫັດຜ່ານ postgres root ເລີ່ມຕົ້ນແມ່ນ `georegistry`.
   3. ຕົວແປ NEW\_POSTGRES\_VERSION ແມ່ນແທັກຮູບພາບ Docker ແລະ ຄວນມີລຸ້ນ PostGIS ນຳ. ຕົວຢ່າງ '14-3.2'.
   4. ຄ່າຂອງຕົວແປ CGR\_DOCKER\_NETWORK ສາມາດພົບໄດ້ໂດຍການເປີດໃຊ້ `docker inspect georegistry-postgres`. ຊື່ georegistry network ໄດ້ຖືກສ້າງຂື້ນໂດຍອັດຕະໂນມັດ ແລະ ຈະຖືກສະແດງຢູ່ໃນສ່ວນ "Networks" ຂອງຜົນໄດ້ຮັບການກວດສອບ.
3. ຕິດຕັ້ງ Postgres ລຸ້ນເກົ່າເຂົ້າໄປໃນ Postgres ໃໝ່. ຄໍາສັ່ງນີ້ປະກອບມີຕົວແປ (ເລີ່ມຕົ້ນດ້ວຍ $) ເຊິ່ງຕ້ອງຖືກປ່ຽນແທນກ່ອນທີ່ຈະດໍາເນີນການ `docker exec -t georegistry-postgres2 bash -c "(PGPASSWORD=$POSTGRES_ROOT_PASSWORD pg_dumpall --host georegistry-postgres --port 5432 --username postgres --no-password && echo -e \"\n\nALTER ROLE postgres PASSWORD '$POSTGRES_ROOT_PASSWORD';\" && echo -e \"\n\nALTER ROLE georegistry PASSWORD '$POSTGRES_APP_PASSWORD';\") | psql -d postgres --host 127.0.0.1 --port 5432 --username postgres --no-password"`
   1. ລະຫັດຜ່ານ Postgres app ເລີ່ມຕົ້ນແມ່ນ `georegistry`.
4. ລົບ Postgres containers ຊົ່ວຄາວ `docker rm -f georegistry-postgres && docker rm -f georegistry-postgres2`
5. ລົບ Postgres data directory ລຸ້ນເກົ່າ `rm -rf /data/postgres`
6. ຄັດຂໍ້ມູນ postgres ຈາກລຸ້ນໃໝ່ໄປໃສ່ໄດເລກະທໍລີມາດຕະຖານ `mv /data/postgres-migrate /data/postgres`


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.geoprismregistry.com/readme/current-2/deployment-and-setup/3.10-migration.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
