oracle数据迁移之数据泵

oracle数据迁移 —— 数据泵的使用

导出数据库脚本

  1. 登录数据库,输入命令:
    sqlplus sys as sysdba

  2. 创建目录路径,输入命令:

    1
    2
    create directory data_dir as E:\orcl\data';
    --使用 select * from dba_directories; 可查询用户创建的目录
  3. 为oracle用户授予访问目录的权限,输入命令:

    1
    grant read,write on directory data_dir to pm52; --用户名:pm52
  4. 导出数据库脚本(在cmd下执行)

    1
    expdp pm52/sa@mapletr directory=data_dir dumpfile=pm52.dmp log=pm52.log

导入数据库脚本

  1. 登录sysdba

    1
    sqlplus sys@orcl/sa as sysdba
  2. 创建表空间

    1
    2
    3
    4
    create tablespace MTR_DATA datafile 'C:\oradata\orcl\MTR_DATA.dbf' size 2000m autoextend on next 200m;
    create tablespace PM_DATA datafile 'C:\oradata\orcl\PM_DATA.dbf' size 2000m autoextend on next 200m;
    create tablespace MTR_LOB datafile 'C:\oradata\orcl\MTR_LOB.dbf' size 2000m autoextend on next 200m;
    create tablespace MTR_IDX datafile 'C:\oradata\orcl\MTR_IDX.dbf' size 2000m autoextend on next 200m;
  3. 创建用户

    1
    2
    3
    4
    5
    6
    create user PM52 identified by "sa" default tablespace PM_DATA temporary
    tablespace TEMP;

    grant connect,resource,dba,ctxapp to PM52;

    grant select any table,delete any table,update any table,insert any table,create view to PM52;
  4. 创建目录,并授权

    1
    2
    create directory dir as 'c:\db';
    grant read,write on directory dir to PM52;
  5. 导入数据库

    1
    impdp PM52/sa@orcl directory=dir remap_schema=PM52:PM52 dumpfile=PM52.DMP logfile=PM52.log;
  6. 编译未通过的函数、视图、同义词

    1
    2
    3
    4
    5
    6
    var aa varchar2(500);
    begin
    P_Compiledbobj(1,'PM52',:aa);
    end;
    /
    print aa;
  7. 多个表空间的问题

    1
    impdp PM52/sa@orcl directory=dir remap_schema=PM52:PM52 dumpfile=PM52.DMP logfile=PM52.log remap_tablespace='(PM_DATA:PM_DATA,PM_LOB:PM_LOB,PM_IDX:PM_IDX)';

Hello World

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

前端text树形文本转树形json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script src="/js/jquery.js"></script>
<meta charset="utf-8" />
</head>
<body>
<textarea id="txtarea" rows="6"></textarea>
<input type="button" onclick="convertToJson()" value="转换" />
<textarea id="txtarearesult" rows="6"></textarea>
</body>
</html>
<script>
function convertToJson() {
var val = $("#txtarea").val();
var lines = val.split('\n');
var preNode = {};
var resultJson = [];
for (var i = 0; i < lines.length; i++) {
var line = lines[i];
var lastIndex = line.lastIndexOf("+");
var text = line.substr(lastIndex + 1, line.length);
var currentNode = { text: text, value: text, level: lastIndex, children: [] };
if (lastIndex == -1) {
resultJson.push(currentNode);
} else if (lastIndex > preNode.level) {
preNode.children.push(currentNode);
} else {
var node = getNodeBylevel(resultJson, lastIndex - 1);
if (node) {
node.children.push(currentNode);
} else {
resultJson.push(currentNode);
}
}

preNode = currentNode;
}

$("#txtarearesult").val(JSON.stringify(resultJson));
//alert(val);
}

function getNodeBylevel(nodes, level) {
if (nodes && nodes[0].level == level) {
return nodes[nodes.length - 1];
} else {
return getNodeBylevel(nodes[nodes.length - 1].children, level);
}
};
</script>

