oracle基本操作
登入oracle
sqlplus / as sysdba
启动oracle
startup
停止oracle
shutdown
创建新用户
create user username identified by password;
创建表空间
create tablespace tablespacename datafile '/mnt/nfs/oracle_db/test.dbf'size 50m;
给用户指定默认表空间
alter user username default tablespace tablespacename;
查询默认表空间
select username, default_tablespace defspace from dba_users where username=’username′;
查询表空间
select * from dba_tablespaces;
查看表空间是否自动增长
SELECT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM dba_data_files;
修改表空间为自动增长
ALTER DATABASE DATAFILE '... '| FileNo AUTOEXTEND ON | OFF NEXT 20M MAXSIZE 300M;
ALTER DATABASE DATAFILE 'c:\SmartDB01.ora' AUTOEXTEND ON; --设置数据文件自动增长
ALTER DATABASE DATAFILE 'c:\SmartDB02.ora' MAXSIZE UNLIMITED; --设置数据文件容量无限
给用户授权
grant create session,create table,unlimited tablespace to username;
授予用户dba权限
grant connect,resource,dba to username;
连接用户
conn username/password
彻底的删除表
删除表后,会被放入回收站
清除回收站的办法
purge table origenal_tableName;
purge index origenal_indexName;
查询垃圾信息,可以用如下SQL语句:
SELECT t.object_name,t.type ,t.original_name FROM user_recyclebin t;
或者
PURGE recyclebin;
删除Table不进入Recycle的方法:
drop table tableName purge;
常见问题
诡异的ORA-02289: sequence does not exist
今天被开发人员告知在应用用户下无法查询自己创建的sequence的nextval值。当执行select * from test.nextval时提示“ERROR
at line 1:ORA-02289: sequence does not exist”。于是我通过select sequence_name from user_sequences来判断该序列确实存
在。于是我询问开发人员创建sequence的语句,结果发现开发人员调用的语句是create sequence "test";问题就出在那个双引号下
。如果创建sequence的时候sequence name带了双引号,那么在user_sequences数据字典中并不会显示序列名为"test"而只会显示
test,如果要正确调用序列的nextval值则需要使用select * from "test".nextval即可,当然最好是避免在创建序列时在序列名上
附加双引号。