oracle的经典总结
Oracle 游标
文章分类:数据库
游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。
Oracle中的游标有两种:显式游标、隐式游标。
显示游标是用cursor...is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理,而隐式游标是在执行插入(insert)、删除(delete)、修改(update)和返回单条记录的查询(select)语句时由PL/SQL自动定义的。
ORACLE备份与恢复
文章分类:数据库
1)ORACLE:使用sysdba登录,执行以下命令备份数据库到数据库安装用户的目录下,通常数据库安装用户是dbserv30这样的用户:
-------------- 登录后查询到所有的数据库用户 --------------
%sqlplus / as sysdba
SQL> select username from all_users where username like '%30';
SQL> exit;
%exp sysdbname/passwd owner=sysdbname rows=y compress=n buffer=65536 feedback=100000 volsize=0 file=exp_sysdb.dmp
2)注意事项:SCP数据库被命名为OPS$SCP30这样的名称,密码不确定是什么,因此可以在备份SCP数据库时按如下步骤操作:
%sqlplus / as sysdba
SQL> alter user OPS$SCP30 identified by scp30;
SQL> exit;
%exp
3)还原操作:需要先删除数据库用户,然后再创建数据库用户,并赋权限后再执行导入即可;
SQL> drop user sysdb30 cascade;
SQL> create user sysdb30 identified by sysdb30 default tablespace CBS_DEFAULT_DAT temporary tablespace "TEMP";
grant dba,connect,resource to sysdb30;
grant select any dictionary to sysdb30;
grant create any sequence to sysdb30;
grant create any table to sysdb30;
grant create any procedure to sysdb30;
grant create any trigger to sysdb30;
grant create session to sysdb30;
grant create sequence to sysdb30;
grant create table to sysdb30;
grant create procedure to sysdb30;
grant create trigger to sysdb30;
%imp sysdb30/sysdb30@oracle fromuser=sysdb30 touser=sysdb30 rows=y commit=y buffer=65536 feedback=100000 ignore=y volsize=0 file=sysdb30.dmp;
注意(以下操作都是用dba用户执行,即用sqlplus / as sysdba登录):
A)上面的create user操作中默认表空间名应当在数据库中查找到实际用的表空间名,查询语句如下:
SQL> select username, default_tablespace from dba_users where username like '%30';
B)上面操作中执行drop user时如果不成功,则需要确保没有人使用PL/SQL工具或sqlplus连接到此数据库,如是确认没有连接仍然删除不成功,则可以使用以下方法解决:
SQL> select SID,USERNAME,PROCESS,serial# from v$session where USERNAME like '%30';
SQL> alter system kill session '<SID>,<serial#>' immediate;
ORACLE下面几个有用的存储过程
文章分类:数据库
删除视图
create or replace procedure DropViewProc(viewName in varchar2)
as
begin
execute immediate 'drop view ' || viewName;
dbms_output.put_line('success to drop view: ' || viewName);
end;
/
执行存储过程
exec DropViewProc('user_basetab');
删除存储过程
drop procedure DropViewProc;
删除表
create or replace procedure DropTableProc(tableName in varchar2)
as
tableCounts number(10) := 0;
begin
select count(*) into tableCounts from user_tables where upper(table_name) = upper(tableName);
if(tableCounts > 0) then
execute immediate 'drop table ' || tableName;
dbms_output.put_line('success to drop table: ' || tableName);
end if;
end;
/
删除sequence
create or replace procedure DropSeqProc(seqName in varchar2)
as
seqCounts number(10) := 0;
begin
select count(*) into seqCounts from user_sequences where upper(sequence_name) = upper(seqName);
if(seqCounts > 0) then
execute immediate 'drop sequence ' || upper(seqName);
dbms_output.put_line('success to drop sequence: ' || seqName);
end if;
end;
/
查询Oracle当前用户使用的SID
文章分类:数据库
select instance_name,host_name,version from v$instance;
Oracle中强行断开用户连接的方法
文章分类:数据库
首先查找目标用户的当前进程,注意是serial#而不是serial,网上有的介绍漏掉了#:
select sid,serial# from v$session where username='ERP';
使用此语句会返回一个进程列表,每行有两个数字,然后用数字替代下面的sid和serial
alter system kill session 'sid,serial';
例如
alter system kill session '222,123';
通过select 语句可能返回多行记录,所以要多次执行alter语句
char和varchar2的区别
区别:
1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。
2.CHAR的效率比VARCHAR2的效率稍高。
3.目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值。如果你想有向后兼容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。
何时该用CHAR,何时该用varchar2?
CHAR与VARCHAR2是一对矛盾的统一体,两者是互补的关系.
VARCHAR2比CHAR节省空间,在效率上比CHAR会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。
VARCHAR2虽然比CHAR节省空间,但是如果一个VARCHAR2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR2会更好一些。
rowid解析
先对 rowid 有个感官认识:
select ROWID from Bruce_test where rownum<2;
ROWID
----------------------------
AAABnlAAFAAAAAPAAA
ROWID 的格式如下:
数据对象编号 文件编号 块编号 行编号
OOOOOO FFF BBBBBB RRR
我们可以看出,从上面的 rowid 可以得知:
AAABnl 是数据对象编号
AAF 是相关文件编号
AAAAAP 是块编号
AAA 是行编号
怎么依据这些编号得到具体的十进制的编码值呢,这是经常遇到的问题。这里需要明白 rowid 的是基于 64 位编码的 18 个字符显示(数据对象编号 (6) + 文件编号 (3) + 块编号 (6)+ 行编号 (3)=18 位 ),其中
A-Z <==> 0 - 25 (26)
a-z <==> 26 - 51 (26)
0-9 <==> 52 - 61 (10)
+/ <==> 62 - 63 (2)
共 64 位,明白这个后,就可以计算出 10 进制的编码值,计算公式如下:
d * (b ^ p)
其中: b 就是基数,这里就是 64 , p 就是从右到左,已 0 开始的位置数
比如:上面的例子
文件号 AAF, 具体的计算应该是 :
刚才提到的是 rowid 的显示方式: 基于 64 位编码的 18 个字符显示,其实 rowid 的存储方式是: 10 个字 节即80位存储,其中 数据 对象编号 需 要 32 位,相关文件 编号 需 要 10 位,块 编号 需 要 22, 位行 编号 需 要 16 位,由此,我们可以得出:
32bit 的 object number ,每个数据库最多有 4G 个对象
10bit 的 file number ,每个对象最多有 1022 个文件( 2 个文件预留)
22bit 的 block number ,每个文件最多有 4M 个 BLOCK
16bit 的 row number ,每个 BLOCK 最多有 64K 个 ROWS
5*(64^0)=5 ;
0*(64^1)=0 ;
0*(64^2)=0 ;
文件号就是 0+0+5=5
rowid 相关的有用的 sql
最简单的基于 rowid 的显示方式得到的响应的 64 位编码对应值的 sql :
select rowid ,
substr(rowid,1,6) "OBJECT",
substr(rowid,7,3) "FILE",
substr(rowid,10,6) "BLOCK",
substr(rowid,16,3) "ROW"
from TableName;
sqlldr的用法
sql loader可以把一些以文本格式存放的数据顺利的导入到oracle数据库中,是一种在不同数据库之间进行数据迁移的非常方便而且通用的工具。缺点就速度比较慢,另外对blob等类型的数据就有点麻烦了。
用法: SQLLDR keyword=value [,keyword=value,...]
在命令行下执行 Oracle 的 sqlldr 命令,可以看到它的详细参数说明,要着重关注以下几个参数:
userid -- Oracle 的 username/password[@servicename]
control -- 控制文件,可能包含表的数据
-------------------------------------------------------------------------------------------------
log -- 记录导入时的日志文件,默认为 控制文件(去除扩展名).log
bad -- 坏数据文件,默认为 控制文件(去除扩展名).bad
data -- 数据文件,一般在控制文件中指定。用参数控制文件中不指定数据文件更适于自动操作
errors -- 允许的错误记录数,可以用他来控制一条记录都不能错
rows -- 多少条记录提交一次,默认为 64
skip -- 跳过的行数,比如导出的数据文件前面几行是表头或其他描述
还有更多的 sqlldr 的参数说明请参考:sql loader的用法。
用例子来演示 sqlldr 的使用,有两种使用方法:
1. 只使用一个控制文件,在这个控制文件中包含数据
2. 使用一个控制文件(作为模板) 和一个数据文件
下面来看示例
create table users(
user_id number, --用户 ID
user_name varchar2(50), --用户名
login_times number, --登陆次数
last_login date --最后登录日期
)
insert into users values(1,'Unmi',3,sysdate);
insert into users values(2,NULL,5,to_date('2008-10-15','YYYY-MM-DD'));
insert into users values(3,'隔叶黄莺',8,to_date('2009-01-02','YYYY-MM-DD'));
insert into users values(5,'不知秋',1,to_date('2008-12-23','YYYY-MM-DD'));
第二种方式: 使用一个控制文件(作为模板) 和一个数据文件
1) 建立数据文件,我们这里用 PL/SQL Developer 导出表 users 的记录为 users_data.csv 文件
建立一个控制文件 users.ctl,内容如下:
OPTIONS (skip=1,rows=128) -- sqlldr 命令显示的选项可以写到这里边来,skip=1 用来跳过数据中的第一行
LOAD DATA
INFILE "users_data.csv" --指定外部数据文件,可以写多个 INFILE "another_data_file.csv" 指定多个数据文件,也可以在此处不写,在后面指定
--这里还可以使用 BADFILE、DISCARDFILE 来指定坏数据和丢弃数据的文件,
truncate --操作类型,用 truncate table 来清除表中原有记录
INTO TABLE users -- 要插入记录的表
Fields terminated by "," -- 数据中每行记录用 "," 分隔
Optionally enclosed by '"' -- 数据中每个字段用 '"' 框起,比如字段中有 "," 分隔符时
trailing nullcols --表的字段没有对应的值时允许为空
(
virtual_column FILLER, --这是一个虚拟字段,用来跳过由 PL/SQL Developer 生成的第一列序号
user_id number, --字段可以指定类型,否则认为是 CHARACTER 类型, log 文件中有显示
user_name,
login_times,
last_login DATE "YYYY-MM-DD HH24:MI:SS" -- 指定接受日期的格式,相当用 to_date() 函数转换
)
说明:在操作类型 truncate 位置可用以下中的一值:
1) insert --为缺省方式,在数据装载开始时要求表为空
2) append --在表中追加新记录
3) replace --删除旧记录(用 delete from table 语句),替换成新装载的记录
4) truncate --删除旧记录(用 truncate table 语句),替换成新装载的记录
执行命令
sqlldr userid=scott/anwei@orcl control=user.ctl data=user.cvs log=user.log
执行完 sqlldr 后希望能留意一下生成的几个文件,如 users.log 日志文件、users.bad 坏数据文件等。特别是要看看日志文件,从中可让你更好的理解 Sql Loader,里面有对控制文件的解析、列出每个字段的类型、加载记录的统计、出错原因等信息。
Oracle中时间的函数
一、 常用日期数据格式
1.Y或YY或YYY 年的最后一位,两位或三位
SQL> Select to_char(sysdate,'Y') from dual;
TO_CHAR(SYSDATE,'Y')
--------------------
7
SQL> Select to_char(sysdate,'YY') from dual;
TO_CHAR(SYSDATE,'YY')
---------------------
07
SQL> Select to_char(sysdate,'YYY') from dual;
TO_CHAR(SYSDATE,'YYY')
----------------------
007
2.Q 季度 1~3月为第一季度,2表示第二季度。
SQL> Select to_char(sysdate,'Q') from dual;
TO_CHAR(SYSDATE,'Q')
--------------------
2
3.MM 月份数
SQL> Select to_char(sysdate,'MM') from dual;
TO_CHAR(SYSDATE,'MM')
---------------------
05
4.RM 月份的罗马表示 (V在罗马数字中表示 5)
SQL> Select to_char(sysdate,'RM') from dual;
TO_CHAR(SYSDATE,'RM')
---------------------
V
5.Month 用9个字符长度表示的月份名
SQL> Select to_char(sysdate,'Month') from dual;
TO_CHAR(SYSDATE,'MONTH')
------------------------
5月
6.WW 当年第几周 (2007年5月29日为2007年第22周)
SQL> Select to_char(sysdate,'WW') from dual;
TO_CHAR(SYSDATE,'WW')
---------------------
22
7.W 本月第几周 (2007年5月29日为5月第5周)
SQL> Select to_char(sysdate,'W') from dual;
TO_CHAR(SYSDATE,'W')
--------------------
5
8.DDD 当年第几天 (2007年5月29日为2007年第149天)
SQL> Select to_char(sysdate,'DDD') from dual;
TO_CHAR(SYSDATE,'DDD')
----------------------
149
9. DD 当月第几天
SQL> Select to_char(sysdate,'DD') from dual;
TO_CHAR(SYSDATE,'DD')
---------------------
29
10.D 周内第几天
SQL> Select to_char(sysdate,'D') from dual;
TO_CHAR(SYSDATE,'D')
--------------------
3
11.DY 中文的星期几 ( (2007年5月29日为星期二))
SQL> Select to_char(sysdate,'DY') from dual;
TO_CHAR(SYSDATE,'DY')
---------------------
星期二
12.HH或HH12 12进制小时数 (16:09分为用12小时制计时为4点)
SQL> Select to_char(sysdate,'HH') from dual;
TO_CHAR(SYSDATE,'HH')
---------------------
04
13.HH24 24小时制
SQL> Select to_char(sysdate,'HH24') from dual;
TO_CHAR(SYSDATE,'HH24')
-----------------------
16
二、常用时间函数
1.trunc(sysdate,'Q') 本季度第一天
SQL> select trunc(sysdate,'Q') from dual;
TRUNC(SYSDATE,'Q')
------------------
2007-4-1
2.trunc(sysdate,'D') 本周的第一天(周日)
SQL> select trunc(sysdate,'D')from dual;
TRUNC(SYSDATE,'D')
------------------
2007-5-27
3.last_day(sysdate) 本月最后一天
SQL> select last_day(sysdate) from dual;
LAST_DAY(SYSDATE)
-----------------
2007-5-31 15:20:3
4.add_months(sysdate,2) 日期sysdate后推2个月
SQL> select add_months(sysdate,2) from dual;
ADD_MONTHS(SYSDATE,2)
---------------------
2007-7-29 15:21:14
5.next_day(sysdate,2) 日期sysdate之后的第一周中,第2(指定星期的第几天)是什么日期
SQL> select next_day(sysdate,2) from dual;
NEXT_DAY(SYSDATE,2)
-------------------
2007-6-4 15:22:10
6.Months_between(f,s) 日期f和s间相差月数
SQL> select months_between(sysdate,to_date('2007-04-12','yyyy-mm-dd'))from dual;
MONTHS_BETWEEN(SYSDATE,TO_DATE
------------------------------
1.56909908900836
7.得到SYSDATE+5所在的月份
SQL> SELECT to_char(SYSDATE+5,'mon','nls_date_language=american') FROM dual;
TO_CHAR(SYSDATE+5,'MON','NLS_D
------------------------------
jun
8.current_date()返回当前会话时区中的当前日期 。
9.select dbtimezone from dual;
10.extract()找出日期或间隔值的字段值
SQL> select extract(month from sysdate) "This Month" from dual;
This Month
----------
5
SQL> select extract(year from sysdate) "This year" from dual;
This year
----------
2007
SQL> select extract(month from add_months(sysdate,2)) " Month" from dual;
Month
----------
7
==================================================================
三、一些实践后的用法:
1.上月末天:
select to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') LastDay from dual;
2.上月今天
SQL> select to_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday from dual;
3.上月首天
SQL> select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDay from dual;
4.要找到某月中所有周五的具体日期
SELECT to_char(b.a,'YY-MM-DD')
FROM ( SELECT trunc(SYSDATE,'mm')+ROWNUM-1 a
FROM dba_objects where rownum < 32 ) b
WHERE to_char(b.a,'day')='星期五';
如果把where to_char(t.d, 'MM') = to_char(sysdate, 'MM')改成sysdate-90,即为查找当前月份的前三个月中
的每周五的日期。
5.得到系统当前月及以后的日期
select trunc(sysdate, 'MM')+ROWNUM-1 FROM dba_objects ;
-----------------------------------
to_date 字符串类型转为换日期类型
字符串中的相应位置上的字符,必须符合时间范围的限制
14.MI 分钟数(0~59)
提示注意不要将MM格式用于分钟(分钟应该使用MI)。MM是用于月份的格式,将它用于分钟也能工作,但结果是错误的。
15.SS 秒数(0~59)
Oracle中to_char函数的用法
数字
to_char(1210.73, '9999.9') would return '1210.7'
to_char(1210.73, '9,999.99') would return '1,210.73'
to_char(1210.73, '$9,999.00') would return '$1,210.73'
to_char(21, '000099') would return '000021'
日期的用法
to_char(sysdate, 'yyyy/mm/dd'); would return '2003/07/09'
to_char(sysdate, 'Month DD, YYYY'); would return 'July 09, 2003'
to_char(sysdate, 'FMMonth DD, YYYY'); would return 'July 9, 2003'
to_char(sysdate, 'MON DDth, YYYY'); would return 'JUL 09TH, 2003'
to_char(sysdate, 'FMMON DDth, YYYY'); would return 'JUL 9TH, 2003'
to_char(sysdate, 'FMMon ddth, YYYY'); would return 'Jul 9th, 2003'
Oracle常用函数
*在一个字符串中搜索指定的字符,返回发现指定的字符的位置
函数 INSTR(C1,C2,I,J)
C1 被搜索的字符串
C2 希望搜索的字符串I 搜索的开始位置,默认为1
J 出现的位置,默认为1
select instr('oracle traning','ra',1,2) instring from dual;
*返回字符串的长度
函数 LENGTH
select HIREDATE,length(to_char(HIREDATE)) from emp;
*将字符串转化为小写
函数 LOWER
select lower(ename) from emp;
*REPLACE('string','s1','s2')
string 希望被替换的字符或变量
s1 被替换的字符串
s2 要替换的字符串
select replace('he love you','he','i') from dual;
*将字符串转化为大写
函数 upper
select upper(ename) from emp;
*RPAD和LPAD(粘贴字符)
RPAD 在列的右边粘贴字符
LPAD 在列的左边粘贴字符
select lpad(rpad('gao',10,'*'),17,'*')from dual;
*LTRIM和RTRIM
LTRIM 删除左边出现的字符串
RTRIM 删除右边出现的字符串
select ltrim(rtrim(' gao qian jing ',' '),' ') from dual;
*SUBSTR(string,start,count)
取子字符串,从start开始,取count个
select substr('13088888888',3,8) from dual;
Informix onstat 命令详解
几个常用的onstat选项实例解释
• ONstat -m :显示消息日志的最后20行.
消息日志的内容包括:
1)、检查点信息
2)、读写错误信息
3)、ONLINE模式转换信息
4)、长事务
5)、日志文件满(LOG FILE FULL )
若想显示完整信息,可直接编译消息日志文件.
• ONstat -d:磁盘空间的使用情况,包括DBSPACE和CHUNK的信息
Dbspaces
address number flags fchunk nchunks flags owner name
c57ef158 1 1 1 1 N informix rootdbs
c57efd18 2 2001 2 1 N T informix tmpdbs
c57efdd8 3 1 3 1 N informix llogdbs
c57efe98 4 1 4 1 N informix plogdbs
c57eff58 5 1 5 8 N informix datadbs1
5 active, 2047 maximum
Chunks
address chk/dbs offset size free bpages flags pathname
c57ef218 1 1 0 150000 148715 PO- /dev/vg01/lvol1
c57ef378 2 2 0 250000 249881 PO- /dev/vg01/lvol2
c57ef458 3 3 0 125000 197 PO- /dev/vg01/lvol3
c57ef538 4 4 0 125000 2447 PO- /dev/vg01/lvol4
其中的FREE项,显示了该CHUNK的空闲空间大小(Kbytes).
• ONstat -l :日志文件情况
Physical Logging
Buffer bufused bufsize numpages numwrits pages/io
P-2 42 256 123414 1068 115.56
phybegin physize phypos phyused %used
400035 122500 110222 42 0.03
Logical Logging
Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io
L-2 0 64 6150454 194478 8434 31.6 23.1
Subsystem numrecs Log Space used
OLDRSAM 6150454 385076912
address number flags uniqid begin size used %used
c128d020 1 U-B---- 6776 300035 12500 12500 100.00
c128d03c 2 U-B---- 6777 303109 12500 12500 100.00
c128d058 3 U-B---- 6778 3061dd 12500 12500 100.00
c128d074 4 U-B---- 6779 3092b1 12500 12500 100.00
c128d090 5 U-B---- 6780 30c385 12500 12500 100.00
c128d0ac 6 U---C-L 6781 30f459 12500 6768 54.14
c128d0c8 7 U-B---- 6772 31252d 12500 12500 100.00
c128d0e4 8 U-B---- 6773 315601 12500 12500 100.00
c128d100 9 U-B---- 6774 3186d5 12500 12500 100.00
c128d11c 10 U-B---- 6775 31b7a9 12250 12250 100.00
其中:%USED: 使用百分比
FLAGS字段的含义:
F: 空闲 B:已备份 C: 正在接收事物记录
U: 正在使用 A: 新增日志 L: 包含最后一个检查点
• ONstat - u:ONLINE的用户情况
Userthreads
address flags sessid user tty wait tout locks nreads nwrites
c57f1018 ---P--D 1 informix - 0 0 0 757 36481
c57f1504 ---P--F 0 informix - 0 0 0 0 377273
c57f19f0 ---P--- 5 informix - 0 0 0 0 6742
c57f1edc ---P--B 6 informix - 0 0 0 29 257
其中:flages字段的含义:
第一列:(S:等待mutex;Y:等待条件;L:等待锁;B:等待缓冲区;
C:等待检查点;X:长事务清理;G:等待长缓冲写;T:等待事务)
第二列:(*:事务执行时,发生I/O错误)
第三列:(A:正在备份;B:操作已被记录在日志中;P:分布处理已准备好;
C:正在提交;R:正在回滚)
第四列:(P:会话的主线索)
第五列:(R:在read rsam 调用中;X:进程在关键分区)
第七列:(M:特殊监控;D:特殊线索;C:清理线索;F:特殊清页进程;
B:特殊B+树清页线索)
• ONstat -k :用户持有锁的情况
锁按照粒度分为6种: 库锁、表锁、页锁、行锁、字节锁、键锁
字节锁:更新包含有VARCHAR类型的行时,加在该行上的锁。
键锁:用于索引树上的锁。一般在相应字节上加删除标志。
这几种锁的识别如下:
TYPE ONLSNUM ROWID SIZE
库锁 HDR+X 1000002 205 0
表锁 100000e 0 0
页锁 100 0
行锁 101
字节锁 HDR+B 909
键锁 很大的16进制数
锁的生命期:1、不使用事务时,操作完成即会释放对应的锁;
2、 若使用事务,锁将伴随整个事务。(即随这COMMIT WORK或ROLLBACK WORK而释放)
(**锁的几种类型:共享锁(SHARE),排它锁(EXCLUSIVE),可升级锁**)
• ONstat -p : 显示系统资源状况(是否充分)
Profile
dskreads pagreads bufreads %cached dskwrits pagwrits bufwrits %cached
2112876 5085802 697502689 99.70 469082 1154138 9885314 95.25
isamtot open start read write rewrite delete commit rollbk
269117818 4202839 19282008 199402561 3286406 981022 270765 261330 20733
gp_read gp_write gp_rewrt gp_del gp_alloc gp_free gp_curs
0 0 0 0 0 0 0
ovlock ovuserthread ovbuff usercpu syscpu numckpts flushes
0 0 0 66354.52 3954.04 341 682
bufwaits lokwaits lockreqs deadlks dltouts ckpwaits compress seqscans
721270 153 794000443 0 0 246 72878 784815
ixda-RA idx-RA da-RA RA-pgsused lchwaits
458268 5293 1041489 1480397 1904
OVONLS:指示ONLSPACE值不够 ,ONLSPACES值应增大
OVLOCK:锁溢出 LOCKS应增大
OVUSER:用户表资源不够 USERS
OVBUF:缓冲区资源不够 BUFFERS
以上数字若持续增加,表明相应参数值应调整
DEADLOCKS:检测到的死锁数
DLTOUTS:网络超时死锁
DEADLOCK_TIMEOUT:一般为60秒,若增大此数字,可以减少死锁数,但会增加响应时间,用户看来性能更差;若减少此数字,死锁数可能会增大,但会减少响应时间,在用户看来,响应时间变快了。
Oralce表解锁
ORACLE里锁有以下几种模式:
0:none
1:null 空
2:Row-S 行共享(RS):共享表锁
3:Row-X 行专用(RX):用于行的修改
4:Share 共享锁(S):阻止其他DML操作
5:S/Row-X 共享行专用(SRX):阻止其他事务操作
6:exclusive 专用(X):独立访问使用
数字越大锁级别越高, 影响的操作越多。
一般的查询语句如select ... from ... ;是小于2的锁, 有时会在v$locked_object出现。
select ... from ... for update; 是2的锁。
当对话使用for update子串打开一个游标时,
所有返回集中的数据行都将处于行级(Row-X)独占式锁定,
其他对象只能查询这些数据行,不能进行update、delete或select...for update操作。
insert / update / delete ... ; 是3的锁。
没有commit之前插入同样的一条记录会没有反应,
因为后一个3的锁会一直等待上一个3的锁, 我们必须释放掉上一个才能继续工作。
创建索引的时候也会产生3,4级别的锁。
locked_mode为2,3,4不影响DML(insert,delete,update,select)操作,
但DDL(alter,drop等)操作会提示ora-00054错误。
有主外键约束时 update / delete ... ; 可能会产生4,5的锁。
DDL语句时是6的锁。
以DBA角色, 查看当前数据库里锁的情况可以用如下SQL语句:
select object_id,session_id,locked_mode from v$locked_object;
select t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time;
如果有长期出现的一列,可能是没有释放的锁。
我们可以用下面SQL语句杀掉长期没有释放非正常的锁:
alter system kill session 'sid,serial#';
如果出现了锁的问题, 某个DML操作可能等待很久没有反应。
当你采用的是直接连接数据库的方式,
也不要用OS系统命令 $kill process_num 或者 $kill -9 process_num来终止用户连接,
因为一个用户进程可能产生一个以上的锁, 杀OS进程并不能彻底清除锁的问题。
记得在数据库级别用alter system kill session 'sid,serial#';杀掉不正常的锁。
解锁
用DBA用户登陆
查锁
select t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time;
解锁
alter system kill session 'sid,serial#,'
表的锁定
锁的概念
锁出现在数据共享的场合,用来保证数据的一致性。当多个会话同时修改一个表时,需要对数据进行相应的锁定。
锁有“只读锁”、“排它锁”,“共享排它锁”等多种类型,而且每种类型又有“行级锁”(一次锁住一条记录),“页级锁”(一次锁住一页,即数据库中存储记录的最小可分配单元),“表级锁”(锁住整个表)。
排它锁和共享锁
排它锁又称为写锁((Exclusive lock,简记为X锁)),若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。它防止任何其它事务获取资源上的锁,直到在事务的末尾将资源上的原始锁释放为止。在更新操作(INSERT、UPDATE 或 DELETE)过程中始终应用排它锁。
共享锁又称为读锁(Share lock,简记为S锁),若事务T对数据对象A加上S锁,则其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。
共享锁:由非更新(读取)操作创建的锁。其他用户可以并发读取数据,但任何事务都不能获取数据上的排它锁,直到已释放所有共享锁。
若为“行级排它锁”,则除被锁住的行外,该表中其他行均可被其他的用户进行修改(Update)或删除(delete)。若为“表级排它锁”,则所有其他用户只能对该表进行查询(select)操作,而无法对其中的任何记录进行修改或删除。当程序对所做的修改进行提交(commit)或回滚(rollback)后,锁住的资源便会得到释放,从而允许其他用户进行操作。
有时,由于程序的原因,锁住资源后长时间未对其工作进行提交;或是由于用户的原因,调出需要修改的数据后,未及时修改并提交,而是放置于一旁;或是由于客户服务器方式中客户端出现“死机”,而服务器端却并未检测到,从而造成锁定的资源未被及时释放,影响到其他用户的操作。
如果两个事务,分别锁定一部分数据,而都在等待对方释放锁才能完成事务操作,这种情况下就会发生死锁。
隐式锁和显式锁
在Oracle数据库中,修改数据操作时需要一个隐式的独占锁,以锁定修改的行,直到修改被提交或撤销为止。如果一个会话锁定了数据,那么第二个会话要想对数据进行修改,只能等到第一个会话对修改使用COMMIT命令进行提交或使用ROLLBACK命令进行回滚撤销后,才开始执行。因此应养成一个良好的习惯:执行修改操作后,要尽早地提交或撤销,以免影响其他会话对数据的修改。
【训练1】 对emp表的SCOTT雇员记录进行修改,测试隐式锁。
步骤1:启动第一个SQL*Plus,以SCOTT账户登录数据库(第一个会话),修改SCOTT记录,隐式加锁。
UPDATE emp SET sal=3500 where empno=7788;
执行结果:
已更新 1 行。
步骤2:启动第二个SQL*Plus,以SCOTT账户登录数据库(第二个会话),进行记录修改操作。
UPDATE emp SET sal=4000 where empno=7788;
执行结果,没有任何输出(处于等待解锁状态)。
步骤3:对第一个会话进行解锁操作:
COMMIT;
步骤4:查看第二个会话,此时有输出结果:
已更新 1 行。
步骤5:提交第二个会话,防止长时间锁定。
说明:两个会话对同一表的同一条记录进行修改。步骤1修改SCOTT工资为3500,没有提交或回滚之前,SCOTT记录处于加锁状态。步骤2的第二个会话对SCOTT进行修改处于等待状态。
步骤3解锁之后(即第一个会话对SCOTT的修改已经完成),第二个会话挂起的修改此时可以执行。最后结果为第二个会话的修改结果,即SCOTT的工资修改为4000。读者可以使用查询语句检查。
以上是隐式加锁,用户也可以使用如下两种方式主动锁定行或表,防止其他会话对数据的修改。表3-3是对行或表进行锁定的语句。
表的显式锁定操作语句
select fror update 锁定表行,防止其他会话对行的修改
lock table 锁定表,防止其它会话话对表的修改
锁定行
【训练1】 对emp表的部门10的雇员记录加显式锁,并测试。
步骤1:对部门10加显式锁:
SELECT empno,ename,job,sal FROM emp WHERE deptno=10 FOR UPDATE;
结果为:
EMPNO ENAME JOB SAL
------------------ -------------- ------------------ ------------------
7782 CLARK MANAGER 2450
7839 KING PRESIDENT 5000
7934 MILLER CLERK 1300
步骤2:启动第二个SQL*Plus(第二个会话),以SCOTT账户登录数据库,对部门10的雇员CLARK进行修改操作。
UPDATE emp SET sal=sal+100 where empno=7782;
执行结果:
没有任何输出(处于等待解锁状态)。
步骤3:在第一个会话进行解锁操作:
COMMIT;
步骤4:查看第二个会话,有输出结果:
已更新 1 行。
说明:步骤1对选定的部门10的雇员加锁,之后其他会话不能对部门10的雇员数据进行修改或删除。如果此时要进行修改或删除,则会处于等待状态。使用COMMIT语句进行解锁之后,如果有挂起的修改或删除操作,则等待的操作此时可以执行。
锁定表
LOCK语句用于对整张表进行锁定。语法如下:
LOCK TABLE 表名 IN {SHARE|EXCLUSIVE} MODE
对表的锁定可以是共享(SHARE)或独占(EXCLUSIVE)模式。共享模式下,其他会话可以加共享锁,但不能加独占锁。在独占模式下,其他会话不能加共享或独占锁。
【训练1】 对emp表添加独占锁。
步骤1:对emp表加独占锁:
LOCK TABLE emp IN EXCLUSIVE MODE;
结果为:
表已锁定。
步骤2:对表进行解锁操作:
COMMIT;
说明:当使用LOCK语句显式锁定一张表时,死锁的概率就会增加。同样地,使用COMMIT或ROLLBACK命令可以释放锁。
注意:必须没有其他会话对该表的任何记录加锁,此操作才能成功
快速删除ORACLE重复记录
*通过创建临时表来实现
create table temp_emp as (select distinct * from employee)
truncate table employee; (清空employee表的数据)
insert into employee select * from temp_emp;
*通过rowid来实现
delete from employee where rowid not in (
select max(t1.rowid) from employee t1 group by t1.emp_id,t1.emp_name,t1.salary);
Oracle中锁定用户以及解锁
操作用户必须有DBA权限
alter user test account lock;
alter user test account unlock;
Oracle 操作表总结
/*============创建Customer表==========*/
create table Customer
(
Customer_id number(6) not null,
Customer_name varchar2(50) not null,
Password varchar2(20) not null,
True_name varchar2(20),
Email_address varchar2(50) not null, --唯一
Password_question varchar2(50) not null,
Password_anwser varchar2(50) not null,
Status char(1), --默认是1,取值0或1
Customer_level char(1), --默认是1,取值1,2,3
Score number(6),
Register_date date, --默认为系统时间
Login_time timestamp,
Login_count number(6),
Login_ip char(6)
);
/*===========创建Orders表==========*/
create table Orders
(
Order_id varchar2(10) not null,
Order_Customer_id number(6) not null,
Order_date date not null,
Order_price number not null
);
/*==========查询Customer表===========*/
select * from Customer
/*==========向表中添加数据===========*/
insert into Customer values
(220077,'wantingqiang','wtq','万廷强','lovezhqj@qq.com','你是哪个?','wtq','1','3',150,sysdate,sysdate,15789,'172.26')
/*==========修改表Customer===========*/
alter table Customer
modify Login_ip char(16);
/*=========修改第一条记录中的ip=====*/
update Customer set Login_ip='172.26.3.145' where Customer_id='220077';--ip地址修改成功
/*=========添加一个列===============*/
alter table Customer
add LoginOut_time date; --新列增加成功
/*=========删除一个列LoginOut_time========*/
alter table Customer
drop column LoginOut_time; --列删除成功
/*========给列添加注释===========*/
comment on column
Customer.Customer_Name is '客户姓名';
/*========给表添加注释==========*/
comment on table Customer is '客户表,为了保持与客户的联系';
/*========重新命名表============*/
alter table Customer rename to Customer_Change;
select * from Customer_Change
alter table Customer_Change rename to Customer;
/*==========添加非空约束========*/
alter table Customer
modify status not null; --非空约束添加成功
/*==========添加主键约束========*/
alter table Customer
add constraint customer_id_pk primary key(Customer_id); --主键添加成功
/*==========添加外键约束========*/
--向Orders表中添加外键,与Customer表关联
--在下面的列子末尾加上:
--on delete 表示允许级联删除
--on update 表示允许级联更新
alter table Orders
add constraint Orders_Customer_fk foreign key(Order_Customer_id) references Customer(Customer_id);
--外键添加成功
/*==========删除外键约束=========*/
alter table Orders
drop constraint "ORDERS_CUSTOMER_FK"; --外键删除成功,这个要注意大小写哈
/*=========添加唯一约束========*/
alter table Customer
add constraint un_email unique(Email_address); --添加唯一约束成功
/*=========修改默认约束========*/
alter table Customer
modify Status default('1');
/*=========添加检查约束========*/
alter table Customer
add constraint ck_status check(Status in ('1','0')); --检查约束添加成功
/*==========禁止检查约束=======*/
alter table Customer
disable constraint ck_status; --禁止成功
/*==========激活检查约束=======*/
alter table Customer
enable constraint ck_status; --激活成功
/*==========删除检查约束========*/
alter table Customer
drop constraint ck_status; --删除检查约束成功
/*==========最后事删除表========*/
drop table Customer;
从一个表中读取的数据插入到另外一张表中的sql语句
insert into 新表 select 字段1,字段2,字段3,字段4 from 旧表
insert into Customer select * from Customer;
Delete与Truncate以及Drop的区别
truncate和不带where子句的delete, 以及drop都会删除表内的数据
1. truncate和 delete只删除数据不删除表的结构(定义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.
2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.
truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动
显然drop语句将表所占用的空间全部释放
truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始).
4.速度,一般来说: drop> truncate > delete
5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及
使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.
想删除表,当然用drop
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据
Oracle常用表查询
--查看所有的数据文件
select * from DBA_DATA_FILES ;
--查看当前用户
select * from user_users;
--查看所有用户
select * from all_users;
--查看用户或角色系统权限
select * from user_sys_privs;
--查看角色所包含的权限
select * from role_sys_privs;
--查看所用的用户的可操作表权限
select * from all_tab_privs;
--查看当前用户的表可操作权限
select * from user_tab_privs;
---查看当前用户的角色
select * from user_role_privs;
--查看所有的表对象信息
select * from all_tables ;
--查看当用户下的所有表
select * from user_tables ;
--查看所有的sequences
select * from all_sequences;
--查看当用户下的sequences
select * from user_sequences;
--查看所有的view
select * from all_views;
--查看当用户下的view
select * from user_views;
--查看所有的数据库对象索引的信息
select * from all_indexes ;
--查看当前的数据库对象索引的信息
select * from user_indexes ;
--sys用户查看任一用户的权限和角色
select * from dba_tab_privs;
select * from dba_role_privs;
--查看某表的创建时间
select * from user_objects where OBJECT_NAME=upper('cbe_subscriber');
--查看表的大小
select sum(bytes)/(1024*1024) as "size(M)" from user_segments where segment_name=upper('cbe_subscriber');
--查看某表的约束条件
select constraint_name, constraint_type,search_condition, r_constraint_name from user_constraints where table_name = upper('cbe_subscriber');
Oracle中tableSpace操作
*创建临时表空间
create temporary tablespace test_temp
tempfile 'E:/oracle/product/10.1.0/oradata/orcl/test_temp01.dbf'
size 32m
autoextend on next 32m maxsize 2048m extent management local;
*创建用户表间
create tablespace test_data
logging datafile 'E:/oracle/product/10.1.0/oradata/orcl/test_temp01.dbf'
size 32m
autoextend on next 32m maxsize 2048m extent management local;
*重设表间大小
有两种方法,一种是为表空间增加数据文件
alter tablespace tablespace_name add datafile 'filepath' size filesize autoextend on next autosize maxsize filemaxsize
alter tablespace users add datafile 'E:/oracle/ora81/oradata/sid/user002.dbf' size 100M;
另一种方法是增加表空间原有数据文件尺寸:
alter database datafile 'filepath' resize filesize
alter database datafile 'c:/oracle/ora81/oradata//sid/users.dbf' resize 1000M;
alter database datafile 'c:/oracle/ora81/oradata//sid/users.dbf' resize 1000M;
*关闭表空间的自动扩展属性
alter database datafile 'filepath' autoextend off
*打开表空间的自动扩展属性
alter database datafile 'filepath' autoextend on
*使表空间脱机
alter tablespace tablespace_name offline
*使表空间联机
alter tablespace tablespace_name online
*设置表空间为只读
alter tablespace tablespace_name read only
*设置表空间为读写
alter tablespace tablespace_name read write
*删除表空间
drop tablespace tablespace_name
*删除表空间的同时,删除数据文件
drop tablespace tablespace_name including contents and datefiles
*移动表空间数据文件步骤
a.使表空间脱机:
alter tablespace tablespace_name offline
b.物理移动数据文件到目的地(可以是表空间的部分数据文件或者是修改数据文件的名称)
c.逻辑移动:alter tablespace tablespace_name rename datafile '源文件地址'to '目的文件地址'--注意可以将多个源文件转移到同一个目的文件地址(多个源文件地址用逗号分隔)
d.将表空间联机:alter tablespace tablespace_name online
*查看表空间使用状况
select a.a1 表空间名称,c.c2 类型,c.c3 区管理,b.b2/1024/1024 表空间大小M,(b.b2-a.a2)/1024/1024 已使用M,substr((b.b2-a.a2)/b.b2*100,1,5) 利用率
from
(select tablespace_name a1, sum(nvl(bytes,0)) a2 from dba_free_space group by tablespace_name) a,
(select tablespace_name b1,sum(bytes) b2 from dba_data_files group by tablespace_name) b,
(select tablespace_name c1,contents c2,extent_management c3 from dba_tablespaces) c
where a.a1=b.b1 and c.c1=b.b1;
*查看表空间对应的文件
select * from dba_data_files
Oracle用户管理
文章分类:数据库
下面介绍下 oracle10g 创建用户
创建用户步骤:
* 连接到sqlplus
打开“运行”,输入“sqlplus "as sysdba"” 回车,用户名 sys,密码 ******,登陆成功;
* 创建用户(同时分配空间,解除锁定)
create user userdb identified by ****** DEFAULT TABLESPACE **** quota unlimited on system account unlock;
* 授权 连接、操作 权限
grant connect,resource to userdb;
grant dba to userdb ; --授予DBA权限
grant unlimited tablespace to userdb ;--授予不限制的表空间
grant select any table to userdb ; --授予查询任何表
grant select any dictionary to userdb ;--授予 查询任何字典
grant create view to userdb ; --创建视图
* 撤权:
revoke 权限 from 用户名;
删除用户
drop user username(用户名) cascade;
Linux下启动与关闭Oralce 10G
启动
1.切换到oracle用户:
su - oracle
2.启动监听:
lsnrctl start
3.进入sqlplus:
sqlplus / as sysdba
4.启动数据库:
startup
关闭
shutdown
shutdown的参数
Normal 需要等待所有的用户断开连接
Immediate 等待用户完成当前的语句
Transactional 等待用户完成当前的事务
Abort 不做任何等待,直接关闭数据库
normal需要在所有连接用户断开后才执行关闭数据库任务,所以有的时候看起来好象命令没有运行一样!在执行这个命令后不允许新的连接
immediate在用户执行完正在执行的语句后就断开用户连接,并不允许新用户连接。
transactional 在拥护执行完当前事物后断开连接,并不允许新的用户连接数据库。
abort 执行强行断开连接并直接关闭数据库。
前三种方式不回丢失用户数据。第四种在不的已的情况下,不建议采用!
Oracle时间操作
http://yjlogo.javaeye.com/blog/196720
http://www.javaeye.com/topic/150762
http://jinyan798.javaeye.com/blog/335497
http://wallimn.javaeye.com/blog/481016
http://jinguo.javaeye.com/blog/336548
oracle基本操作
http://www.blogjava.net/WshmAndLily/articles/144115.html
Oralce中关于表和索引的表移动表空间
1、查询当前用户下的所有表
select 'alter table '|| table_name ||' move tablespace tablespacename;' from user_all_tables;
2、查询当前用户下的所有索引
select 'alter index '|| index_name ||' rebuild tablespace tablespacename;' from user_indexes;
3.表查询到的结果中,把tablespace换成具体的名称
ALTER TABLE ANWEI MOVE TABLESPACE CBS_DEFAULT_DAT;
ALTER INDEX IDX_CUSTOMERE REBUILD TABLESPACE CBS_DEFAULT_DAT;
移动表或索引带来的问题
表移动到表空间时,可能会引起索引失效,对数据库操作报ORA-01502
解决办法
查看索引是否有效
select index_name,index_type,tablespace_name,status from user_indexes
如果有索引的STATUS为UNUSABLE,解决办法
alter index *** rebuild
其中***为失效的索引
忘记Oracle密码时,修改用户密码
Oracle提供两种验证方式,一种是OS验证,另一种密码文件验证方式
第一种方式的修改
1、控制面板->管理工具->服务 中打开
OracleOraHome92TNSListener服务
和OracleServiceORACLE(ORACLE可能在具体的系统中名称不一样,他与你装Oracle时指定的名称有关)服务
2、打开命令行,在命令行中输入:
sqlplus "/ as sysdba"
注意:以上的引号是必不可少的
*上指示的ORACLE就是服务名即OracleService后面的部分
3、在SQL>后面输入:
alter user system identified by password(密码);
4、SQL>后输入:
commit;
5、试验成果
第二种方式的修改
orapwd file=pwdxxx.ora password=你设定的新密码 entries=10
设定完后,重新启动服务,再次登陆就可以了。
Oracle数据库自动增长列的实现过程:
◆1.创建序列
-- Create sequence
create sequence INNERID
minvalue 1
maxvalue 99999999999999
start with 1
increment by 1
cache 20
order;
◆2.--INNERID.currval 指当前序列
--INNERID.nextval 指下一个序列
create table admin
(id varchar2(20),name varchar2(10));
insert into admin values (INNERID.nextval,'a');
insert into admin values (INNERID.nextval,'b');
insert into admin values (INNERID.nextval,'c');
insert into admin values (INNERID.nextval,'d');
--不断的插入序列的下一个值.
◆3.创建触发器(注:此处无法设置id的默认值为INNERID.nextval )
CREATE OR REPLACE TRIGGER admin_tg
--admin id 的触发器
BEFORE INSERT ON admin FOR EACH ROW
BEGIN
SELECT INNERID.NEXTVAL INTO :NEW.id FROM DUAL;
END;
insert into admin (username) values ( 'zdz');
informix和oracle锁表解锁
文章分类:数据库
Oracle 和 Informix 数据库的锁收藏
对于informix数据库
选择sysmaster数据库
select * from syslocks; 查到锁表的owner
然后在informix下onmode -z owner;
对于Oracle数据库的锁:
查看被锁的表:
select p.spid,c.object_name,b.session_id,b.oracle_username,b.os_user_name
from v$process p,v$session a, v$locked_object b,all_objects c
where p.addr=a.paddr
and a.process=b.process
and c.object_id=b.object_id ;
解锁:
alter system kill session '146';(其中146为锁住的进程号)
oracle的经典总结相关推荐
- [转载]oracle常用经典SQL查询
原文地址:oracle常用经典SQL查询作者:来者 oracle常用经典SQL查询 1.查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/( ...
- oracle入门很简单豆瓣,Oracle入门经典
<Oracle入门经典>以初学者为核心,全面介绍了Oracle数据库管理与开发相关的各种技术.在内容排列上由浅入深,让读者循序渐进地掌握Oracle数据库技术:在内容讲解上结合丰富的图解和 ...
- oracle中右击出现的含义,Oracle中经典的问题解决方案-Oracle
对于 Oracle 数据库的开发,我们可能有时候会遇到一些奇怪的问题,与其它数据库存在不同的差异的问题,在这里我列举了一些比较有趣的问题 问题一:解决Oracle中时间问题 Oracle默认date类 ...
- Oracle GoldenGate经典架构
可以使用Oracle GoldenGate Classic Architecture从命令行配置和管理数据复制. 图示的说明logicalarch2.png 注意: 这是基本配置.根据业务需求和用例, ...
- oracle数据库经典练习题及答案
最近下载了一套oracle数据库习题(无答案),本人自己在oracle上练习得到的答案,如果不对的地方,请不要见怪.保存到博客方便自己以后查阅. 相关表: /*学生表*/ create table s ...
- oracle数据库课后习题答案,oracle数据库经典练习题及答案
最近下载了一套oracle数据库习题(无答案),本人自己在oracle上练习得到的答案,如果不对的地方,请不要见怪.保存到博客方便自己以后查阅. 相关表: /*学生表*/ create table s ...
- 中移动Oracle,Oracle中国移动经典面试题(附代码跟两种答案)
/* 中国移动sql面试题: create table test( id number(10) primary key, type number(10) , t_id number(10), valu ...
- Oracle DBA 经典面试题
1.输出100以内的所有素数 DECLAREZ INT; BEGINFOR X IN 2 .. 100 LOOPIF X = 2 THENDBMS_OUTPUT.PUT_LINE(X);ELSIF X ...
- Oracle数据库经典案例之学生选课四表联合查询
四表联合查询之学生选课查询 问题及描述: 学生和成绩表 学生是主表,成绩是子表 课程和成绩表 课程是主表,成绩是子表 老师和课程表 老师是主表,课程是子表 1.学生表 Student(S#,Sname ...
最新文章
- 如何解决CentOS下使用yum安装python-pip失败
- 一图看懂《中关村人工智能产业培育行动计划》
- Android跨进程通信二——AIDL
- word-breakword-wrap
- 【Python】Python基础
- javascript之变量
- STM32——SPI接口
- java数据库的量级_程序员学Python还是Java?分析了8张图后得出这个结论
- 剑指offer值二叉树的下一个结点
- 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_3.RabbitMQ研究-工作原理...
- 项目:心肺复苏按压仪+沁恒赤兔ch32v307+嵌入式开发
- Farrago for Mac 1.1.0 音频效果和音乐剪辑工具 破解版下载
- 电脑版微信提示音mp3_安卓充电提示音修改教程,可以自定义哦~
- MySql新增、修改、删除表字段、字段数据类型、长度等(附带各种实际案例语句)
- 震撼的真相,这些照片告诉你什么叫“色即是空”
- 双目视觉(五)立体匹配算法之动态规划全局匹配
- 第一章cp2102 USB to UART controller 的安装
- 如何成为一名软件测试高手? 月薪3K到17K,我做了什么?
- 基于docker的高可用openldap(包含lam-admin网页和sudo,ppolicy模块)
- 行锁(锁住的是一行记录)
热门文章
- 以YOLOv5为基准实现布匹缺陷检测(Fabric Defect Detection)
- 简单认识一下苹果笔记本以及使用MBP开发一年的心得体会
- Python:画三角形
- app inventor+tinywebDB远程控制掌控板
- TVS管和稳压管两者比较
- 平面设计师怎么找素材?
- Stability Analysis Of Voltage-Feedback Op Amps,Including Compensation Technique
- EDA技术与应用上机任务 电子信息类 Quartus II或Quartus Prime D触发器、半减器、全减器、可加减控制的50进制加减计数器。
- poj1125 Stockbroker Grapevine Floyd算法
- 使用echarts生成漂亮的3D地图