`
ajax_xu
  • 浏览: 151240 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论
阅读更多
oracle的使用心得

1、DDL(Data Definition Language) Command
   create,alter,drop objects;
   grant,revoke privileges and roles;
   establishing auditing options;
   add comments to the data dictionary;
   Before and after each DDL statement,Oracle implicitly commit the current transactions.

2、DML(Data Manipulation Language) Command
   Query and Modify data within existing schema objects;
   DML statements consist of DELETE,INSERT,SELECT and UPDATE statements;
                        EXPLAIN PLAN statements;
                        LOCK TABLE statements;
   Unlike DDL Command , a commit is not implicit , after execute DDL Command ,must execute commit command    to commit a transaction;

3、Dynamic Performance Tables
   These tables are created at the instance startup and used to store information about the performance    of the instance. This information includes connection informatioion,I/OS, initialization parameter    values and so on..

4、Procedure and Function are identical except that Founction are always return a value(Procedure do not).

5、Schema is a collection of Objects that associated with the DataBase.

6、SGA is made up of :
   DataBase Buffers;
   Redo Log Buffers;
   The Shared Pool;

7、Transaction is a logical unit of work consisting of one or more SQL statements,ending in a commit or rollback.

8、 The DataBase
The Physical Layer
(1)One or more datafiles;
(2)Two or more redo log files;
(3)One or more control files;
The Logical Layer
(1)One or more tablespaces;
(2)The database schema;

9、The database is devided into one or more logical pieces known as tablespace;

10、Recommend that every one need DBA roles should have a different account , thus , if auditing is enabled , there is a record who made these system changes.

11、The Instance is the logical term that refers to the components necessary to access the data in a database.

12、数据库实例(也称为服务器Server),是用来访问一个数据库文件集的一个存储结构及后台进程的集合。Oralce并行服务器是指一个单独的数据库可以被多个实例访问。

13、查询实例名:
   select instance_name from v$instance;

14、查询动态视图v$waitstat、v$system_event、v$session_event、v$session_wait和v$ buffer_pool_statistics(在Oracle8中通过catperf.sql脚本创建)以获取下面所的统计信息,
目的是为了检查服务器进程是否正等待DBWR(对单个会话而言,也对整个数据库而言)。

15、
(1)SMON:系统监控程序
(2)PMON:进程监控程序
(3)DBWR:数据库写入程序
(4)LGWR:日志写入程序
(5)CKPT:检查点进程
(6)ARCH:归档日志
(7)RECO:恢复进程
(8)SNPn:快照进程
(9)LCKn:锁定进程
(10)Dnnn:调度程序进程
(11)Snnn:服务器进程
(12)Pnnn:并行查询服务器进程

16、数据库备份之前,若使用了shutdown abort命令,则需要进行如下操作,然后才能进行数据库备份:
1)    执行一个shutdown abort命令;
2)    启动数据库实例;
3)    执行shutdown命令;

17、使用OPS数据库时,如何解决两个服务器同时对同一记录的更新?
更新同一个表的数据的用户使用同一个实例来访问数据库。

18、通过ORACLE数据库对非ORACLE数据库进行访问,首先需要在运行非ORACLE数据库的服务器端安装ORACLE透明网关产品,每种被访问的数据引擎需要一个独立的网关;然后需要在本地ORACLE数据库中建立一个数据库连接(DATABASE LINK)。

19、外部文件访问:
1)    用作脚本文件的源代码写入SQL*PLUS、SQL、PL/SQL中;
2)    用作SQL*PLUS脚本文件的输出,用SPOOL命令生成;
3)    用作PL/SQL程序的输入或输出,通过UTL_FILE软件包访问;
4)    用作PL/SQL程序的脚本文件的输出,通过DBMS_OUTPUT软件包生成;
5)    用作通过BFILE数据类型在数据库中引用的外部数据,BFILE数据类型含有一个指向外部二进制数据文件的指针,用户必须通过CREATE DIRECTORY命令,在ORACLE中创建一个目录指针,指向存储文件的目录。
6)    用作通过DBMS_PIPE访问的外部程序,该程序必须以ORACLE支持的3GL来编写。

20、取消用户在SYSTEM表空间上创建对象的定额:
ALTER USER USER_NAME QUOTA 0 ON SYSTEM;
注:
如果一个用户被授权UNLIMITED_TABLESPACE系统权限或RESOURCE角色(Resouce角色拥有使用数据库中所有表空间的权限),则这个授权将覆盖用户的任何定额设置。
21、创建一个用户,并且指定缺省表空间:
CREATE USER USER_NAME IDENTIFIED BY USER_PASSWORD DEFAULT TABLESPACE TABLESPACE_NAME;

22、重新指定用户的缺省表空间:
ALTER USER USER_NAME DEFAULT TABLESPACE TABLESPACE_NAME;

23、从数据表中分离出已有的索引:
ALTER INDEX INDEX_NAME REBUILD
   TABLESPACE INDEX_TABLESPACE
   STORAGE(INITIAL 2M NEXT 2M PCTINCREASE 0);

24、创建表时指定数据表空间和索引表空间:
CREATE TABLE TAB_NAME(
COLUMN_A TYPE,
COLUMN_B TYPE,

COLUM_N TYPE,
CONSTRAINT TAB_NAME_PK PRIMARY KEY (COLUMN_A)
USING INDEX TABLESPACE TABLESPACE_INDEXES
STORAGE(INITIAL 2M NEXT 2M PCTINCREASE 0))
TABLESPACE TABLESPACE_DATA
STORAGE(INITIAL 5M NEXT 5M PCTINCREASE 0);

25、TEMP表空间只有在大型排序操作时才使用;

26、STORAGE子句的意义:
Storage(initial 盘区大小 next 盘区大小 pctincrease 每个顺序盘区几何增长的系数);
使用非零pctincrease参数的结果:
storage(initial 10M next 10M pctincrease 50);
盘区号        大小        总块数        盘区容量注释
1            10            10            INITIAL
2            10            20            NEXT
3            15            35            NEXT×1.5
4            22.5            57.5            NEXT×1.5×1.5
5            33.75        91.25        NEXT×1.5×1.5×1.5
.. .. .. .. .. ..
理想的情况:
一个段只具有一个大小合适的盘区,并且next值较小,设表的pctincrease值为零;
实际上:
在表空间级设置pctincrease的值为零,会影响ORACLE自动合并表空间中自由空间的能力,把表空间缺省pctincrese设置为一个非常低的值,例如1;

27、通常称作TEMP的临时表空间,由于其自身的特点会有很多碎片,临时段总是在不断的创建、扩展和撤销,对于临时表,将INITIAL和NEXT盘区大小设为表空间大小的1/20到1/50,对于这个表空间,INITIAL和NEXT缺省设置应该相等,PCTINCREASE的值为0,这样,段将有同样大小的盘区构成,当撤消这些段时,下一个临时段将能够重新利用这些已撤消的盘区。

28、
1)将一个表空间改为临时表空间:
alter tablespace tablespace_name temporary;
2)将一个表空间转换为能存储永久对象:
alter tablespace tablespace_name permenent;
3)强制表空间合并其自由空间(只能合并位置相邻的自由盘区):
alter tablespace talbespace_name coalesce;

29、
1)手工缩放数据文件(只能增大不能减小):
alter database datafile '$path/datafile01.dat' resize nnnM;
2)创建一个在需要时自动扩展的文件:
CREATE TABLESPACE DATA
DATAFILE '$PATH/DATAFILE01.DAT' SIZE 200M
AUTOEXTEND ON
NEXT 10M
MAXSIZE 250M;
3)通过ALTER TABLESPACE增加一个新的数据文件:
alter tablespace tablespace_name
add datafile '$path/datafile02.dat' size 200M
autoextend on
maxsize 300M;

40、移动数据文件:
1)    关闭实例;
2)    使用操作系统命令来移动数据文件;
3)    安装数据文件并使用ALTER DATABASE命令改变数据库中的文件名;
4)    启动实例;
具体步骤如下:
1)>svrmgrl
>connect internal
>shutdown
>exit
2)mv /db01/oracle/cc1/data01.dbf /db02/oracle/cc1/
3)>svrmgrl
>connect internal
>startup mount cc1
>alter database rename file '/db01/oracle/cc1/data01.dbf' to '/db02/oracle/cc1/data01.dbf';
4)    startup

31、
查看回滚段名称:v$rollname
查看表空间:dba_tablespace;
查看用户表空间:user_tablespaces;
查看回滚段状态信息:dba_rollback_segs;
查看数据库回滚段的当前分配情况:dba_segments;

32、
若系统中有多个表空间,就需要在system表空间中创建"第二回滚段"来支持多个表空间,有了"第二回滚段",system表空间就只用于管理数据库级的事务。

33、
ipcs | grep oracle
ipcrm [-m|-s] ipcid(数字)

34、连接字符串:||  
select 'drop talbe '||table_name from user_tables;

35、视图中不能使用order by,但可以用group by 代替来达到排序目的:
create view as select b1,b2 from table_b group by b1,b2;

36、用户间复制数据:
copy from user1@databasex to user2@databasey create table2 using select * from talbe1;

37、察看数据库的大小,和空间使用情况
select b.file_id FileID,b.tablespace_name TableSpace,b.file_name PhysicalFileName,b.bytes TotalBytes,(b.bytes-sum(nvl(a.bytes,0))) UsedSpace,sum(nvl(a.bytes,0)) FreeSpace,sum(nvl(a.bytes,0))/(b.bytes)*100 FreePecent from dba_free_space a,dba_data_files b where a.file_id=b.file_id group by b.tablespace_name,b.file_name,b.file_id,b.bytes order by b.tablespace_name;

38、Oracle提供了几个包,它们可以用来完成很多任务,从内部进程通信到文件I/O,到在PL/SQL块中动态创建和执行SQL语句。所有这些包由SYS用户所拥有-当Oracle最初安装时两个用户中的一个,这些包中最重要的包括:
DBMS_ALERT          不用轮询就允许应用命名并发出警告条件信号的过程与函数
DBMS_DDL          允许获取PL/SQL程序内部一定数量的DDL语句的过程
DBMS_DESCRIBE    为存储过程与函数描述API的过程
DBMS_JOB           管理BLOBs、CLOBs、NCLOBs与BFILEs的过程与函数
DBMS_OUTPUT        允许PL/SQL程序生成终端输出的过程与函数
DBMS_PIPE           允许数据库会话使用管道通信(通信频道)的过程与函数
DBMS_SQL           在PL/SQL程序内部执行动态SQL的过程与函数
DBMS_ULTILITY        DBMS_ULTILITY
ULT_FILE    允许PL/SQL程序读写服务器文件系统上的文本文件的过程与函数

39、如何解决单机监听不启动的问题:
你给IP固定一个值,然后配置NET8时最好用机器名,把listener.ora,tnsname.ora里的IP改成机器名。

40、查看日志文件的路径和数量:
select * from v$logfile;

41、oracle中的配置文件:
init.ora
tnsname.ora
listener.ora
sqlnet.ora

42、如何利用rownum 检索纪录:(在oracle中,只能通过rownum检索比rownum值小的所有的列)利用如下方法,可以检索表中rownum等于固定值的列:
select * from ( select rownum rn,column1,column2,… from table_name) where rn=要查询的值;

43、利用translate(char,from,to)函数判断一个字符串是否可以转换成 number 型:
translate(str,'x1234567890','x') is null,则str为纯字符串。
利用from to 参数,把str字段中所有的0-9的字符替换为空,然后判断函数返回值,返回值为空,则str一定可以转换成number型。

44、如何修改internal 用户的密码?
用法:orapwd file= password= entries=
参数解释:
    file - name of password file (mand),
    password - password for SYS and INTERNAL (mand),
    entries - maximum number of distinct DBA and OPERs (opt),
    There are no spaces around the equal-to (=) character.
1)进入DOS下
2)默认internal密码文件在c:\orant\database下,是隐藏属性,文件名称与数据库实例名有关
  如默认ORACLE实例名为ORCL,则internal密码文件名为pwdorcl.ora
3)建立新的internal密码文件,起个新名字为pwdora8.ora
  orapwd80 file=pwdora8.ora password=B entries=5     
--注:password项一定要用大写,并且不要用单引号
4)拷贝pwdora8.ora文件到c:\orant\database目录下
5)运行regedit,修改口令文件指向
6)找到HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE项
  定位ORA_ORCL_PWFILE子项,改变其值为c:\orant\database\pwdora8.ora
7)关闭ORACLE数据库,重新启动
8)进入svrmgrl服务程序,测试internal密码是否更改成功

45、只有对象的拥有者才有对对象的操作权。如,把用户user1下的表tab_1赋给用户user2 查看的权限。此时,必须以uer1用户登陆,让后执行如下语句:
grant select on tab_1 to user2;

46、Oracle的本地进程    ps -aef | grep LOCAL=YES   的父进程ID不能为 1 ,若为 1 ,则该进程被掉死,需要用命令杀死改进程!!

47、在Windows 2000 server 操作系统下,用 net start 命令启动oracle的服务,如下:
net start OracleServiceORCL
net start OracleStartORCL
net start OracleTNSListener80
net start OracleWWWListener80
或者,利用 net stop 命令来终止服务:
net stop oraclestartorcl
net stop oracleserviceorcl
net stop oracletnslistener80

启动数据库的另外一个方法:
oradim -startup -sid SID
关闭数据库的另外一个方法:
oradim -shutdown -sid SID

48、多表操作在被实际执行前,查询优化器会根据连接条件,列出几组可能的连接方案并从中找出系统开销最小的最佳方案。连接条件要充份考虑带有索引的表、行数多的表;内外表的选择可由公式:外层表中的匹配行数*内层表中每一次查找的次数确定,乘积最小为最佳方案。

49、保持Oracle数据库优良性能的若干诀窍:
1)    分区:
根据实际经验所得,在一个大数据库中,数据库空间的绝大多数是被少量的表所占有。如何简化大数据库和管理,如何改善应用的查询性能,一般可以使用分区这种手段。所谓分区就是动态地将表中记录分离到若干不同的表空间上,使数据在物理上被分割开来,便于维护、备份、恢复、事务及查询性能。当使用的时候可建立一个连接所有分区的视图,使其在逻辑上仍以一个整体出现。
(1)建立分区表
Create table Employee (
EmpNo varchar2(10) primary key,
Name varchar2(30),
DeptNo Number(2)
)
Partition by range(DeptNo)
(
partition PART1 values less than (11)
tablespace PART1_TS,
partition PART2 values less than (21)
tablespace PART2_TS,
partition PART3 values less than (31)
tablespace PART3_TS
partition PART4 values less than (MAXVALUE)
tablespace PART4_TS
);
表Employee依据DeptNo列进行分区。
(2)分区索引
Create index Employee_DeptNo on Employee(DeptNo)
local (
partition PART1 tablespace PART1_NDX_TS,
partition PART2 tablespace PART2_NDX_TS,
partition PART3 tablespace PART3_NDX_TS,
partition PART4 tablespace PART4_NDX_TS,
);
当分区中出现许多事务并且要保证所有分区中的数据记录的唯一性时采用全局索引,如:
Create index Employee_DeptNo on Employee(DeptNo)
global partition by range (DeptNo)
(
partition PART1 values less than (11)
tablespace PART1_NDX_TS,
partition PART2 values less than (21)
tablespace PART2_NDX_TS,
partition PART3 values less than (31)
tablespace PART3_NDX_TS
partition PART4 values less than (MAXVALUE)
tablespace PART4_NDX_TS
);
在建立全局索引时,global子句允许指定索引的范围值,这个范围值可以不同于表分区的范围值。只有建立局部索引才会使索引索引分区与表分区间建立起一一对应关系。因此,在大多数情况下,应该使用局部索引分区。若使用了此索引,分区就能够很容易地将索引分区与表分区建立关联,局部索引比全局索引更易于管理。
(3)分区管理
根据实际需要,还可以使用 alter table 命令来增加、丢弃、交换、移动、修改、重命名、划分、截短一个已存在分区的结构。

2)Rebuild Indexes(重建索引不会影响存储过程)
如果表中记录频繁的被删除或插入,尽管表中的记录总量保持不变,索引空间的使用量会不断增加。虽然记录从索引中被删除,但是该记录索引项的使用空间不能被重新使用。因此,如果表变化不定,索引空间量会不断增加,不管表中记录数量是否增加--只仅仅是因为索引中无效空间量的增加。
要回收那些曾被删除记录使用的空间,需要使用alter index rebuild 命令。可以做一个定期运行的批处理程序,来重建最活动表的索引。这个批处理程序可以在空闲时运行,以避免程序与用户冲突。若能坚持索引的这一程序规划,便可以及时回收那些未使用空间,提高空间利用率。

3)段的碎片整理
当生成一个数据库对象时(一个表或一个索引),通过用户缺省值或指定值来为它指定表空间。一个在表空间中所生成的段,用于存储对象的相关数据。在段被关闭、收缩、截断之前,段所分配的空间将不被释放。
一个段是由范围组成,而范围是由相邻的Oracle块组成。一旦存在的范围不能再存储新的数据,那这个段就会去获得新的范围,且并不要求这些范围是彼此相邻的。这样的扩展会一直继续下去,直到表空间中的数据文件不能提供更多的自由空间,或者范围数量已达到极限。
因此,一个碎片太多的数据段,不仅会影响运行,也会引发表空间中的空间管理问题。所以,每个数据段只含有一个范围是十分有益的。借助监控系统,可以通过检查DBA_SEGMENTS数据字典视图来了解哪些数据库对象含有10个或更多范围的段,确定其数据段碎片。
若一个段的碎片过多,可用两种方法解决这个问题:
(1)用正确的存储参数建立一个新表,将旧表中的数据插入到新表中,再删除旧表;
(2)利用Export/Import工具。
如:exp system/manager file=exp.dmp compress=Y grants=Y indexes=Y tables=(T1,T2)
若输出成功,进入Oracle,删除上述表。
注:compress=Y决定将在输出过程中修改它们的存储参数。
imp system/manager file=exp.dmp commit=Y buffer=64000 full=Y
注:在输入时重新配置新的存储参数。

自由范围的碎片整理
表空间中的一个自由范围是表空间中相连自由(空间)块的集合。当一个段关闭时,它的范围将被释放,并被标记为自由范围。然而,这些自由范围再也不能与相邻的自由范围合并,它们之间的界线始终存在。但是当表空间的缺省值pctincrease设置不为0时,SMON后台进会定期的将这些相邻的自由范围合并。若pctincrease设置为0,那相邻自由范围不会被数据库自动合并。但可以使用 alter tablespace 命令coalesce选项,来强迫进行相邻自由范围的合并。
不进行自由范围合并,在日后的空间请求中,会影响到表空间中的空间分配。当需要一个足够大的范围时,数据库并不会合并相邻的自由范围,除非没有其他选择。这样,当表空间中前面较小自由范围已被相关使用时,将使用表空间中后面部分最大的一个自由范围。结果,会因为它们没有足够多的使用空间,从而导致表空间中速度上的矛盾。由于这样的进程出现,使数据库的空间分配距理想越来越远。自由空间碎片常会出现在那些经常关闭又重新生成的数据库表和索引中。
在理想的ORACLE表空间中,每一个数据库对象存储在一个单独的范围中,并且所有有效自由空间集中在一个巨大而连续的范围中。这样,在一个对象需要附加存储空间时,可以在增加获取足够大自由空间的可能性同时,最小化空间中的循环调用,提高自由空间使用率

50、查看和修改Oracle服务器端字符集:
方法一:
1)    查看服务器端字符集:
select * from v$nls_parameters;
select * from nls_database_parameters;
select * from sys.props$;
2)    修改服务器端字符集(用sys用户):
首先执行:update props$ set value$ = 'WE8ISO8859P1' where name ='NLS_CHARACTERSET';
update props$ set value$ = 'china' where name ='NLS_LANGUAGE';
提交(commit),然后,重新启动数据库;
3)用客户端工具(PL/SQL DEVELOP or PB etc.)查询数据库,若显示乱码,先查询出数据库端的字符集,然后,从注册表中修改NLS_LANG字段的值,可能为AMERICAN_AMERICA.WE8ISO8859P1或者SIMPLIFIED CHINESE_CHINA.ZHS16GBK或者NA等。
方法二:
alter system enable restricted session;
alter database ORCL character set ZHS16GBK;
alter database ORCL national character set ZHS16GBK;

51、查看系统中的角色:
select * from dba_roles;

52、Import使用指南:
1)关键字缺省值:
Keyword   Description (Default)     Keyword       Description (Default)
-----------------------------------   ---------------------------------------
USERID   username/password          FULL       import entire file (N)
BUFFER   size of data buffer       FROMUSER     list of owner usernames
FILE     Input file (EXPDAT.DMP)   TOUSER       list of usernames
SHOW     just list file contents (N) TABLES       list of table names
IGNORE   ignore create errors (N)   RECORDLENGTH   length of IO record
GRANTS   import grants (Y)         INCTYPE     incremental import type
INDEXES   Import indexes (Y)       COMMIT       commit array insert (N)
ROWS     import data rows (Y)       PARFILE     parameter filename

Keyword                Description (Default)
-----------------------------------------------------------------------------
LOG                  log file of screen output
DESTROY                  overwrite tablespace data file (N)
INDEXFILE              write table/index info to specified file
CHARSET                  character set of export file (NLS_LANG)
POINT_IN_TIME_RECOVER      Tablespace Point-in-time Recovery (N)
SKIP_UNUSABLE_INDEXES      skip maintenance of unusable indexes (N)
ANALYZE                  execute ANALYZE statements in dump file (Y)
FEEDBACK                display progress every x rows(0)
VOLSIZE                  number of bytes in file on each volume of a file on tape
说明:
1)如果导出用户没有DBA权限,则导入用户可以不用指定fromuser、touser参数 ;
2)如果导出用户拥有DBA权限,则导入用户也必须拥有DBA权限;

53、常用的SQL关键字:
1)UNION:返回两个查询结果并去除其中重复的部分;
2)UNION ALL:返回两个查询结果但是并不去除重复的纪录;
3)INTERSECT:返回两个表中共有的行;
4)MINUS:返回第一个表中存在的但是第二个表中不存在的纪录;
5)BETWEEN … AND …:返回…和…之间的值,包括边界值;

54、常用的SQL一些函数:
1)ADD_MONTHS(column_name,number_value):在当前的日期上增加number_value个月;
注:column_name 为日期型;number_value 为整型数值;
2)LAST_DAY(column_name):返回当前月的最后一天;
注:column_name 为日期型;
3)MONTHS_BETWEEN(column_a,column_b):返回两个日期间月份的个数;
4)NEXT_DAY(column_name,'SUNDAY[MONDAY,TUESDAY,WEDNESDAY,THURSDAY, FRIDAY,…]'
5)    LPAD(column_name,number_value,'fill_character')
6)    RPAD(column_name,number_value,'fill_character')
7)    LTIRM(column_name[, fill_character])
8)    RTRIM(column_name[,fill_character])
9)    REPLACE(column_name,'old_stings'[,'new_strings'])
10)SUBSTR(column_name,number_start,number_count)
11)TRANSLATE(column_name,'origin_characters','translate_into_characters')
12)INSTR(column_name,'strings_to_search',number_1,number_2)
strings_to_seach:将要搜索的字符串;
number_1:从第number_1个字符开始查找;
number_2:返回第number_2个字符串首字符的位置;
13)LENGTH(column_name):返回字符串的长度;
14)TO_CHAR()
15)TO_NUMBER()
16)GREATEST(var_1,var_2,var_3,…)
17)LEAST(var_1,var_2,var_3,…)
18)USER:返回当前使用数据库的用户名字;

55、
1)    GROUP BY:
当要求分组结果返回多个数值时,不能在select 语句中使用使用除分组列以外的列,这将会导致错误的返回值,你可以使用select 语句中未列出的列进行分组;
2)    HAVING:
汇总函数不能工作在WHERE 子句中,HAVING 允许将汇总函数作为条件,代替WHERE子句;
3)    STARTING WITH:
等同于LIKE;

56、关于sys用户以sysdba的身份登陆的一些注意事项:
1)把sysdba系统权限与dba角色要分开,不要混淆,有dba角色不一定是sysdba;
2)在server上可能用了操作系统认证,用了操作系统认证就不能在本机上以sysdba身份登但是可以在client上测试;
3)    把INIT<SID>.ORA中REMOTE_LOGIN_PASSWORD设置为EXCLUSIVE 或SHARED。同时把sqlnet.ora文件中SQLNET.AUTHENTICATION _SERVICES设置为NONE或注释后,然后在服务器上进行测试,就可以通过;
4)查看系统中具有sysdba权限的用户:select * from v$pwfile_users;

57、给数据库中的表和列加上注释:
comment on table Table_name is '注释的内容';
comment on column Table_name.column_name is '注释内容';
查看表的注释:
select * from user_tab_comment;
查看列的注释:
select * from user_col_comment;
其他于此相关的视图:
dba_tab_comments、dba_col_comments;

58、P4机器的安装问题
在基于奔四的Windows 2000系统上安装Oracle8i数据库时有可能产生错误,症状为单击Setup.exe时没有反应。这是因为Oracle8i的安装程序不能识别Intel的奔四处理器。可按照以下方法来解决这个问题:
(1) 安装最新的Windows 2000服务包补丁程序(如sp2,sp3等),可在http://www.microsoft.com/ windows2000/downloads/上下载;
(2) 在奔四服务器上创建一个临时目录(e.g. \TEMP);
(3) 将Oracle数据库服务器安装光盘的所有内容拷贝到第二步创建的临时目录中;
(4) 在第二步创建的临时目录里搜索名为SYMCJIT.DLL的文件;
(5) 把SYMCJIT.DLL修改为SYMCJIT.OLD;
(6) 从\TEMP\install\win32目录运行SETUP.EXE来安装Oracle 8.1.x。

59、手工编译存储过程、触发器:
alter procedure procedure_name complile;
alter trigger trigger_name compile;

60、
1)给表中的某个字段加上主键约束:
alter table tabl_name add constraint primary_key_name primary key(column_name);
2)删除表中的主键约束:
alter table table_name drop primary key cascade;
alter talbe table_name drop constrain constraint_name cascade;

61、查看快照:
select * from user_snapshots

62、
1)改变回滚段的大小:
alter rollback segment rbs_name shrink to nnM;
2)合并自由表空间:
alter tablespace tablespace_name coalesce;
3)改变表空间数据文件的大小:
alter database datafile '$path$\datafile_name' RESIZE nnM;

63、
1)数据库名称:
select * from v$database;
select * from global_name;
2)实例名称:
select * from v$instance;

64、ORADER BY 和 GROUP BY 的一些关系:
一个SQL语中有Group By语句,那么Order By中的表达式就必须是在Group By中出现过。

65、对大于2G的数据库如何解决操作系统最大文件为2G的限制?
可以利用如下方法,把导出的dmp文件保存到多个文件中:
exp user_name/password filesize=1999M
file=\(/home1/back0/user_infor_0.dmp,/home1/back0/user_infor_1.dmp\) log=/home1/back0/user_infor_X   tables=user_table_name
(如果要导出整个用户下的数据,则把tables=user_table_name替换为full=y)

65、Orale数据库中的数据字典:
View    ODBC API    OLE DB API
ALL_CATALOG    SQLTables    DBSCHEMA_CATALOGS
ALL_COL_COMMENTS    SQLColumns    DBSCHEMA_COLUMNS
ALL_CONS_COLUMNS    SQLPrimaryKeys, SQLForeignKeys    DBSCHEMA_PRIMARY_KEYS, DBSCHEMA_FOREIGN_KEYS
ALL_CONSTRAINTS    SQLPrimaryKeys, SQLForeignKeys    DBSCHEMA_PRIMARY_KEYS, DBSCHEMA_FOREIGN_KEYS
ALL_IND_COLUMNS    SQLStatistics    DBSCHEMA_STATISTICS
ALL_INDEXES    SQLStatistics    DBSCHEMA_STATISTICS
ALL_OBJECTS    SQLTables, SQLProcedures, SQLStatistics    DBSCHEMA_TABLES, DBSCHEMA_PROCEDURES, DBSCHEMA_STATISTICS
ALL_TAB_COLUMNS    SQLColumns    DBSCHEMA_COLUMNS
ALL_TAB_COMMENTS    SQLTables    DBSCHEMA_TABLES
ALL_TABLES    SQLStatistics    DBSCHEMA_STATISTICS
ALL_USERS    SQLTables    DBSCHEMA_TABLES
ALL_VIEWS    SQLTables    DBSCHEMA_TABLES
DICTIONARY    SQLTables    DBSCHEMA_TABLES
USER_CATALOG    SQLTables    DBSCHEMA_TABLES
USER_COL_COMMENTS    SQLColumns    DBSCHEMA_COLUMNS
USER_CONS_COLUMNS    SQLPrimaryKeys, SQLForeignKeys    DBSCHEMA_PRIMARY_KEYS, DBSCHEMA_FOREIGN_KEYS
USER_CONSTRAINTS    SQLPrimaryKeys, SQLForeignKeys    DBSCHEMA_PRIMARY_KEYS, DBSCHEMA_FOREIGN_KEYS
USER_IND_COLUMNS    SQLStatistics    DBSCHEMA_STATISTICS
USER_INDEXES    SQLStatistics    DBSCHEMA_STATISTICS
USER_OBJECTS    SQLTables, SQLProcedures, SQLStatistics    DBSCHEMA_TABLES, DBSCHEMA_PROCEDURES, DBSCHEMA_STATISTICS
USER_TAB_COLUMNS    SQLColumns    DBSCHEMA_COLUMNS
USER_TAB_COMMENTS    SQLTables    DBSCHEMA_TABLES
USER_TABLES    SQLStatistics    DBSCHEMA_STATISTICS
USER_USERS    SQLTables    DBSCHEMA_TABLES
USER_VIEWS    SQLTables    DBSCHEMA_TABLES

66、查询系统中的数据库连接:(Database Link)
select * from user_db_links;

67、如何单独从Oracle数据库中备份多个用户?
exp system/manager owner=(用户1,用户2,…,用户n) file=导出文件;

68、如何备份一个或多个表?
Exp system/manager tables=(用户1.表1,\
       用户1.表2,\
       用户1.表3,\
       ……
       用户2.表n+1,\
       用户2.表n+2,\
       用户2.表n+3
……)

69、如何导入指定的表?
Imp user_name/password fromuser=dmp_user_name touser=user_name tables=… file=…
注释:
1)果导出用户没有DBA权限,则导入用户可以不用指定fromuser、touser参数
2)    如果导出用户拥有DBA权限,则导入用户也必须拥有DBA权限

70、如何备份控制文件?
1)产生一个跟踪文件,里面存放创建控制文件的脚本,可以用记事本等文本编辑器打开
这个脚本可以重新创建控制文件,生成一个跟踪文件到init.ora中user_dump_dest所指的目录下($ORACLE_HOME\ADMIN\ORADB\UDUMP\):
Alter database backup controlfile to trace;
Alter database backup controlfile to trace resetlogs;
Alter database backup controlfile to trace noresetlogs;
2)产生一个二进制文件,当前控制文件的一个一模一样的备份:
alter database backup controlfile to 文件名;
alter database backup controlfile to 文件名 reuse;

71、如何移动控制文件到一个新的目录?
1)SHUTDOWN
2)用操作系统命令将C:\Oracle\oradata\oradb\control01.ctl拷贝到新的目录:
  D:\Oracle\oradb\data,
  则现在控制文件的完整路径为:D:\Oracle\oradb\data\control01.ctl,
  修改init.ora文件,在control_files参数中改变控制文件的路径,
  修改前
  control_files = ("C:\Oracle\oradata\oradb\control01.ctl")
  修改后
  control_files = ("D:\Oracle\oradb\data\control01.ctl")
3)STARTUP

72、存储参数(storage子句)含义及设置技巧
该子句可用于:表空间、回滚段、表、索引、分区、快照、快照日志,具体应用如下:
参数名称    缺省值    最小值    最大值    说明
INITIAL    5(数据块)    2(数据块)    操作系统限定    分配给Segment的第一个Extent的大小,以字节为单位,这个参数不能在alter语句中改变,如果指定的值小于最小值,则按最小值创建。
NEXT    5(数据块)    1(数据块)    操作系统限定    第二个Extent的大小等于NEXT的初值,以后的NEXT值=前一NEXT大小乘以(1+PCTINCREASE/100),如果指定的值小于最小值,则按最小值创建。
如果在alter语句中改变NEXT的值,则下一个分配的Extent将具有指定的大小,而不管上一次分配的Extent大小和PCTINCREASE参数值。
MINEXTENTS    1(Extent)
回滚段为2个Extent    1(Extent)
回滚段为2个Extent    操作系统限定    Segment第一次创建时分配的Extent数量
MAXEXTENTS    根据数据块大小而定    1(Extent)
回滚段为2个Extent    无限制    随着Segment中数据量的增长,最多可分配的Extent数量
PCTINCREASE    50%(Oracle816中为0%)    0%    操作系统限定    指定第三个及其后的Extent相对于上一个Extent所增加的百分比,
如果PCTINCREASE为0,则Segment中所有新增加的Extent的大小都相同,等于NEXT的值,
如果PCTINCREASE大于0,则每次计算NEXT的值(用上面的公式),
PCTINCREASE不能为负数。
创建回滚段时,不可指定此参数,回滚段中此参数固定为0。
OPTIMAL    ----    不能小于回滚段初始分配空间    操作系统限定    仅与回滚段有关,当回滚段因为增长、扩展而超过此参数的设定范围时,Oracle系统会根据情况动态地重新分配Extents,试图收回多分配的Extent。
              
FREELISTS    1    1    数据块大小限制    只能在CREATE TABLE、CLUSTER、INDEX中指定FREELISTS和FREELIST GROUPS参数。
模式对象中每一个自由列表组中自由列表的数量
FREELIST GROUPS    1    1    取决于Oracle并行实例的数量    用户创建的数据库对象的自由列表组的数量,只有用OPS并行服务器选项时才使用这一参数,一个实例对应一个组。
BUFFER_POOL    ----    ----    ----    给模式对象定义缺省缓冲池(高速缓存),该对象的所有块都存储在指定的高速缓存中,对于表空间或回滚段无效。

建议PCTINCREASE参数设置为0,可使碎片最小化,使每一个Extent都相同(等于NEXT值)
一旦建立了某个对象,它的INITIAL和MINEXTENTS参数不能修改(Oracle 816中可修改MINEXTENTS参数)
对于NEXT和PCTINCREASE的任何修改都只影响后来分配的那些Extent
在分配一个新Extent时,系统直接按NEXT的值分配一个Extent,
然后用公式:前一NEXT值*(1+PCTINCREASE/100) 计算出下一个应该分配的Extent的大小,
并把计算结果保存到相关数据字典的NEXT_EXTENT列上,做为下一个应该分配的Extent的大小。

73、查看系统后台进程:
select * from v$bgprocess;
SMON    系统进程
PMON    用户进程
DBWR    数据库写入进程
LGWR    日志写入进程
CKPT    检查点进程        用来减少实例恢复所需时间,
   init.ora中,log_checkpoint_interval = 10000,此参数设置检查点出现的频度
ARCH    归档进程        将联机重做日志拷贝到磁盘或磁带,即将联机重做日志归档
RECO    恢复进程        用于分布式数据库中的分布式处理,
   init.ora中,distributed_transactions = 10,此参数大于0时才被建立
SNPn    快照进程        数量取决于init.ora中参数job_queue_processes = 4
LCKn    锁进程            可选项,用于并行服务器
Dnnn    调度进程        可选项,仅用于多线程服务器

74、如何启动archivelog模式?
1)管理器:
>connect internal
>shutdown     --若执行了shutdown abort则需要重新startup,然后再正常shutdown
>startup mount [dbname]
>alter database [dbname] archivelog;
>archive log start
>alter database [dbname] open;
>alter system switch logfile;   --强制系统进行日志切换,可马上观察到归档日志的产生;
>exit
2)    改数据库初始化参数文件,定义归档模式(自动)、归档日志保存路径归、档日志命名方法。
3)    重新启动数据库;

解释init.ora参数文件中关于归档重做日志参数项的含义
归档模式是自动还是手工,true为自动,false为手工
log_archive_start = true
归档日志文件所保存的路径
log_archive_dest_1 = "location=C:\Oracle\oradata\oradb\archive"
归档日志文件的命名方法
log_archive_format = %%ORACLE_SID%%T%TS%S.ARC
归档命令:
启动自动归档模式,系统重起后,将按init.ora中的参数log_archive_start的值设置归档方式
SVRMGR> archive log start
启动手工归档模式
SVRMGR> archive log stop
查看归档信息:重做日志是否归档方式、是自动归档还是手工归档、归档路径、最旧的联机日志循序号...
SVRMGR> archive log list
归档一个已满,但没有归档的联机重做日志
SVRMGR> archive log next
归档所有已满,但没有归档的联机重做日志
SVRMGR> archive log all
注意:一个事务即使不被提交,也会被写入到重做日志中

停用归档日志模式:
alter database [db_name] noarchivelog;

75、Oracle数据库有哪几种启动方式?
有以下几种启动方式:
1)startup nomount
  非安装启动,这种方式启动下可执行:重建控制文件、重建数据库
  读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。
2)startup mount dbname
  安装启动,这种方式启动下可执行:
  数据库日志归档、
  数据库介质恢复、
  使数据文件联机或脱机,
  重新定位数据文件、重做日志文件。
  执行"nomount",然后打开控制文件,确认数据文件和联机日志文件的位置,
  但此时不对数据文件和日志文件进行校验检查。
3)startup open dbname
  先执行"nomount",然后执行"mount",再打开包括Redo log文件在内的所有数据库文件,
  这种方式下可访问数据库中的数据。
4)startup,等于以下三个命令
  startup nomount
  alter database mount
  alter database open
5)startup restrict
  约束方式启动
  这种方式能够启动数据库,但只允许具有一定特权的用户访问
  非特权用户访问时,会出现以下提示:
  ERROR:
  ORA-01035: ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用
6)startup force
  强制启动方式
  当不能关闭数据库时,可以用startup force来完成数据库的关闭
  先关闭数据库,再执行正常启动数据库命令
7)startup pfile=参数文件名
  带初始化参数文件的启动方式
  先读取参数文件,再按参数文件中的设置启动数据库
  例:startup pfile=E:\Oracle\admin\oradb\pfile\init.ora
8)startup EXCLUSIVE

76、如何查看SGA剩余的内存?
select name,sgasize/1024/1024 "Allocated(M)",bytes/1024 "自由空间(K)", round(bytes/sgasize*100,2) "自由空间百分比(%)" from   (select sum(bytes) sgasize from sys.v_$sgastat) s, sys.v_$sgastat f where f.name = 'free memory';

77、存储过程/函数只能被赋予执行的权限:
grant execute on procedure_name/function_name to user_name;

78、如何把一个表空间授权给一个用户?
Alter user <user_name> quota <unlimited|nnM> on <tablespac_name>;

79、快照(snapshot):
快照,也叫物化的视图,Oracle在复制环境中利用快照复制数据到备份服务器中,目的是缓解一个大的数据仓库中昂贵的查询开销。
A snapshot is a replica of a target master table from a single point in time.
Snapshot can also contain a where clause so that snapshot site can contain custermized data sets.
创建一个快照:
CREATE SNAPSHOT emp_snap AS SELECT * FROM scott.emp@db1.world;
1)Primary key snapshot are default type of snapshot:
CREATE SNAPSHOT sales.customer FOR UPDATE AS SELECT * FROM sales.customer @dbs1.acme.com;
2)为了向后兼容Oracle支持ROWID Snapshots(only supported by oracle7)
3)    omplex Snapshots,支持connect by、intersect、union、minus etc。

80、如何对CLOB行字段执行全文检索?
超过4000字的文本一般存储在CLOB中(MSQL、Sysbase是存放在Text中),在目前的Oracle版本(Oracle8i)中,对大字段CLOB仍然不支持在where子句直接的like操作,如何实现对存储在CLOB字段中的内容进行like查找呢?下面的文章也许能给你帮助。虽然在SQL*PLUS中能实现用select直接看到CLOB的内容,但是如何通过DBMS_LOB包实现对中文环境下的CLOB内容的读取我一直没有找到好的方法(使用Documents中提到的Samples只适用英文字符集),这极大的限制了使用第3方软件开发工作的自由度。
表结构:
create table products(
productid number(10) not null ,
name varchar2(255) ,
description CLOB) ;
方法:
SELECT productid, name FROM products
WHERE dbms_lob.instr(products.description,'some text',1,1) > 0;

下面列出了DBMS_LOB包中的过程函数:
APPEND procedure Appends the contents of the source LOB to the destination LOB.
CLOSE procedure Closes a previously opened internal or external LOB.
COMPARE function Compares two entire LOBs or parts of two LOBs.
COPY procedure Copies all, or part, of the source LOB to the destination LOB.
CREATETEMPORARY procedure Creates a temporary BLOB or CLOB and its corresponding index in the user's default temporary tablespace.
ERASE procedure Erases all or part of a LOB.
FILECLOSE procedure Closes the file.
FILECLOSEALL procedure Closes all previously opened files.
FILEEXISTS function Checks if the file exists on the server.
FILEGETNAME procedure Gets the directory alias and file name.
FILEISOPEN function Checks if the file was opened using the input BFILE locators.
FILEOPEN procedure Opens a file.
FREETEMPORARY procedure Frees the temporary BLOB or CLOB in the user's default temporary tablespace.
GETCHUNKSIZE function Returns the amount of space used in the LOB chunk to store the LOB value.
GETLENGTH function Gets the length of the LOB value.
INSTR function Returns the matching position of the nth occurrence of the pattern in the LOB.
ISOPEN function Checks to see if the LOB was already opened using the input locator.
ISTEMPORARY function Checks if the locator is pointing to a temporary LOB.
LOADFROMFILE procedure Loads BFILE data into an internal LOB.
OPEN procedure Opens a LOB (internal, external, or temporary) in the indicated mode.
READ procedure Reads data from the LOB starting at the specified offset.
SUBSTR function Returns part of the LOB value starting at the specified offset.
TRIM procedure Trims the LOB value to the specified shorter length.
WRITE procedure Writes data to the LOB from a specified offset.
WRITEAPPEND procedure Writes a buffer to the end of a LOB

81、
Oracle SQL运行时间的最主要的组成部分是花在为执行准备新的SQL语句上的时间。不过,如果了解了可执行计划产生的内在机制,你就可以控制Oracle花费在评估表的连接顺序的时间,并在总体上提高查询的性能。
1)准备为执行提供的SQL语句
在一个SQL语句进入Oracle库的cache之后、而真正被执行之前,将会依次发生如下事件:
语法检查--检查该SQL语句的拼写和词序是否正确。
语义解析--Oracle根据数据词典(data dictionary)来验证所有的表格(table)和列(column)。
已保存纲要检查--Oracle检查词典以确认对应该SQL语句是否已存在已保存的纲要(Stored Outline)。
产生执行计划--Oracle根据一种罚值(cost-based)优化算法和数据词典中的统计数据来决定如何生成最优执行计划。
产生二进制代码--Oracle在执行计划的基础上生成可执行的二进制代码。
一旦开始准备执行SQL语句,上述的过程很快就会执行,这是因为Oracle可以识别出同样的SQL语句并对同样的SQL语句重复使用对应的可执行代码。然而,对产生ad hoc SQL的系统以及SQL中嵌入文本值(literal value)的情况,SQL执行计划的生成时间就会变得相当长,而且以前的执行计划也常常不能被再次利用。对那些牵涉到许多表格的查询,Oracle可能要花上很长的时间来决定把连接这些表格的顺序。
2)评估连接表格的顺序
生成可执行计划的时间往往是SQL的准备过程中最大的开销组成部分,尤其是在处理有多个表的连接的查询的情况下。当Oracle评估表的连接顺序时,它必须考虑每一种可能的排序。例如,当有六个表格需要连接时,Oracle需要考虑720种(6的排列数,即6×5×4×3×2×1=720)可能的连接排序。当需要连接的表的数量超过10时,这个排列问题将变得非常突出:如果需要连接的表格有15个,那么需要考虑的可能的查询排列顺序超过一万亿种(精确值为1,307,674,368,000)。
在optimizer_search_limit参数中设置限制
你可以通过optimizer_search_limit参数来控制上述问题的发生,该参数用来指定优化器评估的表格连接顺序的最大数目。利用这个参数,就可以防止优化器在评估所有可能的表格连接顺序中所花费的多余时间。如果查询中的表的数量少于或者等于optimizer_search_limit,那么优化器检查所有的可能表的连接方式。
例如,涉及了五个表的查询一共有120种(5!=5×4×3×2×1=120)可能的连接顺序,所以如果参数optimizer_search_limit的值设置为5(默认值),那么优化器就会考虑所有的这120种可能的连接顺序。optimizer_search_limit参数还用来控制启动开始连接指示(star join hint)的阈值。当查询所涉及的表格数量少于参数optimizer_search_limit的设定值,开始连接指示将被设置。

82、DECODE的用法:
decode(expr, value1, result1,
        value2, result2,
        ....
        valueN, resultN,
        default_result)

当expr=valueN的时候,返回resultN,否则返回default_result;

83、DUAL在ORACLE数据库里代表什么?是一个系统表么?
一个临时表,由系统创建的。

84、select * from user_objects where status<>'VALID';
alter package package_name compile ; --编译包
alter package package_name compile body; --仅编译包体

85、从oracle数据库中导出数据,若是按用户导出数据,最后一步提示如下:
About to export specified users ...
User to be exported: (RETURN to quit) >
此时,必须至少输入一个用户,如zbtel,输入用户并回车后,又出现如下提示:
User to be exported: (RETURN to quit) >
若此时按回车键,则仅仅导出用户zbtel下的数据;
若不按回车,又输入用户zbnet,按回车,又出现如下提示:
User to be exported: (RETURN to quit) >
此时再按回车,则导出用户zbtel、zbnet下的数据;
以此类推,可以导出数据库中部同用户的数据。

86、、drop user user_name cascade;
When a user is dropped, the user and associated schema is removed from the data dictionary and all schema objects contained in the user's schema, if any, are immediately dropped.
A user that is currently connected to a database cannot be dropped. To drop a connected user, you must first terminate the user's sessions using either Enterprise Manager/GUI, or the SQL command ALTER SYSTEM with the KILL SESSION clause.
If the user's schema contains any schema objects, use the CASCADE option to drop the user and all associated objects and foreign keys that depend on the tables of the user successfully. If you do not specify CASCADE and the user's schema contains objects, an error message is returned and the user is not dropped.

87、viewing memory using per user session
SELECT username, value || 'bytes' "Current session memory"
  FROM v$session sess, v$sesstat stat, v$statname name
WHERE sess.sid = stat.sid
  AND stat.statistic# = name.statistic#
  AND name.name = 'session memory';

88、
锁定一个用户:alter user scott account lock;
解锁一个用户:alter user scott account unlock;

89、给用户授权:grant privs_1,privs_2,… session to user_name;
解除给用户的授权:revoke privies_1,privies_2,… session from user_name;
给用户赋予角色:grant role_1,role_2,… to user_name;
收回赋予用户的角色:revoke role_1,role_2,… from user_name;

90、dynamic performance views:
Dynamic performance views provide data on internal disk structures and memory structures. These views can be selected from, but never updated or altered by the user.

91、在sql/plus中的一种计算某个表中的一种记录占整个表的所有记录数的比例的方法:
select a.cnt/b.cnt
from
(select count(*) cnt from subscriber where subsname like '秦%') a,
(select count(*) cnt from subscriber ) b;

92、在提交某一事物之前,设置事物的回滚段:
   SET TRANSACTION USE ROLLBACK SEGMENT RBS_name;
注:设置回滚段必须在某个事务之前设定,并且进对当前事务发生作用,当事务提交(commit)后,设置自动取消作用。

93、查看又户下的所有的表以及该表使用的表空间:
   select * from user_talbes;
   查看系统所有用户的表以及相应的表使用的表空间:
   select * from dba_talbes;
注:表user_tables和表dba_tables中的表的名称都是大写的。

94、用sql语句在数据库中的某个表检索数据时,建立了主索引的列一定要放在最前,这样会提高系统的运行速度。

95、向一个已经存在的表中增加一列,用如下命令:
   alter talbe tab_name add(column_name column_type,
                       column_name column_type……);

96、改变一个已经存在的表的列(modify):   
ALTER TABLE tab_name
         MODIFY (column_name DEFAULT NULL);

97、改变表的pctfree,pctused的值:
   alter table tab_name pctfree value_a pctused value_b;

98、主键约束:
   主键列的值必须唯一;
   主键列不能又空值;
   一个表只能有一个主键;
A primary key column cannot be of datatype LONG or LONG RAW. You cannot designate the same column or combination of columns as both a primary key and a unique key or as both a primary key and a cluster key. However, you can designate the same column or combination of columns as both a primary key and a foreign key.

99、用一个已经存在的表创建一个新表:
   复制一个新表:
   create table new_table as ( select * from old_table);
   创建一个包含原表部分字段的新表:
   create table new_table as (select column_1,column_2,column_3 from old_table);
   注意:用create table new_table as (select * from old_table)创建新表时,旧表的默认值不能利用该命令传递,即即使旧表的有不为空的缺省值,新表的缺省值也为空,即表的索引、约束等都不被传递。

100、一个关于PCTFRREE、PCTUSED、ROW Chaining的简单介绍
Two space management parameters, PCTFREE and PCTUSED, enable you to control the use of free space for inserts of and updates to the rows in all the data blocks of a particular segment. You specify these parameters when creating or altering a table or cluster (which has its own data segment). You can also specify the storage parameter PCTFREE when creating or altering an index (which has its own index segment).
The PCTFREE parameter sets the minimum percentage of a data block to be reserved as free space for possible updates to rows that already exist in that block.
The PCTUSED parameter sets the minimum percentage of a block that can be used for row data plus overhead before new rows will be added to the block. After a data block is filled to the limit determined by PCTFREE, Oracle considers the block unavailable for the insertion of new rows until the percentage of that block falls below the parameter PCTUSED. Until this value is achieved, Oracle uses the free space of the data block only for updates to rows already contained in the data block.

101、在调用一个带有多个默认参数的过程中,如果使用按名称对应法则,可以任意指定参数的值,不必理会参数在过程中的位置;而如果使用了按位置的对应法则,则必须按照严格的位置指定参数值,一旦某个参数使用了缺省值,则该参数后的所有的参数都必须是缺省值。

102、过程与函数:
   在执行的结果要求有多个返回值的时候,用过程;
   在执行的结构只有一个返回值的时候,可用函数;

103包:包是由存储在一起的相关对象组成的PL/SQL结构。
   包包括说明部分和包体,这两部分独立存储在数据词典中。

104、取消表tab_test中的col_test列的缺省值:
   alter table tab_test modifty(col_test default null);
   允许或取消表tab_test的col_test列的值可以为空:
   alter table tab_test modify(col_test null);
   alter table tab_test modify(col_test not null);

105、用import向一个数据库中导入数据的时候,import指定的表在新的数据库中必须是不存在的,若存在,需要drop掉。

106、user_triggers是系统的一个视图,可以查看系统触发器的详细信息:
select 'alter trigger '|| TRIGGER_NAME ||' disable;' from user_triggers;
select 'alter trigger '|| TRIGGER_NAME ||' enable;' from user_triggers;

107、ORACEL8的TNS服务不能启动时,首先要检查网络是否畅通,然后,进入lsnrctl,执行stop命令,查找出错误的原因,然后执行start命令,若未成功,可修改$ORACLE_HOME\network\admin\listernerl.ora文件,然后再次执行start命令。

108、用exp导出文件,若要将该文件导入到另外一个库的某个用户下,导出数据用户的权限要与导入的用户具有相同的权限或者后者的权限大于前者的权限。

109、从几个表中通过关联取部分字段插入一个新表的时候,可以用如下方式:
   select tab_1.col1,tab_2.col2 from tab_1,tab_2 where tab_1.col3 =tab_2.col3 ;
   用pb,把选择出来的数据保存成文本格式,然后,仍然利用pb,retrieve将要插入的表,从菜单中选择“Rows”,“Import”,选择保存好的文本文件,打开,然后从按钮栏上单击“save changes”图标。(注:导入数据的表必须有主键约束或唯一性索引)

110、从一个ORACLE数据库直接向另外一个ORACLE数据库中导数据,方法如下:
   首先,建立一个数据库链接,并赋予别名:
   create [public] database link 要连接的数据库实例名
       connect to 用户名 identified by 密码
       using ‘数据库链接字符串’;
   删除数据库连接:
   drop [public] database link database_link_name;
   注意:
1)    数据库链接字符串是用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义的。数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样。数据库全局名称可以用以下命令查出SELECT * FROM GLOBAL_NAME。在global_name=ture时,若数据库名称后面没由域名,需要用如下语句改变global_name的名称:
alter database rename global_name to 数据库名称.域名;
Use the ALTER DATABASE statement to change the domain in a database's global name. Note that after the database is created, changing the initialization parameter DB_DOMAIN has no effect on the global database name or on the resolution of database link names.
2)    要连接的数据库实例名必须是数据库全局名称,即用SELECT * FROM GLOBAL_NAME选出来的字符串。
  
   要选择数据库的表中的数据,如下:
       select * from table_name@要连接的数据库实例名;
   表与表之间的拷贝为:
       insert into local_table_name (select * from table_name@数据库链接名);

111、Oracel 中 How to terminate a session?
   alter system kill session 'sid,serial#';

112、查看当前链接地数据库:
   select global_name from global_name;

113、查看SGA的大小:
   select * from v$sga;
114、增加一个表空间(tablespace)的大小:
   alter database datafile 'filename' resize nn M;
   或者
   alter tablespace tablespace_name add datafile 'filename' size nn M;
   (Make sure you specify the full path name for the filename.)
115、用sql查询Oracle数据库中地一些属性:
--LIST DB NAME
SELECT * FROM GLOBAL_NAME;
--LIST TABLESPACES
select tablespace_name,max_extents,pct_increase,status from dba_tablespaces;
--LIST DB DATA FILES
column tablespace_name format A16;
column file_name format A46;
select * from dba_data_files;
--LIST TABLEASPACE USAGE
select * from( select tablespace_name,sum(bytes)/(1024*1024) as "free_space(M)"
from dba_free_space
group by tablespace_name) order by "free_space(M)";
--LIST ROLLBACK SEGMENT
column segment_name format A10;
column tablespace_name format A16;
column status format A10;
select segment_name,tablespace_name, r.status,
(initial_extent/1024) "InitialExtent(K)",
(next_extent/1024) "NextExtent(K)",
max_extents "max_extents(K)", v.curext "CurExtent(K)"
From dba_rollback_segs r, v$rollstat v
Where r.segment_id = v.usn(+)
order by segment_name;
--LIST CONTROL FILES
select name "control file name" from v$controlfile;
--LIST LOG FILES
select member "log file name" from v$logfile;
--LIST VERSION OF ORACLE
Select version "oracle version" FROM Product_component_version
Where SUBSTR(PRODUCT,1,6)='Oracle';
--LIST CREATED DATE AND LOG_MODE OF ORACLE
Select Created "db created time", Log_Mode From V$Database;
--LIST SGA SIZE
select sum(value)/(1024*1024) "sga size" from v$sga;
--LIST CUREENT SESSIONS
select count(*) "current user number",username "current username" from v$session group by username;

--LIST DB USERS AND THEIR DEFAULT TABLESPACE
select username,default_tablespace,temporary_tablespace from dba_users;
-- list quota of users
select * from DBA_TS_QUOTAS order by Tablespace_Name, Username;
--LIST REPORT TIME
select sysdate "report time" from dual;

116、RollBack Segment是ORACLE里很特殊地一种数据库对象,它处理事务回滚操作。通常,一般需要并发ORACLE用户数/4个RollBack Segment,用Private类型。
   select name,value from v$parameter where instr(name,'rollback')>0;
创建一个回滚段:
create rollback segement rbs_05tablespace rbs storage (initial 128k next 128k minextents 20);
   alter rollback segment rbs_05 online;
   rollback segemt 缺省的存储参数:pctincrease 0 minextents 偶数
                    maxextent跟数据库的块大小有关
                          2K     121
                          4K     249
                          8K     505
针对某个特定的大事务操作,如update大量数据时,可以建一个大的rollback segment,如:
create rollback segment rte tablespace rbs storage (initial 5M next 5M minextents 20);
   alter rollback segment rte online;
改数据库参数文件 init(oraid).ora
   rollback_segments = (r01, r02, r03, r04,r05,r06,r07,r08,r09,r10,r11,r12,rte)
重启数据库,新建的rollback_segment才生效
把大事务操作指给大的回滚段rte
   commit;
   set transaction use rollback segment rte;
   ...... ;
   .
   .
   commit;

117、重命名一个表:
   alter table table_name_old rename to table_name_new;
   或者
   rename old_table_name to new_table_name;

118、查看当前用户的角色(role):
   select * from user_role_privs;

119、查看当前用户缺省表空间:
   select username,default_tablespace from user_users;

120、查看当前用户的系统权限和表级权限:
   select * from user_sys_privs;
   select * from user_tab_privs;

121、查看用户下的所有表:
   select * from user_tables;

122、查看当前用户下的所有对象:
select * from user_objects;

123、查看某表的创建时间:
select object_name,created from user_objects where
object_name=upper('&object_name');

124、查看某表的大小
   select sum(bytes)/(1024*1024) as "size(M)" from user_segments where segment_name=upper('&table_name');
  (注:user_sgments中的行数=user_tables中的行数+user_indexes中的行数)

125、查看ORACLE放在内存区里的表:
   select table_name,cache from user_tables where instr(cache,'Y')>0;

126、查看索引的个数和类别:
   select index_name,index_type,table_name from user_indexes order by table_name;

127、查看被索引的字段:
   select * from user_ind_columns where index_name=upper('&index_name');

128、查看索引的大小:
   select sum(bytes)/(1024*1024) as "size(M)" from user_segments where segment_name=upper('&index_name');

129、查看序列号发生器(last_number是当前值):
   select * from user_sequences ;

130、查看某表的约束条件:
   select constraint_name,constraint_type,search_condition,r_condition_name from user_constraints where table_name=upper('&table_name');

131、查看函数、过程的状态:
   select object_name,status from user_object where object_type='FUNCTION';
   select object_name,status from user_object where object_type='PROCEDRUE';

132、查找ORACLE的字符集(sys权限):
   select * from sys.props$ where name='NLS_CHARACTERSET';

133、ORACLE字符集不匹配会导致整个营业程序中凡是用到数据库中数据带有汉字的地方的时候,显示大量的“?????”字符,要改变终端的字符集,需要从注册表中找出所有的“NLS_LANG”,并把其字符串改为与ORACLE数据库中对应的字符集相匹配的字符串。若是数据库是ENGLISH字符串,则NLS_LANG对应的值为“AMERICAN_AMERICA.WE8ISO8859P1”。

134、在PL/SQL语句中,几个小知识点:
   substr(sting,m,n)中参数的含义:
           string:要从中取值的字符串;
           m:从字符串中第m个字母开始取值;
           n:从第m个字母开始取值直到第m+n-1个值(即取n个值);
用to_date()函数格式化显示的日期格式,如下:
(1)    yyyy-mm-dd hh24:mi:ss
(2)    MM-DD-YYYY
(3)    January 15, 1989, 11:00 A.M.
(4)    Month dd, YYYY, HH:MI A.M.

135、查看oracle中的数据文件:
   select * from sys.dba_data_files;

136、刷新oracle数据库中的共享池,使碎片小块内存合并为大块的内存,语句实现如下:
   alter system flush shared_pool;
在执行上述语句时,会造成系统性能暂时尖峰,因为对象都要重新加载,所以应该在数据库的负载不是很大的情况下进行。

137、    offiline 一个表空间:
Alter tablespace tablespace_name offline normal;

138、    SLQ/PLUS中修改用户的密码:
alter user user_name identified by new_password;

139、    Oralce 中的 group by 子句:
Use the GROUP BY clause to group selected rows and return a single row of summary information. Oracle collects each group of rows based on the values of the expression(s) specified in the GROUP BY clause.

140、    查看oracle数据库的背景进程(v$bgprocess)
select * from v$bgprocess;

141、    查看用户对某一个表的权限(sys.dba_tab_privs):
select * from sys.dba_tab_privs where grantee='用户名' and table_name = '表名';

142、    unix下mail命令的用法:
#mail
?n 2                (读取第二封信)
?n 4                (读取第四封信)
?+                    (读取下一封信)
?-                    (读取上一封信)

143、创建同义词:
CREATE [public] SYNONYM 同义词名称 FOR 用户名.表名@数据库连接名;
Drop any synonym;删除所有的同义词
Drop synonym synonym_name ;
查看同义词:
select synonym_name from user_synonyms;

144、若Oracle OPS中的一个down掉,最好OPS服务器的各个节点的数据库同时重新启动:
   Shutdown abort;
startup;

145、创建视图:
create view view_name as select col1,[[col2],…] from 用户名.表名@数据库连接名;
删除视图:
drop view view_name;
删除任何视图:
drop any view;
查看视图:
select view_name from user_views;

146、    建触发器:
create or replace trigger trigger_name
before/after update or delete or insert on tab_name
begin
   ……
end;

147、    用DBMS_OUTPUT输出使,若要在SQL/PLUS中显示出来,需要先执行如下语句:
SET SERVEROUTPUT ON;

148、SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。
  1) 数据查询语言DQL
  数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE
子句组成的查询块:
    SELECT   <字段名表>
    FROM   <表或视图名>
    WHERE   <查询条件>

  2 )数据操纵语言DML
  数据操纵语言DML主要有三种形式:
    (1) 插入:INSERT
    (2) 更新:UPDATE
    (3) 删除:DELETE

  3 )数据定义语言DDL
  数据定义语
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics