تو این پست قصد داریم Oracle Apex رو بر روی ویندوز نصب کنیم. برای نصب از نسخه های زیر استفاده میکنیم:
Oracle Database 23.1
Apex 23.2
Ords 23.4
Java 21
Apache Tomcat 9
با یه سرچ ساده میتونید فایل دانلودی نسخه های بالا رو پیدا کنید و Oracle Database رو نصب کنید.
نکته: هنگام نصب تو انتخاب پسورد از @ استفاده نکنید. اوراکل این کاراکتر رو به عنوان جدا کننده میشناسه و بعدها تو ورود احتمال داره به مشکل بر میخورید. اگه بعد از نصب با استفاده از SQL PLus با یوزر sys خواستید وارد بشید و با خطای ERROR: ORA-12154 مواجه شدید میتونید رو همون سیستمی که دیتابیس رو نصب کردید بصورت زیر وارد شید
/ as sysdba
با دستور بالا به عنوان sys وارد شدید و با دستور زیر میتونید پسورد یوزر sys رو تغییر بدید
ALTER USER sys IDENTIFIED BY "new_pass"
بعد از نصب دیتابیس ابتدا باید یک PDB رو برای نصب Apex مشخص کنید. هنگام نصب دیتابیس اوراکل، بطور پیش فرض یک PDB ساخته میشه(برای مثال orclpdb یا هر اسمی که حین نصب انتخاب کنید). هم میتونید از اون استفاده کنید هم میتونید یک PDB جدید ایجاد کنید. برای ایجاد یک PDB جدید دستور زیر رو اجرا میکنیم
Create pluggable database apexpdb Admin user apexpdb identified by apexpdb#123 Roles=(dba) DEFAULT TABLESPACE apexpdbts Datafile 'C:\OracleDB213\Base\oradata\ORCL\apexpdb\apexpdb01.dbf' size 250M autoextend on FILE_NAME_CONVERT=('C:\OracleDB213\Base\oradata\ORCL\pdbseed', 'C:\OracleDB213\Base\oradata\ORCL\apexpdb');
تو دستور بالا ابتدا نام PDB رو مشخص کردیم(apexpdb) بعد یوزر با دسترسی dba براش ساختیم(یوزر apexpdb با پسورد apexpdb#123) بعد از اون Table Space و مسیر ذخیره سازیش رو مشخص کردیم.
در آخر با دستور زیر PDB رو باز میکنیم
alter pluggable database apexpdb open;
و با دستور زیر اتصالمون رو به PDB تغییر میدیم
alter session set container=apexpdb;
برای اطمینان از اتصال به PDB خروجی دستور زیر رو چک میکنیم
show con_name;
تا اینجا کار مراحل ساخت PDB به پایان رسید حالا باید Apex رو بر روی PDB که ساخته شده نصب کنیم. برای نصب Apex نیازه یک Table Space برای APEX application user و یکی برای APEX files user و یکی هم برای Temp مشخص کنیم. میتونید با دستور زیر Table Space جدید بسازید:
create tablespace apexdatafile datafile 'C:\OracleDB213\Base\oradata\ORCL\apexpdb\apexdatafile.dbf' size 200m autoextend on
یا اینکه از همون Table Space های قبلی استفاده کنیم. من اینجا Table Space جدید ساختم. بعد از extract کردن فایل apex باید فایل apexins.sql رو اجرا کنید پارامترهای Table Space رو بهش بدیم:
@apexins.sql apexdatafile apexdatafile TEMP /i/
نصب Apex یه مقدار طول میکشه.
بعد از نصب Apex چندتا اکانت ساخته میشه:
APEX_230200:
مربوط به Schema و متادیتا اپکس
FLOWS_FILE:
مربوط به فایل های اپلودی اپکس
APEX_PUBLIC_USER:
برای Oracle Rest Data Service استفاده میشه که در ادامه باهاش کار داریم.
حالا باید اسکریپت apxchpwd.sql رو برای ست کردن یوزرنیم و پسورد مربوط به internal workspace اجرا کنیم:
@apxchpwd.sql
یوزرنیم و ایمیل رو میپرسه که دیفالتش Admin هست و بعد یک پسورد با پیچیدگی بالا میخواد.
Enter the administrator's username [ADMIN] User "ADMIN" does not yet exist and will be created. Enter ADMIN's email [ADMIN] Enter ADMIN's password [] Created instance administrator ADMIN.
بعد از این مرحله باید یوزر زیر رو Unlock کنیم و یک پسورد براش ست کنیم
ALTER USER APEX_PUBLIC_USER ACCOUNT UNLOCK; ALTER USER APEX_PUBLIC_USER IDENTIFIED BY Apex#123;
بطور پیشفرض پسورد یوزر بالا بعد از 180 روز expire میشه. اگه میخوایم کلا expire نشه باید پارامتر PASSWORD_LIFE_TIME رو برای یوزر مربوطه روی unlimited بزاریم.
create profile no_expire limit password_life_time unlimited; alter user apex_public_user profile no_expire;
حالا باید اسکریپت apex_rest_config.sql رو برای کانفیگ Restful WebServices اجرا کنیم. بعد از اجرا برای دو یوزر APEX_LISTENER و APEX_REST_PUBLIC_USER از ما پسورد میخواد که باید یک پسورد با پیچیدگی مناسب وارد کنیم. میتونیم برای این دو هم expire رو unlimit کنیم
alter user apex_rest_public_user profile no_expire; alter user apex_listener profile no_expire;
پروفایل no_expre را برای یوزر زیر نیز ست میکنیم:
alter user ORDS_PUBLIC_USER profile no_expire;
نصب Apex و کانفیگ های مربوط به دیتابیس تا اینجا به اتمام رسید. حالا باید بریم سراغ کانفیگ و راه اندازی Ords برای ارتباط با Apex.
ابتدا جاوا رو نصب میکنیم. حین نصب باید تیک مربوط به ست کردن JAVA_HOME رو بزنیم. بعد از نصب CMD رو باز میکنیم و با اجرای دستور زیر و مشاهده ورژن نصب شده جاوا مطمئن میشیم که به درستی نصب شده.
java --version
برای نصب ords تو ورژن های قبلی با دستور java --jar فایل ords.war رو اجرا میکردیم. تو این نسخه هم میشه این کار رو انجام ولی اوراکل پیشنهاد داده از راه جدید نصب رو انجام بدیم.
بعد از خارج کردن ords از حالت فشرده، داخل فولدر bin یک فایل بنام ords وجود داره که ما نصب رو باهاش انجام میدیم. داخل فولدر ords یک فولدر بنام config ایجاد میکنیم. این فولدر رو هر جای دیگه هم میتونیم ایجاد کنیم و در نهایت کانفیگ های ords اینجا ذخیره میشه. cmd رو در مسیر فولدر ords باز میکنیم و دستور زیر رو اجرا میکنیم
bin\ords --config C:\ords\config install
توی حالت اول میایم ords رو بصورت standalone اجرا میکنیم. در این حالت نیازی به وب سرور نیست و بصورت داخلی از وب سرور jetty برای اجرا استفاده میکنه. بعد از اجرای دستور بالا یکسری اطلاعات از ما میخواد که با توجه به مراحل قبلی وارد میکنیم:
Type of installation > [2] Enter Database connection type > [1] Enter Host name > [localhost] Enter Listen port > [1521] Enter Service name > apexpdb Administrator username > sys Password > Default tablespace > [SYSAUX] Enter Temp tablespace > [TEMP] Enter Additional features > [1] Enter Start ORDS in standalone mode > [1] Enter Protocol > [HTTP] Enter Port > [8080] Enter Static Resources > C:\apex\images
آخرین پارامتری که از ما میخواد مسیر Static Resource های مربوط به apex هست که در فولدر images قرار داره و باید آدرسش رو بدیم(برای تامکت تو مرحله بعد میتونیم این فولدر رو داخل webapps قرار بدیم و عنوانش رو i بزاریم). در آخر ords روی پورت 8080 میاد بالا و میتونیم با وارد کردن آدرس http://localhost:8080 واردش بشیم. برای ورود به workspace عنوان رو internal میزنیم و یوزر admin و پسورد هم همون پسوردیه که با اجرای فایل apxchpwd.sql کردیم. با زدن crtl+c یا بستن cmd اجرای ords هم متوقف میشه. برای اجرای مجددش دستور زیر رو میتونیم استفاده کنیم
bin\ords --config C:\ords\config serve
تو محیط عملیاتی برای اینکه کنترل کاملتری داشته باشیم بهتره که ords رو روی یک وب سرور مثل tomcat اجرا کنیم. برای اینکار ابتدا tomcat رو نصب میکنیم(ولی اجرا نمیکنیم). فایل ords.war که فولدر ords وجود داره رو انتقال میدیم به مسیر نصب tomcat و در فولدر webapps کپی میکنیم. ords برای اجرا نیاز به دسترسی به فولدر کانفیگش داره. برای اینکه این دسترسی فراهم بشه باید یک سیستم Variable با مشخصات زیر بسازیم:
Variable Name: JAVA_TOOL_OPTIONS Variable Value: -Dconfig.url=C:\ords\config
حالا فولدر images رو کپی میکنیم داخل فولدر webapps تاکمکت و عنوانش رو به i تغییر میدیم.
بعد از این مرحله تامکت رو اجرا میکنیم و آدرس http://localhost:8080/ords رو توی مرورگر میزنیم و به ords دسترسی خواهیم داشت.
نکته: اگه هنگام ورود به ords با خطایی مبنی نبودن تنظیمات database connection مواجه شدید به احتمال زیاد ords به فولدر کانفیگش دسترسی نداره. دقت کنید که JAVA_TOOL_OPTIONS به درستی ست شده باشه و در تنظیمات سطح دسترسی فولدر config به یوزر LOCAL SERVICE دسترسی فول بدید.
اگه هنگام ایجاد و استفاده از Rest Service با خطای ACL مواجه شدید، ابتدا با اجرای دستور زیر یوزر Apex رو پیدا کنید:
SELECT TABLE_OWNER FROM all_synonyms WHERE SYNONYM_NAME = 'WWV_FLOW' and OWNER = 'PUBLIC'
و بعد اسکریپت زیر رو اجرا کنید(یوزر رو جایگزین کنید):
DECLARE l_acl VARCHAR2(100) := 'aclname.xml'; l_desc VARCHAR2(100) := 'description'; l_principal VARCHAR2(30) := 'APEX_23...'; l_host VARCHAR2(100) := 'localhost'; --hostname BEGIN dbms_network_acl_admin.create_acl(l_acl, l_desc, l_principal, TRUE, 'connect'); dbms_network_acl_admin.add_privilege(l_acl, l_principal, TRUE, 'resolve'); dbms_network_acl_admin.assign_acl(l_acl, l_host); COMMIT; END;
با اینکار محدودیت اتصال به Rest Web Service برای Apex برداشته میشه.
نکته: اگه بعد از Restart کردن ویندوز Apex بالا نیومد، وضعیت PDB رو چک کنید اگه close بود اول با دستور زیر Open کنید:
Alter pluggable database apexpdb open;
و بعد با دستور زیر State رو ذخیره کنید:
Alter pluggable database apexpdb save state;
با اجرای دستور بالا هر بار بعد از Restart تو حالت Open ست میشه.
نکته: در صورتی که پس از مدتی با خطای expire شدن یا نادرست بودن پسورد هنگام ورود به ords مواجه شدید ، باید ابتدا پسورد یوزر ORDS_PUBLIC_USER را آنلاک کرده و پسورد آن راتغییر دهید:
ALTER USER ORDS_PUBLIC_USER ACCOUNT UNLOCK; alter user ORDS_PUBLIC_USER identified by pass1ک
سپس در تنظیمات ords با روش زیر پسورد جدید را ست کنید:
bin\ords --config C:\ords\config config secret db.password
پس از اجرای کد بالا باید پسورد جدید را وارد کنید. در صورتی که چند pool برای دیتابیس داشتید(برای مثال با نام orclpool1) دستور به صورت زیر خواهد بود:
bin\ords --config C:\ords\config config --db-pool orclpool1 secret db.password