• 平时积累的oracle语句-更新


    1.cmd中用sql plus登录
    cmd中输入:sqlplus "/ as sysdba"
    运行输入:sqlplus /nolog;再输入connect <username>/<password>@<连接标识符>
    输入:sqlplus 用户名/密码@数据库ID as sysdba
    在sqlplus中时,如果断开连接后:conn 用户名/密码@数据库ID as sysdba

    oracle有三个默认的用户名和密码
    ★sys/change_on_install
    ★system/manager
    ★scott/tiger


    2.导出查询结果
    oracle 下sqlplus 里可以用
    spool 路径+文件名;
    ..........;
    spool off;
    ----------------------------------------------
    set trimspool on
    set linesize 120 (默认数量为80)
    set pagesize 2000
    set newpage 1
    set heading off
    set term off
    set time on 开启时钟显示
    spool 路径+文件名
    select col1||','||col2||','||col3||','||col4||'..' from tablename;
    spool off
    ----------------------------------------------
    该方法导出的数据文件格式很规整,数据文件的大小合适。经这种方法导出来的数据文件再由sqlldr导入时,出错的可能性很小,基本都可以导入成功。
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

    set echo on --是否显示执行的命令内容
    set feedback off --是否显示 * rows selected
    set heading off --是否显示字段的名称
    set verify off --是否显示替代变量被替代前后的语句。fil
    set trimspool off --去字段空格
    set pagesize 1000 --页面大小
    set linesize 50//linesize设定尽量根据需要来设定,大了生成的文件也大
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


    3.如何查看有多少个数据库?
    windows环境,查看有多少OracleServices开头的服务就行了。
    select name from v$database;


    4.版本
    select * from v$version;
    select * from v$instance;
    select * from product_component_version;

    SQL> desc v$instance
    名称 是否为空? 类型
    ----------------------------------------- -------- -----------------

    INSTANCE_NUMBER NUMBER
    INSTANCE_NAME VARCHAR2(16)
    HOST_NAME VARCHAR2(64)
    VERSION VARCHAR2(17)
    STARTUP_TIME DATE
    STATUS VARCHAR2(12)
    PARALLEL VARCHAR2(3)
    THREAD# NUMBER
    ARCHIVER VARCHAR2(7)
    LOG_SWITCH_WAIT VARCHAR2(15)
    LOGINS VARCHAR2(10)
    SHUTDOWN_PENDING VARCHAR2(3)
    DATABASE_STATUS VARCHAR2(17)
    INSTANCE_ROLE VARCHAR2(18)
    ACTIVE_STATE VARCHAR2(9)
    BLOCKED VARCHAR2(3)

    5.查看库中所有表的名字?
    select table_name from all_tables;


    6.查看表的字段和字段属性?
    desc 表名


    7.like
    SELECT * FROM Persons WHERE City LIKE '%g';
    %可用于定义通配符(模式中缺少的字母)


    8.v$%
    show all 查看所有68个系统变量值
    show parameters :标识系统初始化参数
    show parameters global_names;查看特定参数,
    以“v$”开头的表示动态视图的意思


    9.使用system用户执行以下命令:
    alter system set "_allow_level_without_connect_by" = true;
    commit;


    10.查看语言字符集(log as sysdba needed)
    应当将PROPS$视为禁忌,也就是说,决不要直接对这个表进行任何操作。备份
    select value$ from props$ where name=' NLS_CHARACTERSET';  
    显示不是ZHS16GBK,就更改,默认的是:WE8ISO8859p1  
    更改命令:
    update props$ set value$='ZHS16GBK' where name='NLS_CHARACTERSET';  
    重启生效 
    select * from v$nls_parameters;

    11.props$中的属性
    select NAME,value$ from sys.props$
    DICT.BASE
    DEFAULT_TEMP_TABLESPACE
    DEFAULT_PERMANENT_TABLESPACE
    DEFAULT_EDITION
    Flashback Timestamp TimeZone
    TDE_MASTER_KEY_ID
    DST_UPGRADE_STATE
    DST_PRIMARY_TT_VERSION
    DST_SECONDARY_TT_VERSION
    DEFAULT_TBS_TYPE
    NLS_LANGUAGE
    NLS_TERRITORY
    NLS_ISO_CURRENCY
    NLS_NUMERIC_CHARACTERS
    NLS_CHARACTERSET
    NLS_CALENDAR
    NLS_DATE_FORMAT
    NLS_DATA_LANGUAGE
    NLS_SORT
    NLS_TIME_FORMAT
    NLS_TIMESTAMP_FORMAT
    NLS_TIME_TZ_FORMAT
    NLS_TIMESTATMP_TZ_FORMAT
    NLS_DUAL_CURRENCY
    NLS_COMP
    NLS_LENGTH_SEMANTICS
    NLS_NCHAR_CONV_EXCP
    NLS_NCHAR_CHARACTERSET
    NLS_RDBMS_VERSION
    GLOBAL_DB_NAME
    EXPORT_VIEWS_VERSION
    WORKLOAD_CAPTURE_MODE
    WORKLAOD_REPLAY_MODE
    MO_USERID_VERIFIER_SALT
    DBTIMEZONE


    12. 返回前n条记录
    select * from table where rownum<n;


    13.获取当前时间
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;


    14.查看当前的数据库文件存位置
    select name from v$datafile;


    15.创建数据库并创建用户分配权限
    使用system用户执行以下命令:
    alter system set "_allow_level_without_connect_by" = true;
    commit;

    //创建表空间
    CREATE TABLESPACE ecology
    LOGGING
    DATAFILE 'D:DATAecology.DBF'
    SIZE 300M
    AUTOEXTEND ON
    NEXT 32M MAXSIZE 2048M
    EXTENT MANAGEMENT LOCAL;

    //创建用户
    CREATE USER ecology IDENTIFIED BY ecology DEFAULT TABLESPACE ecology;
    grant connect,resource to ecology;
    grant dba to ecology;
    ALTER USER ecology ACCOUNT UNLOCK;//解除锁定

    修改用户密码:alter user username identified by newpassword;


    16.放日期格式冲突修改字符集,输入的格式要看你安装的ORACLE字符集的类型,
    alter system set NLS_DATE_LANGUAGE = American
    alter session set NLS_DATE_LANGUAGE = American
    或者在to_date中写
    select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
    注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,
    可查看
    select * from nls_session_parameters
    select * from V$NLS_PARAMETERS


    17.exp user/password@SID file=d:1.dmp owner=user;
    exp user/password@SID file=d:1.dmp full=y;
    由于Oracle的imp/exp组件的操作原则--向下兼容,且有一些规则:
    规则1:低版本的exp/imp可以连接到高版本(或同版本)的数据库服务器,但高版本的exp/imp不能连接到低版本的数据库服务器;
    规则2:高版本exp出的dmp文件,低版本无法imp(无法识别dmp文件);低版本exp出的dmp文件,高版本可以imp(向下兼容);
    规则3:从Oracle 低版本Export的数据可以Import到Oracle高版本中,但限于Oracle的相邻版本,如从Oracle 10 到 Oracle 11.对于两个不相邻版本间进行转换,如从Oracle 9 到 Oracle 11,则应先将数据输入到中间版本-Oracle 10,再从中间数据库转入更高版本Oracle 11.
    据此,最快捷的解决方案就是使用安装了10g Oracle 的机子,进行服务器上数据库数据的导出。


    18.show命令
    显示SQL*Plus 系统变量,或者当前的SQL*Plus环境。


    19.查询用户名,用户使用的缺省表空间等
    select * from dba_users;(数据库里所有的用户)
    select * from all_users;(查看你能管理的所有用户)
    select * from user_users;(查看当前用户信息)
    select username,default_tablespace from dba_users;

    20.删除用户和表空间
    drop user webgis cascade;
    //cascade 参数是级联删除该用户所有对象,经常遇到如用户有对象而未加此参数则删不了的问题
    drop tablespace webgis including contents and datafiles cascade constraints;
    //including contents参数删除表空间中的内容,如果删除前表空间中有内容,不加此参数则删不掉
    //including datafiles参数删除表空间中的数据文件
    //cascade onstraints同时删除tablespace中表的外键参照

    windows需要先下线
    alter tablespace jjparameter offline;
    drop tablespace jjparameter including contents and datafiles;
    drop user jjparameter;
    drop user jjparameter cascade;


    21.查询当前连接的用户并断开
    select sid,serial# from v$session where username='JJGAS';

    SID SERIAL#
    ---------- ----------
    18 40
    22 1368

    alter system kill session 'sid,serial';

    alter system kill session '22,1368';

    22.查看表空间大小
    SELECT * FROM DBA_DATA_FILES WHERE TABLESPACE_NAME='SDE';
    查看已使用的表空间大小
    SELECT * FROM DBA_SEGMENTS WHERE TABLESPACE_NAME='SDE';
    查看未使用空间大小
    SELECT * FROM DBA_FREE_SPACE WHERE TABLESPACE_NAME='SDE';

    23.查询Oracle初始化参数 OPEN_CURSORS指定在任何时刻会话可同时打开的游标数,默认为300
    show parameter open_cursors;
    设置游标数目上限
    alter system set open_cursors=4000;
    查询正在使用的游标的数目
    select count(*) from v$open_cursor;
    select user_name,count(*) from v$open_cursor group by user_name;

    24.查询数据库自身的信息(数据字典)
    select * from dictionary;

    25.确定实例是否是RAC(分布式环境)数据库的一部分(as sysdba)
    select parallel from v$instance;
    如果是单实例数据库,那么将返回NO

    26.确定数据库是否通过备用数据库的保护来防止数据丢失(as sysdba)
    select protection_level from v$database;
    如果数据库的确未受到保护,那么将返回UNPROTECTED

    27.确定是否在数据库中配置了流:
    select * from dba_streams_administrator;
    如果尚未配置流,那么将不返回任何行

    28.Oracle的sql语句构造时推荐带上表空间
    select * from table_space.table_name;


    29.显示可以动态重设大小的SGA(system global area,系统全局区)组件的当前、最大、最小的容量(as sysdba)
    select component,current_size,min_size,max_size from v$sga_dynamic_components;

    COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE
    ---------------------------------------------------------------- ------------ ---------- ----------
    shared pool 1409286144 1409286144 1409286144
    large pool 16777216 16777216 16777216
    java pool 16777216 16777216 16777216
    streams pool 0 0 0
    DEFAULT buffer cache 1325400064 1325400064 1325400064
    KEEP buffer cache 0 0 0
    RECYCLE buffer cache 0 0 0
    DEFAULT 2K buffer cache 0 0 0
    DEFAULT 4K buffer cache 0 0 0
    DEFAULT 8K buffer cache 0 0 0
    DEFAULT 16K buffer cache 0 0 0
    DEFAULT 32K buffer cache 0 0 0
    Shared IO Pool 0 0 0
    ASM Buffer Cache 0 0 0


    30.查询已为(以及当前为)程序全局区分配了多少内存(as sysdba)
    select name,value from v$pgastat where name in('maximum PGA allocated','total PGA allocated');

    NAME VALUE
    ---------------------------------------------------------------- ----------
    total PGA allocated 86776832
    maximum PGA allocated 180016128

    31.ORA-01000: 超出打开游标的最大数 解决方法
    step 1:查看数据库当前的游标数配置(23)
    show parameter open_cursors;
    step 2:查看游标使用情况
    select o.sid, osuser, machine, count(*) num_curs from v$open_cursor o, v$session s where user_name = 'JJWATER' and o.sid=s.sid group by o.sid, osuser, machine order by num_curs desc;
    此处的user_name='user'中,user代表占用数据库资源的数据库用户名.
    step 3:查看游标执行的sql情况
    select o.sid q.sql_text from v$open_cursor o, v$sql q where q.hash_value=o.hash_value and o.sid = 123;
    step 4:根据游标占用情况分析访问数据库的程序在资源释放上是否正常,如果程序释放资源没有问题,则加大游标数。(23)
    alter system set open_cursors=2000 scope=both;

    32.查询表所属的表空间
    select tablespace_name from tabs where table_name='VALVE';

    33.查看角色或用户的权限
    select * from dba_sys_privs;
    select * from user_sys_privs;
    查看Oracle提供的系统权限
    select name from sys.system_privilege_map;
    查看角色(只能查看登陆用户拥有的角色)所包含的权限
    select * from role_sys_privs;
    查看用户对象权限:
    select * from dba_tab_privs;
    select * from all_tab_privs;
    select * from user_tab_privs;
    查看所有角色:
    select * from dba_roles;
    查看哪些用户有sysdba或sysoper系统权限(查询时需要相应权限)
    select * from V$PWFILE_USERS
    查看一个用户的所有系统权限(包含角色的系统权限)
    select privilege from dba_sys_privs where grantee='DATAUSER'
    union
    select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee='DATAUSER' );
    --------
    select * from dba_role_privs where grantee='SDE';


    34.查看所有触发器、存储过程、视图和表
    Select object_name From user_objects Where object_type='TRIGGER'; --所有触发器
    Select object_name From user_objects Where object_type='PROCEDURE'; --所有存储过程
    Select object_name From user_objects Where object_type='VIEW'; --所有视图
    Select object_name From user_objects Where object_type='TABLE'; --所有表
    Select * from user_sequences;--所有序列


    35.查看数据库的后台进程
    SELECT * FROM v$bgprocess;

    36.查看数据库连接的客户端信息
    SELECT process, osuser,username,machine,logon_time,SQL_text FROM v$session a,v$SQLtext b WHERE a.SQL_address = b.address;

    37.用户状态、密码防止过期处理办法:
    a.查询该用户所使用的profile,如果没有特别设置,一般会是default:
    SELECT USERNAME,PROFILE FROM dba_users;
    b.查询default的profile设置是否有密码限制
    SELECT * FROM dba_profiles WHERE resource_name='PASSWORD_LIFE_TIME';
    c.修改default的profile密码策略为无限制
    alter profile default limit password_life_time unlimited;
    用户已经过期处理
    select username,account_status from dba_users where username='用户名';
    状态:EXPIRED & LOCKED 过期并锁定;
    过期则可以用以下语句接触锁定
    alter user <用户名> identified by <密码> account unlock;
    若已忘记用户密码且预保持密码不变:
    select name,astatus ,password from user$ where name='<用户名>';
    NAME ASTATUS PASSWORD
    ------------------------------ ---------- ------------------------------
    用户名 0 145DD53E16FC9628
    alter user <用户名> identified by values '145DD53E16FC9628';
    若以上不管用,则终极简单粗暴解决办法:
    UPDATE USER$ SET ASTATUS=0 WHERE NAME='<用户名>';
    扩展:
    select * from user_astatus_map;
    STATUS# STATUS
    ---------- --------------------------------
    0 OPEN
    1 EXPIRED
    2 EXPIRED(GRACE)
    4 LOCKED(TIMED)
    8 LOCKED
    5 EXPIRED & LOCKED(TIMED)
    6 EXPIRED(GRACE) & LOCKED(TIMED)
    9 EXPIRED & LOCKED
    10 EXPIRED(GRACE) & LOCKED
    * expired (grace) 指定一个期限, 到达这个期限的时候,系统会给出一个警告并且允许登录(grace), 如果过了这段期限, 对应的密码就会自动过期, 相当于我们的密码过期提醒.
    create profile test limit password_life_time 5 password_grace_time 5;
    alter user <用户名> profile test;

    38.directory(as sysdba)
    desc dba_directories;
    create or replace directory xml_dir as 'E:Tempxml';
    grant read,write on directory xml_dir to jjgas;
    insert into xml_table values(XMLTYPE(bfilename('xml_dir','Employees.xml'),nls_charset_id('AL32UTF8')));

    39.Oracle数据库当前的nls_date_format参数值查询及设置
    i、查询nls_date_format
    1)select * from nls_session_parameters where parameter = 'NLS_DATE_FORMAT';
    显示:NLS_DATE_FORMAT DD-MON-RR
    2)select * from nls_database_parameters where parameter = 'NLS_DATE_FORMAT';
    显示:NLS_DATE_FORMAT DD-MON-RR
    3)select * from nls_instance_parameters where parameter = 'NLS_DATE_FORMAT';
    显示:NLS_DATE_FORMAT null (在我本地nls_instance_parameters中没有设置NLS_DATE_FORMAT)
    ii、设置nls_date_format
    1)首先,介绍一下NLS参数相关的NLS_SESSION_PARAMETERS/NLS_DATABASE_PARAMTERS/NLS_INSTANCE_PARAMETERS三个视图。
    NLS参数分session/ instance/ database三个级别。session级别覆盖instance级别,instance级别覆盖database级别。就是说,如果session级别、instance级别和database级别都给某个参数赋值了,如nls_date_format参数,则先看session级别、如果session级别没有设定值,则看instance级别,以此类推。
    2)其次,设定nls_date_format的值
    session级别设定值:
    alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';设定之后再查询会发现nls_session_parameters视图中nls_date_format的值已经变了,而nls_instance_parameters、nls_database_parameters视图中的值没有变。
    SESSION级别——如果只是希望自己看到某种格式而不影响其他人看到的结果。
    instance级别设定值:
    alter system set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';此级别的值在oracle9i以后就不允许设定了,所以本地设定不了。
    database级别设定值:
    oracle不允许设定此级别的参数值,也没有提供设定语句。
    3)然后,我们可以通过以下查询,发现本数据库是不允许instance级别和database级别参数值更改的
    select name, isses_modifiable, issys_modifiable, isinstance_modifiable from v$parameter where name = 'nls_date_format';
    显示:nls_date_format TRUE FALSE FALSE
    发现:isses_modifiable=TRUE、issys_modifiable=FALSE、isinstance_modifiable=FALSE的


    40.查看当前操作系统情况
    SELECT * FROM V$OSSTAT;
    SELECT * FROM PRODUCT_COMPONENT_VERSION;
    SELECT * FROM V$SYSSTAT
    select sys_context('userenv','ip_address') from dual;


    41.查看数据库实例名字
    select name from v$database;
    select instance_name from v$instance;
    show parameter instance;


    42.查看用户状态
    select distinct account_status from dba_users;

    查看使用了默认密码的用户
    select d.username,u.account_status from dba_users_with_defpwd d,dba_users u where d.username=u.username order by 2,1;


    43.查看数据库global_name
    查看global_names属性是否开启
    show parameter global_name;
    查看golbal_names的值:
    select * from global_name;
    修改global_name
    1)启用global_names:
    alter system set global_names=true;
    2)修改global_name的方法一:
    ALTER DATABASE RENAME GLOBAL_NAME TO ORCL;
    3)修改global_name的方法二:(不建议)
    update props$ set value$ = 'orcl' where name = 'GLOBAL_DB_NAME';


    44.查看并修改当前ORALCE PROCESS数量
    show parameter process
    查看当前ORALCE SESSION数量
    show parameter session
    修改PROCESS数量:
    alter system set processes=1000 scope = spfile;
    修改SESSION数量:
    alter system set sessions=1105 scope = spfile;
    注:sessions是个派生值,由processes的值决定,公式sessions=1.1*process + 5


    45.降低系统的SGA大小
    32位的WIN2003系统ORACLE单进程的限制为1.7G,对于超过的内存,ORACLE也无法使用,导致ORACLE在高峰期对客户机分配到一定数量的时候,导致ORACLE可用的内存不足,导致ORA-12518错误.
    只有通过降低SGA的大小,以使得ORACLE有更多的内存可以对客户端进行分配.
    32位的WIN32以及32位的ORACLE. 直接导致ORACLE能够使用的内存不超过1.7G,对SGA的大小进行一定量的减少,系统基本不再出现无法分配的问题。

    查看SGA的大小:
    show parameter sga
    同时修改sga_max_size和sga_target
    alter system set sga_max_size=1000M scope=spfile;
    alter system set sga_target=1000M scope=spfile;


    46.备份spfile
    create pfile from spfile; --从spfile(运行时配置)创建pfile(系统配置)
    恢复
    create spfile from pfile= 'D:pfile.ora'


    47.dos下监听器
    lsnrctl stop
    lsnrctl start
    emctl stop dbconsole
    emctl start dbconsole

    48.startup 无法启动时,可以删除在重建,
    oradim -delete -sid JJGAS
    oradim -new -sid orcl
    set ORACLE_SID=orcl
    sqlplus / as sysdba
    startup
    然后通过下面命令启动服务
    oradim -shutdown -sid JJGASDB -shuttype srvc,inst -shutmode immediate -syspwd sys;
    oradim -startup -sid JJGASDB -starttype srvc,inst -syspwd sys;


    49.开启审计
    alter system set audit_sys_operations=TRUE scope=spfile;
    alter system set audit_trail=db,extended scope=spfile;
    AUDIT TABLE BY username WHENEVER NOT SUCCESSFUL;

    取消审计
    alter system set audit_trail=FALSE scope=spfile;
    重启数据库
    shutdown immediate;
    startup;
    取消登陆与登出审计
    noaudit connect;
    查看是否成功取消
    select user_name, audit_option, success, failure from sys.dba_stmt_audit_opts where audit_option like '%CREATE%';
    如果结果已经没有create session则代表成功。


    50.开启和取消密码复杂性验证
    开启复杂性验证
    alter system set resource_limit = true;
    脚本中有两个验证函数前一个是96年老版本,后一个函数是2006版本[verify_function |verify_function_11G],执行完脚本后,默认的profile将开启应用
    @ $ORACLE_HOME/RDBMS/ADMIN/utlpwdmg.sql
    部分脚本中的内容
    ALTER PROFILE DEFAULT LIMIT
    PASSWORD_LIFE_TIME 180
    PASSWORD_GRACE_TIME 7
    PASSWORD_REUSE_TIME UNLIMITED
    PASSWORD_REUSE_MAX UNLIMITED
    FAILED_LOGIN_ATTEMPTS 10
    PASSWORD_LOCK_TIME 1
    PASSWORD_VERIFY_FUNCTION verify_function_11G;

    取消Oracle密码复杂度检查:
    alter profile default limit password_verify_function null;
    SELECT profile,resource_type,resource_name,limit FROM dba_profiles WHERE resource_type='PASSWORD' AND profile='DEFAULT';
    PASSWORD_VERIFY_FUNCTION: Oracle允许将复杂的PL/SQL密码验证脚本做为参数传递给PASSWORD_VERIFY_FUNCTION。并且其自己提供了一个默认的脚本,但是用户可以创建自己的验证规则或使用第三方软件验证。

    51.开启大小写

    ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = TRUE

    52.执行脚本文件
    SQL>start D:a.sql或者
    SQL>@ D:a.sql


    53.表操作
    create table tablename as select * from existtablename where 恒假条件;//拷贝表,仅有字段
    alter table tablename modify(columnname datatype); //修改现有列的数据类型,字段宽度
    alter table tablename rename column oldcolumnname to new columnname;//重命名列名
    alter table tablename add(newcolumnname datatype);//增加列
    alter table tablename drop column columnname;//删除列
    alter table tablename add constraint keyname primary key(columnname);//设置列为主键约束
    alter table tablename drop constraint keyname ;//删除主键约束
    rename oldtablename to newtablename;//重命名表
    drop table tablename;//删除表

    54.并行处理操作
    Oracle的并行执行包括:
    1) 并行查询
    2) 并行DML(insert,delete,update)
    3) 并行DDL(表和索引的创建)。

    1. 对象级
    设置表和索引的并行度,从而使用涉及这些对象的SQL操作按设定的并行度执行。例如:
    alter table 门诊费用记录 parallel 8;
    alter index 门诊费用记录_IX_登记时间 parallel;
    如果不指定并行度的值,Oracle会根据参数和CPU数来估算一个缺省值。

    禁用并行度(指定并行度为1或使用noparallel):
    alter table 门诊费用记录 parallel 1;
    alter index 门诊费用记录_IX_登记时间 noparallel;
    如果不改变对象的并行度属性,唯一可以禁用并行查询的方法是将初始化参数parallel_max_servers设置为0。

    2.会话级
    人工启用和禁用的语法如下:
    ALTER Session ENABLE PARALLEL query[|DML|DDL];
    ALTER Session DISABLE PARALLEL query[|DML|DDL];

    强制按指定的并行度执行。
    ALTER Session FORCE PARALLEL QUERY PARALLEL 8;
    ALTER Session FORCE PARALLEL DML PARALLEL 8;
    ALTER Session FORCE PARALLEL DDL PARALLEL 8;
    强制并行对于递归SQL不起作用,但覆盖表或索引上定义的并行度。

    查询当前会话是否启用了并行执行:
    select pq_status,pdml_status,pddl_status from v$session where sid=sys_context('userenv','sid');
    PQ_STATU PDML_STA PDDL_STA
    -------- -------- --------
    ENABLED DISABLED ENABLED

    3.语句级
    通过在SQL中添加提示来指定并行执行及并行度。
    优化器只是按指定的提示来考虑是否使用并行执行,并不会强制使用(它会选择成本最低的那一个执行计划)例如:
    Select /*+ parallel(t1,8)*/count(*) from 门诊费用记录 t1;
    Create table 医嘱执行时间 parallel 8 as select /*+ parallel(t1,8)*/* from医嘱执行时间 t1;
    alter index 门诊费用记录_IX_登记时间 rebuild parallel 8;
    注意:并行DML需要先在会话级显示的启用,并且需要同时启用并行查询;例
    SQL> ALTER Session ENABLE PARALLEL DML;
    SQL> ALTER Session ENABLE PARALLEL QUERY;
    SQL> Update /*+ parallel(t1,8)*/ 门诊费用记录 t1 Set 待转出 = 132 Where 结帐id In
    (Select /*+ parallel(t2,8)*/结帐id From 病人预交记录 t2 Where 待转出 = 132);
    如果不提交事务,该会话的后续SQL无法访问被修改的表,查询未提交事务的表,将会返回错误:”ora-12838:无法读取、修改一个被并行修改过的表”

    定义主键约束时,无法并行的自动创建主键索引,但可以采取以下变通方式:
    CREATE UNIQUE INDEX 检验标本记录_UQ_标本序号 ON 检验标本记录(核收时间, 仪器ID, 标本序号, 标本类别) PARALLEL 8;
    ALTER TABLE 检验标本记录 ADD CONSTRAINT 检验标本记录_UQ_标本序号 Unique (核收时间, 仪器ID, 标本序号, 标本类别);
    这种方式创建的主键约束与自动创建的有一个差别,就是删除主键的时候,不会自动删除对应的索引,需要增加删除索引的语法,例:
    ALTER TABLE 检验标本记录 DROP CONSTRAINT 检验标本记录_UQ_标本序号 cascade drop index;

    另外,关于并行查询的参数配置,大部分情况下,无须调整,网上的资料比较多,这里不再一一列举。仅说明一个参数:
    当执行并行重建索引时,可能会遇到ora-00600错误,通过修改参数parallel_execution_message_size可解决这个问题,例:
    SQL> alter system set parallel_execution_message_size=8192 scope=spfile;
    缺省值为2148,对于一般的并行任务,这个值太小。修改后需重启数据库。

    55. 查看告警日志位置
    ①10g
    show parameter background_dump_dest;
    background_dump_dest string d:appadministratordiag dbmsorclorcl race
    show parameter dump;
    background_core_dump string partial
    background_dump_dest string d:appadministratordiag dbmsorclorcl race
    core_dump_dest string d:appadministratordiag dbmsorclorclcdump
    max_dump_file_size string unlimited
    shadow_core_dump string none
    user_dump_dest string d:appadministratordiag dbmsorclorcl race
    如果文件太大,备份,然后直接删除,执行命令
    alter system switch logfile;
    ②11g 12c
    select * from v$diag_info;


    -------

  • 相关阅读:
    052-141
    052-140
    052-139
    052-138
    需要做笔记的页面
    日期总是显示1900/01/01 0:00:00
    延迟加载的树控件
    (简单)关于summary的注释
    江南检测
    fineui动态添加用户控件
  • 原文地址:https://www.cnblogs.com/5igis/p/5igis_11789.html
Copyright © 2020-2023  润新知