Oracle OLAP DBMS_CUBE.BUILD操作详解

需积分: 9 0 下载量 31 浏览量 更新于2024-09-07 收藏 2.62MB PDF 举报
"该资源是关于Oracle OLAP中DBMS_CUBE.BUILD过程的解读,主要探讨了在AWM(Analysis Workspace Metadata)环境下如何使用DBMS_CUBE.BUILD进行数据立方体的构建、刷新以及相关参数的设定。" 在Oracle数据库的OLAP(Online Analytical Processing)组件中,DBMS_CUBE包提供了对数据立方体操作的一系列存储过程,其中DBMS_CUBE.BUILD是用于创建或更新数据立方体的关键过程。这个过程允许用户根据指定的脚本或者直接通过参数来刷新数据立方体,以保持其数据的实时性。 1. DBMS_CUBE.BUILD过程详解: - script:此参数用于指定一个SQL脚本,脚本中包含了构建或刷新数据立方体所需的所有操作。 - method:可选参数,定义了构建数据立方体的方法,如'FAST'(快速刷新)或'COMPLETE'(完整刷新)。 - refresh_after_errors:如果设置为TRUE,在遇到错误后仍然继续刷新。 - parallelism:设定并行度,即同时执行的进程数量,以加速构建过程。 - atomic_refresh:若设为TRUE,表示原子刷新,即使在过程中出现错误,也会确保数据立方体处于一致状态。 - automatic_order:自动排序,如果设为TRUE,系统会自动确定最佳的构建顺序。 - add_dimensions:如果设为TRUE,会在构建过程中添加新的维度。 - scheduler_job:可指定调度器作业名称,以便通过调度器进行计划的刷新。 - master_build_id:主构建ID,用于跟踪和管理多个并行构建。 - nested:若设为TRUE,表示嵌套构建,适用于多级立方体的构建。 2. 示例: - 示例1展示了调用DBMS_CUBE.BUILD的基本语法,其中指定了立方体名、刷新类型和其他参数。 - 示例中,'GEOGRAPHIC'是立方体的名称,'S'代表快速刷新,其他参数如并行进程数(48)和是否原子刷新等也被设置。 3. 参数详解: - parallelism:控制并行构建进程的数量,例如设置为48,可以加快数据立方体的刷新速度,但需要注意的是,过多的并行进程可能会增加数据库服务器的负载。 - add_dimensions:当设置为FALSE时,表示在构建过程中不添加新的维度,这可能是因为维度已经存在,或者不希望在此次构建中改变维度结构。 4. 错误处理: - 如示例中所示,当遇到问题时,可以通过GRANT CREATE JOB TO OLAP_TRAIN赋予权限,并使用ALTER SYSTEM KILL SESSION终止特定会话来解决问题。 5. 参考链接: - 官方文档地址(https://docs.oracle.com/en/database/oracle/oracle-database/12.2/arpls/DBMS_CUBE.html#GUID-18B5FD4F-6877-4F11-B237-4BF23E976104)提供了更详细的信息,包括所有可用参数的完整描述和使用示例。 DBMS_CUBE.BUILD是Oracle OLAP环境中一个强大的工具,它允许灵活地管理和维护数据立方体的刷新策略,通过调整各种参数可以优化性能和数据一致性。了解并正确使用这些参数对于提升OLAP分析的效率至关重要。

grant execute on dbms_crypto to system; declare input_string VARCHAR2 (200) := 'Secret Message'; output_string VARCHAR2(2000); encrypted_raw RAW(2000); decrypted_raw RAW(2000); num_key_bytes NUMBER := 256/8; key_bytes_raw RAW(32); encryption_type PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; begin DBMS_OUTPUT.PUT_LINE(input_string); key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES(num_key_bytes); encrypted_raw := DBMS_CRYPTO.ENCRYPT ( src => UTL_I18N.STRING_TO_RAW(input_string, 'AL32UTF8'), typ => encryption_type, key => key_bytes_raw ); decrypted_raw := DBMS_CRYPTO.DECRYPT ( src => encrypted_raw, typ => encryption_type, key => key_bytes_raw ); output_string := UTL_I18N.RAW_TO_CHAR(decrypted_raw, 'AL32UTF8'); DBMS_OUTPUT.PUT_LINE(output_string); end; declare l_src_data varchar2(20); l_type pls_integer :=DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) :='0123456789123456'; l_encval raw(2000); CURSOR secret_cursor IS select phonenumber from customer; begin OPEN secret_cursor; LOOP FETCH secret_cursor INTO l_src_data; l_encval :=dbms_crypto.encrypt( src=>utl_i18n.string_to_raw(l_src_data,'AL32UTF8'), typ=>l_type, key=>utl_i18n.string_to_raw(l_key,'AL32UTF8')); DBMS_OUTPUT.PUT_LINE (l_encval); EXIT WHEN secret_cursor%NOTFOUND; END LOOP; CLOSE secret_cursor; end; declare ;_src_data row(100) :=hextoraw("190248129038903853275ijdkvjkad'); l_type pls_integer :=dbms_crypto.encrypt_aes128+ + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) :='0123456789123456'; l_decval raw(200); begin l_decval :=dbms_crypto.decrypt( src=>l_src_data, typ=>l_type, key=>utl_i18n.string_to_raw(l_key,'AL32UTF8')); end; SELECT Price FROM PRODUCT WHERE ProductID = 5;修正这一段代码

2023-05-26 上传

grant execute on dbms_crypto to system; -- 第一个代码块 declare input_string VARCHAR2 (200) := 'Secret Message'; output_string VARCHAR2(2000); encrypted_raw RAW(2000); decrypted_raw RAW(2000); num_key_bytes NUMBER := 256/8; key_bytes_raw RAW(32); encryption_type PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; begin DBMS_OUTPUT.PUT_LINE(input_string); key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES(num_key_bytes); encrypted_raw := DBMS_CRYPTO.ENCRYPT(src => UTL_I18N.STRING_TO_RAW(input_string, 'AL32UTF8'), typ => encryption_type, key => key_bytes_raw); decrypted_raw := DBMS_CRYPTO.DECRYPT(src => encrypted_raw, typ => encryption_type, key => key_bytes_raw); output_string := UTL_I18N.RAW_TO_CHAR(decrypted_raw, 'AL32UTF8'); DBMS_OUTPUT.PUT_LINE(output_string); end; -- 第二个代码块 declare l_src_data varchar2(20); l_type pls_integer := DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) := '0123456789123456'; l_encval raw(2000); cursor secret_cursor is select phonenumber from customer; begin open secret_cursor; loop fetch secret_cursor into l_src_data; exit when secret_cursor%notfound; l_encval := dbms_crypto.encrypt(src => utl_i18n.string_to_raw(l_src_data,'AL32UTF8'), typ => l_type, key => utl_i18n.string_to_raw(l_key,'AL32UTF8')); dbms_output.put_line(l_encval); end loop; close secret_cursor; end; -- 第三个代码块 declare l_src_data raw(100) := hextoraw('190248129038903853275ijdkvjkad'); l_type pls_integer := DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) := '0123456789123456'; l_decval raw(200); begin l_decval := dbms_crypto.decrypt(src => l_src_data, typ => l_type, key => utl_i18n.string_to_raw(l_key,'AL32UTF8')); end; -- SQL 查询语句 SELECT Price FROM PRODUCT WHERE ProductID = 5;declare * ERROR at line 18: ORA-06550: line 18, column 1: PLS-00103: Encountered the symbol "DECLARE"报错

2023-05-26 上传