ORACLE数据库学习笔记.docx
- 文档编号:3153358
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:21
- 大小:29.34KB
ORACLE数据库学习笔记.docx
《ORACLE数据库学习笔记.docx》由会员分享,可在线阅读,更多相关《ORACLE数据库学习笔记.docx(21页珍藏版)》请在冰点文库上搜索。
ORACLE数据库学习笔记
Oracle学习记录
发表于:
2010-12-0909:
21|分类:
技术方案阅读:
(0)评论:
(0)
1:
net命令手工启动Oracle服务:
netstartoracleserviceMaxguide
net命令手工停止
netstoporacleserviceMaxguide
2:
Oracle10G数据库中"ORA-12541:
TNS:
nolistener"报错解决办法
lsnrctlstart
3:
可以通过以下命令启动和停止isqlplus服务:
isqlplusctlstart
isqlplusctlstop
启动脚本:
dbstart.cmd
@echooff
echo======启动Oracle系列服务:
======
rem其中有几个服务平时不必启动,如需启动,去掉REM指令即可:
setORAHOME=DB10g_HOME1
setORASID=maxguide
echo
netstartOracleService%ORASID%
netstartOracle%ORAHOME%HTTPServer
netstartOracle%ORAHOME%TNSListener
netstartOracle%ORAHOME%Agent
netstartOracleMTSRecoveryService
remnetstartOracle%ORAHOME%ClientCache
remnetstartOracle%ORAHOME%SNMPPeerEncapsulator
remnetstartOracle%ORAHOME%SNMPPeerMasterAgent
remnetstartOracle%ORAHOME%PagingServer
pause
关闭脚本:
dbshut.cmd
@echooff
echo======关闭Oracle系列服务:
======
setORAHOME=DB10g_HOME1
setORASID=maxguide
echo
netstopOracleService%ORASID%
netstopOracle%ORAHOME%HTTPServernetstopOracle%ORAHOME%TNSListener
netstopOracle%ORAHOME%Agent
netstopOracleMTSRecoveryService
remnetstopOracle%ORAHOME%ClientCache
remnetstopOracle%ORAHOME%SNMPPeerEncapsulator
remnetstopOracle%ORAHOME%SNMPPeerMasterAgent
remnetstopOracle%ORAHOME%PagingServer
PAUSE
4:
ORACLE用户连接的管理
查看用户的当前状态
select username,ACCOUNT_STATUS from dba_users;
用户解锁;
AlteruserSYSMANaccountunlock;
用户手动锁定(dba)
alteruserzclaccountlock;
用profile管理用户口令
createprofileLIMITED_PROFILElimitFAILED_LOGIN_ATTEMPTS3PASSWORD_LOCK_TIME=2;
--创建profile文件,3次登录失败则锁定该户,锁定时间为2天
alteruserzclprofileLIMITED_PROFILE;--将此规则用于zcl用户
用户zcl三次登录不成功则会提示“theaccountislocked”
当前的连接数
selectcount(*)fromv$process;
设置的最大连接数(默认值为150)
selectvaluefromv$parameterwherename='processes';
修改最大连接数
altersystemsetprocesses=300scope=spfile;
用系统管理员,查看当前数据库有几个用户连接:
SQL>selectusername,sid,serial#fromv$session;
如果要停某个连接用
SQL>altersystemkillsession'sid,serial#';
如果这命令不行,找它UNIX的进程数
SQL>selectpro.spidfromv$sessionses,v$processprowhereses.sid=21andses.paddr=pro.addr;
说明:
21是某个连接的sid数
然后用kill命令杀此进程号。
查看oracle数据库字符编码及数据字典
SQL>selectuserenv('language')fromdual;
或者
select*fromv$nls_parameterswhereparameter='NLS_CHARACTERSET';
修改数据库字符集可使用
ALTERDATABASECHARACTERSETUTF8
查看当前用户的缺省表空间
SQL>selectusername,default_tablespacefromuser_users;
查看当前用户的角色
SQL>select*fromuser_role_privs;
查看当前用户的系统权限和表级权限
SQL>select*fromuser_sys_privs;
SQL>select*fromuser_tab_privs;
查看用户下所有的表
SQL>select*fromuser_tables;
查看某表的大小
SQL>selectsum(bytes)/(1024*1024)as"size(M)"fromuser_segments
wheresegment_name=upper('&table_name');
查看函数和过程的状态
SQL>selectobject_name,statusfromuser_objectswhereobject_type='FUNCTION';
SQL>selectobject_name,statusfromuser_objectswhereobject_type='PROCEDURE';
查看函数和过程的源代码
SQL>selecttextfromall_sourcewhereowner=userandname=upper('&plsql_name');
oracle学习记录2
发表于:
2010-12-0917:
56|分类:
技术方案阅读:
(0)评论:
(0)
1:
oracle行触发与语句触发的区别:
1、行触发器有foreachrow子句。
语句触发器没有foreachrow子句。
2、行触发器,可以有when作为触发限制,可以使用new/old。
语句触发器不能有when作为触发限制。
3、行触发器:
对应DML语句所影响到的表中的每一行,触发器都要执行一遍。
4、语句触发:
对应DML语句所影响到的表中的所有行,触发器只执行一遍。
2:
%%oracle中sqlplus下执行sql语句,但没有commit的时候,
用另一个用户登录查看该表应该是没有修改前的
3:
介绍的是导入导出的实例。
数据导出:
1将数据库TEST完全导出,用户名system密码manager导出到D:
\daochu.dmp中
expsystem/manager@TESTfile=d:
\daochu.dmpfull=y
2将数据库中system用户与sys用户的表导出
expsystem/manager@TESTfile=d:
\daochu.dmpowner=(system,sys)
3将数据库中的表inner_notify、notify_staff_relat导出
expaichannel/aichannel@TESTDB2file=d:
\datanewsmgnt.dmptables=(inner_notify,notify_staff_relat)
4将数据库中的表table1中的字段filed1以"00"打头的数据导出
expsystem/manager@TESTfile=d:
\daochu.dmptables=(table1)query="wherefiled1like'00%'"
上面是常用的导出,对于压缩,既用winzip把dmp文件可以很好的压缩。
也可以在上面命令后面加上compress=y来实现。
数据的导入
1将D:
\daochu.dmp中的数据导入TEST数据库中。
impsystem/manager@TEST file=d:
\daochu.dmp
impaichannel/aichannel@TEST full=y file=d:
\datanewsmgnt.dmpignore=y
上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
在后面加上ignore=y就可以了。
2将d:
daochu.dmp中的表table1导入
impsystem/manager@TEST file=d:
\daochu.dmp tables=(table1)
基本上上面的导入导出够用了。
不少情况要先是将表彻底删除,然后导入。
New
exp/imp已经很好用了,但是唯一的确定是速度太慢,如果1张表的数据有个百千万的,常常导入导出就长时间停在这个表这,
但是从Oracle10g开始提供了称为数据泵新的工具expdp/impdp,它为Oracle数据提供高速并行及大数据的迁移。
imp/exp可以在客户端调用,但是expdp/impdp只能在服务端,因为在使用expdp/impdp以前需要在数据库中创建一个Directory
createdirectorydump_testas'/u01/oracle10g';
grantread,writeondirectorydump_testtopiner
然后就可以开始导入导出
expdppiner/pinerdirectory=dump_testdumpfile=user.dmp 导出用户的数据
expdppiner/pinerdirectory=dump_testdumpfile=table.dmptables=test1,test2导出表数据
impdppiner/pinerdirectory=dump_testdumpfile=user.dmp导入该用户数据
impdppiner/pinerdirectory=dump_testdumpfile=table.dmp 导出表数据
oracle学习记录3
发表于:
2010-12-1017:
11|分类:
技术方案阅读:
(2)评论:
(0)
createtableJOB
(Job_CodeNUMBER,
DescriptionVARCHAR2(35)
constraintJOB_PKprimarykey(Job_Code)
usingindextablespaceINDEXES
storage(initial2Mnext2Mpctincrease0))
tablespaceDATA
storage(initial5Mnext5Mpctincrease0);
JOB表将在DATA表空间中创建,但是其主键索引JOB_PK将在INDEXES表空间中创建。
alter
添加列例:
altertableusers_joneaddaddressvarchar2(20)default'北苑家园'notnull;
删除列例:
altertableusers_jonedropcolumnaddress;
重命名例:
altertableusers_jonerenamecolumnaddresstoaddr;
修改列例:
altertableusers_jonemodifyusernamevarchar2(30);
删除约束例:
altertableorders_jone dropconstraintorders_jone_orderId_pk;
修改约束例:
altertableemployeesmodifymanager_idinteger;
添加约束例:
altertableorders_joneaddconstraintorders_jone_orderId_pkprimarykey(orderId);
1:
创建表空间
CREATETABLESPACEts_nameDATAFILE'/dev/name1'SIZE2000M,'/dev/name2'SIZE2000M
DEFAULTSTORAGE(INITIAL64KNEXT64KMAXEXTENTSUNLIMITEDPCTINCREASE50);
2:
修改表空间
alterTABLESPACEts_nameaddDATAFILE'/dev/name3'SIZE2000M;
3:
回滚段
CREATEROLLBACKSEGMENT"RS01"TABLESPACE"TS_name"
STORAGE(INITIAL8MNEXT8MMAXEXTENTSUNLIMITED);
4:
创建用户和授权
CREATEUSERtempuserIDENTIFIEDBYtempuser
DEFAULTTABLESPACETS_name1TEMPORARYTABLESPACETS_name2;
GRANTCONNECTTOtempuser;
GRANTDBATOtempuser;
GRANTresourceTOtempuser;
注意如果一个用户被授予UNLIMITEDtablespace系统权限或resource角色,
则这个授权将覆盖该用户的任何定额设置。
5:
如果表空间里面没有任何数据对象,可以直接删除.
droptablespacemytbs01;
这种删除方式相关的数据文件仍然存在于磁盘上.
删除表空间的同时也删除掉对应的数据文件
droptablespacemytbs01
includingcontentsanddatafiles;
如果droptablespace语句中含有datafiles,那datafiles之前必须有contents关键字,
正常情况下的修改脚本:
1.修改表的空间
altertableTABLE_NAMEmovetablespaceTABLESPACENAME
查询当前用户下的所有表
select'altertable '||table_name||' movetablespacetablespacename;' fromuser_all_tables;
2.修改表的索引的空间
alterindexINDEX_NAMErebuildtablespaceTABLESPACENAME
查询当前用户下的所有索引
select'alterindex'||index_name||'rebuildtablespacetablespacename;'fromuser_indexes;
oracle学习记录4
发表于:
2010-12-1412:
01|分类:
技术方案阅读:
(0)评论:
(0)
A:
是TNS适配器错误
造成ORA-12560:
TNS:
协议适配器错误的问题的原因有三个:
1.监听服务没有起来。
windows平台个一如下操作:
开始---程序---管理工具---服务,打开服务面板,启动oraclehome92TNSlistener服务。
2.databaseinstance没有起起来。
windows平台如下操作:
开始---程序---管理工具---服务,打开服务面板,启动oracleserviceXXXX,XXXX就是你的databaseSID.
3.注册表问题。
regedit,然后进入HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0将该环境变量ORACLE_SID设置为XXXX,XXXX就是你的databaseSID.或者右几我的电脑,属性--高级--环境变量---系统变量--新建,变量名=oracle_sid,变量值=XXXX,XXXX就是你的databaseSID.或者进入sqlplus前,在commandline下输setoracle_sid=XXXX,XXXX就是你的databaseSID.
4.主机字符串输入SID.
B:
oracle数据库自动提交如何设置?
1:
在sqlplus中可以设置
sql>setautocommiton;
但是这个自动提交是每次insert都会提交,
如果使用脚本批量插入数据,会影响插入速度的。
所以还是自己在脚本中每插入一批数据,然后commit一次。
或者如果undo段足够,最好加载后执行一次commit批量提交
2:
PL/SQLDEVELOPER默认不是自动提交,需要选中
tool-preferences--sqlwindow
SQLServer存储过程,传送‘数组参数‘...
发表于:
2010-05-0616:
40|分类:
技术方案阅读:
(1)评论:
(0)
SQLServer存储过程,传送'数组参数'的变通办法
写过程时碰到这么一个问题,需要在库里处理N条数据,不想在程序里循环造成多次访问数据库
而SQLSever又不支持数组参数,尝试了两种方法,在此做笔记如下(省略了单条数据的处理,用#temp是为了显示结果)
1.利用replace
ifobject_id('tempdb..#temp')isnotnull
Begin
droptable#temp
End
createtable#temp
(
ssvarchar(200)notnull
)
declare@strvarchar(200)
declare@resultvarchar(1000)
set@str='aaa,bb,c,d,e,ffffff'
set@result='insertinto#temp(ss)select'''+replace(@str,',','''unionselect''')+''''
exec(@result)
select*from#temp
2.利用charindex和substring
ifobject_id('tempdb..#temp')isnotnullBegin
droptable#temp
End
createtable#temp
(
ssvarchar(200)notnull
)
declare@strvarchar(200)
declare@currint
declare@prevint
set@str='aaa,bb,c,d,e,ffffff'
set@curr=1
set@prev=1
while@prev begin set@curr=charindex(',',@str,@prev) if@curr>@prev insert#tempselectsubstring(@str,@prev,@curr-@prev) else begin insert#tempselectsubstring(@str,@prev,len(@str)-@prev+1) break end set@prev=@curr+1 end select*from#temp 不同服务器数据库之间的数据操作 发表于: 2010-06-2213: 57|分类: 技术方案阅读: (1)评论: (0) /*不同服务器数据库之间的数据操作*/ --创建链接服务器 1.添加链接服务器 EXECsp_addlinkedserver @server='sqlserver',--链接服务器名称,这个取名无所谓 @srvproduct='SQL', --数据库服务产品 @provider='SQLOLEDB', --数据库服务提供者 @datasrc='10.34.7.3'--SQL数据库连接字符串 2.为链接服务器设置默认连接密码 EXECsp_addlinkedsrvlogin@rmtsrvname= 'sqlserver',--登录远程SQL链接服务器名 @useself= 'false', @locallogin='sa', --本地登录名 @rmtuser= 'sa',--登录SQL用户名 @rmtpassword= 'ic'--登录远程SQL密码 --查询示例 select*fromsqlserver.数据库名.dbo.表名 --导入示例 select*into表fromITSV.数据库名.dbo.表名 --以后不再使用时删除链接服务器 execsp_dropserver 'ITSV','droplogins' --连接远程/局域网数据(openrowset/openquery/opendatasource) --1、openrowset --查询示例 select*fromopenrowset('SQLOLEDB','sql服务器名';'用户名';'密码',数据库名.dbo.表名) --生成本地表 select*into表fromopenrowset('SQLOLEDB','sq
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ORACLE 数据库 学习 笔记