用户
创建用户:
create user username identified by password;
创建用户并指定表空间:
CREATE USER username IDENTIFIED BY password DEFAULT TABLESPACE tablespacename;
用户授权:
grant create session, connect, resource to username;
授予全部权限
grant all privileges to username; -- 最好不要授权dba给普通用户
授权创建表
grant create any table to username;
授权创建视图:
grant create any view to username;
修改用户密码:
alter user username identified by password;
撤销用户权限:
revoke privileges from username;
表空间
创建表空间:
create tablespace tblspacename datafile 'xxxx.dbf' size 10m;
将表空间分配给用户:
ALTER USER username DEFAULT TABLESPACE tablespacename;
查看表空间的位置:
select file_name from dba_data_files where tablespace_name = 'xxx.dbf'
DIRECTORY
创建DIRECTORY
create directory dir_name as 'D:/oracle/dir_dp';
授权
Grant read,write on directory dir_name to username;
查看目录及权限
SELECT privilege, directory_name, DIRECTORY_PATH FROM user_tab_privs t, all_directories d WHERE t.table_name(+) = d.directory_name ORDER BY 2, 1;
导入导出
exp:
exp userid='username/password@ip:port/orcll' file=e:sms20191022.dmp
如果想用exp导出空表:首先要手动为空表分配空间,执行下面的语句,将sql复制出来执行,再执行导出语句即可
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
imp:
imp userid='username/password@ip:port/orcl' file=e:sms20191022.dmp full=y ignore=y
expdp:
expdp userid='username/password@ip:port/orcl' directory=DATA_PUMP_DIR dumpfile=filename.dmp logfile=logname.log
impdp:
impdp userid='bps/bpspwd' schemas=bps directory=DATA_PUMP_DIR dumpfile=bps.dmp logfile=bps.log remap_schema=source_schema:target_schema remap_tablespace=source_tablespace:target_tablespace
其中,exp/imp操作DMP文件时不能修改表空间,即导出的表空间和导入的表空间应该保持一致;expdp/impdp操作DMP文件时,可以通过remap_tablespace
参数来修改表空间
其他
oracle sql中的(+)
Oracle的sql语句中,多表查询时会出现(+)号标记,oracle中的(+)是一种特殊的用法,(+)表示外连接,并且总是放在非主表的一方。例如:
左外连接:
select A.a,B.a from A LEFT JOIN B ON A.b=B.b;
等价于
select A.a,B.a from A,B where A.b = B.b(+);
后记
在使用oracle时,最好不要用管理员权限来操作,因为在本机自用的话可以随便使用,但是如果给公司做项目,一般都有严格的权限限制,在项目上线移植数据库时,会由于你的权限过高,权限不匹配,导致数据库移植失败。