DBMS_CLOUD:安装在 19c 和 21c 本地数据库上

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000 次 1年
对象存储OSS,敏感数据保护2.0 200GB 1年
简介: 本文介绍如何在本地 19c 和 21c 数据库中安装 DBMS_CLOUD 包。 该软件包已安装在 Oracle 云上的数据库中。

本文介绍如何在本地 19c21c 数据库中安装 DBMS_CLOUD 包。 该软件包已安装在 Oracle 云上的数据库中。


目录



相关文章:

一、参考


本文是此 MOS 文档中的安装完整介绍:


建议始终参考 MOS 安装文档,因为安装过程可能会随着时间的推移而改变。


二、安装 DBMS_CLOUD


创建存放安装文件和 SSL 钱包的目录:


mkdir-p/home/oracle/dbc/commonstore/wallets/ssl


创建 /home/oracle/dbc/dbms_cloud_install.sql 文件,内容如下:


@$ORACLE_HOME/rdbms/admin/sqlsessstart.sqlsetverifyoff--youmustnotchangetheownerofthefunctionalitytoavoidfutureissuesdefineusername='C##CLOUD$SERVICE'createuser&usernamenoauthenticationaccountlock;
REMGrantCommonUserPrivilegesgrantINHERITPRIVILEGESonuser&usernametosys;
grantINHERITPRIVILEGESonusersysto&username;
grantRESOURCE, UNLIMITEDTABLESPACE, SELECT_CATALOG_ROLEto&username;
grantCREATEANYTABLE, DROPANYTABLE, INSERTANYTABLE, SELECTANYTABLE,
CREATEANYCREDENTIAL, CREATEPUBLICSYNONYM, CREATEPROCEDURE, ALTERSESSION, CREATEJOBto&username;
grantCREATESESSION, SETCONTAINERto&username;
grantSELECTonSYS.V_$MYSTATto&username;
grantSELECTonSYS.SERVICE$to&username;
grantSELECTonSYS.V_$ENCRYPTION_WALLETto&username;
grantread, writeondirectoryDATA_PUMP_DIRto&username;
grantEXECUTEonSYS.DBMS_PRIV_CAPTUREto&username;
grantEXECUTEonSYS.DBMS_PDB_LIBto&username;
grantEXECUTEonSYS.DBMS_CRYPTOto&username;
grantEXECUTEonSYS.DBMS_SYS_ERRORto&username;
grantEXECUTEONSYS.DBMS_ISCHEDto&username;
grantEXECUTEONSYS.DBMS_PDB_LIBto&username;
grantEXECUTEonSYS.DBMS_PDBto&username;
grantEXECUTEonSYS.DBMS_SERVICEto&username;
grantEXECUTEonSYS.DBMS_PDBto&username;
grantEXECUTEonSYS.CONFIGURE_DVto&username;
grantEXECUTEonSYS.DBMS_SYS_ERRORto&username;
grantEXECUTEonSYS.DBMS_CREDENTIALto&username;
grantEXECUTEonSYS.DBMS_RANDOMto&username;
grantEXECUTEonSYS.DBMS_SYS_SQLto&username;
grantEXECUTEonSYS.DBMS_LOCKto&username;
grantEXECUTEonSYS.DBMS_AQADMto&username;
grantEXECUTEonSYS.DBMS_AQto&username;
grantEXECUTEonSYS.DBMS_SYSTEMto&username;
grantEXECUTEonSYS.SCHED$_LOG_ON_ERRORS_CLASSto&username;
grantSELECTonSYS.DBA_DATA_FILESto&username;
grantSELECTonSYS.DBA_EXTENTSto&username;
grantSELECTonSYS.DBA_CREDENTIALSto&username;
grantSELECTonSYS.AUDIT_UNIFIED_ENABLED_POLICIESto&username;
grantSELECTonSYS.DBA_ROLESto&username;
grantSELECTonSYS.V_$ENCRYPTION_KEYSto&username;
grantSELECTonSYS.DBA_DIRECTORIESto&username;
grantSELECTonSYS.DBA_USERSto&username;
grantSELECTonSYS.DBA_OBJECTSto&username;
grantSELECTonSYS.V_$PDBSto&username;
grantSELECTonSYS.V_$SESSIONto&username;
grantSELECTonSYS.GV_$SESSIONto&username;
grantSELECTonSYS.DBA_REGISTRYto&username;
grantSELECTonSYS.DBA_DV_STATUSto&username;
altersessionsetcurrent_schema=&username;
REMCreatetheCatalogobjects@$ORACLE_HOME/rdbms/admin/dbms_cloud_task_catalog.sql@$ORACLE_HOME/rdbms/admin/dbms_cloud_task_views.sql@$ORACLE_HOME/rdbms/admin/dbms_cloud_catalog.sql@$ORACLE_HOME/rdbms/admin/dbms_cloud_types.sqlREMCreatethePackageSpec@$ORACLE_HOME/rdbms/admin/prvt_cloud_core.plb@$ORACLE_HOME/rdbms/admin/prvt_cloud_task.plb@$ORACLE_HOME/rdbms/admin/dbms_cloud_capability.sql@$ORACLE_HOME/rdbms/admin/prvt_cloud_request.plb@$ORACLE_HOME/rdbms/admin/prvt_cloud_internal.plb@$ORACLE_HOME/rdbms/admin/dbms_cloud.sql@$ORACLE_HOME/rdbms/admin/prvt_cloud_admin_int.plbREMCreatethePackageBody@$ORACLE_HOME/rdbms/admin/prvt_cloud_core_body.plb@$ORACLE_HOME/rdbms/admin/prvt_cloud_task_body.plb@$ORACLE_HOME/rdbms/admin/prvt_cloud_capability_body.plb@$ORACLE_HOME/rdbms/admin/prvt_cloud_request_body.plb@$ORACLE_HOME/rdbms/admin/prvt_cloud_internal_body.plb@$ORACLE_HOME/rdbms/admin/prvt_cloud_body.plb@$ORACLE_HOME/rdbms/admin/prvt_cloud_admin_int_body.plb--Createthemetadata@$ORACLE_HOME/rdbms/admin/dbms_cloud_metadata.sqlaltersessionsetcurrent_schema=sys;
@$ORACLE_HOME/rdbms/admin/sqlsessend.sql


