Oracle 常用命令总结

创建表空间、用户并授权

  1. 创建临时表空间
    create temporary tablespace user_temp
    tempfile ‘D:\oracle\oradata\Oracle9i\user_temp.dbf’
    size 50m
    autoextend on
    next 50m maxsize 2048m
    extent management local;
  2. 创建数据表空间
    create tablespace user_data
    datafile ‘D:\oracle\oradata\Oracle9i\user_data.dbf’
    size 50m
    autoextend on
    next 50m maxsize 2048m
    extent management local;
  3. 创建用户,并指定用户的表空间
    create user username identified by password
    default tablespace user_data
    temporary tablespace user_temp;
  4. 给用户授权
    grant connect,resource,dba to username;

修改表空间名字、删除表空间和用户、数据文件操作

  1. 修改表空间的的名字
    aleter tablespace tablespacename rename to newtablespacename;
  2. 修改表空间脱机联机状态
    alter tablespace tablespacename offline/online;
  3. 查看表空间的状态
    select tablespace_name,status from dba_tablespaces;
  4. 设置表空间只读或可读写状态,联机状态下才可以设置**
    alter tablespace tablespacename read only|read write;

  5. 删除用户username ( 删除用户,只是删除了该用户下的schema objects,是不会删除相应的tablespace的)
    drop user username cascade

  6. 删除表空间和数据文件
    drop tablespace tablespace_name including contents and datafiles;

  7. 添加数据文件到表空间
    alter tablespace tablespace_name add datafile ‘xxx.dbf’ size 10m;

  8. 表空间数据文件查询
    select file_name from dba_data_files where tablespace_name = ‘TEST_TABLESPACE’;
  9. 删除数据文件
    alter tablespace tablespace_name drop datafile ‘xxx.dbf’

用户权限

  1. 常用用户
    sys –系统用户,权限最大,必须以sysdba或sysoper登录(connect sys/password as sysdba)
    system –系统用户,权限比sys略小
    sysman –系统用户,oracle企业管理器用户
    scott –系统内置普通用户,默认密码tiger
  2. 解锁、锁定账户
    alter user username account unlock|lock;
  3. 查看所用用户
    SELECT * FROM DBA_USERS;
    SELECT * FROM ALL_USERS;
    SELECT * FROM USER_USERS;
  4. 查看用户系统权限
    SELECT * FROM DBA_SYS_PRIVS;
    SELECT * FROM USER_SYS_PRIVS;
  5. 查看用户对象或角色权限
    SELECT * FROM DBA_TAB_PRIVS;
    SELECT * FROM ALL_TAB_PRIVS;
    SELECT * FROM USER_TAB_PRIVS;
  6. 查看所有角色
    SELECT * FROM DBA_ROLES;
  7. 查看用户或角色拥有的权限
    SELECT * FROM DBA_ROLE_PRIVS;
    SELECT * FROM USER_ROLE_PRIVS;

数据库导入与导出

数据导出
1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
2 将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3 将数据库中的表table1 、table2导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
4 将数据库中的表table1中的字段filed1以”00”打头的数据导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\” where filed1 like ‘00%’\”

上面是常用的导出,对于压缩我不太在意,用winzip把dmp文件可以很好的压缩。
不过在上面命令后面加上 compress=y 就可以了

数据导入
1 将D:\daochu.dmp 中的数据导入 TEST数据库中。
imp system/manager@TEST file=d:\daochu.dmp
上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。在后面加上 ignore=y 就可以了。
2 将d:\daochu.dmp中的表table1 导入
imp system/manager@TEST file=d:\daochu.dmp tables=(table1)

表的操作

1.基础表结构操作

–创建表
create table userinfo
(
ID CHAR(20) /primary key/,
USERNAME CHAR(10) not null /unique/,
PWD CHAR(10) not null /foreign key/,
EMAIL CHAR(20) /check(expressions)/,
constraint PK_USERINFO primary key (ID)
/constraint u_username unique(username)/
);

–添加字段
alter table userinfo add remarks varchar(200);

–修改字段(修改最好在没有数据的情况下)
alter table userinfo modify remarks varchar(400);

–删除字段
alter table userinfo drop column remarks;

–修改字段名字
alter table userinfo rename column email to new_email;

–修改表的名字
rename table userinfo to new_userinfo;

–彻底删除表中数据
truncate table userinfo;

