在ORACLE中创建自增字段(sequence)的方法
创建一新表
CREATE TABLE table
(id NUMBER PRIMARY KEY,
username VARCHAR2(50));
--创建自增序列
CREATE SEQUENCE table_seq
MINVALUE 1
MAXVALUE 9999999999
START WITH 1
INCREMENT BY 1
CACHE 30
ORDER;
--建触发器
CREATE OR REPLACE TRIGGER table_tg
BEFORE INSERT ON table
FOR EACH ROW
BEGIN
SELECT table_seq.NEXTVAL INTO :NEW.id FROM DUAL;
END;
--执行
INSERT INTO table (username) VALUES ('jorh');
select sid,serial# from v$session where sid= 可以查看对应的sid对应的serial#
SQL> select count(*) from v$session #连接数
SQL> Select count(*) from v$session where status='ACTIVE' #并发连接数
SQL> show parameter processes #最大连接
SQL> alter system set processes = value scope = spfile;重启数据库 #修改连接
PL/SQL中可以用help reserved words查看有哪些关键字。
通过user_tab_privs可以查看当前登录的用户所具有的权限
转移数据文件(datafile)
mkdir -p /u01/oradata/test/
chown -R oracle:oinstall /u01
select name from v$datafile;
shutdown immediate
cd /u01/app/oracle/product/10.2.0/db_1/oradata/test/
mv *.dbf /u01/oradata/test
startup mount
alter database rename file'/u01/app/oracle/product/10.2.0/db_1/oradata/test/undotbs01.dbf' to '/u01/oradata/test/undotbs01.dbf'
.............................
(如出现ora-01113) >>>>>recover datafile '/u01/oradata/test/undotbs01.dbf'
alter database open;
转移控制文件的话
需要在pfile里做相应的修改,然后根据pfile 创建spfile
10g 设置为archive模式
1. archive log list;
2. alter system set log_archive_dest=‘/u01/app/oracle/product/10.2.0/database/archive' scope=spfile;
3. shutdown immediate;
4. startup mount;
5. alter database archivelog;
取消archivelog 模式
alter database noarchivelog;
varchar2最大长度,
在字段中为4000
在pl/sql中为32767
num数据类型
num(m,n) m范围为1-38
m为所有有效数字的位数,n表示的是小数位的位数
修改数据结构,数据库结构等等的语句成为DDL
比如:alter table, create table, alter user, truncate table等等
修改数据本身的语句成为DML
比如:update,insert,delete
DDL不可以rollback,但是DML可以
改变用户在某表空间的配额不足
(1)查看用户的表空间的限额:
select * from user_ts_quotas;
max_bytes字段就是了,-1是代表没有限制
(2)不对用户做表空间限额控制:
GRANT UNLIMITED TABLESPACE TO GAL_425_DATA;
这种方式是全局性的.
或者
alter user collins quota unlimited on USERS(表示用户表空间);
这种方式是针对特定的表空间的.
(3)可以分配自然也可以回收了:
revoke unlimited tablespace from GAL_425_DATA;
或者
alter user GAL_425_DATA quota 0 on USERS;
在redhat 5.2上安装oracle 时出现错误
Exception in thread "main" java.lang.UnsatisfiedLinkError: /tmp/OraInstall2010-12-09_11-24-17PM/jre/1.4.2/lib/i386/libawt.so: libXp.so.6: cannot open shared object file: No such file or directory
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at sun.security.action.LoadLibraryAction.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.awt.NativeLibLoader.loadLibraries(Unknown Source)
at sun.awt.DebugHelper.<clinit>(Unknown Source)
at java.awt.Component.<clinit>(Unknown Source)
然后我安装了 libXp-1.0.0-8.1.el5.i386.rpm 软件包
就可以了。
在给数据库打补丁时,最好重启下机器,保证进程中没有oracle进程。
然后再打补丁。因为在打补丁时需要重写许多文件,而oracle在使用时会正在使用这些文件,然后会导致错误。
数据库的启动:
1 nomount:由参数文件就可以启动实例。
pfile/spfile------------>创建实例,分配内存,启动后台进程。
参数文件位置:$ORACLE_HOME/dbs目录
init<SID>中最重要参数是db_name 将db_name 添加进参数文件,可能能够启动实例。
参数文件读取先后顺序:
oracle 首先选择 spfile<sid>.ora文件作为启动参数文件,
如果该文件不存在,选择spfile.ora作为启动参数文件
如果前两个文件都不在,oracle会选择init<sid>.ora作为启动参数文件。
1:spfileorcl.ora
2:spfile.ora
3:initorcl.ora
从指定pfile启动数据库。
sql>startup pfile='$ORACLE_HOME/dbs/initorcl.ora';
查看当前使用的pfile或者spfile;
sql>show parameter spfile;
查看系统的一些日志文件目录
sql>show parameter dump_test
查看系统的控制文件目录
sql>show parameter control_files
查看数据库名称
sql>show parameter db_name
Rman 备份可以不用参数文件直接启动实例
rman target/
startup nomount
nomount -启动参数文件---可查询v$parameter 视图----------信息来自启动参数文件
mount--根据参数文件中控制文件目录 然后启动controlfile -----可查询v$controlfile-----信息来自控制文件。
2:mount 启动到Mount状态需要两类文件,1:controlfile oradata目录下 2:口令文件orapw<sid>
目录ORACLE_HOME/dbs
3:Open
在open阶段oracle才检查数据文件是否存在,
缺失数据文件,仍然可以启动到Mount状态。
数据库出现问题时:首先检查alert_<sid>.log文件。研究其中的警告信息或者提供给他人寻求帮助,这是通常解决问题的第一个步骤
数据库每次启动时都会检查控制文件中的字符集是否和数据库中的字符集相同,如果相同,则日志文件中记录如:
database characterset is we8iso8859p1
如果不一致,则以数据库中的字符集为准更新控制文件中的字符集记录。
updating characterset in controlfile to we8iso8859p1;
4:SCN(system change number)
查询当前系统改变号
select dbms_flashback.get_system_change_number from dual;
alter system switch logfile;
5 :checkpoint
在checkpoint完成之后,此checkpoint之前修改过的数据都已经写回磁盘,重做日志文件中的相应重做记录对于崩溃/实例恢复不再有用。
脏数据: 修改过的数据暂存在内存上,还没有写到磁盘上的数据,--------(当数据库意外断电或crash时,可以通过相应的redolog file 恢复相应的数据。)
查看SID: select instance_name from v$instance;
在sqlplus 环境下,若要进行LINUX命令操作,前面加个host或者感叹号就可以了。
重建spfile sql>create spfile from pfile;
通过在pfile中调用spfile,使用后者的参数覆盖spfile中的参数设置,是解决spfile中参数设置错误的一种方法。
修改参数:
alter system 命令的scope选项,
memory:只改变当前实例运行,重新启动数据库后失效
spfile:只改变spfile的设置,不改变当前实例运行,重新启动数据库后生效
both:同时改变实例和及spfile,当前更改立即生效,,重新启动数据库后仍然有效。
如果不慎错误的修改了参数导致数据库无法启动时,可以通过创建pfile文件,修改其中的参数,再由pfile创建spfile的方式解决,最后由spfile正常启动数据库。
例如:sql>alter system set db_block_buffers=1000 scope=spfile;
sql>shutdown immediate
sql>startup ---------此处出现错误,ORA-00824: cannot set sga_target due to existing internal settings, see alert log for more information
此时,可以由spfile 创建pfile;然后修改initorcl.ora 中文件参数,删除 *.db_block_buffers=1000这行,
然后由pfile 创建spfile
sql>create spfile from pfile;
然后由spfile启动数据库。
注意:如果直接修改spfile参数,删除*.db_block_buffers这一行,这样并不能直接启动数据库。只能先创建pfile,然后根据pfile重新创建spfile 启动。因为spfile 是一个二进制文件,所以不能通过手工方式修改,而pfile文件是文本文件,可以通过手工方式修改。
当用pfile启动数据库时,在数据库中对系统进行了配置后,也要手动修改相应的pfile文件。
而用spfile 文件就可以直接同步到文件中。
Rman 备份中自动将控制文件也纳入到备份中
rman target/
Rman>configure controlfile autobackup on;
ORA-00600错误解决方法:
第一:通过升级数据库补丁 Patch.6110331. ;
第二:直接升级数据库版本 10.2.0.3 到数据库版本 10.2.0.4
或者使用方法:sql>alter system set event='10841 trace name context forever' scope=spifle;
show parameter event可以列出使用的事件。
查看oracle ora错误的信息:
oerr ora 00600 查看ORA-00600错误的信息。
查看数据文件的sql语句
sql>select name from v$datafile;
查看undo信息
sql>show parameter undo;
设置数据库为归档模式:
sql>startup mount;
sql>alter database archivelog;
sql>alter database open;
查看归档列表,
sql>archive log list;
设置undo表空间
alter system set undo_tablespace='UNDOTBS2';
查看版本信息:
select * from v$version;
通常所说的数据字典由4部分组成:内部RDBMS表(x$开头 x$KSMSP),数据字典表(以$结尾 tab$),动态性能视图(V$)和数据字典视图。
查看某条语句的执行计划而不实际执行查询
sql>set autotrace trace explain
若要关闭,则用
sql>set autotrace off.
更改默认临时表空间 ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;
触发DBWR写动作的条件有两个:
1)dirty buffers(脏缓冲)的threshold(阈值)达到25%.执行写出
2)No free buffer,当进程扫描LRU一定数量的block后,如果找不到足够的free空间,则触发DBWR执行写出。
查看SGA总大小
sql>show parameter sga_max_size;
查看sga中各内存分配情况:
sql>select * from v$sga;
更改SGA总大小
sql>alter system set sga_max_size=1000M scope=spfile;
然后重新启动就可以了
经常可能用到的类似如下命令:
sql>alter system set db_cache_size=2g scope=memory;
sql>alter system set large_pool_size=200m scope=memory;
sql>alter system set java_pool_size=200m scope=memory;
shmmax参数设置在 /etc/sysctl.conf 下设置
也可以在 /proc/sys/kernel/shmmax中观察到。
查看Buffer cache的建议信息:
sql>show parameter db_cache_ad
显示结果:
db_cache_advice string ON
shared pool 的建议受到另外一个参数的影响:statistics_level;
该参数有三个选项:basic 收集基本的统计信息。typical:收集大部分的统计信息。all:收集全部的统计信息。
自动内存管理:在linux下后台进程的mman(memory manager)
在oracle 下自动内存管理的参数sga_target.
sql>show parameter sga_target
该参数的设置不能超过sga_max ,设置方式:
sql>alter system set sga_target=500m;
若不想用自动共享内存管理则可以将sga_target 设置为0
这样就可以回到手工管理的模式。
查看Oracle 启动了哪些进程,在oracle下可以通过如下语句来查看
sql>select pid,spid,program from v$process;
在os下可以通过 ps -ef|grep ora_ 来查看。
v$process视图是从操作系统到数据库的一个接口。
oracle 10g中查看各动态内存调整情况 视图v$sga_dynamic_components;
sql>select component,current_size,min_size,last_oper_type,last_oper_mode,to_char(last_oper_time,'yyyy-mm-dd hh24:mi:ss')lot from v$sga_dynamic_components;
决定sga总大小的参数:sga_max_size
决定pga总大小的参数: pga_aggregate_target
oracle一般物理内存的80%.
在oltp中,sga一般占oracle所用内存的80%,pga一般占20%。
在dedicated模式下,通常建议oracle的sga分配不超过1/2物理内存。
Solaris 的unix系统下
swap命令:
增加swap分区:swap -a 文件路径
删除交换分区:swap -d 交换分区路径
swap信息总览:swap -s
swap分区路径及使用大小:swap -l
mkfile -v 10m /exp/swap 创建文件
统计oracle当前连接用户数。
select count(*) from v$session;
iSQL*Plus URL:
http://collins.dfs.com:5560/isqlplus
iSQL*Plus DBA URL:
http://collins.dfs.com:5560/isqlplus/dba
Enterprise Manager 10g Database Control URL:
http://collins.dfs.com:1158/em
emca 配置:
创建一个EM资料库
emca -repos create
重建一个EM资料库
emca -repos recreate
删除一个EM资料库
emca -repos drop
配置数据库的 Database Control
emca -config dbcontrol db
删除数据库的 Database Control配置
emca -deconfig dbcontrol db
重新配置db control的端口,默认端口在1158
emca -reconfig ports
emca -reconfig ports -dbcontrol_http_port 1160
emca -reconfig ports -agent_port 3940
先设置ORACLE_SID环境变量后,启动EM console服务
emctl start dbconsole
先设置ORACLE_SID环境变量后,停止EM console服务
emctl stop dbconsole
先设置ORACLE_SID环境变量后,查看EM console服务的状态
emctl status dbconsole
配置dbconsole的步骤
emca -repos create
emca -config dbcontrol db
emctl start dbconsole
重新配置dbconsole的步骤
emca -repos drop
emca -repos create
emca -config dbcontrol db
emctl start dbconsole