📢 注意: 在所有的容器运行脚本,包括种子。这样新创建的容器将会包含 DBMS_CLOUD 包,无需再次安装!


$ORACLE_HOME/perl/bin/perl$ORACLE_HOME/rdbms/admin/catcon.pl\-usys/SysPassword1\--force_pdb_mode'READ WRITE'\-bdbms_cloud_install\-d/home/oracle/dbc\-l/home/oracle/dbc\dbms_cloud_install.sql


命令完成后检查日志文件,以确保它已在所有容器中运行。


三、创建钱包


创建一个钱包以允许 HTTPS 访问云 URI!


从 MOS 说明中提供的链接下载 dbc_certs.tar 文件,并将其上传至 /tmp,解压到 /home/oracle/dbc/commonstore/wallets/ssl 目录下。


mkdir-p/home/oracle/dbc/commonstore/wallets/sslcd/home/oracle/dbc/commonstore/wallets/ssltar-xvf/tmp/dbc_certs.tar


创建钱包并加载证书,我们正在使用钱包密码 MyPassword1,建议设置一个更加安全的密码。


orapkiwalletcreate-wallet . -pwdMyPassword1-auto_loginorapkiwalletadd-wallet . -trusted_cert-cert ./VeriSign.cer-pwdMyPassword1orapkiwalletadd-wallet . -trusted_cert-cert ./BaltimoreCyberTrust.cer-pwdMyPassword1orapkiwalletadd-wallet . -trusted_cert-cert ./DigiCert.cer-pwdMyPassword1


编辑 sqlnet.ora 文件,添加以下内容来识别钱包。


WALLET_LOCATION=  (SOURCE=(METHOD=FILE)(METHOD_DATA=  (DIRECTORY=/home/oracle/dbc/commonstore/wallets/ssl)))


对于只读 Oracle 主目录,sqlnet 文件存放在/u01/app/oracle/homes/OraDB21Home1/network/admin 目录下, 对于常规的 Oracle 主目录,存放在 $ORACLE_HOME/network/admin/ 目录下。


四、创建访问控制条目 (ACE)


我们需要创建一个访问控制条目 (ACE),以便 C##CLOUD$SERVICE 用户可以访问云服务。

创建一个 /home/oracle/dbc/dbc_aces.sql 文件,内容如下,如果需要修改位置,请编辑 sslwalletdir 设置。


