1,SELECT username, account_status, default_tablespace FROM dba_users;
通过该指令可以查询到所有用户的信息,发现scott用户状态显示为EXPIRED & LOCKED(TIMED)
这意味着该用户已过期并被锁定。
ALTER USER scott identified by 2001729; 改密码
ALTER USER scott ACCOUNT UNLOCK; 解锁用户scott
ALTER USER scott PASSWORD EXPIRE; 将用户scott的密码设置成已过期
connect scott/2001729;直接切换用户
2,listener.ora 和 tnsnames.ora 两个文件 比较重要
前一个管理了basic连接方式下 选择使用SID进行连接,后一个管理TNS连接方式的一些参数,比如协议可以选择TCP。
listener.ora文件:
listener.ora是tnslsnr进程的配置文件,监听的参数都是从该配置文件中读取,该文件位于服务端。
#这是一个名为 LISTENER1 的监听器
#监听的协议是TCP协议
#监听的主机IP是127.0.0.1
#监听的端口是1521端口
LISTENER1 = #别名
(DESCRIPTION_LIST =
(DESCRIPTION =#监听的通信三元组
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)
)
)
#记录了监听器LISTENER1服务的全局数据库名、数据库路径和数据库实例名
SID_LIST_LISTENER1 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCL) #数据库全局名称,select * from global_name
(ORACLE_HOME = C:\Oracle11g\product\11.2.0\dbhome_1) #oracle软件的根目录
(SID_NAME = ORCL) #监听库的SID实例名
)
)
tnsnames.ora:这是客户端的配置文件,用于配置客户端连接到数据库实例的信息。
listener.ora
是在数据库服务器端配置的,而 tnsnames.ora
是在客户端配置的。
3,scott拥有create table的权利,其只能在scott模式下创建表,在其他模式下(如A)创建表会显示权限不足的问题。
可以通过create any table来赋予用户可以在其他模式下创建表的权力,显示执行成功,不过在navicat上不能发现模式A下有刚刚创建的表,找到原因为 并没有赋予scott对模式A的查询权限,即使在模式A上创建了表 ,也看不到,要将模式A的查询权限也赋给scott。
如果像下面这种授权方式行不通,在 Oracle 中,不能直接使用通配符 *
来授予模式中所有表的权限。
GRANT SELECT ON A.* TO scott > ORA-00903: 表名无效
以下是解决方法,使用 PL/SQL 循环来动态地为模式中的每个表授予权限,这样用户scott建立的查询就能查询到模式A中的表了
BEGIN
FOR tbl IN (SELECT table_name FROM all_tables WHERE owner = 'A') LOOP
EXECUTE IMMEDIATE 'GRANT SELECT ON A.' || tbl.table_name || ' TO scott';
END LOOP;
END;
/
DEMO2是用户scott(角色是DEFAULT) 通过SID进行的连接
4,leetcode 239 滑动窗口最大值
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
vector<int>ans;
priority_queue<pair<int,int>>qwe;
for(int i=0;i<k;i++){
qwe.emplace(nums[i],i);
}
ans.push_back(qwe.top().first);
for(int i=k;i<nums.size();i++){
qwe.emplace(nums[i],i);
while(qwe.top().second<i-k+1){
qwe.pop();
}
ans.push_back(qwe.top().first);
}
return ans;
}
};
关键在于用一个二维数组的优先队列,把下标也存进去。