//go:build live package lkgateway import ( "context" "database/sql" "fmt" "testing" ) // Только чтение: базы BJ_DEPO*, режим восстановления, резервные копии и восстановления (msdb). func TestDBHistoryLive(t *testing.T) { rc, err := NewRuntimeConfig("/var/lib/bj/.bj/setup.json") if err != nil { t.Fatal(err) } fs := rc.Snapshot().Fancy fmt.Println("база DEPO в настройках bj:", fs.DepoDB()) db, err := fancyOpen(fs, "master") if err != nil { t.Fatal(err) } defer db.Close() ctx := context.Background() dump := func(title, q string) { fmt.Println("==", title) rows, err := db.QueryContext(ctx, q) if err != nil { fmt.Println(" ошибка:", err) return } cols, _ := rows.Columns() n := 0 for rows.Next() { vals := make([]sql.NullString, len(cols)) ptrs := make([]any, len(cols)) for i := range vals { ptrs[i] = &vals[i] } _ = rows.Scan(ptrs...) line := "" for i, c := range cols { line += c + "=" + vals[i].String + " | " } fmt.Println(" ", line) n++ } if n == 0 { fmt.Println(" (пусто)") } } dump("базы", `SELECT name, recovery_model_desc, state_desc, CONVERT(varchar(19),create_date,120) created FROM sys.databases WHERE name LIKE 'BJ%' OR name LIKE '%DEPO%' ORDER BY name`) dump("резервные копии (последние 30)", `SELECT TOP 30 b.database_name, b.type, CONVERT(varchar(19),b.backup_start_date,120) start, CONVERT(varchar(19),b.backup_finish_date,120) finish, m.physical_device_name FROM msdb.dbo.backupset b JOIN msdb.dbo.backupmediafamily m ON m.media_set_id=b.media_set_id WHERE b.database_name LIKE 'BJ%' ORDER BY b.backup_finish_date DESC`) dump("восстановления (последние 20)", `SELECT TOP 20 r.destination_database_name, CONVERT(varchar(19),r.restore_date,120) restored, r.restore_type, r.user_name, b.database_name src_db, CONVERT(varchar(19),b.backup_finish_date,120) src_backup, m.physical_device_name FROM msdb.dbo.restorehistory r JOIN msdb.dbo.backupset b ON b.backup_set_id=r.backup_set_id JOIN msdb.dbo.backupmediafamily m ON m.media_set_id=b.media_set_id WHERE r.destination_database_name LIKE 'BJ%' ORDER BY r.restore_date DESC`) }