@$ORACLE_HOME/rdbms/admin/sqlsessstart.sql--youmustnotchangetheownerofthefunctionalitytoavoidfutureissuesdefineclouduser=C##CLOUD$SERVICE--CUSTOMERSPECIFICSETUP, NEEDSTOBEPROVIDEDBYTHECUSTOMER---SSLWalletdirectorydefinesslwalletdir=/home/oracle/dbc/commonstore/wallets/ssl----UNCOMMENTANDSETTHEPROXYSETTINGSVARIABLESIFYOURENVIRONMENTNEEDSPROXYS----defineproxy_uri=<yourproxyURIaddress>--defineproxy_host=<yourproxyDNSname>--defineproxy_low_port=<your_proxy_low_port>--defineproxy_high_port=<your_proxy_high_port>--CreateNewACL/ACEsbegin--AllowallhostsforHTTP/HTTP_PROXYdbms_network_acl_admin.append_host_ace(
host=>'*',
lower_port=>443,
upper_port=>443,
ace=>xs$ace_type(
privilege_list=>xs$name_list('http', 'http_proxy'),
principal_name=>upper('&clouduser'),
principal_type=>xs_acl.ptype_db));
----UNCOMMENTTHEPROXYSETTINGSSECTIONIFYOURENVIRONMENTNEEDSPROXYS----AllowProxyforHTTP/HTTP_PROXY--dbms_network_acl_admin.append_host_ace(
--host=>'&proxy_host',
--lower_port=>&proxy_low_port,
--upper_port=>&proxy_high_port,
--ace=>xs$ace_type(
--privilege_list=>xs$name_list('http', 'http_proxy'),
--principal_name=>upper('&clouduser'),
--principal_type=>xs_acl.ptype_db));
----ENDPROXYSECTION----Allowwalletaccessdbms_network_acl_admin.append_wallet_ace(
wallet_path=>'file:&sslwalletdir',
ace=>xs$ace_type(privilege_list=>xs$name_list('use_client_certificates', 'use_passwords'),
principal_name=>upper('&clouduser'),
principal_type=>xs_acl.ptype_db));
end;
/--SettingSSL_WALLETdatabasepropertybegin--commentouttheIFblockwheninstalledinnon-CDBenvironmentsifsys_context('userenv', 'con_name') ='CDB$ROOT'thenexecuteimmediate'alter database property set ssl_wallet=''&sslwalletdir''';
----UNCOMMENTTHEFOLLOWINGCOMMANDIFYOUAREUSINGAPROXY----executeimmediate'alter database property set http_proxy=''&proxy_uri''';
endif;
end;
/@$ORACLE_HOME/rdbms/admin/sqlsessend.sql


在根容器中运行脚本:


conn/assysdba@@/home/oracle/dbc/dbc_aces.sql


五、验证安装


创建文件 /home/oracle/dbc/verify.sql,内容如下,根据需要编辑钱包路径和密码。


--youmustnotchangetheownerofthefunctionalitytoavoidfutureissuesdefineclouduser=C##CLOUD$SERVICE--CUSTOMERSPECIFICSETUP, NEEDSTOBEPROVIDEDBYTHECUSTOMER---SSLWalletdirectoryandpassworddefinesslwalletdir=/home/oracle/dbc/commonstore/wallets/ssldefinesslwalletpwd=MyPassword1--createandrunthisprocedureasowneroftheACLs, whichisthefutureowner--ofDBMS_CLOUDCREATEORREPLACEPROCEDURE&clouduser..GET_PAGE(urlINVARCHAR2) ASrequest_contextUTL_HTTP.REQUEST_CONTEXT_KEY;
reqUTL_HTTP.REQ;
respUTL_HTTP.RESP;
dataVARCHAR2(32767) defaultnull;
err_numNUMBERdefault0;
err_msgVARCHAR2(4000) defaultnull;
BEGIN--Createarequestcontextwithitswalletandcookietablerequest_context :=UTL_HTTP.CREATE_REQUEST_CONTEXT(
wallet_path=>'file:&sslwalletdir',
wallet_password=>'&sslwalletpwd');
--MakeaHTTPrequestusingtheprivatewalletandcookie--tableintherequestcontextreq :=UTL_HTTP.BEGIN_REQUEST(
url=>url,
request_context=>request_context);
resp :=UTL_HTTP.GET_RESPONSE(req);
DBMS_OUTPUT.PUT_LINE('valid response');
EXCEPTIONWHENOTHERSTHENerr_num :=SQLCODE;
err_msg :=SUBSTR(SQLERRM, 1, 3800);
DBMS_OUTPUT.PUT_LINE('possibly raised PLSQL/SQL error: '||err_num||' - '||err_msg);
UTL_HTTP.END_RESPONSE(resp);
data :=UTL_HTTP.GET_DETAILED_SQLERRM ;
IFdataISNOTNULLTHENDBMS_OUTPUT.PUT_LINE('possibly raised HTML error: '||data);
ENDIF;
END;
/setserveroutputonBEGIN&clouduser..GET_PAGE('https://objectstorage.eu-frankfurt-1.oraclecloud.com');
END;
/setserveroutputoffdropprocedure&clouduser..GET_PAGE;


