Oracle APEX 4.2安装与配置 ORACLE_HTTPSERVER_HOME/ohs/modplsql/conf/dads.conf
在dads.conf文件中替换ORACLE_HTTPSERVER_HOME, host, port, service_name, 和apex_public_user_password为相应的值。
Alias /i/ \
PlsqlDocumentProcedure wwv_flow_file_mgr.process_download PlsqlDatabaseConnectString host:port:service_name ServiceNameFormat PlsqlNLSLanguage AMERICAN_AMERICA.AL32UTF8 PlsqlAuthenticationMode Basic SetHandler pls_handler
PlsqlDocumentTablename wwv_flow_file_objects$ PlsqlDatabaseUsername APEX_PUBLIC_USER PlsqlDefaultPage apex
PlsqlDatabasePassword apex_public_user_password
PlsqlRequestValidationFunction wwv_flow_epg_include_modules.authorize Allow from all
定位包含PlsqlNLSLanguage的行, PlsqlNLSLanguage决定DAD的语言集。其中character set部分必须设置为AL32UTF8,无论数据库character set是否是AL32UTF8.例如:
...
PlsqlNLSLanguage AMERICAN_AMERICA.AL32UTF8 ...
保存并关闭dads.conf
5. 停止并重新启动Oracle HTTP Server Windows:
对于低于数据库10g的版本:
ORACLE_HTTPSERVER_HOME\\opmn\\bin\\opmnctl
stopproc ias-component=HTTP_Server ORACLE_HTTPSERVER_HOME\\opmn\\bin\\opmnctl
startproc ias-component=HTTP_Server UNIX and Linux:
对于低于数据库10g的版本:
34 / 51
Oracle APEX 4.2安装与配置 ORACLE_HTTPSERVER_HOME/opmn/bin/opmnctl
stopproc ias-component=HTTP_Server ORACLE_HTTPSERVER_HOME/opmn/bin/opmnctl
startproc ias-component=HTTP_Server
注:如果使用的Oracle HTTP Server属于Oracle Fusion Middleware 11.1.1,可能需要替换ias-component名,如果这个名称被用于其它的HTTP_Server,这个默认的名称是ohs1
禁用Oracle XML DB Protocol Server
如果之前 使用embedded PL/SQL Gateway现在希望使用Oracle Application Express Listener,那么需要禁用Oracle XML DB Protocol server。
校验端口号,确认Oracle XML DB Protocol Server运行:
sqlplus / as sysdba
select dbms_xdb.gethttpport from dual;
如果端口号是0,那么Oracle XML DB Protocol Server是禁用的。 禁用Oracle XML DB Protocol Server
sqlplus / as sysdba
EXEC DBMS_XDB.SETHTTPPORT(port); 例:EXEC DBMS_XDB.SETHTTPPORT(0);
3.5.6 在Oracle 11g中开启网络服务
默认情况下Oracle 11g r1和r2的网络交互能力是禁用的。因而,如果在Oracle 11g上使用Oracle Application Express必须使用一个新的包dbms_network_acl_admin授权连接权限给所有主机针对于apex_040200数据库用户。授权失败将产生如下问题:
? Oracle Application Express发送邮件时。用户可以调用APEX_MAIL
发送邮件,但将发现问题;
? Oracle Application Express调用Web Services时 ? PDF/report打印时 5. 授权连接权限
接下来的例子展示了如何为数据库用户APEX_040200授权连接权限给任何主机。这个例子假定你已经使用sys用户以sysdba角色连接到安装了Oracle Application Express的数据库
DECLARE
ACL_PATH VARCHAR2(4000); BEGIN
35 / 51
Oracle APEX 4.2安装与配置 -- Look for the ACL currently assigned to '*' and give APEX_040200 -- the \ SELECT ACL INTO ACL_PATH FROM DBA_NETWORK_ACLS
WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL; IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, 'APEX_040200', 'connect') IS NULL THEN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH, 'APEX_040200', TRUE, 'connect'); END IF; EXCEPTION
-- When no ACL has been assigned to '*'. WHEN NO_DATA_FOUND THEN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('power_users.xml', 'ACL that lets power users to connect to everywhere', 'APEX_040200', TRUE, 'connect');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('power_users.xml','*'); END; /
COMMIT;
接下来的例子展示了如何提供更少的权限访问网络资源。这个例子开启Oracle Application Express Online Help指引和email,PDF printing ,如果这些服务在本地主机时。
DECLARE
ACL_PATH VARCHAR2(4000); BEGIN
-- Look for the ACL currently assigned to 'localhost' and give APEX_040200 -- the \ SELECT ACL INTO ACL_PATH FROM DBA_NETWORK_ACLS
WHERE HOST = 'localhost' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL; IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, 'APEX_040200', 'connect') IS NULL THEN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH, 'APEX_040200', TRUE, 'connect'); END IF; EXCEPTION
-- When no ACL has been assigned to 'localhost'. WHEN NO_DATA_FOUND THEN
36 / 51
Oracle APEX 4.2安装与配置 DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('local-access-users.xml', 'ACL that lets users to connect to localhost', 'APEX_040200', TRUE, 'connect');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('local-access-users.xml','localhost'); END; /
COMMIT;
6. 无效的ACL错误疑难解答
如果在运行之前脚本后收到ORA-44416: Invalid ACL error,使用下列查询定位无效的ACL
REM Show the dangling references to dropped users in the ACL that is assigned REM to '*'.
SELECT ACL, PRINCIPAL
FROM DBA_NETWORK_ACLS NACL, XDS_ACE ACE
WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL AND NACL.ACLID = ACE.ACLID AND
NOT EXISTS (SELECT NULL FROM ALL_USERS WHERE USERNAME = PRINCIPAL);
下一步,运行下列代码修复ACL
DECLARE
ACL_ID RAW(16); CNT NUMBER; BEGIN
-- Look for the object ID of the ACL currently assigned to '*' SELECT ACLID INTO ACL_ID FROM DBA_NETWORK_ACLS
WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL; -- If just some users referenced in the ACL are invalid, remove just those -- users in the ACL. Otherwise, drop the ACL completely. SELECT COUNT(PRINCIPAL) INTO CNT FROM XDS_ACE WHERE ACLID = ACL_ID AND
EXISTS (SELECT NULL FROM ALL_USERS WHERE USERNAME = PRINCIPAL); IF (CNT > 0) THEN
FOR R IN (SELECT PRINCIPAL FROM XDS_ACE WHERE ACLID = ACL_ID AND
NOT EXISTS (SELECT NULL FROM ALL_USERS
WHERE USERNAME = PRINCIPAL))
37 / 51
Oracle APEX 4.2安装与配置 LOOP
UPDATE XDB.XDB$ACL SET OBJECT_VALUE =
DELETEXML(OBJECT_VALUE,
'/ACL/ACE[PRINCIPAL=\ WHERE OBJECT_ID = ACL_ID; END LOOP; ELSE
DELETE FROM XDB.XDB$ACL WHERE OBJECT_ID = ACL_ID; END IF; END; /
REM commit the changes. COMMIT;
3.5.7 安全考虑
Oracle强烈推荐使用Secure Sockets Layer (SSL)确保密码和其他敏感信息不会在传输过程存在潜在的暴露可能。
3.5.8 管理JOB_QUEUE_PROCESSES
JOB_QUEUE_PROCESSES确定并行运行的工作数。在 Oracle Application Express Release 4.2中事务与SQL脚本都需要job支持,JOB_QUEUE_PROCESSES如果未启用或正确的工作,那么不能成功的执行脚本。
5. 检查JOB_QUEUE_PROCESSES参数
登录Oracle Application Express,查看About Application Express页面,或使用sqlplus连接到数据库
sqlplus / as sysdba
show parameter JOB_QUEUE_PROCESSES
6. 设置JOB_QUEUE_PROCESSES参数
sqlplus / as sysdba
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=100;
38 / 51