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;
-------