运行该脚本后,应该生成提示 valid response


conn/assysdba@/home/oracle/dbc/verify.sql


六、列出 Bucket 内容


本文的这一部分假设您在 Oracle Cloud 上有一个对象存储 Bucket,并且您已经定义了一个 Auth Token 来访问它。 您可以在本文中阅读如何创建存储 Bucket 和身份验证令牌。



创建一个测试用户:


connsys/SysPassword1@//localhost:1521/pdb1 as sysdba--dropusertestuser1cascade;
createusertestuser1identifiedbytestuser1quotaunlimitedonusers;
grantconnect, resourcetotestuser1;


确保测试用户可以创建凭据并有权访问 DBMS_CLOUD 包:


grantcreatecredentialtotestuser1;
grantexecuteondbms_cloudtotestuser1;


连接到测试用户并创建凭证:


conntestuser1/testuser1@//localhost:1521/pdb1begindbms_credential.drop_credential(
credential_name=>'obj_store_cred');
end;
/begindbms_credential.create_credential(
credential_name=>'obj_store_cred',
username=>'me@example.com',
password=>'my-auth-token');
end;
/


我们现在可以使用 LIST_OBJECTS 表函数来获取存储桶中的对象列表:


selectobject_namefromdbms_cloud.list_objects(
'obj_store_cred',
'https://objectstorage.uk-london-1.oraclecloud.com/n/{my-namespace}/b/ob-bucket/o/');
OBJECT_NAME--------------------------------------------------------------------------------Image930.pngSQL>


相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
打赏
0
0
0
0
12
分享
相关文章
Linux数据库安装
本文介绍了在CentOS 8.0和Ubuntu 22.04系统上安装、配置和启动MariaDB数据库服务器的详细步骤。包括通过`yum`和`apt`包管理器安装MariaDB服务,启动并检查服务运行状态,设置root用户密码以及连接数据库的基本操作。此外,还展示了如何在Ubuntu上更新软件包列表、安装依赖项,并验证MariaDB的版本和运行状态。通过这些步骤,用户可以成功部署并初始化MariaDB环境,为后续数据库管理与应用开发奠定基础。
180 61
MySQL下载安装全攻略!小白也能轻松上手,从此数据库不再难搞!
这是一份详细的MySQL安装与配置教程,适合初学者快速上手。内容涵盖从下载到安装的每一步操作,包括选择版本、设置路径、配置端口及密码等。同时提供基础操作指南,如数据库管理、数据表增删改查、用户权限设置等。还介绍了备份恢复、图形化工具使用和性能优化技巧,帮助用户全面掌握MySQL的使用方法。附带常见问题解决方法,保姆级教学让你无忧入门!
MySQL下载安装全攻略!小白也能轻松上手,从此数据库不再难搞!
【YashanDB 知识库】ycm 托管数据库时,数据库非 OM 安装无法托管
本文主要介绍了因数据库未按规范使用 yasboot 安装导致的问题及解决方法。问题表现为无 yasom 和 yasagent 进程,且目录结构缺失,致使 ycm 无法托管与监控。分析发现可能是数据库版本旧或安装不规范引起。解决方法为先生成配置文件,安装 yasom 和 yasagent,再生成并修改托管配置模板,最终通过命令完成托管至 yasom 和 ycm。总结强调了按规范安装数据库的重要性以避免类似问题。
【YashanDB知识库】ycm托管数据库时,数据库非OM安装无法托管
### 简介 在检查数据库安装时,发现未使用yasboot安装,导致无yasom和yasagent进程及缺少相关目录,无法通过ycm托管和监控。为解决此问题,需先将数据库托管到yasom中,再托管到ycm中。具体步骤包括生成配置文件、安装yasom和yasagent、修改并执行托管配置。最终确保数据库能被正常托管和监控。经验总结:应按规范使用yasboot安装数据库,避免后续问题。 (239字符)
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
241 1
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
MySQL功能模块探秘:数据库世界的奇妙之旅
]带你轻松愉快地探索MySQL 8.4.5的核心功能模块,从SQL引擎到存储引擎,从复制机制到插件系统,让你在欢声笑语中掌握数据库的精髓!
50 26
Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
111 62
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库

热门文章

最新文章

AI助理
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问

你好,我是AI助理

可以解答问题、推荐解决方案等