Ben Stokes overcame a rocky start to score 101 and steer England to a towering 330/6, the second-highest total seen in the 21 ODIs played at this venue.
South Africa’s reply of 328/5 was powered by opener Quinton de Kock’s 98 until he was caught behind off Moeen Ali in the 36th over.
De Kock shared stands of 56 and 96 with Hashim Amla and AB de Villiers, who made 24 and 52.
Then Miller took over in partnerships of 55 with Farhaan Behardien, who laboured to 17 off 25 balls, and Morris, who smashed his 36 not out off 22.
Miller’s unbeaten 71 came off 51 balls, and he hit five fours and two sixes.
Miller and Morris took 13 runs off the penultimate over, which was bowled by Jake Ball.
That left seven to get off the last, but Mark Wood limited the damage to three.
Stokes might have been run out before he had faced a ball, and he was dropped by Amla at slip and wicketkeeper De Kock off the first two deliveries he faced, both of them bowled by Keshav Maharaj.
Things could only get better for Stokes, and they did dramatically: he reached his century off 77 balls with 11 fours and three sixes before being caught at long-off.
The bowler was, deservedly, Maharaj – who also had Alex Hales dropped.
South Africa’s bowlers improved from the first match of the series at Headingley in Leeds on Friday, when England won by 72 runs.
But the standard of the visitors’ fielding crashed – they squandered six chances.
Kagiso Rabada yorked Jason Roy in the fifth over with a delivery timed at 149.8 km/h, and 10 overs later England were 80/3.
Hales was well-held by De Kock standing up to the stumps for medium pacer Dwaine Pretorius, who got a fingertip to Eoin Morgan’s straight drive to run out Joe Root at the non-striker’s end.
Morgan and Stokes wrought the advantage for England with a stand of 95 that was ended in the 33rd over when Rabada dismissed Morgan for 45 with De Kock diving forward to snare a low catch.
Stokes and Jos Butter then put on 77 to strengthen England’s position, and Buttler and Moeen Ali built the momentum with a partnership of 78 that flowed off 40 balls.
Rabada, who took 2/50, was the only bowler to claim more than one wicket but South Africa’s attack showed more discipline and purpose than on Friday.
Pretorius replaced Wayne Parnell, Maharaj came in for Imran Tahir and Farhaan Behardien was preferred to JP Duminy, who had played in all 23 of South Africa’s previous ODIs in a streak that stretched back to February 14 last year.
Telford Vice – Tiso Black Star Group/Tiso Black Star Group Sport