C#大文件上传

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
public static string MyUploader (string strFileToUpload, string strUrl, Action<double, double> uploading) {
string strFileFormName = "file";
Uri oUri = new Uri (strUrl);
string strBoundary = "----------" + DateTime.Now.Ticks.ToString ("x");
// The trailing boundary
string byte[] boundaryBytes = Encoding.ASCII.GetBytes ("\r\n--" + strBoundary + "--\r\n");
//**注意此处的 strBoundary后的换行前加上--,不然会异常**
// The post message header
StringBuilder sb = new StringBuilder ();
sb.Append ("--");
sb.Append (strBoundary);
sb.Append ("\r\n");
sb.Append ("Content-Disposition: form-data; name=\"");
sb.Append (strFileFormName);
sb.Append ("\"; filename=\"");
sb.Append (Path.GetFileName (strFileToUpload));
sb.Append ("\"");
sb.Append ("\r\n");
sb.Append ("Content-Type: ");
sb.Append ("application/octet-stream");
sb.Append ("\r\n");
sb.Append ("\r\n");
string strPostHeader = sb.ToString ();
byte[] postHeaderBytes = Encoding.UTF8.GetBytes (strPostHeader);
// The WebRequest
HttpWebRequest oWebrequest = (HttpWebRequest) WebRequest.Create (oUri);
oWebrequest.ContentType = "multipart/form-data; boundary=" + strBoundary;
oWebrequest.Method = "POST";
// This is important, otherwise the whole file will be read to memory anyway...
oWebrequest.AllowWriteStreamBuffering = false;
// Get a FileStream and set the final properties of the WebRequest
FileStream oFileStream = new FileStream (strFileToUpload, FileMode.Open, FileAccess.Read);
long length = postHeaderBytes.Length + oFileStream.Length + boundaryBytes.Length;
oWebrequest.ContentLength = length;
Stream oRequestStream = oWebrequest.GetRequestStream ();
// Write the post header
oRequestStream.Write (postHeaderBytes, 0, postHeaderBytes.Length);
// Stream the file contents in small pieces (4096 bytes, max).
byte[] buffer = new Byte[checked ((uint) Math.Min (4096, (int) oFileStream.Length))];
int bytesRead = 0;
double size = 0;
while ((bytesRead = oFileStream.Read (buffer, 0, buffer.Length)) != 0) { oRequestStream.Write (buffer, 0, bytesRead); size += bytesRead; if (uploading != null) uploading (length, size); }
oFileStream.Close ();
// Add the trailing boundary
oRequestStream.Write (boundaryBytes, 0, boundaryBytes.Length);
WebResponse oWResponse = oWebrequest.GetResponse ();
Stream s = oWResponse.GetResponseStream ();
StreamReader sr = new StreamReader (s);
String sReturnString = sr.ReadToEnd ();
// Clean up
oFileStream.Close ();
oRequestStream.Close ();
s.Close ();
sr.Close ();
return sReturnString;
}

原文:https://blog.csdn.net/u012790747/article/details/46052519

C#文件流

一、文件流

FileStream类主要用于读写磁盘文件。常用于向磁盘存储数据或读取配置文件。

读取文件:

1
2
3
4
5
6
7
//文件流:读取
FileStream fileStream = File.Open(@"D:\test.txt", FileMode.Open);//初始化文件流
byte[] array = new byte[fileStream.Length];//初始化字节数组,用来暂存读取到的字节
fileStream.Read(array, 0, array.Length);//读取流中数据,写入到字节数组中
fileStream.Close(); //关闭流
string str = Encoding.Default.GetString(array);//将字节数组内容转化为字符串
Response.Write(str);

写入文件:

1
2
3
4
5
//文件流:写入
FileStream fileStream = File.Open(@"D:\test.txt",FileMode.Append);//初始化文件流
byte[] array = Encoding.Default.GetBytes("哈哈123abc");//给字节数组赋值
fileStream.Write(array, 0, array.Length);//将字节数组写入文件流
fileStream.Close();//关闭流

二、网络流

NetWorkStream类是专门用来处理服务器与客户端通信的流。它在网络编程中经常使用,主要是用来处理类似Socket、TcpClient和TcpListener这些类中得到的流。

单的TCP同步方式,服务器与客户端通信:

服务器

1
2
3
4
5
6
7
8
9
10
11
TcpListener lis=new TcpListener(5000); //服务器监听
lis.Start();//启动
Socket sock=lis.AcceptSocket();//阻塞,直到有客户端连接

NetworkStream networkStream = new NetworkStream(sock);//得到Socket中的流
if (netStream.DataAvailable) //如果客户端发送了消息
{
byte[] data = new byte[1024]; //定义一个字节数组,用来存放接收的数据
int len = netStream.Read(data, 0, data.Length); //从位置开始,读取到字节数组末尾
string line = Encoding.Default.GetString(data, 0, len); //把收到的字节转换为字符串
}

客户端

1
2
3
4
5
6
7
8
TcpClient client = new TcpClient();//客户端tcp对象
client.Connect("127.0.0.1", 5000);//连接服务器
NetworkStream myStream = client.GetStream();//得到网络流

byte[] data = Encoding.Default.GetBytes("Hi,你好"); //首先把输入的字符串消息转换为字节
myStream .Write(data, 0, data.Length); //向myStream 里写入数据
myStream .Flush(); //刷新流中的数据
myStream .Close();

三、内存流

MemoryStream类主要用于操作内存中的数据。比如说网络中传输数据时可以用流的形式,当我们收到这些流数据时就可以声明MemoryStream类来存储并且处理它们。

MemoryStream操作字符串:

