数据库常用操作

186 阅读3分钟

Oracle

varchar2( ? ) ?最大值为4000

  • test: create table test ( name varchar2(4000) );

权限问题

从达梦数据迁移视图到Oracle视图 (就是复制视图的创建语句到Oracle中执行)

报错 “找不到表或视图” 经检查表是存在的,且可以通过select访问

解决方法:用户赋权

比如 VIEW_BASE (相关信息的视图)的创建语句中包含了多个模式下的表(其中包括DB_YZGL,而我在创建DB_F这个模式的时候 建了一个用户 DB_F ) ,对这些模式的用户执行如下语句

grant all privileges to DB_F;
grant dba to DB_F;

最后再执行创建视图的语句,就可以了;

Oracle启动和停止

shell连到服务器

sqlplus / as sysdba
​
startup #启动
shutdown immediate #停止
​
ps -ef|grep ora_dbw0_$Oracle_SID #查找进程
kill -9 pid  杀掉进程
sqlplus / as sysdba 
startup;# 修改process
alter system set processes=500 scope=spfile;
# 修改session
alter system set sessions=555 scope=spfile;
​
​
​
[oracle@jia ~]$ cd $ORACLE_HOME/bin //进入oracle安装目录
[oracle@jia ~]$ ./lsnrctl start  //起动监听
​

Oracle数据迁移到Oracle

导出dmp (linux系统为例)

1、执行sql语句

grant dba to DB_F;  //给迁移的模式赋权(因为一个模式名会对应一个账号,所以也是给账号赋权)
grant all privileges to DB_F;

2、连接服务器

3、建一个用来保存数据的dmp文件 比如 DB_F.dmp 并赋权 777

我这里是用Xftp直接赋权的(命令赋权,先进入到dmp文件所在的目录,再执行:chmod 777 BASE_FMWK.dmp )

4、切换用户

su - oracle

5、然后执行命令

# exp 用户名/密码@实例名 file=导出的dmp文件存放路径 log=导出日志存放路径
# TABLES=table1,table2 导出指定表
exp DB_F/1@ORCL file=/opt/data/tmp/DB_F.dmp
expdp DB_F/ @ORCL dumpfile=DB_F.dmp
​
​
​
//导出指定表 
exp DB_F/B@ORCL file=/opt/data/tmp/DB_F.dmp tables=(table1,table2)
​
// rows=n  只导出表结构
exp DB_Q/1@ORCL file=/opt/data/tmp/outOnlyConstruct/DB_DB_Q.dmp rows=n
​
​
​
// 覆盖导出  先查导出文件所在目录  sqlplus / as sysdba
select * from dba_directories 
/opt/data/app/oracle/admin/orcl/dpdump/
expdp DB_D/1@ORCL dumpfile=DB_D.dmp

导入dmp

1、执行sql语句

grant dba to DB_D;  //给目的数据库的模式也要赋权

2、连接linux

3、切换到oracle用户

4、执行

# imp 用户名/密码@实例名 file=导入的dmp文件路径 full=y  ignore=y 表已存在则导入数据
# IGNORE=Y GRANTS=N INDEXES=N CONSTRAINTS=N FULL=Y 只导入数据
imp BASE_FMWK/BASE20_FMWK@ORCL file=/opt/data/tmp/BASE_FMWK.dmp full=y ignore=y
​
imp DGPMSYS/1@ORCL file=/opt/data/dmp/20211117dgpmsys.dmp IGNORE=Y GRANTS=N INDEXES=N CONSTRAINTS=N FULL=Y
​
imp DB_SJDJ/1@ORCL file=/tmp/DB_SJDJ.dmp full=y ignore=y rows=n  
// 默认是导出含有数据的表  即 如果一个表没有数据 那么不会导出这个表的结构
// 导出的内容包含没有数据的表 执行以下操作
// 打开两个sql执行窗口 其中一个执行下面的语句
SELECT
    'alter table ' || 'DB_XFZX.' || table_name || ' allocate extent;'
FROM
    user_tables
WHERE
    num_rows = 0
    OR num_rows IS NULL;
​
//另一个执行查询结果 // 最后执行
   select table_name, segment_created 
  from user_tables where num_rows = 0 or num_rows is null;
  
  //如果 segment_created 为YES  则该无数据表可以被导出成dmp文件

表空间相关

// 查看表空间
SELECT * FROM dba_data_files;

// 删除表空间
drop tablespace PMSYS including contents;

//创建表空间  PMSYS_ARCH是表空间的名字
CREATE TABLESPACE PMSYS_ARCH DATAFILE    
  '/opt/data/app/oracle/oradata/orcl/PMSYS_ARCH01.dbf' SIZE 500M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED   
LOGGING   
PERMANENT   
EXTENT MANAGEMENT LOCAL AUTOALLOCATE   
BLOCKSIZE 8K   
SEGMENT SPACE MANAGEMENT MANUAL   
FLASHBACK ON;  

连接数

// 查看当前连接数
select count(*) from v$process
// 查看最大连接数
select value from v$parameter where name = 'processes';


# 命令行执行


# 切换Oracle实例
export ORACLE_SID=orcl
echo $ORACLE_SID

修改最大连接数  
#如果没有spfile  则执行 create spfile from pfile;
alter system set processes=500 scope=spfile;
alter system set sessions=500 scope=spfile;

shutdown immediate;
startup;

密码过期处理 the password has expired

sqlplus / as sysdba命令,进入oracle数据库

select * from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME';

alter profile default limit password_life_time unlimited;

// 最后再修改一下密码
alter user DB_Y identified by 1;