–删除表结构
drop table userinfo;

2.表数据操作

–插入数据
insert into table_name (column1,column2,…)
values(value1,value2,…);
–更新数据
update table_name set username = ‘xxx’ where id = ‘01’;

–删除数据
delete from table_name where id = ‘01’;

3.表的各种约束

–添加非空约束
alter table table_name modify id char(2) not null;

–删除非空约束
alter table table_name modify id char(2) null;

–添加主键约束
alter table table_name add constraint pk_id primary key (id);

–删除主键约束
alter table table_name drop primary key [cascade];

–表级外键约束
constraint fk_type_id foreign key(xx_id) reference main_table(t_id) [on delete cascade]

alter table table_name add constraint constraint_name foreign key(column_name) reference table_name(column_name) [on delete cascade]

–唯一约束
alter table table_name add constraint constraint_name unique(column_name)

–检查约束
create table table_name
(id varchar2(10) primary key ,
username varchar2(20),
salary number(5,0) check(salary > 0)–薪资大于0
);

constraint constraint_name check(expressions)

alter table table_name add constraint constraint_name check(expressions)

–以下是约束通用操作
–约束字典表 user_constraints
select * from user_constraints where table_name = ‘xxtable’;

–更改约束名字
alter table table_name rename constraint pk_id to new_pk_id;

–禁用/启用 主键/外键/唯一 约束
alter table table_name disable|enable constraint new_pk_id;

–删除指定约束
alter table table_name drop constraint new_pk_id;

回收站

–查询回收站里的表
select * from recyclebin where type = ‘TABLE’;

–删除回收站所有表
purge recyclebin;

–删除指定的表
purge table table_name;

–闪回被删除的表
flashback table table_name to before drop;

–删除表时不产生BIN类型表
drop table table_name purge;

ORACLE11 EXP导出不能导出空表

Oracle 11g 新增参数deferred_segment_creation,建库的时候默认值为true,意思是延时加载,当表中不存在数据的时候,
不为这个表创建空间,当你导出的时候会发现很多表不存在。
使用show parameter deferred deferred_segment_creation; 命令可以查看deferred_segment_creation的值。

解决方法:
1、最原始最笨的办法(不推荐):insert一行,再rollback或者删除就产生segment了。
该方法是在在空表中插入数据,再删除,则产生segment。导出时则可导出空表。

2、设置deferred_segment_creation 参数:
设置deferred_segment_creation 参数为FALSE来禁用”段推迟创建”(也就是直接创建segment),无论是空表还是非空表,都分配segment。
在sqlplus中,执行如下命令:
SQL>alter system set deferred_segment_creation=false;
查看:
SQL>show parameter deferred_segment_creation;
注意:该值设置后只对后面新增的表产生作用,对之前建立的空表(已经存在的)不起作用,仍不能导出。
并且要重新启动数据库,让参数生效。

3、使用ALLOCATE EXTENT,可以导出之前已经存在的空表。
使用ALLOCATE EXTENT可以为数据库对象的每一张表分配Extent(注意针对每一张表,就是说一张表需要一条SQL代码):
故,需要构建如下样子简单的SQL命令:


alter table TableName allocate extent


但要是每一张表写一条语句的话太过麻烦,为了方便我们使用SQL命令拼写出每一张表的alter语句。

构建对空表分配空间的SQL命令。
查询当前用户下的所有空表(一个用户最好对应一个默认表空间)。命令如下:
SQL>select table_name from user_tables where NUM_ROWS=0;
根据上述查询,可以构建针对空表分配空间的命令语句,如下:
SQL>Select ‘alter table ‘||table_name||’ allocate extent;’ from user_tables where num_rows=0 or num_rows is null(注意:很多教程没有这里,这里是有可能为空的)
上述代码可产生批量的修改表extent的SQL语句(有多少张空表就产生多少条),我们只需要将其生成的所有sql代码全部执行,就可以给每一张已经存在的表来分配segment,就OK了。

最后:这时再用exp导出就没有问题了。但是:数据库本身的deferred_segment_creation属性还是TRUE,也是就是说如果再
创建新表的话,默认还是不分配segment的。所以还是需要更改deferred_segment_creation的参数,以便以后创建的新表自
动分配segment。

猜你喜欢

转载自blog.csdn.net/jiangjiandecsd/article/details/47272213