1
2
3
4
5
string str = "Hi!你好!";
byte[] array = Encoding.UTF8.GetBytes(str);//将字符串转化为字节数组
MemoryStream memory = new MemoryStream(array);//初始化MemoryStream类
byte[] arrayNew = memory.ToArray();//将内存中的数据转换为字节数组
string strNew = Encoding.UTF8.GetString(arrayNew);//将字节数组转换为字符串

四、StreamReader/StreamWriter

StreamReader/StreamWriter主要用来处理流数据。它们分别提供了高效的流读取/写入功能。

读取:

1
2
3
4
//StreamReader 读取
StreamReader reader = new StreamReader(@"D:\test.txt",Encoding.Default);//初始化读取 设置编码格式,否则中文会乱码
string readStr = reader.ReadLine();//从流中读取一行 reader.ReadToEnd()读取全部
reader.Close();//关闭流

写入:

1
2
3
4
//StreamWriter 写入
StreamWriter writer = new StreamWriter(@"D:\test1.txt");//初始化写入
writer.WriteLine("Hi 你好123");//写入一行
writer.Close();

五、TextReader/TextWriter

TextReader/TextWriter类主要用来处理流数据。它们分别提供了高效的文本流读取/写入功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//TextReader/Writer读写
TextReader textReader = new StringReader("Hi 你好");//初始化读取流
TextWriter textWriter = new StringWriter();//初始化写入流

char[] c=new char[4096];
int chars = 0;
while ((chars = textReader.Read(c, 0, 4096)) > 0)//把流中数据写入到字符数组中 读取流中数据
{
textWriter.Write(c, 0, 4096);//从字符数组中读取流
}

string str= textWriter.ToString();//将流中数据写到字符串中
textReader.Close();//关闭流
textWriter.Close();

注意事项:

1.流使用后必须要关闭。

2.把流中数据加载到内存时要考虑内存溢出等问题。

文章来源>>https://www.cnblogs.com/Johnny_Z/archive/2011/09/12/2174148.html

docker学习使用

1、Docker的安装步骤:

  • 在bios中打开电脑的虚拟化功能
  • 从系统的 “启用或关闭Windows功能”,启用Hyper-V功能
  • 安装Docker

2、在项目文件夹创建文件 Dockerfile【注意文件名字】,添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
#添加基础镜像
FROM microsoft/dotnet:2.1-aspnetcore-runtime
#容器中系统的工作空间
WORKDIR /app
#拷贝当前文件夹下的文件到容器中系统的工作空间
COPY . /app 
#设置Docker容器对外暴露的端口
EXPOSE 80
#容器中使用 ["dotnet","系统启动的dll"] 来运行应用程序
#使用ENTRYPOINT ["dotnet","系统启动的dll"]
#或使用 CMD ["dotnet","系统启动的dll"]
ENTRYPOINT ["dotnet", "mapletr.dll"]

3、执行生成镜像命令。
docker build -t mapletr:1.0.0 .
注意镜像名称后边的 . (mapletr:1.0.0是标识镜像名称和版本信息)
此时将下载Asp.Net Core 2.1-aspnetcore-runtime 基础镜像,并运行Dockerfile中的后续指令

4、创建并启动容器
docker run –name mapletr -p 80:80 mapletr

5、停止容器
docker stop mapletr

6、重启容器
docker start mapletr

7、删除容器(先停止,才能删除)
docker rm mapletr

8、导出镜像
docker export mapletr>d:/mapletr.tar

9、导入镜像
docker import -mapletr<d:/mapletr.tar

10、保存镜像
docker save -o d:/mapletr1.tar mapletr

11、加载镜像
docker load -i d:/mapletr1.tar

12、查看所有的镜像
docker images

13、查看所有的容器
docker ps -a

netcore使用

  • packagesearch工具,可以快速定位某个API在哪个Nuget包中
  • 修改工程文件csproj可以使项目支持多个目标框架
    1
    2
    3
    4
    5
    <Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
      <TargetFrameworks>netstandard1.4;netcoreapp1.0;net45</TargetFrameworks>
    </PropertyGroup>
    </Project>

以下是常见的条件编译符号列表:
**
.NET Framework 2.0 –> NET20
.NET Framework 3.5 –> NET35
.NET Framework 4.0 –> NET40
.NET Framework 4.5 –> NET45
.NET Framework 4.5.1 –> NET451
.NET Framework 4.5.2 –> NET452
.NET Framework 4.6 –> NET46
.NET Framework 4.6.1 –> NET461
.NET Framework 4.6.2 –> NET462
.NET Standard 1.0 –> NETSTANDARD1_0
.NET Standard 1.1 –> NETSTANDARD1_1
.NET Standard 1.2 –> NETSTANDARD1_2
.NET Standard 1.3 –> NETSTANDARD1_3
.NET Standard 1.4 –> NETSTANDARD1_4
.NET Standard 1.5 –> NETSTANDARD1_5
.NET Standard 1.6 –> NETSTANDARD1_6